astquery
astquery copied to clipboard
Code generator for analysis.Analyzer
Code generator for analysis.Analyzer from a XPath expression.
For example code generator generates the follow code from //*@type="CallExpr"]/Fn[@type="Ident" and @Name="panic"]
.
var Analyzer = &analysis.Analyzer{
Name: "FIXME",
Doc: "FIXME",
Run: run,
Requires: []*analysis.Analyzer{
inspect.Analyzer,
},
}
func run(pass *analysis.Pass) (interface{}, error) {
inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
nodeFilter := []ast.Node{
(*ast.CallExpr)(nil),
}
inspect.Preorder(nodeFilter, func(n ast.Node) {
switch n := n.(type) {
case *ast.CallExpr:
ident, ok := n.Fn.(*ast.Ident)
if ok && ident.Name == "panic" {
pass.Reportf(n.Pos(), "FIXME")
}
}
})
return nil, nil
}
XPath Parsers
- https://pkg.go.dev/github.com/ChrisTrenkamp/goxpath?tab=doc
- https://pkg.go.dev/mod/github.com/santhosh-tekuri/xpathparser