Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Решение проблем при помощи статического анализа кода: ESLint

Решение проблем при помощи статического анализа кода: ESLint

Sergey Markov

April 08, 2024
Tweet

Other Decks in Programming

Transcript

  1. Анализ кода без его выполнения Помогает выявлять ошибки на ранних

    этапах разработки Помогает писать код в едином стиле Линтеры - инструменты для статического анализа ESLint - линтер для JavaScript и TypeScript Что такое статический анализ кода? ТЕОРИЯ
  2. История началась 5 лет назад На проекте около 15 человек

    Монолит на Node.js, Express.js и Angular.js Весь JS и TS код хранится в едином репозитории Много легаси Дедлайны горят. Фитчи пилятся. Всё как у людей. ПРЕДЫСТОРИЯ
  3. В команде равноправие Любой мог выбрать работу по вкусу Отсутвие

    дедовщины Новички быстро обучались ПРЕДЫСТОРИЯ
  4. Много комментов связаных с код стайлом Ручной поиск и исправление

    мелких багов REVIEW HELL Потерянные запятые и точки с запятой Закоменченный код Лишние переносы строк и пробелы Кот опять куда-то уплыл ...
  5. Предпочитали auto-fix ручным изменениям Не тратили слишком много сил и

    времени К сожалению с чем-то приходилось смириться REVIEW HELL
  6. Если правило рекомендовано и имеет автофикс Постараться применить его Исправить

    найденные ошибки с помощью автофикса Если правило рекомендовано и не имеет автофикса Попробовать включить и посмотреть количество ошибок Если ошибок немного или их легко исправить, то оставить правило включённым Исправить найденные проблемы Если правило не рекомендовано Попробовать включить и посмотреть количество ошибок Субъективно оценить на сколько исправление найденных ошибок того стоит REVIEW HELL
  7. Все правила хранились в общем ESLint конфиге Остальные ESLint конфиги

    наследовались от основного Правила переопределялись по необходимости SHARED CONFIG
  8. Настали тёмные времена Заручился поддержкой нескольких членов команды Решили применить

    спорное правило object-shorthand В ES6 можно писать сокращённо свойства объекта Мы были за сокращённый вариант HOLLY WAR
  9. Война в команде шла около трёх дней Правило было выключено

    Изменения отменены Договорились обсуждать подобные решения перед имплементацией Закончили работу над правилами HOLLY WAR
  10. Всё болеше TypeScript в проекте Всё больше возможностей для ESLint

    Подключили TypeScript ESLint плагин и включили правила В том числе @typescript-eslint/no-floating-promises Нашли и исправили все плавающие промисы FLOATTING PROMISES ✅Правильно ❌Неправильно
  11. Проект большой и монолитный Сложная иерархия папок Большое количество ../

    в путях импортов Сложно найти нужный файл Разделили бекенд на логические модули Настроили алиасы на модули с помощью пакета link-module-alias MODULES
  12. Все пути переписаны с использованием алиасов Чем-то стало похоже на

    импорты Java MODULES Включили два ESLint правила запрещающие переход назад в пути (../) Написали дополнительное правило, чтобы покрыть осавшиеся кейсы Как сделать так, чтобы все использовали только алиасы?
  13. Возникают, когда два или более модулей зависят друг от друга

    Часто встречаются на больших проектах Создают сложно отлавливаемые ошибки при инициализации Наша команда столкнулась с такими ошибками Сложно решить каким-то одним способом CYCLE DEPENDECIES
  14. Подключили ESLint import плагин Настроили резолвинг алиасов наших модулей Включили

    no-cycle правило Правило достаточно медленное Рекомендовано запускать только на CI в больших проектах Нас время выполнения устроило и мы оставили его для локальной разработки CYCLE DEPENDECIES
  15. Импорт модулей ради типов может создавать циркулярные зависимости В рантайме

    такие импорты не нужны TypeScript позволяет импортировать только тип Правило consistent-type-imports позволяет сделать такие импорты обязательными Убирает ненужные связи между модулями из рантайма Уменьшает вероятность появления циклических зависимостей CYCLE DEPENDECIES
  16. Улучшена читаемость кода Ускорены процесс разработки и ревью Весь JS

    и TS код написан в едином стиле Отловлены и исправлены множество мелких и некоторые крупные баги Предотвращено появление подобных багов в будущем Унифицированы пути в импортах Убраны ненужные зависимости из рантайма Уменьшили количество конфликтов внутри команды ВЫВОДЫ