Add staticcheck tool

This commit is contained in:
dwrz
2026-06-06 01:17:20 +00:00
parent 6fb63c8c90
commit ad58cd78ff
315 changed files with 56337 additions and 4 deletions

View File

@@ -0,0 +1,68 @@
package sa9009
import (
"fmt"
"strings"
"golang.org/x/tools/go/analysis"
"honnef.co/go/tools/analysis/lint"
"honnef.co/go/tools/analysis/report"
)
var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
Analyzer: &analysis.Analyzer{
Name: "SA9009",
Run: run,
Requires: []*analysis.Analyzer{},
},
Doc: &lint.RawDocumentation{
Title: "Ineffectual Go compiler directive",
Text: `
A potential Go compiler directive was found, but is ineffectual as it begins
with whitespace.`,
Since: "2024.1",
Severity: lint.SeverityWarning,
},
})
var Analyzer = SCAnalyzer.Analyzer
func run(pass *analysis.Pass) (any, error) {
for _, f := range pass.Files {
for _, cg := range f.Comments {
for _, c := range cg.List {
// Compiler directives have to be // comments
if !strings.HasPrefix(c.Text, "//") {
continue
}
if pass.Fset.PositionFor(c.Pos(), false).Column != 1 {
// Compiler directives have to be top-level. This also
// avoids a false positive for
// 'import _ "unsafe" // go:linkname'
continue
}
text := strings.TrimLeft(c.Text[2:], " \t")
if len(text) == len(c.Text[2:]) {
// There was no leading whitespace
continue
}
if !strings.HasPrefix(text, "go:") {
// Not an attempted compiler directive
continue
}
text = text[3:]
if len(text) == 0 || text[0] < 'a' || text[0] > 'z' {
// A letter other than a-z after "go:", so unlikely to be an
// attempted compiler directive
continue
}
report.Report(pass, c,
fmt.Sprintf(
"ineffectual compiler directive due to extraneous space: %q",
c.Text))
}
}
}
return nil, nil
}