50 lines
1.3 KiB
Go
50 lines
1.3 KiB
Go
|
// Copyright 2018 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
// Package inspect defines an Analyzer that provides an AST inspector
|
||
|
// (golang.org/x/tools/go/ast/inspector.Inspector) for the syntax trees
|
||
|
// of a package. It is only a building block for other analyzers.
|
||
|
//
|
||
|
// Example of use in another analysis:
|
||
|
//
|
||
|
// import (
|
||
|
// "golang.org/x/tools/go/analysis"
|
||
|
// "golang.org/x/tools/go/analysis/passes/inspect"
|
||
|
// "golang.org/x/tools/go/ast/inspector"
|
||
|
// )
|
||
|
//
|
||
|
// var Analyzer = &analysis.Analyzer{
|
||
|
// ...
|
||
|
// Requires: []*analysis.Analyzer{inspect.Analyzer},
|
||
|
// }
|
||
|
//
|
||
|
// func run(pass *analysis.Pass) (interface{}, error) {
|
||
|
// inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
|
||
|
// inspect.Preorder(nil, func(n ast.Node) {
|
||
|
// ...
|
||
|
// })
|
||
|
// return nil
|
||
|
// }
|
||
|
//
|
||
|
package inspect
|
||
|
|
||
|
import (
|
||
|
"reflect"
|
||
|
|
||
|
"golang.org/x/tools/go/analysis"
|
||
|
"golang.org/x/tools/go/ast/inspector"
|
||
|
)
|
||
|
|
||
|
var Analyzer = &analysis.Analyzer{
|
||
|
Name: "inspect",
|
||
|
Doc: "optimize AST traversal for later passes",
|
||
|
Run: run,
|
||
|
RunDespiteErrors: true,
|
||
|
ResultType: reflect.TypeOf(new(inspector.Inspector)),
|
||
|
}
|
||
|
|
||
|
func run(pass *analysis.Pass) (interface{}, error) {
|
||
|
return inspector.New(pass.Files), nil
|
||
|
}
|