Advance Linter для Go-подобных грамматических языков.
TLIN - это Linter, предназначенный для языков программирования GO и GNO. Он использует функциональность Golangci-Lint в качестве основного двигателя с линией, обеспечивая мощный анализ кода для GO, как грамматические языки.
Вдохновленный Rust's Clippy, Tlin стремится предоставить дополнительные предложения по улучшению кода, помимо правил Golangci-Lint по умолчанию.
Чтобы установить Tlin CLI, выполните следующие действия:
git clone https://github.com/gnolang/tlin cd tlingo install ./cmd/tlin вот и все! Теперь вы можете использовать команду tlin в вашем терминале.
tlin < path > Замените <path> на путь файла или каталога, который вы хотите проанализировать.
Чтобы проверить текущий каталог, запустите:
tlin . Tlin поддерживает файл конфигурации ( .tlin.yaml ) для настройки своего поведения. Вы можете генерировать файл конфигурации по умолчанию, запустив:
tlin -init Эта команда создаст файл .tlin.yaml в текущем каталоге со следующим контентом:
# .tlin.yaml
name : tlin
rules :Вы можете настроить файл конфигурации, чтобы включить или отключить конкретные правила Lint, установить пороги сложности цикломата и многое другое.
# .tlin.yaml
name : tlin
rules :
useless-break :
severity : WARNING
deprecated-function :
severity : OFF Наш Linter позволяет добавлять пользовательские правила Lint помимо правил Golangci-Lint по умолчанию. Чтобы добавить новое правило Lint, следуйте этим шагам:
️ Необходимо обновить соответствующие тесты, если вы добавили новое правило или форматер.
Создайте документ RFC (запрос на комментарии) для предлагаемого правила Lint:
Откройте новую проблему в репозитории TLIN и прикрепите документ RFC.
Дождитесь отзывов сообщества и одобрения сопровождающих. Будьте готовы итерации на вашем предложении на основе отзывов.
Как только RFC будет утвержден, приступите к реализации:
а Реализуйте интерфейс LintRule для вашего нового правила:
type NewRule struct {}
func ( r * NewRule ) Check ( filename string , node * ast. File ) ([]types. Issue , error ) {
// Implement your lint rule logic here
// return a slice of Issues and any error encountered
} беременный Зарегистрируйте свое новое правило в registerAllRules и, возможно, registerDefaultRules метод разработки структуры Engine во internal/engine.go :
func ( e * Engine ) registerDefaultRules () {
e . rules = append ( e . rules ,
& GolangciLintRule {},
// ...
& NewRule {}, // Add your new rule here
)
} func ( e * Engine ) registerAllRules () {
e . rules = append ( e . rules ,
& GolangciLintRule {},
// ...
& NewRule {}, // Add your new rule here
)
} (Необязательно) Если ваше правило требует специального форматирования, создайте новый форматер в пакете formatter :
а Создайте новый файл (например, formatter/new_rule.go ).
беременный Реализуйте интерфейс IssueFormatter для вашего нового правила:
type NewRuleFormatter struct {}
func ( f * NewRuleFormatter ) Format (
issue types. Issue ,
snippet * internal. SourceCode ,
) string {
// Implement formatting logic for new rule here.
} в Добавьте новое форматирование в функцию GetFormatter в formatter/fmt.go .
func GetFormatter ( rule string ) IssueFormatter {
switch rule {
// ...
case "new_rule" : // Add your new rule here
return & NewRuleFormatter {}
default :
return & DefaultFormatter {}
}
}Добавьте комплексные тесты для вашего нового правила и форматера.
Обновите документацию, чтобы включить информацию о новом правиле.
Отправьте запрос на вытяжение с помощью вашей реализации, тестов и обновлений документации.
Следуя этим шагам, вы можете предложить, обсуждать и добавлять новые правила ворса структурированным образом, гарантируя, что они должным образом интегрированы в проект TLIN.
Tlin поддерживает несколько флагов для настройки своего поведения:
-timeout <duration> : установите тайм -аут для Linter (по умолчанию: 5M). Пример: -timeout 1m30s-cyclo : анализ цикломатической сложности.-threshold <int> : установить порог сложности цикломата (по умолчанию: 10)-ignore <rules> : разделенный на запяту-cfg : анализ графика управления управляющего графика управления-func <name> : указать имя функции для анализа CFG-fix : автоматически исправлять проблемы-dry-run : запустить в режиме сухого бега (покажите исправления, не применяя их)-confidence <float> : установите порог доверия для автоматической фиксирования (от 0,0 до 1,0, по умолчанию: 0,75)-o <path> : вывод записи в файл вместо stdout-json-output : выходные данные в формате JSON-init : инициализировать новый файл конфигурации Tlin в текущем каталоге-c <path> : укажите пользовательский файл конфигурации Мы приветствуем все формы взносов, включая отчеты об ошибках, запросы на функции и запросы на привлечение. Пожалуйста, не стесняйтесь открыть проблему или отправить запрос на привлечение.
tlin ) предложение Этот проект распределен по лицензии MIT. Смотрите LICENSE для получения дополнительной информации.