@@ -25,21 +25,18 @@ import (
25
25
26
26
const goCriticName = "gocritic"
27
27
28
- const goCriticDebugKey = "gocritic"
29
-
30
28
var (
31
- goCriticDebugf = logutils .Debug (goCriticDebugKey )
32
- isGoCriticDebug = logutils .HaveDebugTag (goCriticDebugKey )
29
+ goCriticDebugf = logutils .Debug (goCriticName )
30
+ isGoCriticDebug = logutils .HaveDebugTag (goCriticName )
33
31
)
34
32
35
33
func NewGoCritic (settings * config.GoCriticSettings , cfg * config.Config ) * goanalysis.Linter {
36
34
var mu sync.Mutex
37
35
var resIssues []goanalysis.Issue
38
36
39
37
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 ),
43
40
}
44
41
45
42
analyzer := & analysis.Analyzer {
@@ -72,41 +69,41 @@ Dynamic rules are written declaratively with AST patterns, filters, report messa
72
69
nil ,
73
70
).
74
71
WithContextSetter (func (context * linter.Context ) {
75
- wrapper .init ()
72
+ wrapper .init (settings , context . Log )
76
73
}).
77
74
WithIssuesReporter (func (* linter.Context ) []goanalysis.Issue {
78
75
return resIssues
79
76
}).WithLoadMode (goanalysis .LoadModeTypesInfo )
80
77
}
81
78
82
79
type goCriticWrapper struct {
83
- settings * config.GoCriticSettings
84
80
settingsWrapper * goCriticSettingsWrapper
85
81
cfg * config.Config
86
82
sizes types.Sizes
87
83
once sync.Once
88
84
}
89
85
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
+ }
102
90
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 )
106
95
}
96
+ })
97
+
98
+ settingsWrapper := newGoCriticSettingsWrapper (settings , logger )
99
+
100
+ settingsWrapper .inferEnabledChecks ()
107
101
108
- w .settingsWrapper = settingsWrapper
102
+ if err := settingsWrapper .validate (); err != nil {
103
+ logger .Fatalf ("%s: invalid settings: %s" , goCriticName , err )
109
104
}
105
+
106
+ w .settingsWrapper = settingsWrapper
110
107
}
111
108
112
109
func (w * goCriticWrapper ) run (pass * analysis.Pass ) ([]goanalysis.Issue , error ) {
@@ -268,13 +265,15 @@ func (w *goCriticWrapper) normalizeCheckerParamsValue(p interface{}) interface{}
268
265
type goCriticSettingsWrapper struct {
269
266
* config.GoCriticSettings
270
267
268
+ logger logutils.Log
269
+
271
270
allCheckers []* gocriticlinter.CheckerInfo
272
271
allCheckerMap map [string ]* gocriticlinter.CheckerInfo
273
272
274
273
inferredEnabledChecks map [string ]bool
275
274
}
276
275
277
- func newGoCriticSettingsWrapper (settings * config.GoCriticSettings ) * goCriticSettingsWrapper {
276
+ func newGoCriticSettingsWrapper (settings * config.GoCriticSettings , logger logutils. Log ) * goCriticSettingsWrapper {
278
277
allCheckers := gocriticlinter .GetCheckersInfo ()
279
278
280
279
allCheckerMap := make (map [string ]* gocriticlinter.CheckerInfo )
@@ -284,6 +283,7 @@ func newGoCriticSettingsWrapper(settings *config.GoCriticSettings) *goCriticSett
284
283
285
284
return & goCriticSettingsWrapper {
286
285
GoCriticSettings : settings ,
286
+ logger : logger ,
287
287
allCheckers : allCheckers ,
288
288
allCheckerMap : allCheckerMap ,
289
289
inferredEnabledChecks : map [string ]bool {},
@@ -343,7 +343,7 @@ func (s *goCriticSettingsWrapper) disabledCheckersDebugf() {
343
343
}
344
344
}
345
345
346
- func (s * goCriticSettingsWrapper ) inferEnabledChecks (log logutils. Log ) {
346
+ func (s * goCriticSettingsWrapper ) inferEnabledChecks () {
347
347
s .checkerTagsDebugf ()
348
348
349
349
enabledByDefaultChecks := s .getDefaultEnabledCheckersNames ()
@@ -371,7 +371,7 @@ func (s *goCriticSettingsWrapper) inferEnabledChecks(log logutils.Log) {
371
371
372
372
// DisabledTags
373
373
if len (s .DisabledTags ) != 0 {
374
- enabledChecks = s .filterByDisableTags (enabledChecks , s .DisabledTags , log )
374
+ enabledChecks = s .filterByDisableTags (enabledChecks , s .DisabledTags )
375
375
}
376
376
377
377
// EnabledChecks
@@ -381,7 +381,7 @@ func (s *goCriticSettingsWrapper) inferEnabledChecks(log logutils.Log) {
381
381
alreadyEnabledChecksSet := stringsSliceToSet (enabledChecks )
382
382
for _ , enabledCheck := range s .EnabledChecks {
383
383
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 )
385
385
continue
386
386
}
387
387
enabledChecks = append (enabledChecks , enabledCheck )
@@ -395,8 +395,8 @@ func (s *goCriticSettingsWrapper) inferEnabledChecks(log logutils.Log) {
395
395
enabledChecksSet := stringsSliceToSet (enabledChecks )
396
396
for _ , disabledCheck := range s .DisabledChecks {
397
397
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 )
400
400
continue
401
401
}
402
402
delete (enabledChecksSet , disabledCheck )
@@ -418,7 +418,7 @@ func (s *goCriticSettingsWrapper) inferEnabledChecks(log logutils.Log) {
418
418
s .disabledCheckersDebugf ()
419
419
}
420
420
421
- func (s * goCriticSettingsWrapper ) validate (log logutils. Log ) error {
421
+ func (s * goCriticSettingsWrapper ) validate () error {
422
422
if len (s .EnabledTags ) == 0 {
423
423
if len (s .EnabledChecks ) != 0 && len (s .DisabledChecks ) != 0 {
424
424
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 {
454
454
return errors .Wrap (err , "validate disabled checks" )
455
455
}
456
456
457
- if err := s .validateCheckerNames (log ); err != nil {
457
+ if err := s .validateCheckerNames (); err != nil {
458
458
return errors .Wrap (err , "validation failed" )
459
459
}
460
460
@@ -502,7 +502,7 @@ func (s *goCriticSettingsWrapper) getDefaultDisabledCheckersNames() []string {
502
502
return disabled
503
503
}
504
504
505
- func (s * goCriticSettingsWrapper ) validateCheckerNames (log logutils. Log ) error {
505
+ func (s * goCriticSettingsWrapper ) validateCheckerNames () error {
506
506
allowedNames := s .getAllCheckerNames ()
507
507
508
508
for _ , name := range s .EnabledChecks {
@@ -526,7 +526,7 @@ func (s *goCriticSettingsWrapper) validateCheckerNames(log logutils.Log) error {
526
526
}
527
527
528
528
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 )
530
530
}
531
531
}
532
532
@@ -543,13 +543,13 @@ func (s *goCriticSettingsWrapper) getLowerCasedParams() map[string]config.GoCrit
543
543
return ret
544
544
}
545
545
546
- func (s * goCriticSettingsWrapper ) filterByDisableTags (enabledChecks , disableTags []string , log logutils. Log ) []string {
546
+ func (s * goCriticSettingsWrapper ) filterByDisableTags (enabledChecks , disableTags []string ) []string {
547
547
enabledChecksSet := stringsSliceToSet (enabledChecks )
548
548
549
549
for _ , enabledCheck := range enabledChecks {
550
550
checkInfo , checkInfoExists := s .allCheckerMap [enabledCheck ]
551
551
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 )
553
553
continue
554
554
}
555
555
0 commit comments