@@ -69,7 +69,7 @@ import (
69
69
// Analyzers are immutable, since they are shared across multiple LSP sessions.
70
70
type Analyzer struct {
71
71
analyzer * analysis.Analyzer
72
- enabled bool
72
+ nonDefault bool
73
73
actionKinds []protocol.CodeActionKind
74
74
severity protocol.DiagnosticSeverity
75
75
tags []protocol.DiagnosticTag
@@ -80,7 +80,7 @@ func (a *Analyzer) Analyzer() *analysis.Analyzer { return a.analyzer }
80
80
81
81
// EnabledByDefault reports whether the analyzer is enabled by default for all sessions.
82
82
// This value can be configured per-analysis in user settings.
83
- func (a * Analyzer ) EnabledByDefault () bool { return a . enabled }
83
+ func (a * Analyzer ) EnabledByDefault () bool { return ! a . nonDefault }
84
84
85
85
// ActionKinds is the set of kinds of code action this analyzer produces.
86
86
//
@@ -109,86 +109,101 @@ func (a *Analyzer) String() string { return a.analyzer.String() }
109
109
var DefaultAnalyzers = make (map [string ]* Analyzer ) // initialized below
110
110
111
111
func init () {
112
- // The traditional vet suite:
113
112
analyzers := []* Analyzer {
114
113
// The traditional vet suite:
115
- {analyzer : appends .Analyzer , enabled : true },
116
- {analyzer : asmdecl .Analyzer , enabled : true },
117
- {analyzer : assign .Analyzer , enabled : true },
118
- {analyzer : atomic .Analyzer , enabled : true },
119
- {analyzer : bools .Analyzer , enabled : true },
120
- {analyzer : buildtag .Analyzer , enabled : true },
121
- {analyzer : cgocall .Analyzer , enabled : true },
122
- {analyzer : composite .Analyzer , enabled : true },
123
- {analyzer : copylock .Analyzer , enabled : true },
124
- {analyzer : defers .Analyzer , enabled : true },
125
- {analyzer : deprecated .Analyzer , enabled : true , severity : protocol .SeverityHint , tags : []protocol.DiagnosticTag {protocol .Deprecated }},
126
- {analyzer : directive .Analyzer , enabled : true },
127
- {analyzer : errorsas .Analyzer , enabled : true },
128
- {analyzer : framepointer .Analyzer , enabled : true },
129
- {analyzer : httpresponse .Analyzer , enabled : true },
130
- {analyzer : ifaceassert .Analyzer , enabled : true },
131
- {analyzer : loopclosure .Analyzer , enabled : true },
132
- {analyzer : lostcancel .Analyzer , enabled : true },
133
- {analyzer : nilfunc .Analyzer , enabled : true },
134
- {analyzer : printf .Analyzer , enabled : true },
135
- {analyzer : shift .Analyzer , enabled : true },
136
- {analyzer : sigchanyzer .Analyzer , enabled : true },
137
- {analyzer : slog .Analyzer , enabled : true },
138
- {analyzer : stdmethods .Analyzer , enabled : true },
139
- {analyzer : stdversion .Analyzer , enabled : true },
140
- {analyzer : stringintconv .Analyzer , enabled : true },
141
- {analyzer : structtag .Analyzer , enabled : true },
142
- {analyzer : testinggoroutine .Analyzer , enabled : true },
143
- {analyzer : tests .Analyzer , enabled : true },
144
- {analyzer : timeformat .Analyzer , enabled : true },
145
- {analyzer : unmarshal .Analyzer , enabled : true },
146
- {analyzer : unreachable .Analyzer , enabled : true },
147
- {analyzer : unsafeptr .Analyzer , enabled : true },
148
- {analyzer : unusedresult .Analyzer , enabled : true },
114
+ {analyzer : appends .Analyzer },
115
+ {analyzer : asmdecl .Analyzer },
116
+ {analyzer : assign .Analyzer },
117
+ {analyzer : atomic .Analyzer },
118
+ {analyzer : bools .Analyzer },
119
+ {analyzer : buildtag .Analyzer },
120
+ {analyzer : cgocall .Analyzer },
121
+ {analyzer : composite .Analyzer },
122
+ {analyzer : copylock .Analyzer },
123
+ {analyzer : defers .Analyzer },
124
+ {analyzer : deprecated .Analyzer , severity : protocol .SeverityHint , tags : []protocol.DiagnosticTag {protocol .Deprecated }},
125
+ {analyzer : directive .Analyzer },
126
+ {analyzer : errorsas .Analyzer },
127
+ {analyzer : framepointer .Analyzer },
128
+ {analyzer : httpresponse .Analyzer },
129
+ {analyzer : ifaceassert .Analyzer },
130
+ {analyzer : loopclosure .Analyzer },
131
+ {analyzer : lostcancel .Analyzer },
132
+ {analyzer : nilfunc .Analyzer },
133
+ {analyzer : printf .Analyzer },
134
+ {analyzer : shift .Analyzer },
135
+ {analyzer : sigchanyzer .Analyzer },
136
+ {analyzer : slog .Analyzer },
137
+ {analyzer : stdmethods .Analyzer },
138
+ {analyzer : stdversion .Analyzer },
139
+ {analyzer : stringintconv .Analyzer },
140
+ {analyzer : structtag .Analyzer },
141
+ {analyzer : testinggoroutine .Analyzer },
142
+ {analyzer : tests .Analyzer },
143
+ {analyzer : timeformat .Analyzer },
144
+ {analyzer : unmarshal .Analyzer },
145
+ {analyzer : unreachable .Analyzer },
146
+ {analyzer : unsafeptr .Analyzer },
147
+ {analyzer : unusedresult .Analyzer },
149
148
150
149
// not suitable for vet:
151
150
// - some (nilness, yield) use go/ssa; see #59714.
152
151
// - others don't meet the "frequency" criterion;
153
152
// see GOROOT/src/cmd/vet/README.
154
- // - some (modernize) report diagnostics on perfectly valid code (hence severity=info)
155
- {analyzer : atomicalign .Analyzer , enabled : true },
156
- {analyzer : deepequalerrors .Analyzer , enabled : true },
157
- {analyzer : nilness .Analyzer , enabled : true }, // uses go/ssa
158
- {analyzer : yield .Analyzer , enabled : true }, // uses go/ssa
159
- {analyzer : sortslice .Analyzer , enabled : true },
160
- {analyzer : embeddirective .Analyzer , enabled : true },
161
- {
analyzer :
waitgroup .
Analyzer ,
enabled :
true },
// to appear in cmd/[email protected]
162
- {
analyzer :
hostport .
Analyzer ,
enabled :
true },
// to appear in cmd/[email protected]
163
- {analyzer : modernize .Analyzer , enabled : true , severity : protocol .SeverityInformation },
153
+ {analyzer : atomicalign .Analyzer },
154
+ {analyzer : deepequalerrors .Analyzer },
155
+ {analyzer : nilness .Analyzer }, // uses go/ssa
156
+ {analyzer : yield .Analyzer }, // uses go/ssa
157
+ {analyzer : sortslice .Analyzer },
158
+ {analyzer : embeddirective .Analyzer },
159
+ {
analyzer :
waitgroup .
Analyzer },
// to appear in cmd/[email protected]
160
+ {
analyzer :
hostport .
Analyzer },
// to appear in cmd/[email protected]
164
161
165
162
// disabled due to high false positives
166
- {analyzer : shadow .Analyzer , enabled : false }, // very noisy
163
+ {analyzer : shadow .Analyzer , nonDefault : true }, // very noisy
167
164
// fieldalignment is not even off-by-default; see #67762.
168
165
169
- // "simplifiers": analyzers that offer mere style fixes
170
- // gofmt -s suite:
171
- {analyzer : simplifycompositelit .Analyzer , enabled : true , actionKinds : []protocol.CodeActionKind {protocol .SourceFixAll , protocol .QuickFix }},
172
- {analyzer : simplifyrange .Analyzer , enabled : true , actionKinds : []protocol.CodeActionKind {protocol .SourceFixAll , protocol .QuickFix }},
173
- {analyzer : simplifyslice .Analyzer , enabled : true , actionKinds : []protocol.CodeActionKind {protocol .SourceFixAll , protocol .QuickFix }},
174
- // other simplifiers:
175
- {analyzer : infertypeargs .Analyzer , enabled : true , severity : protocol .SeverityHint },
176
- {analyzer : unusedparams .Analyzer , enabled : true },
177
- {analyzer : unusedfunc .Analyzer , enabled : true },
178
- {analyzer : unusedwrite .Analyzer , enabled : true }, // uses go/ssa
166
+ // simplifiers and modernizers
167
+ //
168
+ // These analyzers offer mere style fixes on correct code,
169
+ // thus they will never appear in cmd/vet and
170
+ // their severity level is "information".
171
+ //
172
+ // gofmt -s suite
173
+ {
174
+ analyzer : simplifycompositelit .Analyzer ,
175
+ actionKinds : []protocol.CodeActionKind {protocol .SourceFixAll , protocol .QuickFix },
176
+ severity : protocol .SeverityInformation ,
177
+ },
178
+ {
179
+ analyzer : simplifyrange .Analyzer ,
180
+ actionKinds : []protocol.CodeActionKind {protocol .SourceFixAll , protocol .QuickFix },
181
+ severity : protocol .SeverityInformation ,
182
+ },
183
+ {
184
+ analyzer : simplifyslice .Analyzer ,
185
+ actionKinds : []protocol.CodeActionKind {protocol .SourceFixAll , protocol .QuickFix },
186
+ severity : protocol .SeverityInformation ,
187
+ },
188
+ // other simplifiers
189
+ {analyzer : infertypeargs .Analyzer , severity : protocol .SeverityInformation },
190
+ {analyzer : unusedparams .Analyzer , severity : protocol .SeverityInformation },
191
+ {analyzer : unusedfunc .Analyzer , severity : protocol .SeverityInformation },
192
+ {analyzer : unusedwrite .Analyzer , severity : protocol .SeverityInformation }, // uses go/ssa
193
+ {analyzer : modernize .Analyzer , severity : protocol .SeverityInformation },
179
194
180
195
// type-error analyzers
181
196
// These analyzers enrich go/types errors with suggested fixes.
182
- {analyzer : fillreturns .Analyzer , enabled : true },
183
- {analyzer : nonewvars .Analyzer , enabled : true },
184
- {analyzer : noresultvalues .Analyzer , enabled : true },
197
+ {analyzer : fillreturns .Analyzer },
198
+ {analyzer : nonewvars .Analyzer },
199
+ {analyzer : noresultvalues .Analyzer },
185
200
// TODO(rfindley): why isn't the 'unusedvariable' analyzer enabled, if it
186
201
// is only enhancing type errors with suggested fixes?
187
202
//
188
203
// In particular, enabling this analyzer could cause unused variables to be
189
204
// greyed out, (due to the 'deletions only' fix). That seems like a nice UI
190
205
// feature.
191
- {analyzer : unusedvariable .Analyzer , enabled : false },
206
+ {analyzer : unusedvariable .Analyzer , nonDefault : true },
192
207
}
193
208
for _ , analyzer := range analyzers {
194
209
DefaultAnalyzers [analyzer .analyzer .Name ] = analyzer
0 commit comments