astquery icon indicating copy to clipboard operation
astquery copied to clipboard

Code generator for analysis.Analyzer

Open tenntenn opened this issue 4 years ago • 0 comments

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

tenntenn avatar Aug 24 '20 01:08 tenntenn