Англійська для ESLint Flat Config
Вивчайте англійську лексику для системи налаштування ESLint: масиви налаштувань, об’ єкти додатків і мову, якою вам слід обговорювати зміни налаштувань linting.
Flat config замінив стару каскаду ESLint .eslintrc одним масивом JavaScript, і ця структурна зміна приходить з новим словником — «config objects» замість «extends chains» — що варто використовувати саме тоді, коли обговорюється налаштування lint з командою, яка все ще думає в старій моделі.
Ключовий словник
Config array — експорт верхнього рівня файла eslint.config.js, упорядкований масив об’ єктів конфігурації, який ESLint об’ єднує послідовно, замінюючи стару каскадні ієрархію файлів .eslintrc.
“Масив конфігурації має чотири об’ єкти: базові правила JS, перевищення TypeScript, блок додатка React і останній запис ignores для створених файлів.”
Config object — один об’ єкт у масиви конфігурації, що вказує files (що шляхи він застосовує), rules, plugins, і languageOptions для цього об’ єму.
“Ми додали окремий об’ єкт налаштування з обсягом **/*.test.ts, щоб тестові файли могли використовувати менш жорсткі правила, ніж виробничий код без вкладеного файла перезапису.”
** Плоский формат додатків ** — вимога щодо імпортування додатків як модулів JavaScript і посилання на них за допомогою посилання на об’ єкт у налаштуваннях, замість завантаження за допомогою рядкової назви, як у старому форматі. “Підвищення не вдалося, оскільки старий додаток використовував лише застарілий формат — нам довелося перейти на розгалужений додаток, який експортує себе у форматі плаского додатка.”
** languageOptions ** — ключ об’ єкта конфігурації, що визначає аналізатор, параметри аналізатора, версію ECMAScript і глобальні змінні для файлів, до яких він застосовується, консолідуючи те, що раніше було розкидане по parserOptions, env і globals.
“Глобальні параметри браузера, такі як window, були позначені як невизначені, оскільки ми не встановили languageOptions.globals для цього конфігураційного об’єкта — старе env: browser не має типового еквіваленту.”
** ignores ** — властивість об’ єкта конфігурації (або самостійний об’ єкт, що містить лише ignores ), яка виключає відповідні шляхи з лінтування повністю, замінюючи .eslintignore.
“Ми пересунули все з .eslintignore в один об’єкт конфігурації тільки для ігнорування на верхній частині масиву — flat config більше не читає окремий файл ігнорування за замовчуванням.”
Звичайні фрази
- Чи це правило встановлене в конфігурації об’єкта, що стосується певних файлів, або воно застосовується глобально?
- Чи є плагін імпортований у плоском форматі, або він все ще є застарілим, заснованим на рядках?
- «Де визначені мовні параметри для цього файлу — чи
languageOptionsнасправді його покриває?» - Чи виключено цей файл через вхід ігнорування, чи він просто не був лінтованим випадково?»
- «Чи має значення порядок конфігурації масиву тут — чи переважає пізніший об’єкт попереднє правило?»
Приклади висловлювань
Пояснення міграції у описі PR:
“Перенесено з .eslintrc.json до плоского налаштування: чотири об’ єкти налаштування замість ланцюга розширень, додатки імпортовано безпосередньо замість за назвою, а ігнорування об’ єднано в один об’ єкт.”
Зневадження несподіваної помилки Lint: “Це правило походить з об’ єкта базової конфігурації, і об’ єкт, специфічний для TypeScript, що знаходиться нижче в масиви, не перезаписує його — нам потрібно додати явний перезапис там.”
Перегляд зміни налаштувань:
- “Хороше викликання обсягу цього правила до об’ єкта конфігурації тільки для тестових файлів — це було занадто суворим для моків і фітингів, але ми все одно хочемо, щоб це було впроваджено у виробничий код.” *
Професійні поради
- Скажімо config object замість « the config », коли існує декілька — ціла ідея flat config полягає в тому, щоб визначити правила для шаблону файла, і нечіткі посилання підривають це.
- Перевірте сумісність ** flat plugin format ** перед тим, як запропонувати оновлення додатка — застарілі додатки є поширеним блокуючим фактором, який було виявлено під час перенесення, а не раніше.
- Посилання **
languageOptions** за назвою при зневадженні аналізатора або проблем з глобальними параметрами — « параметри аналізатора » неоднозначно стосуються того, який об’ єкт конфігурації насправді застосовується. - Об’ єднати виключення у явний об’ єкт ** ignores ** на початку перенесення і вказати це у PR — відсутній запис ignores безмовно перезаписує створені файли і заплутує переглядачів.
Практичні вправи
- Напишіть речення, що описує дії об’ єкта конфігурації з
filesіrules. - Поясніть вашими словами відмінність між форматами застарілих і простих додатків.
- Опишете, як ви мігруєте правила ігнорування проекту до звичайного налаштування.
На практиці: навігація, зворотний зв’язок і співпраця
Будьмо чесними — пояснення * чому * ви зробили зміну в налаштуваннях ESLint може здатися на диво складним, навіть якщо ви розумієте технічні деталі. Це не просто питання про те, щоб сказати « Я додав цей додаток ». Метою є чітке спілкування з іншими розробниками, особливо з тими, чия перша мова не є англійською, і забезпечення того, щоб всі були на одній сторінці щодо стандартів якості коду. Подумайте про це як про будівництво спільного розуміння - ключовий елемент будь-якої успішної команди розробників.
Часто, ви отримаєте зворотній зв’язок під час перегляду коду, який виходить за рамки простого вказівки на помилку. Коментар на кшталт « Це виглядає добре, але ви могли б бути більш суворими з вашими правилами назв змінних » не є просто критикою; це запит на пояснення і пропозиція щодо поліпшення, що відповідає загальному стилю кодування проекту. Аналогічно, у дискусіях Slack щодо змін налаштувань ви можете почути такі фрази, як « Давайте переконаємося, що цей додаток постійно виконує наші улюблені правила інтервалів » або « Чи можемо ми додати правило, яке б забороняло нам використовувати var? » Для цього потрібна точна мова, щоб передати ваші наміри і запропонувати конструктивний діалог. Ключовим є те, щоб ваші пояснення були скоріше * пропозиціями * щодо підтримки послідовності, ніж наказами щодо певних правил, особливо коли мова йде про розробників, які можуть мати різні інтерпретації « найкращих практик ». Це про просування культури, де технічні рішення є прозорими і спільно вдосконалюються.
Розглянемо такий сценарій: ви додали новий додаток ESLint, налаштований у файлі налаштувань, щоб забезпечити суворішу перевірку типів для проектів TypeScript. Під час перегляду коду старший розробник запитає вас: « Чи можете ви розібратися, як правило no-explicit-any має на меті поліпшити нашу базу коду? » Вам слід відповісти не просто « Я додав це », а пояснити, що налаштування додатка спрямовано на певні області, де надмірно допустимі анотації типів було визначено як потенційне джерело помилок під час виконання, і що послідовне застосування цього правила допоможе запобігти несподіваній поведінці. Після цього ви можете додати: « Ми можемо стежити за цими випадками і періодично переглядати їх, щоб переконатися, що додаток залишається актуальним ». Таким чином ви демонструєте активний підхід і підкреслюєте причини, які стоять за цією зміною — це важливо для створення довіри і демонстрації вашого ставлення до якості.
Ось приклад файла eslint.config.js, який містить спільні налаштування:
module.exports = {
extends: [
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
],
plugins: ['@typescript-eslint', 'react'],
rules: {
'@typescript-eslint/no-explicit-any': 'error', // Example rule from ESLint
'react/jsx-key': 'error',
},
};
Масив extends є особливо важливим. Це показує, що ви будуєте на існуючих стандартах, а не нав’язуєте цілком нові. Це демонструє спільний підхід і розуміння встановлених рекомендацій проекту. Пам’ятайте, чітке спілкування не тільки про технічну точність; це про створення продуктивного і шанобливого середовища, де кожен відчуває себе цінним і зрозумілим.