telegraf/telegraflinter/telegraflinter.go

55 lines
1.3 KiB
Go

// This must be package main
package main
import (
"go/ast"
"strings"
"golang.org/x/tools/go/analysis"
)
type analyzerPlugin struct{}
// This must be implemented
func (*analyzerPlugin) GetAnalyzers() []*analysis.Analyzer {
return []*analysis.Analyzer{
TelegrafAnalyzer,
}
}
// This must be defined and named 'AnalyzerPlugin'
var AnalyzerPlugin analyzerPlugin
var TelegrafAnalyzer = &analysis.Analyzer{
Name: "telegraflinter",
Doc: "Find Telegraf specific review criteria, more info: https://github.com/influxdata/telegraf/wiki/Review",
Run: run,
}
func run(pass *analysis.Pass) (interface{}, error) {
for _, file := range pass.Files {
ast.Inspect(file, func(n ast.Node) bool {
checkLogImport(n, pass)
return true
})
}
return nil, nil
}
func checkLogImport(n ast.Node, pass *analysis.Pass) {
if !strings.HasPrefix(pass.Pkg.Path(), "github.com/influxdata/telegraf/plugins/") {
return
}
if importSpec, ok := n.(*ast.ImportSpec); ok {
if importSpec.Path != nil && strings.HasPrefix(importSpec.Path.Value, "\"log\"") {
pass.Report(analysis.Diagnostic{
Pos: importSpec.Pos(),
End: 0,
Category: "log",
Message: "Don't use log package in plugin, use the Telegraf logger.",
SuggestedFixes: nil,
})
}
}
}