Skip to content

Commit ac76929

Browse files
committed
Restore conversion of raw documentation to plain text and Markdown
This fixes a regression introduced in 8643e6e. Closes: gh-1544
1 parent cc79ad0 commit ac76929

File tree

163 files changed

+186
-189
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

163 files changed

+186
-189
lines changed

add-check.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2929
Run: run,
3030
Requires: []*analysis.Analyzer{},
3131
},
32-
Doc: &lint.Documentation{
32+
Doc: &lint.RawDocumentation{
3333
Title: "",
3434
Text: {{.emptyRaw}},
3535
{{- if .quickfix }}

analysis/lint/lint.go

+17-21
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ type Analyzer struct {
1717
// The analyzer's documentation. Unlike go/analysis.Analyzer.Doc,
1818
// this field is structured, providing access to severity, options
1919
// etc.
20-
Doc *Documentation
20+
Doc *RawDocumentation
2121
Analyzer *analysis.Analyzer
2222
}
2323

2424
func InitializeAnalyzer(a *Analyzer) *Analyzer {
25-
a.Analyzer.Doc = a.Doc.String()
25+
a.Analyzer.Doc = a.Doc.Compile().String()
2626
a.Analyzer.URL = "https://staticcheck.dev/docs/checks/#" + a.Analyzer.Name
2727
a.Analyzer.Requires = append(a.Analyzer.Requires, tokenfile.Analyzer)
2828
return a
@@ -76,26 +76,22 @@ type Documentation struct {
7676
MergeIf MergeStrategy
7777
}
7878

79-
func Markdownify(m map[string]*RawDocumentation) map[string]*Documentation {
80-
out := make(map[string]*Documentation, len(m))
81-
for k, v := range m {
82-
out[k] = &Documentation{
83-
Title: strings.TrimSpace(stripMarkdown(v.Title)),
84-
Text: strings.TrimSpace(stripMarkdown(v.Text)),
85-
86-
TitleMarkdown: strings.TrimSpace(toMarkdown(v.Title)),
87-
TextMarkdown: strings.TrimSpace(toMarkdown(v.Text)),
88-
89-
Before: strings.TrimSpace(v.Before),
90-
After: strings.TrimSpace(v.After),
91-
Since: v.Since,
92-
NonDefault: v.NonDefault,
93-
Options: v.Options,
94-
Severity: v.Severity,
95-
MergeIf: v.MergeIf,
96-
}
79+
func (doc RawDocumentation) Compile() *Documentation {
80+
return &Documentation{
81+
Title: strings.TrimSpace(stripMarkdown(doc.Title)),
82+
Text: strings.TrimSpace(stripMarkdown(doc.Text)),
83+
84+
TitleMarkdown: strings.TrimSpace(toMarkdown(doc.Title)),
85+
TextMarkdown: strings.TrimSpace(toMarkdown(doc.Text)),
86+
87+
Before: strings.TrimSpace(doc.Before),
88+
After: strings.TrimSpace(doc.After),
89+
Since: doc.Since,
90+
NonDefault: doc.NonDefault,
91+
Options: doc.Options,
92+
Severity: doc.Severity,
93+
MergeIf: doc.MergeIf,
9794
}
98-
return out
9995
}
10096

10197
func toMarkdown(s string) string {

lintcmd/cmd.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ func (cmd *Command) AddBareAnalyzers(as ...*analysis.Analyzer) {
119119
text = a.Doc[idx+2:]
120120
}
121121

122-
doc := &lint.Documentation{
122+
doc := &lint.RawDocumentation{
123123
Title: title,
124124
Text: text,
125125
Severity: lint.SeverityWarning,
@@ -330,7 +330,7 @@ func (cmd *Command) listChecks() int {
330330
for _, c := range cs {
331331
var title string
332332
if c.Doc != nil {
333-
title = c.Doc.Title
333+
title = c.Doc.Compile().Title
334334
}
335335
fmt.Printf("%s %s\n", c.Analyzer.Name, title)
336336
}
@@ -353,7 +353,7 @@ func (cmd *Command) explain() int {
353353
fmt.Fprintln(os.Stderr, explain, "has no documentation")
354354
return 1
355355
}
356-
fmt.Println(check.Doc)
356+
fmt.Println(check.Doc.Compile())
357357
fmt.Println("Online documentation\n https://staticcheck.dev/docs/checks#" + check.Analyzer.Name)
358358
return 0
359359
}

lintcmd/sarif.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -251,27 +251,28 @@ func (o *sarifFormatter) Format(checks []*lint.Analyzer, diagnostics []diagnosti
251251
}},
252252
}
253253
for _, c := range checks {
254+
doc := c.Doc.Compile()
254255
run.Tool.Driver.Rules = append(run.Tool.Driver.Rules,
255256
sarif.ReportingDescriptor{
256257
// We don't set Name, as Name and ID mustn't be identical.
257258
ID: c.Analyzer.Name,
258259
ShortDescription: sarif.Message{
259-
Text: c.Doc.Title,
260-
Markdown: c.Doc.TitleMarkdown,
260+
Text: doc.Title,
261+
Markdown: doc.TitleMarkdown,
261262
},
262263
HelpURI: "https://staticcheck.dev/docs/checks#" + c.Analyzer.Name,
263264
// We use our markdown as the plain text version, too. We
264265
// use very little markdown, primarily quotations,
265266
// indented code blocks and backticks. All of these are
266267
// fine as plain text, too.
267268
Help: sarif.Message{
268-
Text: sarifFormatText(c.Doc.Format(false)),
269-
Markdown: sarifFormatText(c.Doc.FormatMarkdown(false)),
269+
Text: sarifFormatText(doc.Format(false)),
270+
Markdown: sarifFormatText(doc.FormatMarkdown(false)),
270271
},
271272
DefaultConfiguration: sarif.ReportingConfiguration{
272273
// TODO(dh): we could figure out which checks were disabled globally
273274
Enabled: true,
274-
Level: sarifLevel(c.Doc.Severity),
275+
Level: sarifLevel(doc.Severity),
275276
},
276277
})
277278
}

quickfix/qf1001/qf1001.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2121
Run: CheckDeMorgan,
2222
Requires: []*analysis.Analyzer{inspect.Analyzer},
2323
},
24-
Doc: &lint.Documentation{
24+
Doc: &lint.RawDocumentation{
2525
Title: "Apply De Morgan's law",
2626
Since: "2021.1",
2727
Severity: lint.SeverityHint,

quickfix/qf1002/qf1002.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2222
Run: run,
2323
Requires: []*analysis.Analyzer{inspect.Analyzer},
2424
},
25-
Doc: &lint.Documentation{
25+
Doc: &lint.RawDocumentation{
2626
Title: "Convert untagged switch to tagged switch",
2727
Text: `
2828
An untagged switch that compares a single variable against a series of

quickfix/qf1003/qf1003.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2222
Run: run,
2323
Requires: []*analysis.Analyzer{inspect.Analyzer},
2424
},
25-
Doc: &lint.Documentation{
25+
Doc: &lint.RawDocumentation{
2626
Title: "Convert if/else-if chain to tagged switch",
2727
Text: `
2828
A series of if/else-if checks comparing the same variable against

quickfix/qf1004/qf1004.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2222
Run: run,
2323
Requires: []*analysis.Analyzer{inspect.Analyzer},
2424
},
25-
Doc: &lint.Documentation{
25+
Doc: &lint.RawDocumentation{
2626
Title: `Use \'strings.ReplaceAll\' instead of \'strings.Replace\' with \'n == -1\'`,
2727
Since: "2021.1",
2828
Severity: lint.SeverityHint,

quickfix/qf1005/qf1005.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2323
Run: run,
2424
Requires: []*analysis.Analyzer{inspect.Analyzer},
2525
},
26-
Doc: &lint.Documentation{
26+
Doc: &lint.RawDocumentation{
2727
Title: `Expand call to \'math.Pow\'`,
2828
Text: `Some uses of \'math.Pow\' can be simplified to basic multiplication.`,
2929
Before: `math.Pow(x, 2)`,

quickfix/qf1006/qf1006.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2121
Run: run,
2222
Requires: []*analysis.Analyzer{inspect.Analyzer},
2323
},
24-
Doc: &lint.Documentation{
24+
Doc: &lint.RawDocumentation{
2525
Title: `Lift \'if\'+\'break\' into loop condition`,
2626
Before: `
2727
for {

quickfix/qf1007/qf1007.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2020
Run: run,
2121
Requires: []*analysis.Analyzer{inspect.Analyzer},
2222
},
23-
Doc: &lint.Documentation{
23+
Doc: &lint.RawDocumentation{
2424
Title: "Merge conditional assignment into variable declaration",
2525
Before: `
2626
x := false

quickfix/qf1008/qf1008.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2121
Run: run,
2222
Requires: []*analysis.Analyzer{inspect.Analyzer},
2323
},
24-
Doc: &lint.Documentation{
24+
Doc: &lint.RawDocumentation{
2525
Title: "Omit embedded fields from selector expression",
2626
Since: "2021.1",
2727
Severity: lint.SeverityHint,

quickfix/qf1009/qf1009.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2020
Run: run,
2121
Requires: []*analysis.Analyzer{inspect.Analyzer},
2222
},
23-
Doc: &lint.Documentation{
23+
Doc: &lint.RawDocumentation{
2424
Title: `Use \'time.Time.Equal\' instead of \'==\' operator`,
2525
Since: "2021.1",
2626
Severity: lint.SeverityInfo,

quickfix/qf1010/qf1010.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2121
Run: run,
2222
Requires: []*analysis.Analyzer{inspect.Analyzer},
2323
},
24-
Doc: &lint.Documentation{
24+
Doc: &lint.RawDocumentation{
2525
Title: "Convert slice of bytes to string when printing it",
2626
Since: "2021.1",
2727
Severity: lint.SeverityHint,

quickfix/qf1011/qf1011.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ func init() {
1111

1212
var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
1313
Analyzer: sharedcheck.RedundantTypeInDeclarationChecker("could", true),
14-
Doc: &lint.Documentation{
14+
Doc: &lint.RawDocumentation{
1515
Title: "Omit redundant type from variable declaration",
1616
Since: "2021.1",
1717
Severity: lint.SeverityHint,

quickfix/qf1012/qf1012.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2323
Run: run,
2424
Requires: []*analysis.Analyzer{inspect.Analyzer},
2525
},
26-
Doc: &lint.Documentation{
26+
Doc: &lint.RawDocumentation{
2727
Title: `Use \'fmt.Fprintf(x, ...)\' instead of \'x.Write(fmt.Sprintf(...))\'`,
2828
Since: "2022.1",
2929
Severity: lint.SeverityHint,

simple/s1000/s1000.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
1919
Run: run,
2020
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2121
},
22-
Doc: &lint.Documentation{
22+
Doc: &lint.RawDocumentation{
2323
Title: `Use plain channel send or receive instead of single-case select`,
2424
Text: `Select statements with a single case can be replaced with a simple
2525
send or receive.`,

simple/s1001/s1001.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2323
Run: run,
2424
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2525
},
26-
Doc: &lint.Documentation{
26+
Doc: &lint.RawDocumentation{
2727
Title: `Replace for loop with call to copy`,
2828
Text: `
2929
Use \'copy()\' for copying elements from one slice to another. For

simple/s1002/s1002.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2424
Run: run,
2525
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2626
},
27-
Doc: &lint.Documentation{
27+
Doc: &lint.RawDocumentation{
2828
Title: `Omit comparison with boolean constant`,
2929
Before: `if x == true {}`,
3030
After: `if x {}`,

simple/s1003/s1003.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2121
Run: run,
2222
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2323
},
24-
Doc: &lint.Documentation{
24+
Doc: &lint.RawDocumentation{
2525
Title: `Replace call to \'strings.Index\' with \'strings.Contains\'`,
2626
Before: `if strings.Index(x, y) != -1 {}`,
2727
After: `if strings.Contains(x, y) {}`,

simple/s1004/s1004.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2222
Run: CheckBytesCompare,
2323
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2424
},
25-
Doc: &lint.Documentation{
25+
Doc: &lint.RawDocumentation{
2626
Title: `Replace call to \'bytes.Compare\' with \'bytes.Equal\'`,
2727
Before: `if bytes.Compare(x, y) == 0 {}`,
2828
After: `if bytes.Equal(x, y) {}`,

simple/s1005/s1005.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2222
Run: run,
2323
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2424
},
25-
Doc: &lint.Documentation{
25+
Doc: &lint.RawDocumentation{
2626
Title: `Drop unnecessary use of the blank identifier`,
2727
Text: `In many cases, assigning to the blank identifier is unnecessary.`,
2828
Before: `

simple/s1006/s1006.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
1818
Run: run,
1919
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2020
},
21-
Doc: &lint.Documentation{
21+
Doc: &lint.RawDocumentation{
2222
Title: `Use \"for { ... }\" for infinite loops`,
2323
Text: `For infinite loops, using \'for { ... }\' is the most idiomatic choice.`,
2424
Since: "2017.1",

simple/s1007/s1007.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2222
Run: run,
2323
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2424
},
25-
Doc: &lint.Documentation{
25+
Doc: &lint.RawDocumentation{
2626
Title: `Simplify regular expression by using raw string literal`,
2727
Text: `Raw string literals use backticks instead of quotation marks and do not support
2828
any escape sequences. This means that the backslash can be used

simple/s1008/s1008.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2222
Run: run,
2323
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2424
},
25-
Doc: &lint.Documentation{
25+
Doc: &lint.RawDocumentation{
2626
Title: `Simplify returning boolean expression`,
2727
Before: `
2828
if <expr> {

simple/s1009/s1009.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2424
Run: run,
2525
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2626
},
27-
Doc: &lint.Documentation{
27+
Doc: &lint.RawDocumentation{
2828
Title: `Omit redundant nil check on slices`,
2929
Text: `The \'len\' function is defined for all slices, even nil ones, which have
3030
a length of zero. It is not necessary to check if a slice is not nil

simple/s1010/s1010.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2020
Run: run,
2121
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2222
},
23-
Doc: &lint.Documentation{
23+
Doc: &lint.RawDocumentation{
2424
Title: `Omit default slice index`,
2525
Text: `When slicing, the second index defaults to the length of the value,
2626
making \'s[n:len(s)]\' and \'s[n:]\' equivalent.`,

simple/s1011/s1011.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2424
Run: run,
2525
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer, purity.Analyzer},
2626
},
27-
Doc: &lint.Documentation{
27+
Doc: &lint.RawDocumentation{
2828
Title: `Use a single \'append\' to concatenate two slices`,
2929
Before: `
3030
for _, e := range y {

simple/s1012/s1012.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2020
Run: run,
2121
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2222
},
23-
Doc: &lint.Documentation{
23+
Doc: &lint.RawDocumentation{
2424
Title: `Replace \'time.Now().Sub(x)\' with \'time.Since(x)\'`,
2525
Text: `The \'time.Since\' helper has the same effect as using \'time.Now().Sub(x)\'
2626
but is easier to read.`,

simple/s1016/s1016.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2323
Run: run,
2424
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2525
},
26-
Doc: &lint.Documentation{
26+
Doc: &lint.RawDocumentation{
2727
Title: `Use a type conversion instead of manually copying struct fields`,
2828
Text: `Two struct types with identical fields can be converted between each
2929
other. In older versions of Go, the fields had to have identical

simple/s1017/s1017.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2323
Run: run,
2424
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2525
},
26-
Doc: &lint.Documentation{
26+
Doc: &lint.RawDocumentation{
2727
Title: `Replace manual trimming with \'strings.TrimPrefix\'`,
2828
Text: `Instead of using \'strings.HasPrefix\' and manual slicing, use the
2929
\'strings.TrimPrefix\' function. If the string doesn't start with the

simple/s1018/s1018.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2121
Run: run,
2222
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2323
},
24-
Doc: &lint.Documentation{
24+
Doc: &lint.RawDocumentation{
2525
Title: `Use \"copy\" for sliding elements`,
2626
Text: `\'copy()\' permits using the same source and destination slice, even with
2727
overlapping ranges. This makes it ideal for sliding elements in a

simple/s1019/s1019.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2323
Run: run,
2424
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2525
},
26-
Doc: &lint.Documentation{
26+
Doc: &lint.RawDocumentation{
2727
Title: `Simplify \"make\" call by omitting redundant arguments`,
2828
Text: `The \"make\" function has default values for the length and capacity
2929
arguments. For channels, the length defaults to zero, and for slices,

simple/s1020/s1020.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var SCAnalyzer = lint.InitializeAnalyzer(&lint.Analyzer{
2121
Run: run,
2222
Requires: []*analysis.Analyzer{inspect.Analyzer, generated.Analyzer},
2323
},
24-
Doc: &lint.Documentation{
24+
Doc: &lint.RawDocumentation{
2525
Title: `Omit redundant nil check in type assertion`,
2626
Before: `if _, ok := i.(T); ok && i != nil {}`,
2727
After: `if _, ok := i.(T); ok {}`,

0 commit comments

Comments
 (0)