Skip to content

Commit 1e46b51

Browse files
committed
feat: rewrite dump_info
1 parent cc4a5aa commit 1e46b51

File tree

8 files changed

+288
-249
lines changed

8 files changed

+288
-249
lines changed

scripts/website/dump_info/cmd_help.go

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"fmt"
7+
"os"
8+
"os/exec"
9+
"slices"
10+
11+
"github.com/golangci/golangci-lint/v2/scripts/website/types"
12+
)
13+
14+
func saveCLIHelp(ctx context.Context, dst string) error {
15+
err := exec.CommandContext(ctx, "make", "build").Run()
16+
if err != nil {
17+
return fmt.Errorf("can't run make build: %w", err)
18+
}
19+
20+
lintersOut, err := exec.CommandContext(ctx, "./golangci-lint", "help", "linters").Output()
21+
if err != nil {
22+
return fmt.Errorf("can't run linters cmd: %w", err)
23+
}
24+
25+
lintersOutParts := bytes.Split(lintersOut, []byte("\n\n"))
26+
27+
data := types.CLIHelp{
28+
Enable: string(lintersOutParts[0]),
29+
}
30+
31+
data.RootCmdHelp, err = getCmdHelp(ctx)
32+
if err != nil {
33+
return err
34+
}
35+
36+
data.RunCmdHelp, err = getCmdHelp(ctx, "run")
37+
if err != nil {
38+
return err
39+
}
40+
41+
data.LintersCmdHelp, err = getCmdHelp(ctx, "linters")
42+
if err != nil {
43+
return err
44+
}
45+
46+
data.FmtCmdHelp, err = getCmdHelp(ctx, "fmt")
47+
if err != nil {
48+
return err
49+
}
50+
51+
data.FormattersCmdHelp, err = getCmdHelp(ctx, "formatters")
52+
if err != nil {
53+
return err
54+
}
55+
56+
data.HelpCmdHelp, err = getCmdHelp(ctx, "help")
57+
if err != nil {
58+
return err
59+
}
60+
61+
data.ConfigCmdHelp, err = getCmdHelp(ctx, "config")
62+
if err != nil {
63+
return err
64+
}
65+
66+
data.MigrateCmdHelp, err = getCmdHelp(ctx, "migrate")
67+
if err != nil {
68+
return err
69+
}
70+
71+
data.CustomCmdHelp, err = getCmdHelp(ctx, "custom")
72+
if err != nil {
73+
return err
74+
}
75+
76+
data.CacheCmdHelp, err = getCmdHelp(ctx, "cache")
77+
if err != nil {
78+
return err
79+
}
80+
81+
data.VersionCmdHelp, err = getCmdHelp(ctx, "version")
82+
if err != nil {
83+
return err
84+
}
85+
86+
data.CompletionCmdHelp, err = getCmdHelp(ctx, "completion")
87+
if err != nil {
88+
return err
89+
}
90+
91+
return saveToJSONFile(dst, data)
92+
}
93+
94+
func getCmdHelp(ctx context.Context, names ...string) (string, error) {
95+
args := slices.Clone(names)
96+
args = append(args, "--help")
97+
98+
helpCmd := exec.CommandContext(ctx, "./golangci-lint", args...)
99+
helpCmd.Env = append(helpCmd.Env, os.Environ()...)
100+
101+
help, err := helpCmd.Output()
102+
if err != nil {
103+
return "", fmt.Errorf("can't run help cmd: %w", err)
104+
}
105+
106+
helpLines := bytes.Split(help, []byte("\n"))
107+
shortHelp := bytes.Join(helpLines[2:], []byte("\n"))
108+
109+
return string(shortHelp), nil
110+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package main
2+
3+
import (
4+
"github.com/golangci/golangci-lint/v2/pkg/result/processors"
5+
"github.com/golangci/golangci-lint/v2/scripts/website/types"
6+
)
7+
8+
func saveDefaultExclusions(dst string) error {
9+
data := make(map[string][]types.ExcludeRule)
10+
11+
for name, rules := range processors.LinterExclusionPresets {
12+
for _, rule := range rules {
13+
data[name] = append(data[name], types.ExcludeRule{
14+
Linters: rule.Linters,
15+
Path: rule.Path,
16+
PathExcept: rule.PathExcept,
17+
Text: rule.Text,
18+
Source: rule.Source,
19+
})
20+
}
21+
}
22+
23+
return saveToJSONFile(dst, data)
24+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package main
2+
3+
import (
4+
"maps"
5+
"slices"
6+
7+
"github.com/golangci/golangci-lint/v2/pkg/config"
8+
"github.com/golangci/golangci-lint/v2/pkg/goformatters"
9+
"github.com/golangci/golangci-lint/v2/pkg/lint/linter"
10+
"github.com/golangci/golangci-lint/v2/pkg/lint/lintersdb"
11+
"github.com/golangci/golangci-lint/v2/scripts/website/types"
12+
)
13+
14+
func saveFormatters(dst string) error {
15+
linters, _ := lintersdb.NewLinterBuilder().Build(config.NewDefault())
16+
17+
var wraps []types.LinterWrapper
18+
for _, l := range linters {
19+
if l.IsDeprecated() && l.Deprecation.Level > linter.DeprecationWarning {
20+
continue
21+
}
22+
23+
if !goformatters.IsFormatter(l.Name()) {
24+
continue
25+
}
26+
27+
wrapper := types.LinterWrapper{
28+
Name: l.Linter.Name(),
29+
Desc: l.Linter.Desc(),
30+
Groups: slices.AppendSeq(make([]string, 0, len(l.Groups)), maps.Keys(l.Groups)),
31+
LoadMode: l.LoadMode,
32+
AlternativeNames: l.AlternativeNames,
33+
OriginalURL: l.OriginalURL,
34+
Internal: l.Internal,
35+
CanAutoFix: l.CanAutoFix,
36+
IsSlow: l.IsSlow,
37+
DoesChangeTypes: l.DoesChangeTypes,
38+
Since: l.Since,
39+
}
40+
41+
if l.Deprecation != nil {
42+
wrapper.Deprecation = &types.Deprecation{
43+
Since: l.Deprecation.Since,
44+
Message: l.Deprecation.Message,
45+
Replacement: l.Deprecation.Replacement,
46+
}
47+
}
48+
49+
wraps = append(wraps, wrapper)
50+
}
51+
52+
return saveToJSONFile(dst, wraps)
53+
}

scripts/website/dump_info/linters.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package main
2+
3+
import (
4+
"maps"
5+
"slices"
6+
7+
"github.com/golangci/golangci-lint/v2/pkg/config"
8+
"github.com/golangci/golangci-lint/v2/pkg/goformatters"
9+
"github.com/golangci/golangci-lint/v2/pkg/lint/linter"
10+
"github.com/golangci/golangci-lint/v2/pkg/lint/lintersdb"
11+
"github.com/golangci/golangci-lint/v2/scripts/website/types"
12+
)
13+
14+
func saveLinters(dst string) error {
15+
linters, _ := lintersdb.NewLinterBuilder().Build(config.NewDefault())
16+
17+
var wraps []types.LinterWrapper
18+
for _, l := range linters {
19+
if l.IsDeprecated() && l.Deprecation.Level > linter.DeprecationWarning {
20+
continue
21+
}
22+
23+
if goformatters.IsFormatter(l.Name()) {
24+
continue
25+
}
26+
27+
wrapper := types.LinterWrapper{
28+
Name: l.Linter.Name(),
29+
Desc: l.Linter.Desc(),
30+
Groups: slices.AppendSeq(make([]string, 0, len(l.Groups)), maps.Keys(l.Groups)),
31+
LoadMode: l.LoadMode,
32+
AlternativeNames: l.AlternativeNames,
33+
OriginalURL: l.OriginalURL,
34+
Internal: l.Internal,
35+
CanAutoFix: l.CanAutoFix,
36+
IsSlow: l.IsSlow,
37+
DoesChangeTypes: l.DoesChangeTypes,
38+
Since: l.Since,
39+
}
40+
41+
if l.Deprecation != nil {
42+
wrapper.Deprecation = &types.Deprecation{
43+
Since: l.Deprecation.Since,
44+
Message: l.Deprecation.Message,
45+
Replacement: l.Deprecation.Replacement,
46+
}
47+
}
48+
49+
wraps = append(wraps, wrapper)
50+
}
51+
52+
return saveToJSONFile(dst, wraps)
53+
}

0 commit comments

Comments
 (0)