Как написать свой линтер для Go?

Ответ

Используют пакет golang.org/x/tools/go/analysis: определяют Analyzer с Run-функцией, обходят AST (пакет go/ast), сообщают о проблемах через pass.Reportf. Анализатор можно подключать к go vet -vettool, multichecker или golangci-lint (как custom plugin). Документация: golang.org/x/tools.

var myAnalyzer = &analysis.Analyzer{
    Name: "myanalyzer",
    Run:  run,
}
func run(pass *analysis.Pass) (interface{}, error) {
    ast.Inspect(pass.Files[0], func(n ast.Node) bool {
        // report if needed
        return true
    })
    return nil, nil
}
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.