-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathanalyzer.go
42 lines (37 loc) · 1019 Bytes
/
analyzer.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package astquery
import (
"reflect"
"golang.org/x/tools/go/analysis"
"golang.org/x/tools/go/analysis/passes/inspect"
"golang.org/x/tools/go/ast/inspector"
)
// Analyzer provides *astquery.Evaluator as a result.
//
// Example:
// func run(pass *analysis.Pass) (interface{}, error) {
// e := pass.ResultOf[astquery.Analyzer].(*astquery.Evaluator)
// ns, err := e.Select("//*[@type='CallExpr']/Fun[@type='Ident' and @Name='panic']")
// if err != nil {
// return nil, err
// }
//
// for _, n := range ns {
// pass.Reportf(n.Pos(), "don't panic")
// }
//
// return nil, nil
// }
var Analyzer = &analysis.Analyzer{
Name: "astquery",
Doc: "search nodes by xpath",
Run: new(analyzer).run,
Requires: []*analysis.Analyzer{
inspect.Analyzer,
},
ResultType: reflect.TypeOf(new(Evaluator)),
}
type analyzer struct{}
func (analyzer) run(pass *analysis.Pass) (interface{}, error) {
inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
return New(pass.Fset, pass.Files, inspect), nil
}