github.com/elek/golangci-lint@v1.42.2-0.20211208090441-c05b7fcb3a9a/pkg/golinters/unparam.go (about) 1 package golinters 2 3 import ( 4 "sync" 5 6 "golang.org/x/tools/go/analysis" 7 "golang.org/x/tools/go/analysis/passes/buildssa" 8 "golang.org/x/tools/go/packages" 9 "mvdan.cc/unparam/check" 10 11 "github.com/elek/golangci-lint/pkg/golinters/goanalysis" 12 "github.com/elek/golangci-lint/pkg/lint/linter" 13 "github.com/elek/golangci-lint/pkg/result" 14 ) 15 16 func NewUnparam() *goanalysis.Linter { 17 const linterName = "unparam" 18 var mu sync.Mutex 19 var resIssues []goanalysis.Issue 20 21 analyzer := &analysis.Analyzer{ 22 Name: linterName, 23 Doc: goanalysis.TheOnlyanalyzerDoc, 24 Requires: []*analysis.Analyzer{buildssa.Analyzer}, 25 } 26 return goanalysis.NewLinter( 27 linterName, 28 "Reports unused function parameters", 29 []*analysis.Analyzer{analyzer}, 30 nil, 31 ).WithContextSetter(func(lintCtx *linter.Context) { 32 us := &lintCtx.Settings().Unparam 33 if us.Algo != "cha" { 34 lintCtx.Log.Warnf("`linters-settings.unparam.algo` isn't supported by the newest `unparam`") 35 } 36 37 analyzer.Run = func(pass *analysis.Pass) (interface{}, error) { 38 ssa := pass.ResultOf[buildssa.Analyzer].(*buildssa.SSA) 39 ssaPkg := ssa.Pkg 40 41 pkg := &packages.Package{ 42 Fset: pass.Fset, 43 Syntax: pass.Files, 44 Types: pass.Pkg, 45 TypesInfo: pass.TypesInfo, 46 } 47 48 c := &check.Checker{} 49 c.CheckExportedFuncs(us.CheckExported) 50 c.Packages([]*packages.Package{pkg}) 51 c.ProgramSSA(ssaPkg.Prog) 52 53 unparamIssues, err := c.Check() 54 if err != nil { 55 return nil, err 56 } 57 58 var res []goanalysis.Issue 59 for _, i := range unparamIssues { 60 res = append(res, goanalysis.NewIssue(&result.Issue{ 61 Pos: pass.Fset.Position(i.Pos()), 62 Text: i.Message(), 63 FromLinter: linterName, 64 }, pass)) 65 } 66 67 mu.Lock() 68 resIssues = append(resIssues, res...) 69 mu.Unlock() 70 71 return nil, nil 72 } 73 }).WithIssuesReporter(func(*linter.Context) []goanalysis.Issue { 74 return resIssues 75 }).WithLoadMode(goanalysis.LoadModeTypesInfo) 76 }