В прошлый раз, я уже писал небольшую инструкцию про то, как настроить автоматическую проверку кода с помощью pronto. Это отличный инструмент, который позволяет проверить качество кода при помощи всевозможных линтеров и получить результат в виде комментариев на GitHub или GitLab. Но, он написан на Ruby, следовательно, подключить его к проектам на других языках программирования, не представляется возможным. Поэтому, я начал искать альтернативу и нашел - reviewdog.
В отличие от pronto, reviewdog написан на Go. Его можно скомпилировать и подключить к любому проекту, вне зависимости от языка программирования.
Также, он может работать с любыми линтерами, достаточно лишь перенаправить результат работы линтера на вход reviewdog и определить формат сообщения. Для этого, reviewdog нужно запустить с флагом -efm
и передать в качестве параметра строку вида: "%f:%l:%c: %m"
. Для примера, возьмем golint:
Флаг -diff
обязателен лишь для локального запуска, он позволяет отфильтровать результат и вывести сообщения только для новых изменений.
Чтобы постоянно не определять формат для каждого линтера, reviewdog поставляется с уже предопределенными форматами. Список можно получить, запустив его с флагом -list
:
Список небольшой, но он включает все популярные линтеры для разных языков программирования. Теперь, вместо определения формата, можно передать его название с помощью флага -f
:
Этот же формат можно использовать и для других линтеров, например для golangci-lint:
Отдельно стоит упомянуть поддержку XML-формата checkstyle. С его помощью можно работать с такими линтерами, как например gometalinter:
Для более удобного запуска нескольких линтеров, reviewdog поддерживает конфигурационные файлы следующего формата:
Теперь достаточно просто запустить reviewdog и он сам все сделает:
По умолчанию reviewdog выводит весь результат работы в консоль. Для того, чтобы опубликовать результат на GitHub, нужно объявить переменную окружения REVIEWDOG_GITHUB_API_TOKEN
и запустить reviewdog с флагом -reporter=github-pr-review
:
В таком случае флаг -diff
уже не нужен, reviewdog получит необходимые данные из переменных окружения:
На этом плюсы reviewdog не заканчиваются, т.к. он из коробки поддерживает несколько популярных CI, таких как: Travis CI, Circle CI и GitLab CI. Если вы используете один из этих сервисов, то вам не нужно объявлять эти переменные окружения.
Это лишь малая часть тех возможностей, на что способен reviewdog. Более подробную информацию можно получить на странице проекта haya14busa/reviewdog.