1
2
3
4
5
6
7 package appends
8
9 import (
10 _ "embed"
11 "go/ast"
12 "go/types"
13
14 "golang.org/x/tools/go/analysis"
15 "golang.org/x/tools/go/analysis/passes/inspect"
16 "golang.org/x/tools/go/analysis/passes/internal/analysisutil"
17 "golang.org/x/tools/go/ast/inspector"
18 "golang.org/x/tools/go/types/typeutil"
19 )
20
21
22 var doc string
23
24 var Analyzer = &analysis.Analyzer{
25 Name: "appends",
26 Doc: analysisutil.MustExtractDoc(doc, "appends"),
27 URL: "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/appends",
28 Requires: []*analysis.Analyzer{inspect.Analyzer},
29 Run: run,
30 }
31
32 func run(pass *analysis.Pass) (interface{}, error) {
33 inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
34
35 nodeFilter := []ast.Node{
36 (*ast.CallExpr)(nil),
37 }
38 inspect.Preorder(nodeFilter, func(n ast.Node) {
39 call := n.(*ast.CallExpr)
40 b, ok := typeutil.Callee(pass.TypesInfo, call).(*types.Builtin)
41 if ok && b.Name() == "append" && len(call.Args) == 1 {
42 pass.ReportRangef(call, "append with no values")
43 }
44 })
45
46 return nil, nil
47 }
48
View as plain text