forked from golangci/golangci-lint
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhelp_formatters.go
123 lines (96 loc) · 2.68 KB
/
help_formatters.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package commands
import (
"encoding/json"
"fmt"
"slices"
"strings"
"github.com/fatih/color"
"github.com/spf13/cobra"
"github.com/golangci/golangci-lint/v2/pkg/config"
"github.com/golangci/golangci-lint/v2/pkg/goformatters"
"github.com/golangci/golangci-lint/v2/pkg/lint/linter"
"github.com/golangci/golangci-lint/v2/pkg/lint/lintersdb"
"github.com/golangci/golangci-lint/v2/pkg/logutils"
)
type formatterHelp struct {
Name string `json:"name"`
Desc string `json:"description"`
Deprecated bool `json:"deprecated"`
Since string `json:"since"`
OriginalURL string `json:"originalURL,omitempty"`
}
func newFormatterHelp(lc *linter.Config) formatterHelp {
return formatterHelp{
Name: lc.Name(),
Desc: formatDescription(lc.Linter.Desc()),
Deprecated: lc.IsDeprecated(),
Since: lc.Since,
OriginalURL: lc.OriginalURL,
}
}
func (c *helpCommand) formattersPreRunE(_ *cobra.Command, _ []string) error {
// The command doesn't depend on the real configuration.
dbManager, err := lintersdb.NewManager(c.log.Child(logutils.DebugKeyLintersDB), config.NewDefault(), lintersdb.NewLinterBuilder())
if err != nil {
return err
}
c.dbManager = dbManager
return nil
}
func (c *helpCommand) formattersExecute(_ *cobra.Command, _ []string) error {
if c.opts.JSON {
return c.formattersPrintJSON()
}
c.formattersPrint()
return nil
}
func (c *helpCommand) formattersPrintJSON() error {
var formatters []formatterHelp
for _, lc := range c.dbManager.GetAllSupportedLinterConfigs() {
if lc.Internal {
continue
}
if !goformatters.IsFormatter(lc.Name()) {
continue
}
formatters = append(formatters, newFormatterHelp(lc))
}
return json.NewEncoder(c.cmd.OutOrStdout()).Encode(formatters)
}
func (c *helpCommand) formattersPrint() {
var lcs []*linter.Config
for _, lc := range c.dbManager.GetAllSupportedLinterConfigs() {
if lc.Internal {
continue
}
if !goformatters.IsFormatter(lc.Name()) {
continue
}
lcs = append(lcs, lc)
}
color.Green("Disabled by default formatters:\n")
printFormatters(lcs)
}
func printFormatters(lcs []*linter.Config) {
slices.SortFunc(lcs, func(a, b *linter.Config) int {
if a.IsDeprecated() && b.IsDeprecated() {
return strings.Compare(a.Name(), b.Name())
}
if a.IsDeprecated() {
return 1
}
if b.IsDeprecated() {
return -1
}
return strings.Compare(a.Name(), b.Name())
})
for _, lc := range lcs {
desc := formatDescription(lc.Linter.Desc())
deprecatedMark := ""
if lc.IsDeprecated() {
deprecatedMark = " [" + color.RedString("deprecated") + "]"
}
_, _ = fmt.Fprintf(logutils.StdOut, "%s%s: %s\n",
color.YellowString(lc.Name()), deprecatedMark, desc)
}
}