Skip to content

Latest commit

 

History

History
139 lines (99 loc) · 10.7 KB

File metadata and controls

139 lines (99 loc) · 10.7 KB

TeamTools Linter CommandLine

License MIT Coverage

[English en-us] [Русский ru-ru]

Утилита командной строки для выполнения линтинга с поддержкой подключаемых плагинов.

Плагины

Например, IVNSTN/TeamTools.Linter.TSQL для статического анализа кода на T-SQL. Перечень плагинов необходимо указать в конфигурационном файле.

Параметры

Параметр Сокращение Описание
--config -c Путь к конфигурационному файлу
--dir -d Путь к директорию, все файлы которой нужно линтить
--file -f Путь к одному файлу, который нужно линтить
--filelist -l Путь к текстовому файлу, в котором перечислены один или несколько полный путей к файлам, которые нужно линтить.
--output -o Путь к файлу, в который нужно сохранить результат либо console для выдачи обнаруженных замечаний в терминал.
--format -m В каком виде оформить результат: json, sonar или text. Параметр учитывается только если в output указан путь к файлу для сорахнения результата.
--severity -s Минимальный уровень серьезности замечаний, которые должны быть учтены в результате линтинга. По умолчанию - info, то есть все ошибки (error), предупреждения (warning), предложения и информационные сообщения (info или hint). Если требуются только серьёзные замечания, то необходимо передать значение warning (явные ошибки и предупреждения) или error (только явные ошибки). Серьезность замечаний по каждому нарушенному правилу указывается в конфигурации плагина.
--basepath -r Базовый путь к файлам. Если указан, то вместо абсолютных путей к файлам в логе и в итоговом файле будут указаны относительные пути с базой, заданной в этом параметре.
--verbose -v Выводить подробности о ходе выполнения линтинга в консоль
--withversion -n Перед выдачей результата в консоль сначала напечатать номер версии. При вызове с параметром --version никаких других действий выполняться не будет. А с параметром --withversion можно и линтинг запустить, и текущую версию сразу в логе увидеть.
--diff Линтить все файлы, отличающиеся от ветки master. Работает только при запуске на файлах, размещенных в GIT-репозитории. Путь к git.exe должен быть включен в PATH. Вместо этого параметра схожего эффекта можно добиться, предварительно вычислив набор файлов, подлежащих линтингу. Этот список полных путей к файлам нужно сохранить в простой текстовый файл и путь к нему передать в параметре --filelist
--quiet Не устанавливать ненулевой код возврата в случае обнаружения замечаний линтера
--version Вывести номер версии утилиты без выполнения других операций
--help Отобразить список параметров

Примеры вызова

Линтинг диффа по каталогу

.\TeamTools.Linter.CommandLine.exe --dir "c:\source\my_project" --diff

Дифф вычисляется по Git относительно главной ветки, в итоге сканируются только изменённые файлы. Имя главной ветки можно указать в конфигурационном файле.

Линтинг конкретного файла

.\TeamTools.Linter.CommandLine.exe --file "c:\source\my_project\Stored procedures\dbo.my_proc.sql"

Линтинг всех файлов директории без учета info-сообщений

.\TeamTools.Linter.CommandLine.exe --dir "c:\source\my_project" --severity warning

Интеграция

Утилитой можно пользоваться напрямую, вызывая её в терминале, а можно встроить в некоторые инструменты.

SSMS Внешний инструмент

Выполнить линтинг файла, открытого в текущей вкладке SSMS можно с помощью настраиваемого пункта меню. Для создания нового пункта меню зайдите в Сервис / Внешние инструменты, добавьте новый элемент и настройте как показано ниже.

Command           = <path to exe>\TeamTools.Linter.CommandLine.exe
Arguments         = --file $(ItemPath) --with-version
Initial directory = <пусто>
Use output window = поставьте галочку

в поле "Arguments". В поле "Initial directory" введите путь к директории с исполняемым файлом линтера (такой же как в поле "Command", но без имени файла самого exe). Поставьте галочку "Use output window", остальные пусть останутся снятыми.

Теперь можно линтить файл в открытой вкладке SSMS: нажмите правой клавишей мыши на заголовке открытой вкладки и выберите пункт меню, название которого выбрали для только что добавленного элемента "External tools".

Visual Studio Внешний инструмент

Настройка команды для линтинга конкретного файла аналогична приведенной выше для SSMS, здесь же приводится пример для поиска стопперов во всём имеющемся диффе с главной веткой в текущем репозитории:

Command           = <path to exe>\TeamTools.Linter.CommandLine.exe
Arguments         = --diff --severity warning --with-version
Initial directory = $(SolutionDir)
Use output window = поставьте галочку

SourceTree Пользовательское действие

Откройте пункт меню Инструменты / Настройки в SourceTree, выберите вкладку "Пользовательские действия" и добавьте новый элемент в список. Далее введите полный путь к исполняемому файлу линтера в поле "Исполняемый файл" и приведенную ниже строку в поле "Параметры":

--file "$REPO\$FILE" --severity warning --verbose

Теперь можно линтить выбранный файл прямо из интерфейса SourceTree.

GIT хук

Измененные файлы можно автоматически линтить перед пушем или даже перед коммитом. Для этого добавьте в соответствующее событие вызов скрипта, пример которого приведен ниже. В качестве первого и единственного параметра передайте ему полный путь к папке, в которой находится TeamTools.Linter.CommandLine.exe Чтобы результат был похожим на линтинг в пайплайне CI, можно ограничить минимальную серьезность замечаний при помощи параметра --severity.

#!/bin/bash

linter_folder="$1"
echo "линтер: $linter_folder"

repo_path="$(git rev-parse --show-toplevel)"
echo "репозиторий: $repo_path"

"$linter_folder/TeamTools.Linter.CommandLine.exe" \
    --config "$linter_folder/DefaultConfig.json" \
    --dir "$repo_path" \
    --basepath "$repo_path" \
    --output console \
    --severity warning \
    --diff \
    --withversion

last_exit_code=$?

if [ $last_exit_code -ne 0 ]; then
    echo "======="
    echo "Линтинг не пройден. Обратите внимание на сообщения выше."
    echo "Все замечания-стопперы должны быть исправлены до отправки ветки на сервер"
    echo "======="

    exit $last_exit_code
fi

CI пайплайн

В пайплайн сборки утилита интегрируется схожим образом: сконструируйте консольный вызов с нужными параметрами и добавьте этот вызов в качестве шага пайплайна. Если не нужно, чтобы обнаружение замечаний роняло билд (например вы отдаете принятие решения на откуп Quality Gate в SonarQube), то добавьте параметр --quiet и тогда ExitCode всегда будет 0.