Mundarija (30)
- Bu darsda
- 1. Nega bu kerak?
- 2. Tezlik: o'lchaymiz
- 2.1 Tajriba
- 2.2 Raqamlarni to'g'ri o'qish
- 3. Biome
- 3.1 biome init va biome.json
- 3.2 Biome nimani topdi
- 3.3 biome migrate: ESLint va Prettier sozlamasidan
- 3.4 Tuzoq: migratsiya ham xato qilishi mumkin
- 3.5 biome check --write
- 3.6 biome-ignore: sabab majburiy
- 4. Oxlint
- 4.1 Sozlamasiz ishga tushirish
- 4.2 Tuzoq: .gitignore siz
- 4.3 --type-aware: TypeScript 7 bilan turli lint
- 4.4 @oxlint/migrate va XSS sinovi
- 5. Yonma-yon ishlatish
- 5.1 G'oya
- 5.2 Qachon nima
- 5.3 vazifalar qarori
- 6. Ko'p uchraydigan xatolar
- 7. Mashqlar
- 1-mashq (oson): .gitignore tuzog'i
- 2-mashq (o'rta): turli rejim
- 3-mashq (o'rta): biome check --write
- 4-mashq (qiyin): XSS qoidasi uch asbobda
- 8. Real ishda
- Xulosa
- Manbalar
Biome va Oxlint: ESLint va Prettier'ning Rust'dagi tez muqobillari
Qisqacha: Biome — linter va formatlagich bitta dasturda (
biome check), Oxlint — faqat linter. Ikkalasi Rust'da yozilgan va ESLint'dan bir necha baravar tez:vazifalarda Oxlint 0.8 s, ESLint 4 s. Ammo hamma narsani qila olmaydi: bizning XSS qoidamiz (no-restricted-syntax) ikkalasiga ham ko'chmadi. Shuning uchun ko'p jamoa ularni ESLint bilan yonma-yon ishlatadi.
Bu darsda
- Biome va Oxlint nima ekanini, ESLint va Prettier'dan nimasi bilan farq qilishini tushuntira olasiz.
biome.jsonni o'qiysiz,biome check --writevabiome migrateni ishlatasiz.- Oxlint'ni va uning turli rejimini (
--type-aware) ishga tushirasiz. - Tezlikni o'zingiz o'lchab, ko'chish qarorini sabab bilan qabul qilasiz.
- Oxlint'ni ESLint yonida ishlatish usulini bilasiz.
Oldin bilishingiz kerak: ESLint II: plaginlar, Prettier konfiguratsiyasi, Bundlerlar landshafti 2026.
1. Nega bu kerak?
O'tgan darsda bir yangilikni ko'rdingiz: Vite'ning React shabloni (create-vite 9.2.1) endi ESLint o'rniga Oxlint qo'yadi. Sardor hayron bo'ldi: "ESLint yomonmi? Biz ham o'tishimiz kerakmi?"
Javobni o'lchovdan boshlaymiz. vazifalar da npm run lint bir necha soniya ishlaydi. Bu kichik loyiha — 50 ta fayl. Katta kompaniyada esa minglab fayl bor va lint daqiqalab davom etadi. Har commitdan oldin, har PR'da. Bu vaqt to'planadi.
Muammoning ildizi — til. ESLint va Prettier JavaScript'da yozilgan va Node'da ishlaydi. Bundlerlar landshafti darsida ko'rganingizdek, asboblar dunyosi Rust va Go'ga ko'chmoqda: Rolldown, Oxc, Lightning CSS. Linter va formatlagichlar ham shu yo'lda.
Rust — tez ishlaydigan dastur yozish uchun til (C++ kabi tez, lekin xotira xatolaridan himoyalangan). Uni o'rganish shart emas: siz faqat tayyor dasturni npm orqali olasiz. Oshxonadagi pichoq kabi: qanday quyilganini bilmasdan ham ishlatasiz.
Bugun ikki asbobni ko'ramiz:
| Asbob | Nima qiladi | Kimning o'rnida |
|---|---|---|
| Biome 2.5.15 | lint + format + import tartibi | ESLint + Prettier |
| Oxlint 1.87.0 | faqat lint | ESLint |
Versiyalar — 2026-10 holatiga. Oxlint — Oxc loyihasining qismi. Oxc'ni Vite 8 transpilyatsiya uchun allaqachon ishlatadi.
flowchart LR
K["kod"] --> E["ESLint<br/>(JS, plaginlar)"]
K --> P["Prettier<br/>(JS)"]
K --> B["Biome<br/>(Rust):<br/>lint + format"]
K --> O["Oxlint<br/>(Rust):<br/>lint"]
E --> N["xatolar"]
B --> N
O --> N
P --> F["formatlangan kod"]
B --> FSxemaga qarang: Biome ikki ishni bir o'zi qiladi, Oxlint esa faqat ESLint'ning ishini.
2. Tezlik: o'lchaymiz
2.1 Tajriba
vazifalar nusxasiga ikkala asbobni o'rnatdik (asl loyihaga tegmaymiz):
npm i -D -E @biomejs/biome@2.5.15 oxlint@1.87.0
added 4 packages, and audited 148 packages in 14s
59 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilitiesIkkita paket nomi so'radik, to'rttasi qo'shildi. Qo'shimcha ikkitasi — Windows uchun tayyor yig'ilgan dasturlar: @biomejs/cli-win32-x64 va @oxlint/binding-win32-x64-msvc. Rust dasturi npm'da shunday tarqatiladi: har operatsion tizimga alohida paket. Bu npm buyruqlari chuqur darsidagi UNMET OPTIONAL DEPENDENCY ning o'zi.
Har buyruqni 6 marta ishga tushirdik, birinchisini tashlab, qolgan 5 tasining o'rtanchasini (medianasini) oldik. Kompyuter: Windows 11, 16 oqimli protsessor, Node 24.21.0.
- ESLint (typed)4 s
- Oxlint0,77 s
- Oxlint --type-aware0,94 s
- Biome lint0,9 s
Manba: O'lchov: vazifalar (16-qism, typed lint qadamidan keyin), ESLint 10.12.0, Oxlint 1.87.0, Biome 2.5.15, Windows 11, Node 24.21.0, 2026-10-10
Formatlash ham:
| Buyruq | Vaqt (mediana) |
|---|---|
prettier --check . |
2.68 s |
biome format . |
0.94 s |
node -e 0 (bo'sh Node) |
0.26 s |
2.2 Raqamlarni to'g'ri o'qish
ESLint'dan Oxlint taxminan 5 baravar, Biome — 4 baravar tez. Prettier'dan Biome formatlagichi — 3 baravar.
Lekin uchta ehtiyot so'z bor:
- Shovqin. O'lchov paytida kompyuterda boshqa ishlar ham bor edi. Bir seriyada ESLint medianasi 4.0 s, boshqasida 7.3 s chiqdi. Shuning uchun "X marta tez" ni taxminiy deb qabul qiling.
- Ishga tushish narxi. Bo'sh Node'ning o'zi 0.26 s oladi. Biome'ning o'z hisobi:
Checked 56 files in 88ms— qolgan vaqt dasturni ishga tushirishga ketadi. Kichik loyihada asbobning o'zi emas, ishga tushish ustun. - Katta loyihada farq kattaroq. Rasmiy saytlarda "50–100 baravar" degan raqamlar bor — ular minglab faylli repolarda o'lchangan. Bizning 50 faylda bunday farq bo'lmaydi va bu normal.
Maslahat: O'zingiz o'lchang.
hyperfinedasturi bo'lmasa, oddiy usul: buyruqni 5 marta ishga tushiring, birinchisini tashlang, o'rtadagisini oling. Bitta o'lchovga ishonmang.
Tekshirib ko'ring: Nega Biome "88ms" deydi, biz esa 0.9 s o'lchadik?
Javob
Biome faqat fayllarni tekshirishga ketgan vaqtni sanaydi. Biz esa butun buyruqni o'lchadik: npx ning ishga tushishi, dasturning yuklanishi, sozlamani o'qish. Kichik loyihada bu "qo'shimcha" vaqt asosiy ishdan ko'p.
3. Biome
3.1 biome init va biome.json
npx biome initBuyruq katta "BIOME" logotipi va keyingi qadamlar ro'yxatini chiqaradi (biz qisqartirdik). Asosiy natija — biome.json:
{
"$schema": "https://biomejs.dev/schemas/2.5.15/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": false
},
"formatter": {
"enabled": true,
"indentStyle": "tab"
},
"linter": {
"enabled": true,
"rules": {
"preset": "recommended"
}
},
"javascript": {
"formatter": {
"quoteStyle": "double"
}
},
"assist": {
"enabled": true,
"actions": {
"source": {
"organizeImports": "on"
}
}
}
}Kalitlarni o'qiymiz:
| Kalit | Nima qiladi | Sukut bo'yicha |
|---|---|---|
$schema |
muharrirga avtomatik to'ldirish va tekshiruv | yo'q |
vcs.useIgnoreFile |
.gitignore dagilarni (node_modules/, dist/) o'tkazib yuboradi |
false (init true yozadi) |
formatter.indentStyle |
chekinish: tab yoki space |
tab! |
linter.rules.preset |
qoidalar to'plami | recommended |
assist…organizeImports |
importlarni saralash | yoqiq |
E'tibor bering: Biome sukut bo'yicha tab bilan chekinadi, Prettier esa 2 ta bo'sh joy bilan. Sozlamasiz biome format bizning hamma faylimizni "noto'g'ri" deydi.
3.2 Biome nimani topdi
npx biome lint --reporter=summary .Jadvalga qarang: chapda qoida nomi (guruh bilan), o'ngda nechta topilma. Oxirgi ikki qator — jami.
…
Rule Name Diagnostics
lint/suspicious/useIterableCallbackReturn 1 (1 error)
lint/style/noDescendingSpecificity 1 (1 warning)
lint/complexity/noImportantStyles 3 (3 warnings)
lint/suspicious/noImplicitAnyLet 6 (6 errors)
lint/a11y/useSemanticElements 2 (2 errors)
lint/a11y/noSvgWithoutTitle 1 (1 error)
lint/a11y/useButtonType 2 (2 errors)
Checked 56 files in 79ms. No fixes applied.
Found 12 errors.
Found 4 warnings.Ikki yangilik bor. Birinchisi: Biome .ts dan tashqari index.html, vazifalar.css va hatto SVG ikonkani ham tekshirdi. a11y qoidalari HTML'dan "tugmada type yo'q" kabi qulaylik kamchiliklarini topdi. ESLint buni qilmaydi.
Ikkinchisi — eng ko'p xato, noImplicitAnyLet (6 ta):
src\saqlash.ts:29:7 lint/suspicious/noImplicitAnyLet ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× This variable implicitly has the any type.
28 │ export function yukla(): VazifaMalumoti[] | null {
> 29 │ let matn;
│ ^^^^
30 │ try {
31 │ matn = localStorage.getItem(SAQLASH_KALITI);"Bu o'zgaruvchi yashirin any turida". Aslida bunday emas. TypeScript let matn; ning turini keyingi qiymatlardan kuzatib boradi va matn string | null bo'ladi — tsc strict rejimda ham jim. Biome turlarni so'ramaydi: u faqat kod shaklini ko'radi va "tur yozilmagan, qiymat yo'q" degan shaklni xato deb hisoblaydi. Bu — typed linting yo'qligining narxi.
3.3 biome migrate: ESLint va Prettier sozlamasidan
Biome mavjud sozlamani o'zi ko'chira oladi:
npx biome migrate prettier --write
npx biome migrate eslint --writeESLint ko'chishining hisoboti (boshi):
i 123 ESLint rules found
- 80 have been migrated to Biome's rules
- 80% (99) of your ESLint rules are fully covered by Biome
- 65% (80) via direct migration to Biome rules"123 ta ESLint qoidasi topildi, 80 tasi ko'chirildi". Ko'chmaganlari ro'yxatining oxirida eng muhimi bor:
i These rules have not yet been implemented:
- no-delete-var
…
- no-restricted-syntax
…
- @typescript-eslint/no-unsafe-return
…
- @typescript-eslint/restrict-template-expressions
…no-restricted-syntax — bizning XSS qoidamiz: innerHTML = … taqiqi (13-qismdagi himoya). restrict-template-expressions esa o'tgan darsda paket.ts dagi xatoni topgan qoida. Ikkalasi ham Biome'ga ko'chmaydi. Ro'yxatni biz qisqartirdik (…) — jami 24 ta qoida.
3.4 Tuzoq: migratsiya ham xato qilishi mumkin
biome migrate prettier dan keyin biome format . 46 ta faylda farq ko'rsatdi:
2 │ - import·type·{·ApiXatosiKodi,·VazifaMalumoti·}·from·"./turlar.ts";
2 │ + import·type·{·ApiXatosiKodi,·VazifaMalumoti·}·from·'./turlar.ts'- — hozirgi qator, + — Biome yozmoqchi bo'lgani. Qo'shtirnoq bittaga, nuqtali vergul esa olib tashlanmoqda! Bizning .prettierrc da faqat { "printWidth": 72 } bor, qolgani Prettier sukutlari (qo'sh qo'shtirnoq, nuqtali vergul). Biome 2.5.15 ko'chirishda yozilmagan maydonlarga "quoteStyle": "single" va "semicolons": "asNeeded" qo'ydi. Buni bo'sh papkada ham takrorladik — natija bir xil.
Qo'lda "double" va "always" ga tuzatgach, faqat 2 fayl farq qildi — uzun union turlarni Biome boshqacha bo'ladi:
79 │ - ··"almashtir"·|·"ochir"·|·"tahrirla"·|·"saqla"·|·"bekor";
79 │ + ··|·"almashtir"
80 │ + ··|·"ochir"Saboq: avtomatik ko'chirishdan keyin natijani tekshiring. biome format . (--write siz) — avval "nima o'zgaradi?" deb ko'rish.
3.5 biome check --write
Kundalik buyruq — biome check: lint, format va import tartibi bittada. --write — tuzatib ham qo'yadi. O'tgan darsdagi order.ts da:
src\order.ts:1:1 assist/source/organizeImports FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
src\order.ts format ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Checked 1 file in 20ms. No fixes applied.
Found 2 errors.--write bilan: Checked 1 file in 10ms. Fixed 1 file. Importlar saralandi va kod formatlandi (sukutdagi tab bilan — sozlamani unutmang).
CI uchun alohida buyruq bor — biome ci. U check bilan bir xil tekshiradi, lekin hech qachon faylga yozmaydi va CI muhitiga mos chiqish beradi. Lokalda — check --write, CI'da — ci. Bu Prettier dagi --write va --check juftiga o'xshaydi.
3.6 biome-ignore: sabab majburiy
O'tgan darsdagi eslint-disable ning Biome'dagi o'rinbosari — biome-ignore izohi. Farqi bitta, lekin muhim: sababni yozish majburiy. Sinov fayli:
export function check(x: string): void {
// biome-ignore lint/suspicious/noDebugger: vaqtinchalik sinov
debugger;
// biome-ignore lint/suspicious/noDebugger
debugger;
console.log(x);
}Birinchi izoh ishladi. Ikkinchisiga Biome:
a.ts:4:19 suppressions/parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Unexpected token, expected one of ':', '(' or whitespace
…
i A colon is required after the category.
i Example of suppression: // biome-ignore lint: reason"Qoida nomidan keyin ikki nuqta kerak" — ya'ni : sabab. Sababsiz izoh xato hisoblanadi va debugger ham xato bo'lib qoladi. ESLint'da sabab ixtiyoriy (-- sabab), Biome'da esa majburiy. Kod sharhida "nega o'chirdingiz?" savoli tug'ilmaydi.
| ESLint | Biome |
|---|---|
// eslint-disable-next-line no-debugger -- sabab |
// biome-ignore lint/suspicious/noDebugger: sabab |
qoida nomi — no-debugger |
qoida nomi — guruh bilan: lint/suspicious/noDebugger |
| sabab ixtiyoriy | sabab majburiy |
Biome qoida nomlari camelCase va guruhga bo'lingan: correctness (aniq xato), suspicious (shubhali), style, complexity, a11y, performance, security. Guruh nomi qoidaning "og'irligini" bildiradi.
Tekshirib ko'ring: Jamoa Biome'ga o'tdi va
npm run lintdagieslint .nibiome check .ga almashtirdi..prettierrcvaeslint.config.jsni o'chirsa bo'ladimi?
Javob
Faqat Biome ularning ishini to'liq bajarsagina. Bizda — yo'q: XSS qoidasi va turli qoidalar ko'chmadi. O'chirsak, innerHTML = … yozilgan kod tekshiruvdan jim o'tadi. Avval "nima yo'qoladi?" ro'yxatini (biome migrate hisoboti) o'qing, keyin qaror qiling.
4. Oxlint
4.1 Sozlamasiz ishga tushirish
npx oxlintvazifalar da buyruq jim tugaydi (chiqish yo'q, chiqish kodi 0) — bu muvaffaqiyat belgisi. Necha fayl va qoida tekshirilganini JSON format ko'rsatadi:
npx oxlint -f json{ "diagnostics": [],
"number_of_files": 50,
"number_of_rules": 96,
"threads_count": 16,
"start_time": 0.0350785
}50 ta fayl, 96 ta qoida, 16 oqim — Oxlint fayllarni parallel tekshiradi. Sozlamasiz u faqat correctness (aniq xatolar) toifasini yoqadi.
4.2 Tuzoq: .gitignore siz
Oxlint ham .gitignore ga qaraydi. O'tgan darsdagi mashq loyihasida .gitignore yo'q edi — Oxlint node_modules ni ham tekshirdi:
node_modules/path-exists/index.js:11:11: warning eslint(no-unused-vars): Catch parameter '_' is caught but never used. help: Consider handling this error.
node_modules/@types/node/vm.d.ts:152:29: warning typescript(no-wrapper-object-types): Do not use wrapper object types. help: Replace `Object` with `object`.
…3 250 qator begona ogohlantirish. Bitta qator — node_modules/ — yozilgan .gitignore qo'shilgach, chiqish bo'sh. Har yangi loyihaning birinchi fayllaridan biri .gitignore bo'lishining yana bir sababi (.gitignore).
4.3 --type-aware: TypeScript 7 bilan turli lint
Oxlint'ning eng qiziq imkoniyati — turli qoidalar. Ular uchun alohida paket kerak:
npm i -D -E oxlint-tsgolint@7.0.2004
npx oxlint --type-awareoxlint-tsgolint ning tavsifi: "typescript-go asosidagi turli TypeScript linter". typescript-go — 15-qismdagi TypeScript 7 (tsgo). Ya'ni typescript-eslint TS 6 API'sini kutib turgan paytda, Oxlint turlarni TypeScript 7 dan oladi. Mashq loyihasida:
src/order.ts:10:23: warning typescript(restrict-template-expressions): Invalid type used in template literal expression.
src/order.ts:14:23: warning typescript(await-thenable): Unexpected `await` of a non-Promise (non-"Thenable") value. help: Remove `await` if the value is synchronous, or change the expression to return a Promise or Thenable before awaiting it.
src/order.ts:15:3: warning typescript(no-floating-promises): Promises must be awaited, add void operator to ignore. help: The promise must end with a call to .catch, or end with a call to .then with a rejection handler, or be explicitly marked as ignored with the `void` operator.ESLint topgan uchta turli xatoning uchalasi! Faqat ular warning — chiqish kodi 0. vazifalar da esa --type-aware paket.ts:130:18 dagi xatoni ham topdi va tekshiruv/ papkasida yana beshta joyni ko'rsatdi. Bizning ESLint sozlamamiz turli qoidalarni faqat src/ ga qo'llaydi, Oxlint esa hamma faylga. Vaqti — 0.94 s.
Diqqat: Oxlint ogohlantirishda chiqish kodi 0 beradi. CI'da to'xtatish uchun
--deny-warningsbayrog'i yoki.oxlintrc.jsonda qoidaga"error"darajasi kerak. Aks holda CI "yashil" bo'lib qolaveradi.
4.4 @oxlint/migrate va XSS sinovi
ESLint sozlamasidan .oxlintrc.json yasaydigan rasmiy vosita bor:
npx @oxlint/migrate@1.87.0U 100 dan ortiq qoidali .oxlintrc.json yozdi va 8 ta ogohlantirish berdi (ichma-ich files naqshlari qo'llanmaydi). Endi asosiy sinov — XSS qoidasi ishlaydimi? Vaqtinchalik faylga atayin xavfli qator yozdik:
document.body.innerHTML = location.hash;ESLint:
1:1 error XSS: innerHTML/outerHTML o'rniga textContent yoki createElement no-restricted-syntax
✖ 1 problem (1 error, 0 warnings)Oxlint — jim, chiqish kodi 0. Biome — jim. no-restricted-syntax ESLint'ning maxsus qoidasi: u kodni AST selektori bilan qidiradi (AssignmentExpression > MemberExpression…). Biome'da u hali yo'q, Oxlint'ga esa ko'chmadi. Bu — eng xavfli holat: tekshiruv bor, lekin u hech narsa topmaydi.
5. Yonma-yon ishlatish
5.1 G'oya
Ko'p jamoa tanlov qilmaydi — ikkalasini birga ishlatadi:
- Oxlint birinchi — tez, oddiy xatolarni bir soniyada topadi.
- ESLint keyin — faqat Oxlint'da yo'q qoidalar: turli to'plamlar, maxsus selektorlar, kam uchraydigan plaginlar.
Ikkalasi bitta xatoni ikki marta aytmasligi uchun eslint-plugin-oxlint (1.87.0) bor. U ESLint'da Oxlint qamraydigan qoidalarni o'chiradi. Uning flat/recommended to'plami 249 ta qoidani o'chiradi. Sozlamaning oxiriga qo'shiladi:
import oxlint from "eslint-plugin-oxlint";
export default defineConfig([
// ... avvalgi bloklar
// Oxlint qiladigan ishni ESLint qilmasin — oxirida
...oxlint.configs["flat/recommended"],
]);package.json da: "lint": "oxlint && eslint .". Oxlint xato topsa, && zanjirni to'xtatadi va sekin ESLint ishga tushmaydi (scripts chuqur).
5.2 Qachon nima
| Vaziyat | Tanlov |
|---|---|
| yangi kichik loyiha, maxsus qoida yo'q | Biome (bitta asbob) yoki Oxlint + Prettier |
| katta loyiha, lint sekin | Oxlint + ESLint yonma-yon |
| maxsus selektor qoidalar, kam plaginlar | ESLint |
| React, Vite shabloni | Oxlint (shablonning o'zi) |
5.3 vazifalar qarori
vazifalar ESLint va Prettier'da qoladi. Sabablar o'lchovdan:
- XSS qoidasi (
no-restricted-syntax) — Biome'da ham, Oxlint'da ham yo'q. - Biome'ning
noImplicitAnyLet— turlarni bilmagani uchun 6 ta noto'g'ri xato. - Tezlik farqi — 3 soniya. 50 faylli loyihada bu muammo emas.
Bu dars vazifalar ni o'zgartirmaydi. Loyiha o'ssa yoki Oxlint XSS qoidasini qo'llay boshlasa — qaror qayta ko'riladi.
Tekshirib ko'ring:
"lint": "oxlint && eslint ."o'rniga"lint": "eslint . && oxlint"yozilsa, nima o'zgaradi?
Javob
Natija (xato bor-yo'qligi) bir xil. Lekin tezkor qayta aloqa yo'qoladi: Oxlint topadigan oddiy xato bo'lsa ham, avval sekin ESLint to'liq ishlaydi. Tez asbob oldinda tursa, ko'p xatolar bir soniyada topiladi.
6. Ko'p uchraydigan xatolar
| Belgi | Sabab | Davosi |
|---|---|---|
| Biome hamma faylni formatlamoqchi | sukut indentStyle: "tab" |
biome migrate prettier yoki "space" |
| migratsiyadan keyin qo'shtirnoq/nuqtali vergul o'zgardi | Biome 2.5.15 ko'chirish xatosi | quoteStyle, semicolons ni qo'lda |
| Oxlint minglab ogohlantirish | .gitignore yo'q, node_modules tekshirildi |
.gitignore |
| CI xato bor, lekin yashil | Oxlint warning — chiqish kodi 0 |
--deny-warnings |
Yana biri — eng xavflisi: ko'chishdan keyin qoida jim yo'qolishi. biome migrate va @oxlint/migrate hisobotidagi "not implemented" ro'yxatini doim o'qing va muhim qoidalarni vaqtinchalik xatoli fayl bilan sinang.
7. Mashqlar
Mashqlar o'tgan darsdagi kurs/mashqlar/16/38-eslint-plaginlar/ loyihasining boshlang'ich nusxasida (4 ta xatoli order.ts). Uni kurs/mashqlar/16/39-biome-oxlint/ ga nusxalang va npm ci, so'ng npm i -D -E oxlint@1.87.0 oxlint-tsgolint@7.0.2004 @biomejs/biome@2.5.15.
1-mashq (oson): .gitignore tuzog'i
.gitignoresiznpx oxlint | wc -l— nechta qator? (wc -l— qatorlarni sanaydi.)node_modules/yozilgan.gitignoreqo'shib, takrorlang.
Yechim
- Bizda 3 250 qator — hammasi
node_modulesichidagi fayllar haqida. Sizda paket versiyalari bir xil bo'lsa, raqam ham yaqin chiqadi. npx oxlint— chiqish yo'q, chiqish kodi 0. Oxlint (sozlamasiz)order.tsdagi xatolarni ko'rmaydi: ular turli yoki import tartibi xatolari,correctnesstoifasida esa ular yo'q.
2-mashq (o'rta): turli rejim
npx oxlint --type-aware ni ishga tushiring. ESLint topgan 4 xatodan qaysilari chiqdi, qaysisi yo'q va nega?
Yechim
npx oxlint --type-awaresrc/order.ts:10:23: warning typescript(restrict-template-expressions): Invalid type used in template literal expression.
src/order.ts:14:23: warning typescript(await-thenable): Unexpected `await` of a non-Promise (non-"Thenable") value. help: Remove `await` if the value is synchronous, or change the expression to return a Promise or Thenable before awaiting it.
src/order.ts:15:3: warning typescript(no-floating-promises): Promises must be awaited, add void operator to ignore. help: The promise must end with a call to .catch, or end with a call to .then with a rejection handler, or be explicitly marked as ignored with the `void` operator.Uchta turli xato topildi. Import tartibi (simple-import-sort) — yo'q: bu ESLint plaginining qoidasi, Oxlint'da yoqilmagan. Darajasi warning — chiqish kodi 0.
3-mashq (o'rta): biome check --write
git init, npx biome init, keyin npx biome check src/order.ts va npx biome check --write src/order.ts. Nechta xato bor edi va --write nimani o'zgartirdi? Faylning chekinishi qanday bo'ldi?
Yechim
Birinchi buyruq: Found 2 errors. — import tartibi (assist/source/organizeImports, FIXABLE) va format. --write bilan: Checked 1 file in 10ms. Fixed 1 file. Importlar saralandi, lekin Prettier'dagidek bo'sh qator bilan guruhlanmadi. Chekinish — tab: biome init sukuti. Prettier uslubida qolish uchun biome.json da "indentStyle": "space".
4-mashq (qiyin): XSS qoidasi uch asbobda
eslint.config.js dagi rules ga qo'shing:
"no-restricted-syntax": ["error", {
selector:
"AssignmentExpression > " +
"MemberExpression.left[property.name='innerHTML']",
message: "XSS: textContent ishlating.",
}],src/show.ts:
export function show(text: string): void {
document.body.innerHTML = text;
}Uch asbobni ishga tushiring: npx eslint src/show.ts, npx oxlint src/show.ts, npx biome lint src/show.ts. Qaysi biri ushladi? Bu mashqdan qanday qoida chiqadi?
Yechim
D:\kurs\mashqlar\16\39-biome-oxlint\src\show.ts
2:3 error XSS: textContent ishlating no-restricted-syntax
✖ 1 problem (1 error, 0 warnings)
Faqat ESLint (chiqish kodi 1). Oxlint — jim, chiqish kodi 0. Biome — Checked 1 file in 7ms. No fixes applied., xato yo'q. Qoida: asbob almashtirganda muhim qoidalarni ataylab xatoli fayl bilan sinang. "Tekshiruv yashil" — "xavf yo'q" degani emas, ehtimol tekshiruvchining o'zi bu xatoni bilmaydi.
8. Real ishda
- Vite React shabloni — Oxlint; Next.js shabloni — ESLint 9. 17- va 23-qismlarda ikkalasini ham uchratamiz.
- Katta repolarda Oxlint + ESLint yonma-yon keng tarqalgan: lint vaqti daqiqalardan soniyalarga tushadi, ESLint esa faqat qolgan qoidalarni bajaradi.
- Biome — yangi loyihalarda ommalashmoqda: bitta
biome.json, bitta buyruq, bitta muharrir kengaytmasi. - Intervyu: "Biome va ESLint farqi?", "Rust asboblari nimani qila olmaydi?", "lint'ni qanday tezlashtirasiz?" — o'lchov bilan javob bersangiz, alohida ajralib turasiz.
Xulosa
- Biome — lint + format + import tartibi (
biome check --write); Oxlint — faqat lint; ikkalasi Rust'da. vazifalarda: Oxlint 0.77 s, Biome 0.90 s, ESLint 4.0 s (mediana); formatlash: Biome 0.94 s, Prettier 2.68 s. Kichik loyihada ishga tushish narxi ustun.- Biome turlarni bilmaydi (
noImplicitAnyLet— noto'g'ri xato); Oxlint--type-aware(tsgolint, TypeScript 7) turli xatolarni topadi, lekinwarningbilan. biome migrateva@oxlint/migrate— tez boshlanish, lekin natijani tekshiring: qo'shtirnoq almashdi, XSS qoidasi jim yo'qoldi.- Yonma-yon:
oxlint && eslint .+eslint-plugin-oxlint.
Keyingi dars: Conventional Commits va commitlint — commit xabarlarini mashina o'qiy oladigan shaklda yozish va buni commitlint bilan tekshirish; nega bizda subject-case qoidasi o'chirilgan.
Manbalar
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!