@@ -10,12 +10,12 @@ import (
1010 "github.com/golangci/golangci-lint/pkg/config"
1111 "github.com/golangci/golangci-lint/pkg/golinters/goanalysis"
1212 "github.com/golangci/golangci-lint/pkg/lint/linter"
13+ "github.com/golangci/golangci-lint/pkg/logutils"
1314 "github.com/golangci/golangci-lint/pkg/result"
1415)
1516
1617const forbidigoName = "forbidigo"
1718
18- //nolint:dupl
1919func NewForbidigo (settings * config.ForbidigoSettings ) * goanalysis.Linter {
2020 var mu sync.Mutex
2121 var resIssues []goanalysis.Issue
@@ -40,14 +40,20 @@ func NewForbidigo(settings *config.ForbidigoSettings) *goanalysis.Linter {
4040 },
4141 }
4242
43+ loadMode := goanalysis .LoadModeSyntax
44+ if settings != nil && settings .AnalyzeTypes {
45+ // Need more information for the analysis.
46+ loadMode = goanalysis .LoadModeTypesInfo
47+ }
48+
4349 return goanalysis .NewLinter (
4450 forbidigoName ,
4551 "Forbids identifiers" ,
4652 []* analysis.Analyzer {analyzer },
4753 nil ,
4854 ).WithIssuesReporter (func (* linter.Context ) []goanalysis.Issue {
4955 return resIssues
50- }).WithLoadMode (goanalysis . LoadModeSyntax )
56+ }).WithLoadMode (loadMode )
5157}
5258
5359func runForbidigo (pass * analysis.Pass , settings * config.ForbidigoSettings ) ([]goanalysis.Issue , error ) {
@@ -56,15 +62,36 @@ func runForbidigo(pass *analysis.Pass, settings *config.ForbidigoSettings) ([]go
5662 // disable "//permit" directives so only "//nolint" directives matters within golangci-lint
5763 forbidigo .OptionIgnorePermitDirectives (true ),
5864 }
65+ if settings != nil && settings .AnalyzeTypes {
66+ options = append (options , forbidigo .OptionAnalyzeTypes (true ))
67+ }
5968
60- forbid , err := forbidigo .NewLinter (settings .Forbid , options ... )
69+ // Convert patterns back to strings because that is what NewLinter
70+ // accepts.
71+ var patterns []string
72+ for _ , pattern := range settings .Forbid {
73+ buffer , err := pattern .String ()
74+ if err != nil {
75+ return nil , err
76+ }
77+ patterns = append (patterns , string (buffer ))
78+ }
79+
80+ forbid , err := forbidigo .NewLinter (patterns , options ... )
6181 if err != nil {
6282 return nil , fmt .Errorf ("failed to create linter %q: %w" , forbidigoName , err )
6383 }
6484
6585 var issues []goanalysis.Issue
6686 for _ , file := range pass .Files {
67- hints , err := forbid .RunWithConfig (forbidigo.RunConfig {Fset : pass .Fset }, file )
87+ runConfig := forbidigo.RunConfig {
88+ Fset : pass .Fset ,
89+ DebugLog : logutils .Debug (logutils .DebugKeyForbidigo ),
90+ }
91+ if settings != nil && settings .AnalyzeTypes {
92+ runConfig .TypesInfo = pass .TypesInfo
93+ }
94+ hints , err := forbid .RunWithConfig (runConfig , file )
6895 if err != nil {
6996 return nil , fmt .Errorf ("forbidigo linter failed on file %q: %w" , file .Name .String (), err )
7097 }
0 commit comments