Skip to content

Add Requires to Analyzer struct to consume results from previously run analyzers #157

@sourya-deepsource

Description

@sourya-deepsource
type Analyzer struct {
	// Requires is a set of analyzers that must run successfully
	// before this one on a given package. This analyzer may inspect
	// the outputs produced by each analyzer in Requires.
	// The graph over analyzers implied by Requires edges must be acyclic.
	//
	// Requires establishes a "horizontal" dependency between
	// analysis passes (different analyzers, same package).
	Requires []*Analyzer
}

Requires analyzers may be run to compute scope trees, CFGs etc before analysis begins.

For the Run function of dependency analyzers to be able to return value, they must be able to specify the return type. For example, the following analyzer:

var ScopeTreeBuilder = &analysis.Analyzer{
	Run: func(pass *analysis.Pass) (interface{}, error) {
		// calculate scope tree
		// ......
		return scopeTree, nil
	},
}

In the above example, we need to know the concrete type of the value returned, so that we can use it. Thus, the struct needs a new field, ReturnType, of type reflect.Type.

type Analyzer struct {
	Requires []*Analyzer
	ReturnType reflect.Type
}

Metadata

Metadata

Labels

enhancementNew feature or request

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions