1// Copyright 2018 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// Package inspect defines an Analyzer that provides an AST inspector 6// (golang.org/x/tools/go/ast/inspector.Inspector) for the syntax trees 7// of a package. It is only a building block for other analyzers. 8// 9// Example of use in another analysis: 10// 11// import ( 12// "golang.org/x/tools/go/analysis" 13// "golang.org/x/tools/go/analysis/passes/inspect" 14// "golang.org/x/tools/go/ast/inspector" 15// ) 16// 17// var Analyzer = &analysis.Analyzer{ 18// ... 19// Requires: []*analysis.Analyzer{inspect.Analyzer}, 20// } 21// 22// func run(pass *analysis.Pass) (interface{}, error) { 23// inspect := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector) 24// inspect.Preorder(nil, func(n ast.Node) { 25// ... 26// }) 27// return nil, nil 28// } 29package inspect 30 31import ( 32 "reflect" 33 34 "golang.org/x/tools/go/analysis" 35 "golang.org/x/tools/go/ast/inspector" 36) 37 38var Analyzer = &analysis.Analyzer{ 39 Name: "inspect", 40 Doc: "optimize AST traversal for later passes", 41 URL: "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/inspect", 42 Run: run, 43 RunDespiteErrors: true, 44 ResultType: reflect.TypeOf(new(inspector.Inspector)), 45} 46 47func run(pass *analysis.Pass) (interface{}, error) { 48 return inspector.New(pass.Files), nil 49} 50