Агент пише швидше, ніж ти встигаєш читати? Ось 10 перевірок, які зменшують обсяг коду для ручного рев'ю.
Evil Martians зібрали десять перевірок для фронтенду на TypeScript і React. Все конкретно, з інструментами і причинами.
⏺ Не дати написати зайве
Генеруйте типи з OpenAPI-специфікації. Найтиповіший дефект AI-коду - поле, якого не існує. Модель бачить поруч user і пише user.fullName, хоча бекенд віддає firstName і lastName. Якщо типи живуть окремо від специфікації, TypeScript це пропустить. Один опис API на два боки прибирає цілий клас багів ще на старті.
Опишіть межі шарів у лінтері. Модель не тримає в голові вашу архітектуру між сесіями і тягне код до середнього по GitHub. eslint-plugin-boundaries задає напрямок залежностей: сервіс не може імпортувати компонент.
⏺ Знайти те, що вже написано
Запустіть mutation testing. Покриття показує лише те, що рядок виконався - навіть якщо тест перевіряє мок і завжди зелений. Stryker навмисно ламає код і дивиться, чи впаде тест. Так видно, чи ваші тести взагалі щось ловлять.
Пошукайте дублікати. Дев'ятим у списку йде jscpd - мій інструмент, тому скажу відверто і про плюси, і про ліміти.
Порада авторів слушна: ставте різні пороги для JSX і для бізнес-логіки. Повторення розмітки часто є нормою, повторення логіки майже завжди стає проблемою. У Evil Martians дві копії розійшлися, і той самий підсумок зарплати показував 23 години 30 хвилин в одному місці та 0 годин 00 хвилин в іншому.
Межа, яку вони назвали, тримається на тому, що jscpd шукає текстову схожість. На днях вийшов 5.2.0, і саме її я і закривав.
--ignore-identifiers і --ignore-literals нормалізують токени перед хешуванням: копія, що відрізняється лише іменами, тепер знаходиться і позначається як renamed.
--max-gap-lines зшиває копію зі вставленим рядком посередині в один клон замість двох коротких.
А для JS і TS з'явився --similarity: кожна функція порівнюється за мішком 4-грам типів вузлів синтаксичного дерева.
⏺ Зробити перевірки обов'язковими
Заблокуйте мердж у CI. Перевірка працює тільки тоді, коли гілка не йде далі: формат, лінтер, tsc, юніт-тести, mutation testing на дифі. Деплой стартує лише після зеленого світла.
Вмикайте поступово. Спочатку правила як warnings і тільки на змінених файлах. Зловило реальний баг - підвищуйте до error, і аж потім ставте жорсткий гейт. Інакше команда почне шукати обхідні шляхи.
⏺ Де закінчується автоматика
Зелений статус усіх десяти перевірок не означає, що код хороший. Він означає лише те, що перевірки не знайшли того, що вміють шукати.
Жоден інструмент не скаже, що ви зробили не ту фічу або що ця абстракція тут зайва. Смак та архітектура залишаються на нас.
💬 Повний список: evilmartians.com/chronicles/ten-anti-ai-slop-moves-for-frontend-projects-going-faster-than-humans-can-review
Скільки з цих перевірок уже стоїть у вашому CI?
🔥 - більшість, і вони блокують мердж
👀 - поки що тільки лінтер
Post #986
551