Linter nima: ESLint, Ruff va statik tahlil asoslari
Asoslar3 daqInnovialabs tahririyati
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 —
returnyokithrowdan keyin. - Xavfli taqqoslashlar, masalan JavaScript da
===o‘rniga==yoki Python dais Noneo‘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
| Vosita | Qaysi savolga javob beradi | Misollar |
|---|---|---|
| Formatter | Kod qanday ko‘rinishi kerak? Chekinishlar, qo‘shtirnoqlar, qator ko‘chirish | Prettier, Black, ruff format, gofmt |
| Linter | Kod ehtimol xatomi yoki qoidalarimizni buzadimi? | ESLint, Ruff, Pylint, golangci-lint |
| Tip tekshiruvchisi | Tiplar 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-lineyoki# 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.