@@ -25,21 +25,18 @@ import (
2525
2626const goCriticName = "gocritic"
2727
28- const goCriticDebugKey = "gocritic"
29-
3028var (
31- goCriticDebugf = logutils .Debug (goCriticDebugKey )
32- isGoCriticDebug = logutils .HaveDebugTag (goCriticDebugKey )
29+ goCriticDebugf = logutils .Debug (goCriticName )
30+ isGoCriticDebug = logutils .HaveDebugTag (goCriticName )
3331)
3432
3533func NewGoCritic (settings * config.GoCriticSettings , cfg * config.Config ) * goanalysis.Linter {
3634 var mu sync.Mutex
3735 var resIssues []goanalysis.Issue
3836
3937 wrapper := & goCriticWrapper {
40- settings : settings ,
41- cfg : cfg ,
42- sizes : types .SizesFor ("gc" , runtime .GOARCH ),
38+ cfg : cfg ,
39+ sizes : types .SizesFor ("gc" , runtime .GOARCH ),
4340 }
4441
4542 analyzer := & analysis.Analyzer {
@@ -72,41 +69,41 @@ Dynamic rules are written declaratively with AST patterns, filters, report messa
7269 nil ,
7370 ).
7471 WithContextSetter (func (context * linter.Context ) {
75- wrapper .init ()
72+ wrapper .init (settings , context . Log )
7673 }).
7774 WithIssuesReporter (func (* linter.Context ) []goanalysis.Issue {
7875 return resIssues
7976 }).WithLoadMode (goanalysis .LoadModeTypesInfo )
8077}
8178
8279type goCriticWrapper struct {
83- settings * config.GoCriticSettings
8480 settingsWrapper * goCriticSettingsWrapper
8581 cfg * config.Config
8682 sizes types.Sizes
8783 once sync.Once
8884}
8985
90- func (w * goCriticWrapper ) init () {
91- if w .settings != nil {
92- // the 'defer' is here to catch the panic from checkers.InitEmbeddedRules()
93- defer func () {
94- if err := recover (); err != nil {
95- linterLogger .Fatalf ("%s: %v: setting an explicit GOROOT can fix this problem." , goCriticName , err )
96- return
97- }
98- }()
99- w .once .Do (checkers .InitEmbeddedRules )
100-
101- settingsWrapper := newGoCriticSettingsWrapper (w .settings )
86+ func (w * goCriticWrapper ) init (settings * config.GoCriticSettings , logger logutils.Log ) {
87+ if settings == nil {
88+ return
89+ }
10290
103- settingsWrapper .inferEnabledChecks (linterLogger )
104- if err := settingsWrapper .validate (linterLogger ); err != nil {
105- linterLogger .Fatalf ("%s: invalid settings: %s" , goCriticName , err )
91+ w .once .Do (func () {
92+ err := checkers .InitEmbeddedRules ()
93+ if err != nil {
94+ logger .Fatalf ("%s: %v: setting an explicit GOROOT can fix this problem." , goCriticName , err )
10695 }
96+ })
97+
98+ settingsWrapper := newGoCriticSettingsWrapper (settings , logger )
99+
100+ settingsWrapper .inferEnabledChecks ()
107101
108- w .settingsWrapper = settingsWrapper
102+ if err := settingsWrapper .validate (); err != nil {
103+ logger .Fatalf ("%s: invalid settings: %s" , goCriticName , err )
109104 }
105+
106+ w .settingsWrapper = settingsWrapper
110107}
111108
112109func (w * goCriticWrapper ) run (pass * analysis.Pass ) ([]goanalysis.Issue , error ) {
@@ -268,13 +265,15 @@ func (w *goCriticWrapper) normalizeCheckerParamsValue(p interface{}) interface{}
268265type goCriticSettingsWrapper struct {
269266 * config.GoCriticSettings
270267
268+ logger logutils.Log
269+
271270 allCheckers []* gocriticlinter.CheckerInfo
272271 allCheckerMap map [string ]* gocriticlinter.CheckerInfo
273272
274273 inferredEnabledChecks map [string ]bool
275274}
276275
277- func newGoCriticSettingsWrapper (settings * config.GoCriticSettings ) * goCriticSettingsWrapper {
276+ func newGoCriticSettingsWrapper (settings * config.GoCriticSettings , logger logutils. Log ) * goCriticSettingsWrapper {
278277 allCheckers := gocriticlinter .GetCheckersInfo ()
279278
280279 allCheckerMap := make (map [string ]* gocriticlinter.CheckerInfo )
@@ -284,6 +283,7 @@ func newGoCriticSettingsWrapper(settings *config.GoCriticSettings) *goCriticSett
284283
285284 return & goCriticSettingsWrapper {
286285 GoCriticSettings : settings ,
286+ logger : logger ,
287287 allCheckers : allCheckers ,
288288 allCheckerMap : allCheckerMap ,
289289 inferredEnabledChecks : map [string ]bool {},
@@ -343,7 +343,7 @@ func (s *goCriticSettingsWrapper) disabledCheckersDebugf() {
343343 }
344344}
345345
346- func (s * goCriticSettingsWrapper ) inferEnabledChecks (log logutils. Log ) {
346+ func (s * goCriticSettingsWrapper ) inferEnabledChecks () {
347347 s .checkerTagsDebugf ()
348348
349349 enabledByDefaultChecks := s .getDefaultEnabledCheckersNames ()
@@ -371,7 +371,7 @@ func (s *goCriticSettingsWrapper) inferEnabledChecks(log logutils.Log) {
371371
372372 // DisabledTags
373373 if len (s .DisabledTags ) != 0 {
374- enabledChecks = s .filterByDisableTags (enabledChecks , s .DisabledTags , log )
374+ enabledChecks = s .filterByDisableTags (enabledChecks , s .DisabledTags )
375375 }
376376
377377 // EnabledChecks
@@ -381,7 +381,7 @@ func (s *goCriticSettingsWrapper) inferEnabledChecks(log logutils.Log) {
381381 alreadyEnabledChecksSet := stringsSliceToSet (enabledChecks )
382382 for _ , enabledCheck := range s .EnabledChecks {
383383 if alreadyEnabledChecksSet [enabledCheck ] {
384- log . Warnf ("No need to enable check %q: it's already enabled" , enabledCheck )
384+ s . logger . Warnf ("%s: no need to enable check %q: it's already enabled" , goCriticName , enabledCheck )
385385 continue
386386 }
387387 enabledChecks = append (enabledChecks , enabledCheck )
@@ -395,8 +395,8 @@ func (s *goCriticSettingsWrapper) inferEnabledChecks(log logutils.Log) {
395395 enabledChecksSet := stringsSliceToSet (enabledChecks )
396396 for _ , disabledCheck := range s .DisabledChecks {
397397 if ! enabledChecksSet [disabledCheck ] {
398- log . Warnf ("Gocritic check %q was explicitly disabled via config. However, as this check " +
399- "is disabled by default, there is no need to explicitly disable it via config." , disabledCheck )
398+ s . logger . Warnf ("%s: check %q was explicitly disabled via config. However, as this check " +
399+ "is disabled by default, there is no need to explicitly disable it via config." , goCriticName , disabledCheck )
400400 continue
401401 }
402402 delete (enabledChecksSet , disabledCheck )
@@ -418,7 +418,7 @@ func (s *goCriticSettingsWrapper) inferEnabledChecks(log logutils.Log) {
418418 s .disabledCheckersDebugf ()
419419}
420420
421- func (s * goCriticSettingsWrapper ) validate (log logutils. Log ) error {
421+ func (s * goCriticSettingsWrapper ) validate () error {
422422 if len (s .EnabledTags ) == 0 {
423423 if len (s .EnabledChecks ) != 0 && len (s .DisabledChecks ) != 0 {
424424 return errors .New ("both enabled and disabled check aren't allowed for gocritic" )
@@ -454,7 +454,7 @@ func (s *goCriticSettingsWrapper) validate(log logutils.Log) error {
454454 return errors .Wrap (err , "validate disabled checks" )
455455 }
456456
457- if err := s .validateCheckerNames (log ); err != nil {
457+ if err := s .validateCheckerNames (); err != nil {
458458 return errors .Wrap (err , "validation failed" )
459459 }
460460
@@ -502,7 +502,7 @@ func (s *goCriticSettingsWrapper) getDefaultDisabledCheckersNames() []string {
502502 return disabled
503503}
504504
505- func (s * goCriticSettingsWrapper ) validateCheckerNames (log logutils. Log ) error {
505+ func (s * goCriticSettingsWrapper ) validateCheckerNames () error {
506506 allowedNames := s .getAllCheckerNames ()
507507
508508 for _ , name := range s .EnabledChecks {
@@ -526,7 +526,7 @@ func (s *goCriticSettingsWrapper) validateCheckerNames(log logutils.Log) error {
526526 }
527527
528528 if ! s .isCheckEnabled (checkName ) {
529- log .Warnf ("%s: settings were provided for not enabled check %q" , goCriticName , checkName )
529+ s . logger .Warnf ("%s: settings were provided for not enabled check %q" , goCriticName , checkName )
530530 }
531531 }
532532
@@ -543,13 +543,13 @@ func (s *goCriticSettingsWrapper) getLowerCasedParams() map[string]config.GoCrit
543543 return ret
544544}
545545
546- func (s * goCriticSettingsWrapper ) filterByDisableTags (enabledChecks , disableTags []string , log logutils. Log ) []string {
546+ func (s * goCriticSettingsWrapper ) filterByDisableTags (enabledChecks , disableTags []string ) []string {
547547 enabledChecksSet := stringsSliceToSet (enabledChecks )
548548
549549 for _ , enabledCheck := range enabledChecks {
550550 checkInfo , checkInfoExists := s .allCheckerMap [enabledCheck ]
551551 if ! checkInfoExists {
552- log .Warnf ("%s: check %q was not exists via filtering disabled tags" , goCriticName , enabledCheck )
552+ s . logger .Warnf ("%s: check %q was not exists via filtering disabled tags" , goCriticName , enabledCheck )
553553 continue
554554 }
555555
0 commit comments