Всем привет! Это Леша Жиряков, техлид backend-команды витрины онлайн-кинотеатра KION. В прошлый раз я писал про FastAPI vs Litestar, а сегодня поделюсь инструментами для проверки качества кода. Сами знаете — даже опытный разработчик не застрахован от опечаток и банальной усталости, которая легко может привести к обидным ошибкам. Если уже работали с каким-то из перечисленных инструментов или у вас другие фавориты, делитесь инфой в комментариях.

ESLint

Год запуска: сервис создал Николас Закас (Nicholas C. Zakas) в 2013 году как альтернативу JSHint.

Я бы сказал, что это must-have-инструмент для любого JavaScript- или TypeScript-проекта, он экономит нервы и время. Работает как умный ревизор кода, причем не просто выделяет ошибки, а подсказывает лучшие практики, следит за единообразием стиля и ловит потенциальные баги до их попадания в прод. В отличие от устаревших линтеров вроде JSHint, ESLint очень гибкий. Его можно адаптировать под любую кодовую базу — будь то ванильный JS, TypeScript, React, Vue или даже Node.js.

Важное удобство — функция автоматического исправления кода (eslint --fix), что устраняет рутинную возню с форматированием и мелкими ошибками. В связке с Prettier (об этом сервисе расскажу ниже) он превращается в мощный инструмент, который поддерживает код чистым без участия разработчика. Плюс его легко встраивать в CI/CD, что предотвращает попадание «грязного» кода в репозиторий. Да, местами ESLint может раздражать своей придирчивостью, но это вопрос грамотной настройки — достаточно один раз написать .eslintrc, и жизнь становится проще.

Есть и недостатки:

  • Ориентирован только на JavaScript и TypeScript, что делает его узкоспециализированным. Для проектов на других языках нужны дополнительные инструменты.

  • Новичкам может быть сложно разобраться с файлами настройки (.eslintrc, .eslintignore). Нужно понимать, какие правила включать, отключать и как интегрировать сервис с другими инструментами.

Prettier

Год запуска: создан Джеймсом Лонгом в 2017 году.

Prettier автоматически форматирует код, исправляя пробелы, отступы, кавычки, длину строк и другие аспекты оформления. ESLint и Prettier отлично дополняют друг друга. Ведь ESLint отвечает за качество кода (ошибки, лучшие практики), а Prettier — за его форматирование (отступы, пробелы, переносы строк). Так что идеально, если вы используете оба инструмента в связке.

Prettier поддерживает JavaScript, TypeScript, CSS, HTML, JSON, YAML, GraphQL, Markdown и даже некоторые шаблонные языки — так что это универсальный инструмент для работы с фронтендом и бэкендом. Главный плюс Prettier — жесткая консистентность: в отличие от линтеров с гибкими правилами, здесь минимум конфигураций — код приводится к единому стандарту, что исключает субъективность и разночтения. Особенно полезно при работе в команде, так как упрощает код-ревью и делает кодовую базу более читаемой. Prettier легко интегрируется в редакторы (VS Code, WebStorm и другие), CI/CD-пайплайны и может автоматически форматировать код при сохранении файлов или при коммите (pre-commit hook).

Особых недостатков нет, ну или я с ними не сталкивался. Дополняйте в комментариях, если нашли у Prettier проблемы.

CodeClimate

Год запуска: CodeClimate запустила в 2011 году компания CodeClimate, Inc.

Облачный сервис для глубокого анализа качества кода. Вы можете отслеживать поддерживаемость, сложность, дублирование, покрытие тестами и другие важные метрики. Проверяет более 20 языков программирования, включая JavaScript, TypeScript, Python, Ruby, Go, Java и PHP. Хотя для некоторых языков может потребоваться дополнительная настройка. В отличие от обычных линтеров, чекающих стиль и ошибки, CodeClimate фокусируется на архитектурных проблемах и техническом долге, предлагая аналитические отчеты и рекомендации по улучшению кода. И это очень круто для команд.

Оценка технического долга кода сервисом, источник
Оценка технического долга кода сервисом, источник

Одна из ключевых функций — Snapshot Analysis, сравнение версий, очень помогает определять динамику качества кода со временем. CodeClimate интегрируется с GitHub, GitLab и Bitbucket, автоматически анализируя код в процессе CI/CD и блокируя PR с деградацией качества (опционально). Он может измерять цикломатическую сложность, выявлять проблемные участки кода и оценивать покрытие тестами — при наличии отчетов от тестовых фреймворков. Благодаря гибкой настройке правил (в платных версиях) и интеграции с Jira, Slack и другими сервисами CodeClimate помогает командам поддерживать код в хорошем состоянии и не дает копить технический долг.

Недостатки: CodeClimate — платный сервис, у бесплатной версии есть серьезные ограничения. Но тут вам придется решать и выбирать, за что платить, а за что нет.

SonarQube

Год запуска: SonarQube создан компанией SonarSource в далеком 2008 году.

Мощный инструмент для статического анализа кода. Поддерживает больше 30 языков, включая Java, C#, JavaScript/TypeScript, Python, PHP и другие. Правда, это для платной версии. Бесплатная скромнее и поддерживает только Java, JavaScript/TypeScript, C#, Python, PHP, Kotlin, Go. С другой стороны, и это очень неплохо, большинству команд должно хватить.

Сервис помогает находить ошибки, уязвимости — например, SQL-инъекции, XSS, проблемные участки кода, обнаруживает дублирование и определяет избыточную сложность, оценивает покрытие тестами.

Начало работы с инструментом
Начало работы с инструментом

SonarQube легко интегрируется с CI/CD-системами (Jenkins, GitLab CI, GitHub Actions), у него есть удобные дашборды для визуализации качества кода. А значит, проще анализировать код, исправлять проблемы и поддерживать высокий уровень качества и безопасности. У сервиса есть плагины, добавляющие новые функции. Например, можно получить поддержку дополнительных языков или интеграцию с новыми инструментами. Так что это гибкий сервис, его можно адаптировать под нужды любого проекта. Очень рекомендую.

Недостатки: настройка и поддержка сервера требуют времени и ресурсов, особенно если вы используете локальную версию. У бесплатной, как и говорилось, есть ограничения по количеству языков и правил анализа. На всякий случай добавил это в недостатки — вдруг вы ждете все и сразу бесплатно.

Codacy

Год запуска: создан в 2014 году компанией Codacy, Inc.

Облачный инструмент для автоматического анализа качества кода. Здорово помогает разработчикам находить ошибки, уязвимости, подозрительные участки и проблемы с производительностью. Поддерживает более 30 языков программирования, включая JavaScript, TypeScript, Python, Java, Ruby, PHP, Go, C# и другие.

Codacy интегрируется с популярными платформами, такими как GitHub, GitLab, Bitbucket и Slack. Так что без проблем можно автоматически анализировать код при каждом пул-реквесте или коммите. А еще у него есть удобные дашборды для визуализации качества кода, включая метрики: покрытие тестами, сложность кода и дублирование. Codacy позволяет настраивать правила анализа под нужды проекта. Это гибкий инструмент для команд любого размера.

Тоже есть платная и бесплатная версия, как и у большинства его «коллег».

Недостатки: настройка правил может быть не такой быстрой, как в локальных инструментах вроде SonarQube. Сам Codacy не предоставляет локальной версии, а это может быть проблемой для проектов с повышенными требованиями к безопасности.

На сегодня все. Если у вас есть свои любимые инструменты для проверки качества кода, пишите в комментариях!

Комментарии (12)


  1. miksoft
    03.02.2025 12:35

    А для SQL есть такой сервис/библиотека?


    1. IVNSTN
      03.02.2025 12:35

      Который SQL интересует, под какую СУБД?


      1. miksoft
        03.02.2025 12:35

        Под любую. У меня несколько СУБД в моем окружении.

        А если можно помечтать, то под Spark и Greenplum.


  1. astypalaia
    03.02.2025 12:35

    А не проще ли сейчас куски кода в ИИ (например, популярный китайский) заталкивать и спрашивать: ну, как тебе такое? В отличие от приведенных примеров он понимает много ЯП.


  1. Xtray
    03.02.2025 12:35

    ESLint и Prettier отлично дополняют друг друга

    Угу, один говорит, что кавычки должны быть двойные, другой - что одинарные. Вот уже который год они не могут договориться и вместо комфортной работы тебе постоянно нужно лезть в конфиги, чтобы их подружить. Там помимо кавычек полно всякого.

    Если у вас большущий проект, то оно, конечно, того стоит. А если маленький или одноразовый, то проще на словах договориться о стиле кода. Да и IDE из коробки умеют и форматировать и ошибки подсвечивать...


    1. MaksimMukharev
      03.02.2025 12:35

      Или взять готовые настройки


  1. Zukomux
    03.02.2025 12:35

    Чем husky и stylint обидели, что их не включили?


    1. metalidea
      03.02.2025 12:35

      husky сам по себе ничего не анализирует, а лишь запускает при коммите или пуше.


  1. Krasnoarmeec
    03.02.2025 12:35

    А для Matlab что-нибудь есть? И, желательно, не в облаке, а развёртываемое на локальном сервере.

    Встроенный анализатор (mlint) не устраивает - слишком слабый. Не отслеживает даже неинициализированные переменные. Пытался использовать "PMD - source code analyzer", но в нём для Matlab только проверка на Copy-Paste код.


  1. MasterIT75
    03.02.2025 12:35

    Спасибо за подборку.


  1. MrAlone
    03.02.2025 12:35

    " Поддерживает больше 30 языков, включая Java, C#, JavaScript/TypeScript, Python, PHP и другие. Правда, это для платной версии. Бесплатная скромнее и поддерживает только Java, JavaScript/TypeScript, C#, Python, PHP, Kotlin, Go. "

    Что за буллшит? Легко же проверить!


  1. AbitLogic
    03.02.2025 12:35

    Я как-то попробовал скормить одной такой штуке некоторые файлы из ядра Linux, понял что чистого кода не бывает и сосредоточился на формировании красивого стиля самостоятельно, в основном через TDD