Some checks failed
		
		
	
	Extra / Vulnerability scanner (push) Has been cancelled
				CI / go-mod (push) Has been cancelled
				CI / golangci-lint (push) Has been cancelled
				Release a tag / release (push) Has been cancelled
				CI / tests-on-windows (push) Has been cancelled
				CI / tests-on-macos (push) Has been cancelled
				CI / tests-on-unix (1.14) (push) Has been cancelled
				CI / tests-on-unix (1.15) (push) Has been cancelled
				CI / tests-on-unix (1.16) (push) Has been cancelled
				CI / check_generated (push) Has been cancelled
				Release a tag / docker-release (map[Dockerfile:build/Dockerfile.alpine]) (push) Has been cancelled
				Release a tag / docker-release (map[Dockerfile:build/Dockerfile]) (push) Has been cancelled
				
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package goanalysis
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
 | 
						|
	"github.com/pkg/errors"
 | 
						|
	"golang.org/x/tools/go/analysis"
 | 
						|
 | 
						|
	"github.com/golangci/golangci-lint/pkg/lint/linter"
 | 
						|
	"github.com/golangci/golangci-lint/pkg/result"
 | 
						|
)
 | 
						|
 | 
						|
type MetaLinter struct {
 | 
						|
	linters              []*Linter
 | 
						|
	analyzerToLinterName map[*analysis.Analyzer]string
 | 
						|
}
 | 
						|
 | 
						|
func NewMetaLinter(linters []*Linter) *MetaLinter {
 | 
						|
	ml := &MetaLinter{linters: linters}
 | 
						|
	ml.analyzerToLinterName = ml.getAnalyzerToLinterNameMapping()
 | 
						|
	return ml
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) Run(_ context.Context, lintCtx *linter.Context) ([]result.Issue, error) {
 | 
						|
	for _, l := range ml.linters {
 | 
						|
		if err := l.preRun(lintCtx); err != nil {
 | 
						|
			return nil, errors.Wrapf(err, "failed to pre-run %s", l.Name())
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return runAnalyzers(ml, lintCtx)
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) Name() string {
 | 
						|
	return "goanalysis_metalinter"
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) Desc() string {
 | 
						|
	return ""
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) getLoadMode() LoadMode {
 | 
						|
	loadMode := LoadModeNone
 | 
						|
	for _, l := range ml.linters {
 | 
						|
		if l.loadMode > loadMode {
 | 
						|
			loadMode = l.loadMode
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return loadMode
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) getAnalyzers() []*analysis.Analyzer {
 | 
						|
	var allAnalyzers []*analysis.Analyzer
 | 
						|
	for _, l := range ml.linters {
 | 
						|
		allAnalyzers = append(allAnalyzers, l.analyzers...)
 | 
						|
	}
 | 
						|
	return allAnalyzers
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) getName() string {
 | 
						|
	return "metalinter"
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) useOriginalPackages() bool {
 | 
						|
	return false // `unused` can't be run by this metalinter
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) reportIssues(lintCtx *linter.Context) []Issue {
 | 
						|
	var ret []Issue
 | 
						|
	for _, lnt := range ml.linters {
 | 
						|
		if lnt.issuesReporter != nil {
 | 
						|
			ret = append(ret, lnt.issuesReporter(lintCtx)...)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return ret
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) getLinterNameForDiagnostic(diag *Diagnostic) string {
 | 
						|
	return ml.analyzerToLinterName[diag.Analyzer]
 | 
						|
}
 | 
						|
 | 
						|
func (ml MetaLinter) getAnalyzerToLinterNameMapping() map[*analysis.Analyzer]string {
 | 
						|
	analyzerToLinterName := map[*analysis.Analyzer]string{}
 | 
						|
	for _, l := range ml.linters {
 | 
						|
		for _, a := range l.analyzers {
 | 
						|
			analyzerToLinterName[a] = l.Name()
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return analyzerToLinterName
 | 
						|
}
 |