Skip to content

Commit 2ad5c90

Browse files
adonovangopherbot
authored andcommitted
gopls/internal/settings: set severity=Info for modernizers
"Simplifiers and modernizers" make suggestions about perfectly correct code, so we downgrade their severity accordingly. Also, flip sense of enabled field to reduce boilerplate. Change-Id: If46040777f1840a505a814277e1e2b8f3340fccc Reviewed-on: https://go-review.googlesource.com/c/tools/+/640039 Auto-Submit: Alan Donovan <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Robert Findley <[email protected]>
1 parent 7c7f353 commit 2ad5c90

File tree

2 files changed

+80
-65
lines changed

2 files changed

+80
-65
lines changed

gopls/internal/settings/analysis.go

Lines changed: 77 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ import (
6969
// Analyzers are immutable, since they are shared across multiple LSP sessions.
7070
type Analyzer struct {
7171
analyzer *analysis.Analyzer
72-
enabled bool
72+
nonDefault bool
7373
actionKinds []protocol.CodeActionKind
7474
severity protocol.DiagnosticSeverity
7575
tags []protocol.DiagnosticTag
@@ -80,7 +80,7 @@ func (a *Analyzer) Analyzer() *analysis.Analyzer { return a.analyzer }
8080

8181
// EnabledByDefault reports whether the analyzer is enabled by default for all sessions.
8282
// 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 }
8484

8585
// ActionKinds is the set of kinds of code action this analyzer produces.
8686
//
@@ -109,86 +109,101 @@ func (a *Analyzer) String() string { return a.analyzer.String() }
109109
var DefaultAnalyzers = make(map[string]*Analyzer) // initialized below
110110

111111
func init() {
112-
// The traditional vet suite:
113112
analyzers := []*Analyzer{
114113
// 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},
149148

150149
// not suitable for vet:
151150
// - some (nilness, yield) use go/ssa; see #59714.
152151
// - others don't meet the "frequency" criterion;
153152
// 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]
164161

165162
// disabled due to high false positives
166-
{analyzer: shadow.Analyzer, enabled: false}, // very noisy
163+
{analyzer: shadow.Analyzer, nonDefault: true}, // very noisy
167164
// fieldalignment is not even off-by-default; see #67762.
168165

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},
179194

180195
// type-error analyzers
181196
// 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},
185200
// TODO(rfindley): why isn't the 'unusedvariable' analyzer enabled, if it
186201
// is only enhancing type errors with suggested fixes?
187202
//
188203
// In particular, enabling this analyzer could cause unused variables to be
189204
// greyed out, (due to the 'deletions only' fix). That seems like a nice UI
190205
// feature.
191-
{analyzer: unusedvariable.Analyzer, enabled: false},
206+
{analyzer: unusedvariable.Analyzer, nonDefault: true},
192207
}
193208
for _, analyzer := range analyzers {
194209
DefaultAnalyzers[analyzer.analyzer.Name] = analyzer

gopls/internal/settings/staticcheck.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,9 @@ func init() {
4343
}
4444

4545
StaticcheckAnalyzers[a.Analyzer.Name] = &Analyzer{
46-
analyzer: a.Analyzer,
47-
enabled: !a.Doc.NonDefault,
48-
severity: mapSeverity(a.Doc.Severity),
46+
analyzer: a.Analyzer,
47+
nonDefault: a.Doc.NonDefault,
48+
severity: mapSeverity(a.Doc.Severity),
4949
}
5050
}
5151
}

0 commit comments

Comments
 (0)