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