Asosiy kontentga o‘tish
Innovialabs

Linter nima: ESLint, Ruff va statik tahlil asoslari

Asoslar3 daq

Qisqacha

Linter kodni ishga tushirmasdan o‘qiydi va ehtimoliy xatolar hamda xavfli usullarni topadi, formatter faqat ko‘rinishni o‘zgartiradi, tip tekshiruvchisi esa tiplarni solishtiradi; uchalasini minimal konfiglar bilan sozlang va muharrirda, kommitdan oldin va CI da ishga tushiring.

Linter nima qiladi

Linter — manba kodini ishga tushirmasdan tahlil qiladigan va muammolar haqida xabar beradigan vosita: ehtimoliy xatolar, shubhali konstruksiyalar va kelishilgan qoidalar buzilishi. Bunday tahlil statik tahlil deyiladi.

Linter odatda nimani ushlaydi:

  • Ishlatilmagan o‘zgaruvchilar va importlar — ko‘pincha xato yozilgan nom yoki tugallanmagan refaktoring belgisi.
  • Aniqlanmagan nomlar — faqat bajarilish paytida xato beradigan, noto‘g‘ri yozilgan o‘zgaruvchi.
  • Erishib bo‘lmaydigan kod — return yoki throw dan keyin.
  • Xavfli taqqoslashlar, masalan JavaScript da === o‘rniga == yoki Python da is None o‘rniga == None.
  • Xatoga moyil konstruksiyalar — o‘zgaruvchan standart qiymatlar, tushirib qoldirilgan await, soyada qolgan o‘zgaruvchi.
  • Loyiha kelishuvlari — importlar tartibi, nomlash, taqiqlangan API lar.

Linter muammolarni soniyalarda topadi — ryuvyuchi yoki foydalanuvchidan oldin.

Linter, formatter va tiplarni tekshirish

VositaQaysi savolga javob beradiMisollar
FormatterKod qanday ko‘rinishi kerak? Chekinishlar, qo‘shtirnoqlar, qator ko‘chirishPrettier, Black, ruff format, gofmt
LinterKod ehtimol xatomi yoki qoidalarimizni buzadimi?ESLint, Ruff, Pylint, golangci-lint
Tip tekshiruvchisiTiplar bir-biriga mos keladimi?TypeScript (tsc), mypy, Pyright

Ular bir-birini to‘ldiradi. Formatter uslub haqidagi bahslarni tugatadi va faqat bo‘sh joylar va joylashuvni o‘zgartiradi. Linter ma’noga qaraydi. Tip tekshiruvchisi esa, masalan, son kutilgan joyga hech qayerda satr uzatmayotganingizni isbotlaydi. Uslubni formatterga topshiring va ular to‘qnashmasligi uchun linterdagi uslubiy qoidalarni o‘chiring.

ESLint uchun minimal konfig

Zamonaviy ESLint «tekis» (flat) konfigdan foydalanadi — eslint.config.js fayli:

import js from "@eslint/js";

export default [
  js.configs.recommended,
  {
    rules: {
      "no-unused-vars": "warn",
      eqeqeq: "error",
    },
  },
];

Ishga tushirish — npx eslint ., --fix flagi xavfsiz avtomatik tuzatishlarni qo‘llaydi. TypeScript uchun typescript-eslint paketini va uning tavsiya etilgan konfigini qo‘shing; React va Next.js kabi freymvorklarning o‘z presetlari bor.

Ruff uchun minimal konfig

Ruff — Python uchun tez linter va formatter bo‘lib, ko‘plab eski vositalar (Flake8, isort, pyupgrade va boshqalar) qoidalarini qamrab oladi. Konfig pyproject.toml da turadi:

[tool.ruff]
line-length = 88

[tool.ruff.lint]
select = ["E", "F", "I", "B"]

Bu yerda E — pycodestyle xatolari, F — Pyflakes (aniqlanmagan nomlar, ortiqcha importlar), I — importlarni saralash, B — flake8-bugbear (xatoga moyil konstruksiyalar). Buyruqlar:

  • ruff check . — tekshirish.
  • ruff check . --fix — xavfsiz tuzatishlar bilan tekshirish.
  • ruff format . — Black bilan mos formatlash.

Kichik qoidalar to‘plamidan boshlang va jamoa ko‘nikkach kengaytiring.

Ularni qayerda ishga tushirish kerak

1. Muharrirda. O‘z muharriringiz uchun ESLint yoki Ruff kengaytmasini o‘rnating. Muammolar yozish paytida ko‘rinadi, saqlashda formatlash esa ko‘rinishni bir xil saqlaydi. Bu yerda qayta aloqa eng tez.

2. Kommitdan oldin. pre-commit (Python) yoki husky va lint-staged (JavaScript) kabi vositalar faqat kommitga qo‘shilgan fayllarni tekshiradi, shuning uchun yomon kod repozitoriyga kamdan-kam tushadi.

3. CI da. Lokal ravishda chetlab o‘tib bo‘lmaydigan oxirgi to‘siq. Tekshiruvlarni avtomatik tuzatishsiz ishga tushiring va xatolarda yig‘ishni to‘xtating:

# GitHub Actions qadami
- run: npx eslint . --max-warnings=0
- run: ruff check . && ruff format --check .

ruff format --check va prettier --check fayllar formatlanmagan bo‘lsa, ularni o‘zgartirmasdan xato bilan tugaydi.

Ko‘p uchraydigan xatolar

  • Barcha qoidalarni birdaniga yoqish. Jamoa ogohlantirishlarga g‘arq bo‘ladi va ularga e’tibor bermay qo‘yadi. Tavsiya etilgan presetlardan boshlang.
  • Hech narsani to‘xtatmaydigan ogohlantirishlar. Ular abadiy to‘planadi. Qoidani yo xatoga aylantiring, yo o‘chiring.
  • Izohlar bilan ommaviy o‘chirish. Ba’zida izoh bilan // eslint-disable-next-line yoki # noqa — normal; o‘nlab shunday joylar qoida mos emasligini bildiradi.
  • Linter va formatter to‘qnashuvi. Formatter bo‘lsa, linterning uslubiy qoidalarini o‘chiring.
  • Katta loyihaga linterni bitta pull request bilan joriy qilish. Avval eng muhim qoidalarni tuzating yoki yangi qoidalarni faqat o‘zgartirilgan fayllarga qo‘llang, so‘ng kengaytiring.

Ko‘p beriladigan savollar

Ha. Tip tekshiruvchisi tiplarni solishtiradi, linter esa tiplar qamramaydigan narsalarni ushlaydi: ishlatilmagan kod, xavfli konstruksiyalar, tushirib qoldirilgan await, loyiha kelishuvlari.

Bunda yordam beramiz

O‘zingiz shug‘ullanmasdan natija olishni istasangiz — biz har kuni shu bilan shug‘ullanamiz.

Loyihani muhokama qilish

Yana o‘qing

G‘oya yoki vazifangiz bormi? Bizga aytib bering

Ish kuni davomida javob beramiz va yechim taklif qilamiz. Konsultatsiya bepul.