diff --git a/.golangci.yml b/.golangci.yml index dd401e0f26f4..c326529f35be 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -171,6 +171,17 @@ linters: linters: [gosec] text: "G306: Expect WriteFile permissions to be 0600 or less" + # Related to migration command. + - path: pkg/commands/internal/migrate/two/ + linters: + - lll + + # Related to migration command. + - path: pkg/commands/internal/migrate/ + linters: + - gocritic + text: "hugeParam:" + formatters: enable: - gofmt diff --git a/Makefile b/Makefile index 911465f4e2da..837f10a5211d 100644 --- a/Makefile +++ b/Makefile @@ -60,6 +60,11 @@ fast_check_generated: git checkout -- go.mod go.sum # can differ between go1.16 and go1.17 git diff --exit-code # check no changes +# Migration + +clone_config: + go run ./pkg/commands/internal/migrate/cloner/ + # Benchmark # Benchmark with a local version diff --git a/pkg/commands/internal/migrate/cloner/cloner.go b/pkg/commands/internal/migrate/cloner/cloner.go new file mode 100644 index 000000000000..9c2400bc69b1 --- /dev/null +++ b/pkg/commands/internal/migrate/cloner/cloner.go @@ -0,0 +1,195 @@ +package main + +import ( + "bytes" + "fmt" + "go/ast" + "go/parser" + "go/printer" + "go/token" + "log" + "os" + "path/filepath" + "reflect" + "strings" + + "golang.org/x/tools/imports" +) + +const newPkgName = "versiontwo" + +const ( + srcDir = "./pkg/config" + dstDir = "./pkg/commands/internal/migrate/versiontwo" +) + +func main() { + stat, err := os.Stat(srcDir) + if err != nil { + log.Fatal(err) + } + + if !stat.IsDir() { + log.Fatalf("%s is not a directory", srcDir) + } + + _ = os.RemoveAll(dstDir) + + err = processPackage(srcDir, dstDir) + if err != nil { + log.Fatalf("Processing package error: %v", err) + } +} + +func processPackage(srcDir, dstDir string) error { + return filepath.Walk(srcDir, func(srcPath string, _ os.FileInfo, err error) error { + if err != nil { + return err + } + + if skipFile(srcPath) { + return nil + } + + fset := token.NewFileSet() + + file, err := parser.ParseFile(fset, srcPath, nil, parser.AllErrors) + if err != nil { + return fmt.Errorf("parsing %s: %w", srcPath, err) + } + + processFile(file) + + return writeNewFile(fset, file, srcPath, dstDir) + }) +} + +func skipFile(path string) bool { + if !strings.HasSuffix(path, ".go") || strings.HasSuffix(path, "_test.go") { + return true + } + + switch filepath.Base(path) { + case "base_loader.go", "loader.go": + return true + default: + return false + } +} + +func processFile(file *ast.File) { + file.Name.Name = newPkgName + + var newDecls []ast.Decl + for _, decl := range file.Decls { + d, ok := decl.(*ast.GenDecl) + if !ok { + continue + } + + switch d.Tok { + case token.CONST, token.VAR: + continue + case token.TYPE: + for _, spec := range d.Specs { + typeSpec, ok := spec.(*ast.TypeSpec) + if !ok { + continue + } + + structType, ok := typeSpec.Type.(*ast.StructType) + if !ok { + continue + } + + processStructFields(structType) + } + default: + // noop + } + + newDecls = append(newDecls, decl) + } + + file.Decls = newDecls +} + +func processStructFields(structType *ast.StructType) { + var newFields []*ast.Field + + for _, field := range structType.Fields.List { + if len(field.Names) > 0 && !field.Names[0].IsExported() { + continue + } + + if field.Tag == nil { + continue + } + + field.Type = convertType(field.Type) + field.Tag.Value = convertStructTag(field.Tag.Value) + + newFields = append(newFields, field) + } + + structType.Fields.List = newFields +} + +func convertType(expr ast.Expr) ast.Expr { + ident, ok := expr.(*ast.Ident) + if !ok { + return expr + } + + switch ident.Name { + case "bool", "string", "int", "int8", "int16", "int32", "int64", "float32", "float64": + return &ast.StarExpr{X: ident} + + default: + return expr + } +} + +func convertStructTag(value string) string { + structTag := reflect.StructTag(strings.Trim(value, "`")) + + key := structTag.Get("mapstructure") + + if key == ",squash" { + return wrapStructTag(`yaml:",inline"`) + } + + return wrapStructTag(fmt.Sprintf(`yaml:"%[1]s,omitempty" toml:"%[1]s,multiline,omitempty"`, key)) +} + +func wrapStructTag(s string) string { + return "`" + s + "`" +} + +func writeNewFile(fset *token.FileSet, file *ast.File, srcPath, dstDir string) error { + var buf bytes.Buffer + + buf.WriteString("// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT.\n\n") + + err := printer.Fprint(&buf, fset, file) + if err != nil { + return fmt.Errorf("printing %s: %w", srcPath, err) + } + + dstPath := filepath.Join(dstDir, filepath.Base(srcPath)) + + _ = os.MkdirAll(filepath.Dir(dstPath), os.ModePerm) + + formatted, err := imports.Process(dstPath, buf.Bytes(), nil) + if err != nil { + return fmt.Errorf("formatting %s: %w", dstPath, err) + } + + //nolint:gosec,mnd // The permission is right. + err = os.WriteFile(dstPath, formatted, 0o644) + if err != nil { + return fmt.Errorf("writing file %s: %w", dstPath, err) + } + + return nil +} diff --git a/pkg/commands/internal/migrate/fakeloader/config.go b/pkg/commands/internal/migrate/fakeloader/config.go new file mode 100644 index 000000000000..159f4cba00e8 --- /dev/null +++ b/pkg/commands/internal/migrate/fakeloader/config.go @@ -0,0 +1,22 @@ +package fakeloader + +// Config implements [config.BaseConfig]. +// This only the stub for the real file loader. +type Config struct { + Version string `mapstructure:"version"` + + cfgDir string // Path to the directory containing golangci-lint config file. +} + +func NewConfig() *Config { + return &Config{} +} + +// SetConfigDir sets the path to directory that contains golangci-lint config file. +func (c *Config) SetConfigDir(dir string) { + c.cfgDir = dir +} + +func (*Config) IsInternalTest() bool { + return false +} diff --git a/pkg/commands/internal/migrate/fakeloader/fakeloader.go b/pkg/commands/internal/migrate/fakeloader/fakeloader.go new file mode 100644 index 000000000000..d1e718478136 --- /dev/null +++ b/pkg/commands/internal/migrate/fakeloader/fakeloader.go @@ -0,0 +1,48 @@ +package fakeloader + +import ( + "fmt" + "os" + + "github.com/go-viper/mapstructure/v2" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/parser" + "github.com/golangci/golangci-lint/pkg/config" +) + +// Load is used to keep case of configuration. +// Viper serialize raw map keys in lowercase, this is a problem with the configuration of some linters. +func Load(srcPath string, old any) error { + file, err := os.Open(srcPath) + if err != nil { + return fmt.Errorf("open file: %w", err) + } + + defer func() { _ = file.Close() }() + + raw := map[string]any{} + + err = parser.Decode(file, raw) + if err != nil { + return err + } + + // NOTE: this is inspired by viper internals. + cc := &mapstructure.DecoderConfig{ + Result: old, + WeaklyTypedInput: true, + DecodeHook: config.DecodeHookFunc(), + } + + decoder, err := mapstructure.NewDecoder(cc) + if err != nil { + return fmt.Errorf("constructing mapstructure decoder: %w", err) + } + + err = decoder.Decode(raw) + if err != nil { + return fmt.Errorf("decoding configuration file: %w", err) + } + + return nil +} diff --git a/pkg/commands/internal/migrate/migrate.go b/pkg/commands/internal/migrate/migrate.go new file mode 100644 index 000000000000..a1d01081ba0a --- /dev/null +++ b/pkg/commands/internal/migrate/migrate.go @@ -0,0 +1,19 @@ +package migrate + +import ( + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versiontwo" +) + +func ToConfig(old *versionone.Config) *versiontwo.Config { + return &versiontwo.Config{ + Version: ptr.Pointer("2"), + Linters: toLinters(old), + Formatters: toFormatters(old), + Issues: toIssues(old), + Output: toOutput(old), + Severity: toSeverity(old), + Run: toRun(old), + } +} diff --git a/pkg/commands/internal/migrate/migrate_formatters.go b/pkg/commands/internal/migrate/migrate_formatters.go new file mode 100644 index 000000000000..b2b22ac52069 --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_formatters.go @@ -0,0 +1,105 @@ +package migrate + +import ( + "slices" + "strings" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versiontwo" +) + +func toFormatters(old *versionone.Config) versiontwo.Formatters { + enable := ProcessEffectiveFormatters(old.Linters) + + var paths []string + if len(enable) > 0 { + paths = slices.Concat(old.Issues.ExcludeFiles, old.Issues.ExcludeDirs) + } + + if old.Issues.UseDefaultExcludeDirs == nil || ptr.Deref(old.Issues.UseDefaultExcludeDirs) { + paths = append(paths, "examples$") + } + + paths = append(paths, toFormattersPathsFromRules(old.Issues)...) + + return versiontwo.Formatters{ + Enable: enable, + Settings: versiontwo.FormatterSettings{ + Gci: toGciSettings(old.LintersSettings.Gci), + GoFmt: toGoFmtSettings(old.LintersSettings.GoFmt), + GoFumpt: toGoFumptSettings(old.LintersSettings.GoFumpt), + GoImports: toGoImportsSettings(old.LintersSettings.GoImports), + }, + Exclusions: versiontwo.FormatterExclusions{ + Generated: toExclusionGenerated(old.Issues.ExcludeGenerated), + Paths: paths, + }, + } +} + +func toFormattersPathsFromRules(old versionone.Issues) []string { + var results []string + + for _, rule := range old.ExcludeRules { + allNames := convertStaticcheckLinterNames(convertAlternativeNames(rule.Linters)) + + names := onlyFormatterNames(allNames) + if len(names) == 0 { + continue + } + + if ptr.Deref(rule.Path) == "" { + continue + } + + results = append(results, ptr.Deref(rule.Path)) + } + + return results +} + +func toGciSettings(old versionone.GciSettings) versiontwo.GciSettings { + return versiontwo.GciSettings{ + Sections: old.Sections, + NoInlineComments: old.NoInlineComments, + NoPrefixComments: old.NoPrefixComments, + CustomOrder: old.CustomOrder, + NoLexOrder: old.NoLexOrder, + } +} + +func toGoFmtSettings(old versionone.GoFmtSettings) versiontwo.GoFmtSettings { + settings := versiontwo.GoFmtSettings{ + Simplify: old.Simplify, + } + + for _, rule := range old.RewriteRules { + settings.RewriteRules = append(settings.RewriteRules, versiontwo.GoFmtRewriteRule{ + Pattern: rule.Pattern, + Replacement: rule.Replacement, + }) + } + + return settings +} + +func toGoFumptSettings(old versionone.GoFumptSettings) versiontwo.GoFumptSettings { + return versiontwo.GoFumptSettings{ + ModulePath: old.ModulePath, + ExtraRules: old.ExtraRules, + } +} + +func toGoImportsSettings(old versionone.GoImportsSettings) versiontwo.GoImportsSettings { + var localPrefixes []string + + prefixes := ptr.Deref(old.LocalPrefixes) + if prefixes != "" { + localPrefixes = strings.Split(prefixes, ",") + } + + return versiontwo.GoImportsSettings{ + LocalPrefixes: localPrefixes, + } +} diff --git a/pkg/commands/internal/migrate/migrate_issues.go b/pkg/commands/internal/migrate/migrate_issues.go new file mode 100644 index 000000000000..31c9aacd1f55 --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_issues.go @@ -0,0 +1,20 @@ +package migrate + +import ( + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versiontwo" +) + +func toIssues(old *versionone.Config) versiontwo.Issues { + return versiontwo.Issues{ + MaxIssuesPerLinter: old.Issues.MaxIssuesPerLinter, + MaxSameIssues: old.Issues.MaxSameIssues, + UniqByLine: old.Issues.UniqByLine, + DiffFromRevision: old.Issues.DiffFromRevision, + DiffFromMergeBase: old.Issues.DiffFromMergeBase, + DiffPatchFilePath: old.Issues.DiffPatchFilePath, + WholeFiles: old.Issues.WholeFiles, + Diff: old.Issues.Diff, + NeedFix: old.Issues.NeedFix, + } +} diff --git a/pkg/commands/internal/migrate/migrate_linter_names.go b/pkg/commands/internal/migrate/migrate_linter_names.go new file mode 100644 index 000000000000..eb075d2073a7 --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_linter_names.go @@ -0,0 +1,951 @@ +package migrate + +import ( + "cmp" + "slices" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" +) + +type LinterInfo struct { + Name string `json:"name"` + Presets []string `json:"inPresets"` + Slow bool `json:"isSlow,omitempty"` + Default bool `json:"enabledByDefault,omitempty"` + AlternativeNames []string `json:"alternativeNames,omitempty"` +} + +func (l *LinterInfo) isName(name string) bool { + if name == l.Name { + return true + } + + return slices.Contains(l.AlternativeNames, name) +} + +func (l *LinterInfo) hasPresets(names []string) bool { + for _, name := range names { + if slices.Contains(l.Presets, name) { + return true + } + } + + return false +} + +func ProcessEffectiveLinters(old versionone.Linters) (enable, disable []string) { + switch { + case ptr.Deref(old.DisableAll): + return disableAllFilter(old), nil + + case ptr.Deref(old.EnableAll): + return nil, enableAllFilter(old) + + default: + return defaultLintersFilter(old) + } +} + +func ProcessEffectiveFormatters(old versionone.Linters) []string { + enabled, disabled := ProcessEffectiveLinters(old) + + if ptr.Deref(old.EnableAll) { + var formatterNames []string + + for _, f := range getAllFormatterNames() { + if !slices.Contains(disabled, f) { + formatterNames = append(formatterNames, f) + } + } + + return formatterNames + } + + return onlyFormatterNames(enabled) +} + +// disableAllFilter generates the value of `enable` when `disable-all` is `true`. +func disableAllFilter(old versionone.Linters) []string { + // Note: + // - disable-all + enable-all + // => impossible (https://github.com/golangci/golangci-lint/blob/e1eb4cb2c7fba29b5831b63e454844d83c692874/pkg/config/linters.go#L38) + // - disable-all + disable + // => impossible (https://github.com/golangci/golangci-lint/blob/e1eb4cb2c7fba29b5831b63e454844d83c692874/pkg/config/linters.go#L47) + + // if disable-all -> presets fast enable + // - presets fast enable: (presets - [slow]) + enable => effective enable + none + // - presets fast: presets - slow => effective enable + none + // - presets fast enable: presets + enable => effective enable + none + // - enable => effective enable + none + // - fast => nothing + // - fast enable: enable => effective enable + none + + // (presets - [slow]) + enable => effective enable + none + names := toNames( + slices.Concat( + filter( + allLinters(), onlyPresets(old), keepFast(old), // presets - [slow] + ), + allEnabled(old, allLinters()), // + enable + ), + ) + + return slices.Concat(names, unknownLinterNames(old.Enable, allLinters())) +} + +// enableAllFilter generates the value of `disable` when `enable-all` is `true`. +func enableAllFilter(old versionone.Linters) []string { + // Note: + // - enable-all + disable-all + // => impossible (https://github.com/golangci/golangci-lint/blob/e1eb4cb2c7fba29b5831b63e454844d83c692874/pkg/config/linters.go#L38) + // - enable-all + enable + fast=false + // => impossible (https://github.com/golangci/golangci-lint/blob/e1eb4cb2c7fba29b5831b63e454844d83c692874/pkg/config/linters.go#L52) + // - enable-all + enable + fast=true + // => possible (https://github.com/golangci/golangci-lint/blob/e1eb4cb2c7fba29b5831b63e454844d83c692874/pkg/config/linters.go#L51) + + // if enable-all -> presets fast enable disable + // - presets fast enable disable: all - fast - enable + disable => effective disable + all + // - presets fast disable: all - fast + disable => effective disable + all + // - presets fast: all - fast => effective disable + all + // - presets disable: disable => effective disable + all + // - disable => effective disable + all + // - fast: all - fast => effective disable + all + // - fast disable: all - fast + disable => effective disable + all + + // all - [fast] - enable + disable => effective disable + all + names := toNames( + slices.Concat( + removeLinters( + filter( + allLinters(), keepSlow(old), // all - fast + ), + allEnabled(old, allLinters()), // - enable + ), + allDisabled(old, allLinters()), // + disable + ), + ) + + return slices.Concat(names, unknownLinterNames(old.Disable, allLinters())) +} + +// defaultLintersFilter generates the values of `enable` and `disable` when using default linters. +func defaultLintersFilter(old versionone.Linters) (enable, disable []string) { + // Note: + // - a linter cannot be inside `enable` and `disable` in the same configuration + // => https://github.com/golangci/golangci-lint/blob/e1eb4cb2c7fba29b5831b63e454844d83c692874/pkg/config/linters.go#L66 + + // if default -> presets fast disable + // - presets > fast > disable > enable => effective enable + disable + standard + // - (default - fast) - enable + disable => effective disable + // - presets - slow + enable - default - [effective disable] => effective enable + // - presets + fast + disable => effective enable + disable + standard + // - (default - fast) + disable => effective disable + // - presets - slow - default - [effective disable] => effective enable + // - presets + fast + enable + // - (default - fast) - enable => effective disable + // - presets - slow + enable - default - [effective disable] => effective enable + // - presets + fast + // - (default - fast) => effective disable + // - presets - slow - default - [effective disable] => effective enable + // - presets + disable + // - default + disable => effective disable + // - presets - default - [effective disable] => effective enable + // - presets + enable + // - default - enable => effective disable + // - presets + enable - default - [effective disable] => effective enable + // - disable + // - default + disable => effective disable + // - default - [effective disable] => effective enable + // - enable + // - default - enable => effective disable + // - enable - default - [effective disable] => effective enable + // - fast + // - default - fast => effective disable + // - default - [effective disable] => effective enable + // - fast + disable + // - (default - fast) + disable => effective disable + // - default - [effective disable] => effective enable + // - fast + enable + // - (default - fast) - enable => effective disable + // - enable - default - [effective disable] => effective enable + + disabledLinters := defaultLintersDisableFilter(old) + + enabledLinters := defaultLintersEnableFilter(old, disabledLinters) + + enabled := toNames(enabledLinters) + disabled := toNames(disabledLinters) + + return slices.Concat(enabled, unknownLinterNames(old.Enable, allLinters())), + slices.Concat(disabled, unknownLinterNames(old.Disable, allLinters())) +} + +// defaultLintersEnableFilter generates the value of `enable` when using default linters. +func defaultLintersEnableFilter(old versionone.Linters, effectiveDisabled []LinterInfo) []LinterInfo { + // presets - slow + enable - default - [effective disable] => effective enable + return removeLinters( + filter( + slices.Concat( + filter( + allLinters(), onlyPresets(old), keepFast(old), // presets - slow + ), + allEnabled(old, allLinters()), // + enable + ), + notDefault, // - default + ), + effectiveDisabled, // - [effective disable] + ) +} + +// defaultLintersDisableFilter generates the value of `disable` when using default linters. +func defaultLintersDisableFilter(old versionone.Linters) []LinterInfo { + // (default - fast) - enable + disable => effective disable + return slices.Concat( + removeLinters( + filter(allLinters(), onlyDefault, keepSlow(old)), // (default - fast) + allEnabled(old, allLinters()), // - enable + ), + allDisabled(old, allLinters()), // + disable + ) +} + +func allLinters() []LinterInfo { + return []LinterInfo{ + { + Name: "asasalint", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "asciicheck", + Presets: []string{"bugs", "style"}, + }, + { + Name: "bidichk", + Presets: []string{"bugs"}, + }, + { + Name: "bodyclose", + Presets: []string{"performance", "bugs"}, + Slow: true, + }, + { + Name: "canonicalheader", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "containedctx", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "contextcheck", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "copyloopvar", + Presets: []string{"style"}, + }, + { + Name: "cyclop", + Presets: []string{"complexity"}, + }, + { + Name: "decorder", + Presets: []string{"style"}, + }, + { + Name: "depguard", + Presets: []string{"style", "import", "module"}, + }, + { + Name: "dogsled", + Presets: []string{"style"}, + }, + { + Name: "dupl", + Presets: []string{"style"}, + }, + { + Name: "dupword", + Presets: []string{"comment"}, + }, + { + Name: "durationcheck", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "errcheck", + Presets: []string{"bugs", "error"}, + Slow: true, + Default: true, + }, + { + Name: "errchkjson", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "errname", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "errorlint", + Presets: []string{"bugs", "error"}, + Slow: true, + }, + { + Name: "exhaustive", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "exhaustruct", + Presets: []string{"style", "test"}, + Slow: true, + }, + { + Name: "exptostd", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "forbidigo", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "forcetypeassert", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "fatcontext", + Presets: []string{"performance"}, + Slow: true, + }, + { + Name: "funlen", + Presets: []string{"complexity"}, + }, + { + Name: "gci", + Presets: []string{"format", "import"}, + }, + { + Name: "ginkgolinter", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "gocheckcompilerdirectives", + Presets: []string{"bugs"}, + }, + { + Name: "gochecknoglobals", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "gochecknoinits", + Presets: []string{"style"}, + }, + { + Name: "gochecksumtype", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "gocognit", + Presets: []string{"complexity"}, + }, + { + Name: "goconst", + Presets: []string{"style"}, + }, + { + Name: "gocritic", + Presets: []string{"style", "metalinter"}, + Slow: true, + }, + { + Name: "gocyclo", + Presets: []string{"complexity"}, + }, + { + Name: "godot", + Presets: []string{"style", "comment"}, + }, + { + Name: "godox", + Presets: []string{"style", "comment"}, + }, + { + Name: "err113", + Presets: []string{"style", "error"}, + Slow: true, + AlternativeNames: []string{"goerr113"}, + }, + { + Name: "gofmt", + Presets: []string{"format"}, + }, + { + Name: "gofumpt", + Presets: []string{"format"}, + }, + { + Name: "goheader", + Presets: []string{"style"}, + }, + { + Name: "goimports", + Presets: []string{"format", "import"}, + }, + { + Name: "mnd", + Presets: []string{"style"}, + AlternativeNames: []string{"gomnd"}, + }, + { + Name: "gomoddirectives", + Presets: []string{"style", "module"}, + }, + { + Name: "gomodguard", + Presets: []string{"style", "import", "module"}, + }, + { + Name: "goprintffuncname", + Presets: []string{"style"}, + }, + { + Name: "gosec", + Presets: []string{"bugs"}, + Slow: true, + AlternativeNames: []string{"gas"}, + }, + { + Name: "gosimple", + Presets: []string{"style"}, + Slow: true, + Default: true, + AlternativeNames: []string{"megacheck"}, + }, + { + Name: "gosmopolitan", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "govet", + Presets: []string{"bugs", "metalinter"}, + Slow: true, + Default: true, + AlternativeNames: []string{"vet", "vetshadow"}, + }, + { + Name: "grouper", + Presets: []string{"style"}, + }, + { + Name: "iface", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "importas", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "inamedparam", + Presets: []string{"style"}, + }, + { + Name: "ineffassign", + Presets: []string{"unused"}, + Default: true, + }, + { + Name: "interfacebloat", + Presets: []string{"style"}, + }, + { + Name: "intrange", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "ireturn", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "lll", + Presets: []string{"style"}, + }, + { + Name: "loggercheck", + Presets: []string{"style", "bugs"}, + Slow: true, + AlternativeNames: []string{"logrlint"}, + }, + { + Name: "maintidx", + Presets: []string{"complexity"}, + }, + { + Name: "makezero", + Presets: []string{"style", "bugs"}, + Slow: true, + }, + { + Name: "mirror", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "misspell", + Presets: []string{"style", "comment"}, + }, + { + Name: "musttag", + Presets: []string{"style", "bugs"}, + Slow: true, + }, + { + Name: "nakedret", + Presets: []string{"style"}, + }, + { + Name: "nestif", + Presets: []string{"complexity"}, + }, + { + Name: "nilerr", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "nilnesserr", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "nilnil", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "nlreturn", + Presets: []string{"style"}, + }, + { + Name: "noctx", + Presets: []string{"performance", "bugs"}, + Slow: true, + }, + { + Name: "nonamedreturns", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "nosprintfhostport", + Presets: []string{"style"}, + }, + { + Name: "paralleltest", + Presets: []string{"style", "test"}, + Slow: true, + }, + { + Name: "perfsprint", + Presets: []string{"performance"}, + Slow: true, + }, + { + Name: "prealloc", + Presets: []string{"performance"}, + }, + { + Name: "predeclared", + Presets: []string{"style"}, + }, + { + Name: "promlinter", + Presets: []string{"style"}, + }, + { + Name: "protogetter", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "reassign", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "recvcheck", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "revive", + Presets: []string{"style", "metalinter"}, + Slow: true, + }, + { + Name: "rowserrcheck", + Presets: []string{"bugs", "sql"}, + Slow: true, + }, + { + Name: "sloglint", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "sqlclosecheck", + Presets: []string{"bugs", "sql"}, + Slow: true, + }, + { + Name: "spancheck", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "staticcheck", + Presets: []string{"bugs", "metalinter"}, + Slow: true, + Default: true, + AlternativeNames: []string{"megacheck"}, + }, + { + Name: "stylecheck", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "tagalign", + Presets: []string{"style"}, + }, + { + Name: "tagliatelle", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "testableexamples", + Presets: []string{"test"}, + }, + { + Name: "testifylint", + Presets: []string{"test", "bugs"}, + Slow: true, + }, + { + Name: "testpackage", + Presets: []string{"style", "test"}, + }, + { + Name: "thelper", + Presets: []string{"test"}, + Slow: true, + }, + { + Name: "tparallel", + Presets: []string{"style", "test"}, + Slow: true, + }, + { + Name: "unconvert", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "unparam", + Presets: []string{"unused"}, + Slow: true, + }, + { + Name: "unused", + Presets: []string{"unused"}, + Slow: true, + Default: true, + AlternativeNames: []string{"megacheck"}, + }, + { + Name: "usestdlibvars", + Presets: []string{"style"}, + }, + { + Name: "usetesting", + Presets: []string{"test"}, + Slow: true, + }, + { + Name: "varnamelen", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "wastedassign", + Presets: []string{"style"}, + Slow: true, + }, + { + Name: "whitespace", + Presets: []string{"style"}, + }, + { + Name: "wrapcheck", + Presets: []string{"style", "error"}, + Slow: true, + }, + { + Name: "wsl", + Presets: []string{"style"}, + }, + { + Name: "zerologlint", + Presets: []string{"bugs"}, + Slow: true, + }, + { + Name: "nolintlint", + Presets: []string{"style"}, + }, + } +} + +func toNames(linters []LinterInfo) []string { + var results []string + + for _, linter := range linters { + results = append(results, linter.Name) + } + + return Unique(results) +} + +func removeLinters(linters, toRemove []LinterInfo) []LinterInfo { + return slices.DeleteFunc(linters, func(info LinterInfo) bool { + return slices.ContainsFunc(toRemove, func(en LinterInfo) bool { + return info.Name == en.Name + }) + }) +} + +func allEnabled(old versionone.Linters, linters []LinterInfo) []LinterInfo { + var results []LinterInfo + + for _, linter := range linters { + for _, name := range old.Enable { + if linter.isName(name) { + results = append(results, linter) + break + } + } + } + + return results +} + +func allDisabled(old versionone.Linters, linters []LinterInfo) []LinterInfo { + var results []LinterInfo + + for _, linter := range linters { + for _, name := range old.Disable { + if linter.isName(name) { + results = append(results, linter) + break + } + } + } + + return results +} + +func filter(linters []LinterInfo, fns ...fnFilter) []LinterInfo { + var results []LinterInfo + + for _, linter := range linters { + if mergeFilters(linter, fns) { + results = append(results, linter) + } + } + + return results +} + +func mergeFilters(linter LinterInfo, fns []fnFilter) bool { + for _, fn := range fns { + if !fn(linter) { + return false + } + } + + return true +} + +type fnFilter func(linter LinterInfo) bool + +func onlyPresets(old versionone.Linters) fnFilter { + return func(linter LinterInfo) bool { + return linter.hasPresets(old.Presets) + } +} + +func onlyDefault(linter LinterInfo) bool { + return linter.Default +} + +func notDefault(linter LinterInfo) bool { + return !linter.Default +} + +func keepFast(old versionone.Linters) fnFilter { + return func(linter LinterInfo) bool { + if !ptr.Deref(old.Fast) { + return true + } + + return !linter.Slow + } +} + +func keepSlow(old versionone.Linters) fnFilter { + return func(linter LinterInfo) bool { + if !ptr.Deref(old.Fast) { + return false + } + + return linter.Slow + } +} + +func unknownLinterNames(names []string, linters []LinterInfo) []string { + deprecatedLinters := []string{ + "deadcode", + "execinquery", + "exhaustivestruct", + "exportloopref", + "golint", + "ifshort", + "interfacer", + "maligned", + "nosnakecase", + "scopelint", + "structcheck", + "tenv", + "typecheck", + "varcheck", + } + + var results []string + + for _, name := range names { + found := slices.ContainsFunc(linters, func(l LinterInfo) bool { + return l.isName(name) + }) + + if !found { + if slices.Contains(deprecatedLinters, name) { + continue + } + + results = append(results, name) + } + } + + return Unique(results) +} + +func convertStaticcheckLinterNames(names []string) []string { + var results []string + + for _, name := range names { + if slices.Contains([]string{"stylecheck", "gosimple"}, name) { + results = append(results, "staticcheck") + continue + } + + results = append(results, name) + } + + return Unique(results) +} + +func onlyLinterNames(names []string) []string { + formatters := []string{"gci", "gofmt", "gofumpt", "goimports"} + + var results []string + + for _, name := range names { + if !slices.Contains(formatters, name) { + results = append(results, name) + } + } + + return results +} + +func onlyFormatterNames(names []string) []string { + formatters := getAllFormatterNames() + + var results []string + + for _, name := range names { + if slices.Contains(formatters, name) { + results = append(results, name) + } + } + + return results +} + +func convertAlternativeNames(names []string) []string { + altNames := map[string]string{ + "gas": "gosec", + "goerr113": "err113", + "gomnd": "mnd", + "logrlint": "loggercheck", + "megacheck": "staticcheck", + "vet": "govet", + "vetshadow": "govet", + } + + var results []string + + for _, name := range names { + if name == "typecheck" { + continue + } + + if n, ok := altNames[name]; ok { + results = append(results, n) + continue + } + + results = append(results, name) + } + + return Unique(results) +} + +func Unique[S ~[]E, E cmp.Ordered](s S) S { + return slices.Compact(slices.Sorted(slices.Values(s))) +} + +func getAllFormatterNames() []string { + return []string{"gci", "gofmt", "gofumpt", "goimports"} +} diff --git a/pkg/commands/internal/migrate/migrate_linter_names_test.go b/pkg/commands/internal/migrate/migrate_linter_names_test.go new file mode 100644 index 000000000000..360258ee93e4 --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_linter_names_test.go @@ -0,0 +1,473 @@ +package migrate + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" +) + +func Test_disableAllFilter(t *testing.T) { + testCases := []struct { + desc string + old versionone.Linters + expected []string + }{ + { + desc: "no presets, fast", + old: versionone.Linters{ + DisableAll: ptr.Pointer(true), + Enable: nil, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: nil, + }, + { + desc: "no presets, fast", + old: versionone.Linters{ + DisableAll: ptr.Pointer(true), + Enable: nil, + Fast: ptr.Pointer(true), + Presets: nil, + }, + expected: nil, + }, + { + desc: "no presets, enable", + old: versionone.Linters{ + DisableAll: ptr.Pointer(true), + Enable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: []string{"govet", "lll", "misspell"}, + }, + { + desc: "fast, no presets, enable", + old: versionone.Linters{ + DisableAll: ptr.Pointer(true), + Enable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(true), + Presets: nil, + }, + expected: []string{"govet", "lll", "misspell"}, + }, + { + desc: "presets, enable", + old: versionone.Linters{ + DisableAll: ptr.Pointer(true), + Enable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(false), + Presets: []string{"comment", "error", "format"}, + }, + expected: []string{ + "dupword", + "err113", + "errcheck", + "errorlint", + "gci", + "godot", + "godox", + "gofmt", + "gofumpt", + "goimports", + "govet", + "lll", + "misspell", + "wrapcheck", + }, + }, + { + desc: "presets, enable, fast", + old: versionone.Linters{ + DisableAll: ptr.Pointer(true), + Enable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(true), + Presets: []string{"comment", "error", "format"}, + }, + expected: []string{ + "dupword", + "gci", + "godot", + "godox", + "gofmt", + "gofumpt", + "goimports", + "govet", + "lll", + "misspell", + }, + }, + } + + for _, test := range testCases { + t.Run(test.desc, func(t *testing.T) { + t.Parallel() + + results := disableAllFilter(test.old) + + assert.Equal(t, test.expected, results) + }) + } +} + +func Test_enableAllFilter(t *testing.T) { + testCases := []struct { + desc string + old versionone.Linters + expected []string + }{ + { + desc: "no options", + old: versionone.Linters{ + EnableAll: ptr.Pointer(true), + Disable: nil, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: nil, + }, + { + desc: "presets (ignored)", + old: versionone.Linters{ + EnableAll: ptr.Pointer(true), + Disable: nil, + Fast: ptr.Pointer(false), + Presets: []string{"comment", "error", "format"}, + }, + expected: nil, + }, + { + desc: "fast", + old: versionone.Linters{ + EnableAll: ptr.Pointer(true), + Disable: nil, + Fast: ptr.Pointer(true), + Presets: nil, + }, + expected: []string{"asasalint", "bodyclose", "canonicalheader", "containedctx", "contextcheck", "durationcheck", "err113", "errcheck", "errchkjson", "errname", "errorlint", "exhaustive", "exhaustruct", "exptostd", "fatcontext", "forbidigo", "forcetypeassert", "ginkgolinter", "gochecknoglobals", "gochecksumtype", "gocritic", "gosec", "gosimple", "gosmopolitan", "govet", "iface", "importas", "intrange", "ireturn", "loggercheck", "makezero", "mirror", "musttag", "nilerr", "nilnesserr", "nilnil", "noctx", "nonamedreturns", "paralleltest", "perfsprint", "protogetter", "reassign", "recvcheck", "revive", "rowserrcheck", "sloglint", "spancheck", "sqlclosecheck", "staticcheck", "stylecheck", "tagliatelle", "testifylint", "thelper", "tparallel", "unconvert", "unparam", "unused", "usetesting", "varnamelen", "wastedassign", "wrapcheck", "zerologlint"}, + }, + { + desc: "disable", + old: versionone.Linters{ + EnableAll: ptr.Pointer(true), + Disable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: []string{"govet", "lll", "misspell"}, + }, + { + desc: "disable, fast", + old: versionone.Linters{ + EnableAll: ptr.Pointer(true), + Disable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(true), + Presets: nil, + }, + expected: []string{"asasalint", "bodyclose", "canonicalheader", "containedctx", "contextcheck", "durationcheck", "err113", "errcheck", "errchkjson", "errname", "errorlint", "exhaustive", "exhaustruct", "exptostd", "fatcontext", "forbidigo", "forcetypeassert", "ginkgolinter", "gochecknoglobals", "gochecksumtype", "gocritic", "gosec", "gosimple", "gosmopolitan", "govet", "iface", "importas", "intrange", "ireturn", "lll", "loggercheck", "makezero", "mirror", "misspell", "musttag", "nilerr", "nilnesserr", "nilnil", "noctx", "nonamedreturns", "paralleltest", "perfsprint", "protogetter", "reassign", "recvcheck", "revive", "rowserrcheck", "sloglint", "spancheck", "sqlclosecheck", "staticcheck", "stylecheck", "tagliatelle", "testifylint", "thelper", "tparallel", "unconvert", "unparam", "unused", "usetesting", "varnamelen", "wastedassign", "wrapcheck", "zerologlint"}, + }, + { + desc: "disable, enable, fast", + old: versionone.Linters{ + EnableAll: ptr.Pointer(true), + Enable: []string{"canonicalheader", "errname"}, + Disable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(true), + Presets: nil, + }, + expected: []string{"asasalint", "bodyclose", "containedctx", "contextcheck", "durationcheck", "err113", "errcheck", "errchkjson", "errorlint", "exhaustive", "exhaustruct", "exptostd", "fatcontext", "forbidigo", "forcetypeassert", "ginkgolinter", "gochecknoglobals", "gochecksumtype", "gocritic", "gosec", "gosimple", "gosmopolitan", "govet", "iface", "importas", "intrange", "ireturn", "lll", "loggercheck", "makezero", "mirror", "misspell", "musttag", "nilerr", "nilnesserr", "nilnil", "noctx", "nonamedreturns", "paralleltest", "perfsprint", "protogetter", "reassign", "recvcheck", "revive", "rowserrcheck", "sloglint", "spancheck", "sqlclosecheck", "staticcheck", "stylecheck", "tagliatelle", "testifylint", "thelper", "tparallel", "unconvert", "unparam", "unused", "usetesting", "varnamelen", "wastedassign", "wrapcheck", "zerologlint"}, + }, + } + + for _, test := range testCases { + t.Run(test.desc, func(t *testing.T) { + t.Parallel() + + results := enableAllFilter(test.old) + + assert.Equal(t, test.expected, results) + }) + } +} + +func Test_defaultLintersDisableFilter(t *testing.T) { + testCases := []struct { + desc string + old versionone.Linters + expected []string + }{ + { + desc: "no options", + old: versionone.Linters{ + Enable: nil, + Disable: nil, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: nil, + }, + { + desc: "presets (ignored)", + old: versionone.Linters{ + Enable: nil, + Disable: nil, + Fast: ptr.Pointer(false), + Presets: []string{"comment", "error", "format"}, + }, + expected: nil, + }, + { + desc: "fast", + old: versionone.Linters{ + Enable: nil, + Disable: nil, + Fast: ptr.Pointer(true), + Presets: nil, + }, + expected: []string{"errcheck", "gosimple", "govet", "staticcheck", "unused"}, + }, + { + desc: "enable", + old: versionone.Linters{ + Enable: []string{"lll", "misspell", "govet"}, + Disable: nil, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: nil, + }, + { + desc: "disable", + old: versionone.Linters{ + Enable: nil, + Disable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: []string{"govet", "lll", "misspell"}, + }, + { + desc: "disable, fast", + old: versionone.Linters{ + Enable: nil, + Disable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(true), + Presets: nil, + }, + expected: []string{"errcheck", "gosimple", "govet", "lll", "misspell", "staticcheck", "unused"}, + }, + { + desc: "enable, disable", + old: versionone.Linters{ + Enable: []string{"grouper", "importas", "errcheck"}, + Disable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: []string{"govet", "lll", "misspell"}, + }, + { + desc: "enable", + old: versionone.Linters{ + Enable: []string{"grouper", "importas", "errcheck"}, + Disable: nil, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: nil, + }, + } + + for _, test := range testCases { + t.Run(test.desc, func(t *testing.T) { + t.Parallel() + + results := toNames(defaultLintersDisableFilter(test.old)) + + assert.Equal(t, test.expected, results) + }) + } +} + +func Test_defaultLintersEnableFilter(t *testing.T) { + testCases := []struct { + desc string + + old versionone.Linters + expected []string + }{ + { + desc: "no options", + old: versionone.Linters{ + Enable: nil, + Disable: nil, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: nil, + }, + { + desc: "enable", + old: versionone.Linters{ + Enable: []string{"grouper", "importas", "errcheck"}, + Disable: nil, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: []string{"grouper", "importas"}, + }, + { + desc: "enable, disable", + old: versionone.Linters{ + Enable: []string{"grouper", "importas", "errcheck"}, + Disable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: []string{"grouper", "importas"}, + }, + { + desc: "disable", + old: versionone.Linters{ + Enable: nil, + Disable: []string{"lll", "misspell", "govet"}, + Fast: ptr.Pointer(false), + Presets: nil, + }, + expected: nil, + }, + { + desc: "presets", + old: versionone.Linters{ + Enable: nil, + Disable: nil, + Fast: ptr.Pointer(false), + Presets: []string{"comment", "error", "format"}, + }, + expected: []string{"dupword", "err113", "errorlint", "gci", "godot", "godox", "gofmt", "gofumpt", "goimports", "misspell", "wrapcheck"}, + }, + { + desc: "presets, fast", + old: versionone.Linters{ + Enable: nil, + Disable: nil, + Fast: ptr.Pointer(true), + Presets: []string{"comment", "error", "format"}, + }, + expected: []string{"dupword", "gci", "godot", "godox", "gofmt", "gofumpt", "goimports", "misspell"}, + }, + } + + // presets - slow + enable - default - [effective disable] => effective enable + for _, test := range testCases { + t.Run(test.desc, func(t *testing.T) { + t.Parallel() + + results := toNames(defaultLintersEnableFilter(test.old, defaultLintersDisableFilter(test.old))) + + assert.Equal(t, test.expected, results) + }) + } +} + +func Test_convertStaticcheckLinterNames(t *testing.T) { + testCases := []struct { + desc string + names []string + expected []string + }{ + { + desc: "empty", + names: nil, + expected: nil, + }, + { + desc: "no staticcheck linters", + names: []string{"lll", "misspell", "govet"}, + expected: []string{"govet", "lll", "misspell"}, + }, + { + desc: "stylecheck", + names: []string{"lll", "misspell", "govet", "stylecheck"}, + expected: []string{"govet", "lll", "misspell", "staticcheck"}, + }, + { + desc: "gosimple", + names: []string{"lll", "misspell", "govet", "gosimple"}, + expected: []string{"govet", "lll", "misspell", "staticcheck"}, + }, + { + desc: "staticcheck", + names: []string{"lll", "misspell", "govet", "staticcheck"}, + expected: []string{"govet", "lll", "misspell", "staticcheck"}, + }, + { + desc: "staticcheck, stylecheck, gosimple", + names: []string{"lll", "misspell", "govet", "staticcheck", "stylecheck", "gosimple"}, + expected: []string{"govet", "lll", "misspell", "staticcheck"}, + }, + } + + for _, test := range testCases { + t.Run(test.desc, func(t *testing.T) { + t.Parallel() + + results := convertStaticcheckLinterNames(test.names) + + assert.Equal(t, test.expected, results) + }) + } +} + +func Test_unknownLinterNames(t *testing.T) { + testCases := []struct { + desc string + names []string + expected []string + }{ + { + desc: "empty", + names: nil, + expected: nil, + }, + { + desc: "deprecated", + names: []string{"golint", "structcheck", "varcheck"}, + expected: nil, + }, + { + desc: "deprecated and unknown", + names: []string{"golint", "structcheck", "varcheck", "a", "b"}, + expected: []string{"a", "b"}, + }, + { + desc: "deprecated and known", + names: []string{"golint", "structcheck", "varcheck", "gosec", "gofmt"}, + expected: nil, + }, + { + desc: "only unknown", + names: []string{"a", "b", "c"}, + expected: []string{"a", "b", "c"}, + }, + { + desc: "unknown and known", + names: []string{"a", "gosec", "gofmt"}, + expected: []string{"a"}, + }, + } + + for _, test := range testCases { + t.Run(test.desc, func(t *testing.T) { + t.Parallel() + + names := unknownLinterNames(test.names, allLinters()) + + assert.Equal(t, test.expected, names) + }) + } +} diff --git a/pkg/commands/internal/migrate/migrate_linters.go b/pkg/commands/internal/migrate/migrate_linters.go new file mode 100644 index 000000000000..80fd96dbacfd --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_linters.go @@ -0,0 +1,31 @@ +package migrate + +import ( + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versiontwo" +) + +func toLinters(old *versionone.Config) versiontwo.Linters { + enable, disable := ProcessEffectiveLinters(old.Linters) + + return versiontwo.Linters{ + Default: getDefaultName(old.Linters), + Enable: onlyLinterNames(convertStaticcheckLinterNames(enable)), + Disable: onlyLinterNames(convertStaticcheckLinterNames(disable)), + FastOnly: nil, + Settings: toLinterSettings(old.LintersSettings), + Exclusions: toExclusions(old), + } +} + +func getDefaultName(old versionone.Linters) *string { + switch { + case ptr.Deref(old.DisableAll): + return ptr.Pointer("none") + case ptr.Deref(old.EnableAll): + return ptr.Pointer("all") + default: + return nil // standard is the default + } +} diff --git a/pkg/commands/internal/migrate/migrate_linters_exclusions.go b/pkg/commands/internal/migrate/migrate_linters_exclusions.go new file mode 100644 index 000000000000..65eb6e82251b --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_linters_exclusions.go @@ -0,0 +1,144 @@ +package migrate + +import ( + "slices" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versiontwo" + "github.com/golangci/golangci-lint/pkg/config" + "github.com/golangci/golangci-lint/pkg/result/processors" +) + +func toExclusions(old *versionone.Config) versiontwo.LinterExclusions { + return versiontwo.LinterExclusions{ + Generated: toExclusionGenerated(old.Issues.ExcludeGenerated), + Presets: toPresets(old.Issues), + Rules: toExclusionRules(old), + Paths: toExclusionPaths(old.Issues), + } +} + +func toExclusionGenerated(excludeGenerated *string) *string { + if excludeGenerated == nil || ptr.Deref(excludeGenerated) == "" { + return ptr.Pointer("lax") + } + + if ptr.Deref(excludeGenerated) == "strict" { + return nil + } + + return excludeGenerated +} + +func toPresets(old versionone.Issues) []string { + if old.UseDefaultExcludes != nil && !ptr.Deref(old.UseDefaultExcludes) { + return nil + } + + if len(old.IncludeDefaultExcludes) != 0 { + var pp []string + for p, rules := range processors.LinterExclusionPresets { + found := slices.ContainsFunc(rules, func(rule config.ExcludeRule) bool { + return slices.Contains(old.IncludeDefaultExcludes, rule.InternalReference) + }) + if !found { + pp = append(pp, p) + } + } + + slices.Sort(pp) + + return pp + } + + return []string{ + config.ExclusionPresetComments, + config.ExclusionPresetCommonFalsePositives, + config.ExclusionPresetLegacy, + config.ExclusionPresetStdErrorHandling, + } +} + +func toExclusionRules(old *versionone.Config) []versiontwo.ExcludeRule { + var results []versiontwo.ExcludeRule + + for _, rule := range old.Issues.ExcludeRules { + names := onlyLinterNames(convertStaticcheckLinterNames(convertAlternativeNames(rule.Linters))) + if len(rule.Linters) > 0 && len(names) == 0 { + continue + } + + results = append(results, versiontwo.ExcludeRule{ + BaseRule: versiontwo.BaseRule{ + Linters: names, + Path: rule.Path, + PathExcept: rule.PathExcept, + Text: addPrefix(old.Issues, rule.Text), + Source: addPrefix(old.Issues, rule.Source), + }, + }) + } + + for _, pattern := range old.Issues.ExcludePatterns { + results = append(results, versiontwo.ExcludeRule{ + BaseRule: versiontwo.BaseRule{ + Path: ptr.Pointer(`(.+)\.go$`), + Text: addPrefix(old.Issues, ptr.Pointer(pattern)), + }, + }) + } + + return slices.Concat(results, linterTestExclusions(old.LintersSettings)) +} + +func addPrefix(old versionone.Issues, s *string) *string { + if s == nil || ptr.Deref(s) == "" { + return s + } + + var prefix string + if ptr.Deref(old.ExcludeCaseSensitive) { + prefix = "(?i)" + } + + return ptr.Pointer(prefix + ptr.Deref(s)) +} + +func linterTestExclusions(old versionone.LintersSettings) []versiontwo.ExcludeRule { + var excludedTestLinters []string + + if ptr.Deref(old.Asasalint.IgnoreTest) { + excludedTestLinters = append(excludedTestLinters, "asasalint") + } + if ptr.Deref(old.Cyclop.SkipTests) { + excludedTestLinters = append(excludedTestLinters, "cyclop") + } + if ptr.Deref(old.Goconst.IgnoreTests) { + excludedTestLinters = append(excludedTestLinters, "goconst") + } + if ptr.Deref(old.Gosmopolitan.IgnoreTests) { + excludedTestLinters = append(excludedTestLinters, "gosmopolitan") + } + + if len(excludedTestLinters) == 0 { + return nil + } + + return []versiontwo.ExcludeRule{{ + BaseRule: versiontwo.BaseRule{ + Linters: excludedTestLinters, + Path: ptr.Pointer(`(.+)_test\.go`), + }, + }} +} + +func toExclusionPaths(old versionone.Issues) []string { + results := slices.Concat(old.ExcludeFiles, old.ExcludeDirs) + + if old.UseDefaultExcludeDirs == nil || ptr.Deref(old.UseDefaultExcludeDirs) { + results = append(results, "third_party$", "builtin$", "examples$") + } + + return results +} diff --git a/pkg/commands/internal/migrate/migrate_linters_settings.go b/pkg/commands/internal/migrate/migrate_linters_settings.go new file mode 100644 index 000000000000..1605ff13c6c9 --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_linters_settings.go @@ -0,0 +1,1015 @@ +package migrate + +import ( + "slices" + "strings" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versiontwo" +) + +func toLinterSettings(old versionone.LintersSettings) versiontwo.LintersSettings { + return versiontwo.LintersSettings{ + Asasalint: toAsasalintSettings(old.Asasalint), + BiDiChk: toBiDiChkSettings(old.BiDiChk), + CopyLoopVar: toCopyLoopVarSettings(old.CopyLoopVar), + Cyclop: toCyclopSettings(old.Cyclop), + Decorder: toDecorderSettings(old.Decorder), + Depguard: toDepGuardSettings(old.Depguard), + Dogsled: toDogsledSettings(old.Dogsled), + Dupl: toDuplSettings(old.Dupl), + DupWord: toDupWordSettings(old.DupWord), + Errcheck: toErrcheckSettings(old.Errcheck), + ErrChkJSON: toErrChkJSONSettings(old.ErrChkJSON), + ErrorLint: toErrorLintSettings(old.ErrorLint), + Exhaustive: toExhaustiveSettings(old.Exhaustive), + Exhaustruct: toExhaustructSettings(old.Exhaustruct), + Fatcontext: toFatcontextSettings(old.Fatcontext), + Forbidigo: toForbidigoSettings(old.Forbidigo), + Funlen: toFunlenSettings(old.Funlen), + GinkgoLinter: toGinkgoLinterSettings(old.GinkgoLinter), + Gocognit: toGocognitSettings(old.Gocognit), + GoChecksumType: toGoChecksumTypeSettings(old.GoChecksumType), + Goconst: toGoConstSettings(old.Goconst), + Gocritic: toGoCriticSettings(old.Gocritic), + Gocyclo: toGoCycloSettings(old.Gocyclo), + Godot: toGodotSettings(old.Godot), + Godox: toGodoxSettings(old.Godox), + Goheader: toGoHeaderSettings(old.Goheader), + GoModDirectives: toGoModDirectivesSettings(old.GoModDirectives), + Gomodguard: toGoModGuardSettings(old.Gomodguard), + Gosec: toGoSecSettings(old.Gosec), + Gosmopolitan: toGosmopolitanSettings(old.Gosmopolitan), + Govet: toGovetSettings(old.Govet), + Grouper: toGrouperSettings(old.Grouper), + Iface: toIfaceSettings(old.Iface), + ImportAs: toImportAsSettings(old.ImportAs), + Inamedparam: toINamedParamSettings(old.Inamedparam), + InterfaceBloat: toInterfaceBloatSettings(old.InterfaceBloat), + Ireturn: toIreturnSettings(old.Ireturn), + Lll: toLllSettings(old.Lll), + LoggerCheck: toLoggerCheckSettings(old.LoggerCheck), + MaintIdx: toMaintIdxSettings(old.MaintIdx), + Makezero: toMakezeroSettings(old.Makezero), + Misspell: toMisspellSettings(old.Misspell), + Mnd: toMndSettings(old.Mnd), + MustTag: toMustTagSettings(old.MustTag), + Nakedret: toNakedretSettings(old.Nakedret), + Nestif: toNestifSettings(old.Nestif), + NilNil: toNilNilSettings(old.NilNil), + Nlreturn: toNlreturnSettings(old.Nlreturn), + NoLintLint: toNoLintLintSettings(old.NoLintLint), + NoNamedReturns: toNoNamedReturnsSettings(old.NoNamedReturns), + ParallelTest: toParallelTestSettings(old.ParallelTest), + PerfSprint: toPerfSprintSettings(old.PerfSprint), + Prealloc: toPreallocSettings(old.Prealloc), + Predeclared: toPredeclaredSettings(old.Predeclared), + Promlinter: toPromlinterSettings(old.Promlinter), + ProtoGetter: toProtoGetterSettings(old.ProtoGetter), + Reassign: toReassignSettings(old.Reassign), + Recvcheck: toRecvcheckSettings(old.Recvcheck), + Revive: toReviveSettings(old.Revive), + RowsErrCheck: toRowsErrCheckSettings(old.RowsErrCheck), + SlogLint: toSlogLintSettings(old.SlogLint), + Spancheck: toSpancheckSettings(old.Spancheck), + Staticcheck: toStaticCheckSettings(old), + TagAlign: toTagAlignSettings(old.TagAlign), + Tagliatelle: toTagliatelleSettings(old.Tagliatelle), + Testifylint: toTestifylintSettings(old.Testifylint), + Testpackage: toTestpackageSettings(old.Testpackage), + Thelper: toThelperSettings(old.Thelper), + Unconvert: toUnconvertSettings(old.Unconvert), + Unparam: toUnparamSettings(old.Unparam), + Unused: toUnusedSettings(old.Unused), + UseStdlibVars: toUseStdlibVarsSettings(old.UseStdlibVars), + UseTesting: toUseTestingSettings(old.UseTesting), + Varnamelen: toVarnamelenSettings(old.Varnamelen), + Whitespace: toWhitespaceSettings(old.Whitespace), + Wrapcheck: toWrapcheckSettings(old.Wrapcheck), + WSL: toWSLSettings(old.WSL), + Custom: toCustom(old.Custom), + } +} + +func toAsasalintSettings(old versionone.AsasalintSettings) versiontwo.AsasalintSettings { + return versiontwo.AsasalintSettings{ + Exclude: old.Exclude, + UseBuiltinExclusions: old.UseBuiltinExclusions, + } +} + +func toBiDiChkSettings(old versionone.BiDiChkSettings) versiontwo.BiDiChkSettings { + // The values are true be default, but the default are defined after the configuration loading. + // So the serialization doesn't have good results, but it's complex to do better. + return versiontwo.BiDiChkSettings{ + LeftToRightEmbedding: old.LeftToRightEmbedding, + RightToLeftEmbedding: old.RightToLeftEmbedding, + PopDirectionalFormatting: old.PopDirectionalFormatting, + LeftToRightOverride: old.LeftToRightOverride, + RightToLeftOverride: old.RightToLeftOverride, + LeftToRightIsolate: old.LeftToRightIsolate, + RightToLeftIsolate: old.RightToLeftIsolate, + FirstStrongIsolate: old.FirstStrongIsolate, + PopDirectionalIsolate: old.PopDirectionalIsolate, + } +} + +func toCopyLoopVarSettings(old versionone.CopyLoopVarSettings) versiontwo.CopyLoopVarSettings { + return versiontwo.CopyLoopVarSettings{ + CheckAlias: old.CheckAlias, + } +} + +func toCyclopSettings(old versionone.Cyclop) versiontwo.CyclopSettings { + return versiontwo.CyclopSettings{ + MaxComplexity: old.MaxComplexity, + PackageAverage: old.PackageAverage, + } +} + +func toDecorderSettings(old versionone.DecorderSettings) versiontwo.DecorderSettings { + return versiontwo.DecorderSettings{ + DecOrder: old.DecOrder, + IgnoreUnderscoreVars: old.IgnoreUnderscoreVars, + DisableDecNumCheck: old.DisableDecNumCheck, + DisableTypeDecNumCheck: old.DisableTypeDecNumCheck, + DisableConstDecNumCheck: old.DisableConstDecNumCheck, + DisableVarDecNumCheck: old.DisableVarDecNumCheck, + DisableDecOrderCheck: old.DisableDecOrderCheck, + DisableInitFuncFirstCheck: old.DisableInitFuncFirstCheck, + } +} + +func toDepGuardSettings(old versionone.DepGuardSettings) versiontwo.DepGuardSettings { + settings := versiontwo.DepGuardSettings{} + + for k, r := range old.Rules { + if settings.Rules == nil { + settings.Rules = make(map[string]*versiontwo.DepGuardList) + } + + list := &versiontwo.DepGuardList{ + ListMode: r.ListMode, + Files: r.Files, + Allow: r.Allow, + } + + for _, deny := range r.Deny { + list.Deny = append(list.Deny, versiontwo.DepGuardDeny{ + Pkg: deny.Pkg, + Desc: deny.Desc, + }) + } + + settings.Rules[k] = list + } + + return settings +} + +func toDogsledSettings(old versionone.DogsledSettings) versiontwo.DogsledSettings { + return versiontwo.DogsledSettings{ + MaxBlankIdentifiers: old.MaxBlankIdentifiers, + } +} + +func toDuplSettings(old versionone.DuplSettings) versiontwo.DuplSettings { + return versiontwo.DuplSettings{ + Threshold: old.Threshold, + } +} + +func toDupWordSettings(old versionone.DupWordSettings) versiontwo.DupWordSettings { + return versiontwo.DupWordSettings{ + Keywords: old.Keywords, + Ignore: old.Ignore, + } +} + +func toErrcheckSettings(old versionone.ErrcheckSettings) versiontwo.ErrcheckSettings { + return versiontwo.ErrcheckSettings{ + DisableDefaultExclusions: old.DisableDefaultExclusions, + CheckTypeAssertions: old.CheckTypeAssertions, + CheckAssignToBlank: old.CheckAssignToBlank, + ExcludeFunctions: old.ExcludeFunctions, + } +} + +func toErrChkJSONSettings(old versionone.ErrChkJSONSettings) versiontwo.ErrChkJSONSettings { + return versiontwo.ErrChkJSONSettings{ + CheckErrorFreeEncoding: old.CheckErrorFreeEncoding, + ReportNoExported: old.ReportNoExported, + } +} + +func toErrorLintSettings(old versionone.ErrorLintSettings) versiontwo.ErrorLintSettings { + settings := versiontwo.ErrorLintSettings{ + Errorf: old.Errorf, + ErrorfMulti: old.ErrorfMulti, + Asserts: old.Asserts, + Comparison: old.Comparison, + } + + for _, allowedError := range old.AllowedErrors { + settings.AllowedErrors = append(settings.AllowedErrors, versiontwo.ErrorLintAllowPair{ + Err: allowedError.Err, + Fun: allowedError.Fun, + }) + } + for _, allowedError := range old.AllowedErrorsWildcard { + settings.AllowedErrorsWildcard = append(settings.AllowedErrorsWildcard, versiontwo.ErrorLintAllowPair{ + Err: allowedError.Err, + Fun: allowedError.Fun, + }) + } + + return settings +} + +func toExhaustiveSettings(old versionone.ExhaustiveSettings) versiontwo.ExhaustiveSettings { + return versiontwo.ExhaustiveSettings{ + Check: old.Check, + DefaultSignifiesExhaustive: old.DefaultSignifiesExhaustive, + IgnoreEnumMembers: old.IgnoreEnumMembers, + IgnoreEnumTypes: old.IgnoreEnumTypes, + PackageScopeOnly: old.PackageScopeOnly, + ExplicitExhaustiveMap: old.ExplicitExhaustiveMap, + ExplicitExhaustiveSwitch: old.ExplicitExhaustiveSwitch, + DefaultCaseRequired: old.DefaultCaseRequired, + } +} + +func toExhaustructSettings(old versionone.ExhaustructSettings) versiontwo.ExhaustructSettings { + return versiontwo.ExhaustructSettings{ + Include: old.Include, + Exclude: old.Exclude, + } +} + +func toFatcontextSettings(old versionone.FatcontextSettings) versiontwo.FatcontextSettings { + return versiontwo.FatcontextSettings{ + CheckStructPointers: old.CheckStructPointers, + } +} + +func toForbidigoSettings(old versionone.ForbidigoSettings) versiontwo.ForbidigoSettings { + settings := versiontwo.ForbidigoSettings{ + ExcludeGodocExamples: old.ExcludeGodocExamples, + AnalyzeTypes: old.AnalyzeTypes, + } + + for _, pattern := range old.Forbid { + if pattern.Pattern == nil { + buffer, err := pattern.MarshalString() + if err != nil { + // impossible case + panic(err) + } + + settings.Forbid = append(settings.Forbid, versiontwo.ForbidigoPattern{ + Pattern: ptr.Pointer(string(buffer)), + }) + + continue + } + + settings.Forbid = append(settings.Forbid, versiontwo.ForbidigoPattern{ + Pattern: pattern.Pattern, + Package: pattern.Package, + Msg: pattern.Msg, + }) + } + + return settings +} + +func toFunlenSettings(old versionone.FunlenSettings) versiontwo.FunlenSettings { + return versiontwo.FunlenSettings{ + Lines: old.Lines, + Statements: old.Statements, + IgnoreComments: old.IgnoreComments, + } +} + +func toGinkgoLinterSettings(old versionone.GinkgoLinterSettings) versiontwo.GinkgoLinterSettings { + return versiontwo.GinkgoLinterSettings{ + SuppressLenAssertion: old.SuppressLenAssertion, + SuppressNilAssertion: old.SuppressNilAssertion, + SuppressErrAssertion: old.SuppressErrAssertion, + SuppressCompareAssertion: old.SuppressCompareAssertion, + SuppressAsyncAssertion: old.SuppressAsyncAssertion, + SuppressTypeCompareWarning: old.SuppressTypeCompareWarning, + ForbidFocusContainer: old.ForbidFocusContainer, + AllowHaveLenZero: old.AllowHaveLenZero, + ForceExpectTo: old.ForceExpectTo, + ValidateAsyncIntervals: old.ValidateAsyncIntervals, + ForbidSpecPollution: old.ForbidSpecPollution, + ForceSucceedForFuncs: old.ForceSucceedForFuncs, + } +} + +func toGocognitSettings(old versionone.GocognitSettings) versiontwo.GocognitSettings { + return versiontwo.GocognitSettings{ + MinComplexity: old.MinComplexity, + } +} + +func toGoChecksumTypeSettings(old versionone.GoChecksumTypeSettings) versiontwo.GoChecksumTypeSettings { + return versiontwo.GoChecksumTypeSettings{ + DefaultSignifiesExhaustive: old.DefaultSignifiesExhaustive, + IncludeSharedInterfaces: old.IncludeSharedInterfaces, + } +} + +func toGoConstSettings(old versionone.GoConstSettings) versiontwo.GoConstSettings { + return versiontwo.GoConstSettings{ + IgnoreStrings: old.IgnoreStrings, + MatchWithConstants: old.MatchWithConstants, + MinStringLen: old.MinStringLen, + MinOccurrencesCount: old.MinOccurrencesCount, + ParseNumbers: old.ParseNumbers, + NumberMin: old.NumberMin, + NumberMax: old.NumberMax, + IgnoreCalls: old.IgnoreCalls, + } +} + +func toGoCriticSettings(old versionone.GoCriticSettings) versiontwo.GoCriticSettings { + settings := versiontwo.GoCriticSettings{ + Go: old.Go, + DisableAll: old.DisableAll, + EnabledChecks: old.EnabledChecks, + EnableAll: old.EnableAll, + DisabledChecks: old.DisabledChecks, + EnabledTags: old.EnabledTags, + DisabledTags: old.DisabledTags, + } + + for k, checkSettings := range old.SettingsPerCheck { + if settings.SettingsPerCheck == nil { + settings.SettingsPerCheck = make(map[string]versiontwo.GoCriticCheckSettings) + } + + if k != "ruleguard" { + settings.SettingsPerCheck[k] = versiontwo.GoCriticCheckSettings(checkSettings) + + continue + } + + gccs := versiontwo.GoCriticCheckSettings{} + + for sk, value := range checkSettings { + if sk != "rules" { + gccs[sk] = value + + continue + } + + if rules, ok := value.(string); ok { + gccs[sk] = strings.ReplaceAll(rules, "${configDir}", "${base-path}") + } + } + + settings.SettingsPerCheck[k] = gccs + } + + return settings +} + +func toGoCycloSettings(old versionone.GoCycloSettings) versiontwo.GoCycloSettings { + return versiontwo.GoCycloSettings{ + MinComplexity: old.MinComplexity, + } +} + +func toGodotSettings(old versionone.GodotSettings) versiontwo.GodotSettings { + return versiontwo.GodotSettings{ + Scope: old.Scope, + Exclude: old.Exclude, + Capital: old.Capital, + Period: old.Period, + } +} + +func toGodoxSettings(old versionone.GodoxSettings) versiontwo.GodoxSettings { + return versiontwo.GodoxSettings{ + Keywords: old.Keywords, + } +} + +func toGoHeaderSettings(old versionone.GoHeaderSettings) versiontwo.GoHeaderSettings { + return versiontwo.GoHeaderSettings{ + Values: old.Values, + Template: old.Template, + TemplatePath: old.TemplatePath, + } +} + +func toGoModDirectivesSettings(old versionone.GoModDirectivesSettings) versiontwo.GoModDirectivesSettings { + return versiontwo.GoModDirectivesSettings{ + ReplaceAllowList: old.ReplaceAllowList, + ReplaceLocal: old.ReplaceLocal, + ExcludeForbidden: old.ExcludeForbidden, + RetractAllowNoExplanation: old.RetractAllowNoExplanation, + ToolchainForbidden: old.ToolchainForbidden, + ToolchainPattern: old.ToolchainPattern, + ToolForbidden: old.ToolForbidden, + GoDebugForbidden: old.GoDebugForbidden, + GoVersionPattern: old.GoVersionPattern, + } +} + +func toGoModGuardSettings(old versionone.GoModGuardSettings) versiontwo.GoModGuardSettings { + blocked := versiontwo.GoModGuardBlocked{ + LocalReplaceDirectives: old.Blocked.LocalReplaceDirectives, + } + + for _, version := range old.Blocked.Modules { + data := map[string]versiontwo.GoModGuardModule{} + + for k, v := range version { + data[k] = versiontwo.GoModGuardModule{ + Recommendations: v.Recommendations, + Reason: v.Reason, + } + } + + blocked.Modules = append(blocked.Modules, data) + } + + for _, version := range old.Blocked.Versions { + data := map[string]versiontwo.GoModGuardVersion{} + + for k, v := range version { + data[k] = versiontwo.GoModGuardVersion{ + Version: v.Version, + Reason: v.Reason, + } + } + + blocked.Versions = append(blocked.Versions, data) + } + + return versiontwo.GoModGuardSettings{ + Allowed: versiontwo.GoModGuardAllowed{ + Modules: old.Allowed.Modules, + Domains: old.Allowed.Domains, + }, + Blocked: blocked, + } +} + +func toGoSecSettings(old versionone.GoSecSettings) versiontwo.GoSecSettings { + return versiontwo.GoSecSettings{ + Includes: old.Includes, + Excludes: old.Excludes, + Severity: old.Severity, + Confidence: old.Confidence, + Config: old.Config, + Concurrency: old.Concurrency, + } +} + +func toGosmopolitanSettings(old versionone.GosmopolitanSettings) versiontwo.GosmopolitanSettings { + return versiontwo.GosmopolitanSettings{ + AllowTimeLocal: old.AllowTimeLocal, + EscapeHatches: old.EscapeHatches, + WatchForScripts: old.WatchForScripts, + } +} + +func toGovetSettings(old versionone.GovetSettings) versiontwo.GovetSettings { + return versiontwo.GovetSettings{ + Go: old.Go, + Enable: old.Enable, + Disable: old.Disable, + EnableAll: old.EnableAll, + DisableAll: old.DisableAll, + Settings: old.Settings, + } +} + +func toGrouperSettings(old versionone.GrouperSettings) versiontwo.GrouperSettings { + return versiontwo.GrouperSettings{ + ConstRequireSingleConst: old.ConstRequireSingleConst, + ConstRequireGrouping: old.ConstRequireGrouping, + ImportRequireSingleImport: old.ImportRequireSingleImport, + ImportRequireGrouping: old.ImportRequireGrouping, + TypeRequireSingleType: old.TypeRequireSingleType, + TypeRequireGrouping: old.TypeRequireGrouping, + VarRequireSingleVar: old.VarRequireSingleVar, + VarRequireGrouping: old.VarRequireGrouping, + } +} + +func toIfaceSettings(old versionone.IfaceSettings) versiontwo.IfaceSettings { + return versiontwo.IfaceSettings{ + Enable: old.Enable, + Settings: old.Settings, + } +} + +func toImportAsSettings(old versionone.ImportAsSettings) versiontwo.ImportAsSettings { + settings := versiontwo.ImportAsSettings{ + NoUnaliased: old.NoUnaliased, + NoExtraAliases: old.NoExtraAliases, + } + + for _, alias := range old.Alias { + settings.Alias = append(settings.Alias, versiontwo.ImportAsAlias{ + Pkg: alias.Pkg, + Alias: alias.Alias, + }) + } + + return settings +} + +func toINamedParamSettings(old versionone.INamedParamSettings) versiontwo.INamedParamSettings { + return versiontwo.INamedParamSettings{ + SkipSingleParam: old.SkipSingleParam, + } +} + +func toInterfaceBloatSettings(old versionone.InterfaceBloatSettings) versiontwo.InterfaceBloatSettings { + return versiontwo.InterfaceBloatSettings{ + Max: old.Max, + } +} + +func toIreturnSettings(old versionone.IreturnSettings) versiontwo.IreturnSettings { + return versiontwo.IreturnSettings{ + Allow: old.Allow, + Reject: old.Reject, + } +} + +func toLllSettings(old versionone.LllSettings) versiontwo.LllSettings { + return versiontwo.LllSettings{ + LineLength: old.LineLength, + TabWidth: old.TabWidth, + } +} + +func toLoggerCheckSettings(old versionone.LoggerCheckSettings) versiontwo.LoggerCheckSettings { + return versiontwo.LoggerCheckSettings{ + Kitlog: old.Kitlog, + Klog: old.Klog, + Logr: old.Logr, + Slog: old.Slog, + Zap: old.Zap, + RequireStringKey: old.RequireStringKey, + NoPrintfLike: old.NoPrintfLike, + Rules: old.Rules, + } +} + +func toMaintIdxSettings(old versionone.MaintIdxSettings) versiontwo.MaintIdxSettings { + return versiontwo.MaintIdxSettings{ + Under: old.Under, + } +} + +func toMakezeroSettings(old versionone.MakezeroSettings) versiontwo.MakezeroSettings { + return versiontwo.MakezeroSettings{ + Always: old.Always, + } +} + +func toMisspellSettings(old versionone.MisspellSettings) versiontwo.MisspellSettings { + settings := versiontwo.MisspellSettings{ + Mode: old.Mode, + Locale: old.Locale, + IgnoreRules: old.IgnoreWords, + } + + for _, word := range old.ExtraWords { + settings.ExtraWords = append(settings.ExtraWords, versiontwo.MisspellExtraWords{ + Typo: word.Typo, + Correction: word.Correction, + }) + } + + return settings +} + +func toMndSettings(old versionone.MndSettings) versiontwo.MndSettings { + return versiontwo.MndSettings{ + Checks: old.Checks, + IgnoredNumbers: old.IgnoredNumbers, + IgnoredFiles: old.IgnoredFiles, + IgnoredFunctions: old.IgnoredFunctions, + } +} + +func toMustTagSettings(old versionone.MustTagSettings) versiontwo.MustTagSettings { + settings := versiontwo.MustTagSettings{} + + for _, function := range old.Functions { + settings.Functions = append(settings.Functions, versiontwo.MustTagFunction{ + Name: function.Name, + Tag: function.Tag, + ArgPos: function.ArgPos, + }) + } + + return settings +} + +func toNakedretSettings(old versionone.NakedretSettings) versiontwo.NakedretSettings { + return versiontwo.NakedretSettings{ + MaxFuncLines: old.MaxFuncLines, + } +} + +func toNestifSettings(old versionone.NestifSettings) versiontwo.NestifSettings { + return versiontwo.NestifSettings{ + MinComplexity: old.MinComplexity, + } +} + +func toNilNilSettings(old versionone.NilNilSettings) versiontwo.NilNilSettings { + return versiontwo.NilNilSettings{ + DetectOpposite: old.DetectOpposite, + CheckedTypes: old.CheckedTypes, + } +} + +func toNlreturnSettings(old versionone.NlreturnSettings) versiontwo.NlreturnSettings { + return versiontwo.NlreturnSettings{ + BlockSize: old.BlockSize, + } +} + +func toNoLintLintSettings(old versionone.NoLintLintSettings) versiontwo.NoLintLintSettings { + return versiontwo.NoLintLintSettings{ + RequireExplanation: old.RequireExplanation, + RequireSpecific: old.RequireSpecific, + AllowNoExplanation: old.AllowNoExplanation, + AllowUnused: old.AllowUnused, + } +} + +func toNoNamedReturnsSettings(old versionone.NoNamedReturnsSettings) versiontwo.NoNamedReturnsSettings { + return versiontwo.NoNamedReturnsSettings{ + ReportErrorInDefer: old.ReportErrorInDefer, + } +} + +func toParallelTestSettings(old versionone.ParallelTestSettings) versiontwo.ParallelTestSettings { + return versiontwo.ParallelTestSettings{ + Go: nil, + IgnoreMissing: old.IgnoreMissing, + IgnoreMissingSubtests: old.IgnoreMissingSubtests, + } +} + +func toPerfSprintSettings(old versionone.PerfSprintSettings) versiontwo.PerfSprintSettings { + return versiontwo.PerfSprintSettings{ + IntegerFormat: old.IntegerFormat, + IntConversion: old.IntConversion, + ErrorFormat: old.ErrorFormat, + ErrError: old.ErrError, + ErrorF: old.ErrorF, + StringFormat: old.StringFormat, + SprintF1: old.SprintF1, + StrConcat: old.StrConcat, + BoolFormat: old.BoolFormat, + HexFormat: old.HexFormat, + } +} + +func toPreallocSettings(old versionone.PreallocSettings) versiontwo.PreallocSettings { + return versiontwo.PreallocSettings{ + Simple: old.Simple, + RangeLoops: old.RangeLoops, + ForLoops: old.ForLoops, + } +} + +func toPredeclaredSettings(old versionone.PredeclaredSettings) versiontwo.PredeclaredSettings { + var ignore []string + if ptr.Deref(old.Ignore) != "" { + ignore = strings.Split(ptr.Deref(old.Ignore), ",") + } + + return versiontwo.PredeclaredSettings{ + Ignore: ignore, + Qualified: old.Qualified, + } +} + +func toPromlinterSettings(old versionone.PromlinterSettings) versiontwo.PromlinterSettings { + return versiontwo.PromlinterSettings{ + Strict: old.Strict, + DisabledLinters: old.DisabledLinters, + } +} + +func toProtoGetterSettings(old versionone.ProtoGetterSettings) versiontwo.ProtoGetterSettings { + return versiontwo.ProtoGetterSettings{ + SkipGeneratedBy: old.SkipGeneratedBy, + SkipFiles: old.SkipFiles, + SkipAnyGenerated: old.SkipAnyGenerated, + ReplaceFirstArgInAppend: old.ReplaceFirstArgInAppend, + } +} + +func toReassignSettings(old versionone.ReassignSettings) versiontwo.ReassignSettings { + return versiontwo.ReassignSettings{ + Patterns: old.Patterns, + } +} + +func toRecvcheckSettings(old versionone.RecvcheckSettings) versiontwo.RecvcheckSettings { + return versiontwo.RecvcheckSettings{ + DisableBuiltin: old.DisableBuiltin, + Exclusions: old.Exclusions, + } +} + +func toReviveSettings(old versionone.ReviveSettings) versiontwo.ReviveSettings { + settings := versiontwo.ReviveSettings{ + MaxOpenFiles: old.MaxOpenFiles, + Confidence: old.Confidence, + Severity: old.Severity, + EnableAllRules: old.EnableAllRules, + ErrorCode: old.ErrorCode, + WarningCode: old.WarningCode, + } + + for _, rule := range old.Rules { + settings.Rules = append(settings.Rules, versiontwo.ReviveRule{ + Name: rule.Name, + Arguments: rule.Arguments, + Severity: rule.Severity, + Disabled: rule.Disabled, + Exclude: rule.Exclude, + }) + } + + for _, directive := range old.Directives { + settings.Directives = append(settings.Directives, versiontwo.ReviveDirective{ + Name: directive.Name, + Severity: directive.Severity, + }) + } + + return settings +} + +func toRowsErrCheckSettings(old versionone.RowsErrCheckSettings) versiontwo.RowsErrCheckSettings { + return versiontwo.RowsErrCheckSettings{ + Packages: old.Packages, + } +} + +func toSlogLintSettings(old versionone.SlogLintSettings) versiontwo.SlogLintSettings { + return versiontwo.SlogLintSettings{ + NoMixedArgs: old.NoMixedArgs, + KVOnly: old.KVOnly, + AttrOnly: old.AttrOnly, + NoGlobal: old.NoGlobal, + Context: old.Context, + StaticMsg: old.StaticMsg, + NoRawKeys: old.NoRawKeys, + KeyNamingCase: old.KeyNamingCase, + ForbiddenKeys: old.ForbiddenKeys, + ArgsOnSepLines: old.ArgsOnSepLines, + } +} + +func toSpancheckSettings(old versionone.SpancheckSettings) versiontwo.SpancheckSettings { + return versiontwo.SpancheckSettings{ + Checks: old.Checks, + IgnoreCheckSignatures: old.IgnoreCheckSignatures, + ExtraStartSpanSignatures: old.ExtraStartSpanSignatures, + } +} + +func toStaticCheckSettings(old versionone.LintersSettings) versiontwo.StaticCheckSettings { + checks := slices.Concat(old.Staticcheck.Checks, old.Stylecheck.Checks, old.Gosimple.Checks) + + return versiontwo.StaticCheckSettings{ + Checks: Unique(checks), + Initialisms: old.Stylecheck.Initialisms, + DotImportWhitelist: old.Stylecheck.DotImportWhitelist, + HTTPStatusCodeWhitelist: old.Stylecheck.HTTPStatusCodeWhitelist, + } +} + +func toTagAlignSettings(old versionone.TagAlignSettings) versiontwo.TagAlignSettings { + return versiontwo.TagAlignSettings{ + Align: old.Align, + Sort: old.Sort, + Order: old.Order, + Strict: old.Strict, + } +} + +func toTagliatelleSettings(old versionone.TagliatelleSettings) versiontwo.TagliatelleSettings { + tcase := versiontwo.TagliatelleCase{ + TagliatelleBase: versiontwo.TagliatelleBase{ + Rules: old.Case.Rules, + UseFieldName: old.Case.UseFieldName, + IgnoredFields: old.Case.IgnoredFields, + }, + Overrides: []versiontwo.TagliatelleOverrides{}, + } + + for k, rule := range old.Case.ExtendedRules { + if tcase.ExtendedRules == nil { + tcase.ExtendedRules = make(map[string]versiontwo.TagliatelleExtendedRule) + } + + tcase.ExtendedRules[k] = versiontwo.TagliatelleExtendedRule{ + Case: rule.Case, + ExtraInitialisms: rule.ExtraInitialisms, + InitialismOverrides: rule.InitialismOverrides, + } + } + + return versiontwo.TagliatelleSettings{Case: tcase} +} + +func toTestifylintSettings(old versionone.TestifylintSettings) versiontwo.TestifylintSettings { + return versiontwo.TestifylintSettings{ + EnableAll: old.EnableAll, + DisableAll: old.DisableAll, + EnabledCheckers: old.EnabledCheckers, + DisabledCheckers: old.DisabledCheckers, + BoolCompare: versiontwo.TestifylintBoolCompare{ + IgnoreCustomTypes: old.BoolCompare.IgnoreCustomTypes, + }, + ExpectedActual: versiontwo.TestifylintExpectedActual{ + ExpVarPattern: old.ExpectedActual.ExpVarPattern, + }, + Formatter: versiontwo.TestifylintFormatter{ + CheckFormatString: old.Formatter.CheckFormatString, + RequireFFuncs: old.Formatter.RequireFFuncs, + }, + GoRequire: versiontwo.TestifylintGoRequire{ + IgnoreHTTPHandlers: old.GoRequire.IgnoreHTTPHandlers, + }, + RequireError: versiontwo.TestifylintRequireError{ + FnPattern: old.RequireError.FnPattern, + }, + SuiteExtraAssertCall: versiontwo.TestifylintSuiteExtraAssertCall{ + Mode: old.SuiteExtraAssertCall.Mode, + }, + } +} + +func toTestpackageSettings(old versionone.TestpackageSettings) versiontwo.TestpackageSettings { + return versiontwo.TestpackageSettings{ + SkipRegexp: old.SkipRegexp, + AllowPackages: old.AllowPackages, + } +} + +func toThelperSettings(old versionone.ThelperSettings) versiontwo.ThelperSettings { + return versiontwo.ThelperSettings{ + Test: versiontwo.ThelperOptions{ + First: old.Test.First, + Name: old.Test.Name, + Begin: old.Test.Begin, + }, + Fuzz: versiontwo.ThelperOptions{ + First: old.Fuzz.First, + Name: old.Fuzz.Name, + Begin: old.Fuzz.Begin, + }, + Benchmark: versiontwo.ThelperOptions{ + First: old.Benchmark.First, + Name: old.Benchmark.Name, + Begin: old.Benchmark.Begin, + }, + TB: versiontwo.ThelperOptions{ + First: old.TB.First, + Name: old.TB.Name, + Begin: old.TB.Begin, + }, + } +} + +func toUnconvertSettings(old versionone.UnconvertSettings) versiontwo.UnconvertSettings { + return versiontwo.UnconvertSettings{ + FastMath: old.FastMath, + Safe: old.Safe, + } +} + +func toUnparamSettings(old versionone.UnparamSettings) versiontwo.UnparamSettings { + return versiontwo.UnparamSettings{ + CheckExported: old.CheckExported, + } +} + +func toUnusedSettings(old versionone.UnusedSettings) versiontwo.UnusedSettings { + return versiontwo.UnusedSettings{ + FieldWritesAreUses: old.FieldWritesAreUses, + PostStatementsAreReads: old.PostStatementsAreReads, + ExportedFieldsAreUsed: old.ExportedFieldsAreUsed, + ParametersAreUsed: old.ParametersAreUsed, + LocalVariablesAreUsed: old.LocalVariablesAreUsed, + GeneratedIsUsed: old.GeneratedIsUsed, + } +} + +func toUseStdlibVarsSettings(old versionone.UseStdlibVarsSettings) versiontwo.UseStdlibVarsSettings { + return versiontwo.UseStdlibVarsSettings{ + HTTPMethod: old.HTTPMethod, + HTTPStatusCode: old.HTTPStatusCode, + TimeWeekday: old.TimeWeekday, + TimeMonth: old.TimeMonth, + TimeLayout: old.TimeLayout, + CryptoHash: old.CryptoHash, + DefaultRPCPath: old.DefaultRPCPath, + SQLIsolationLevel: old.SQLIsolationLevel, + TLSSignatureScheme: old.TLSSignatureScheme, + ConstantKind: old.ConstantKind, + } +} + +func toUseTestingSettings(old versionone.UseTestingSettings) versiontwo.UseTestingSettings { + return versiontwo.UseTestingSettings{ + ContextBackground: old.ContextBackground, + ContextTodo: old.ContextTodo, + OSChdir: old.OSChdir, + OSMkdirTemp: old.OSMkdirTemp, + OSSetenv: old.OSSetenv, + OSTempDir: old.OSTempDir, + OSCreateTemp: old.OSCreateTemp, + } +} + +func toVarnamelenSettings(old versionone.VarnamelenSettings) versiontwo.VarnamelenSettings { + return versiontwo.VarnamelenSettings{ + MaxDistance: old.MaxDistance, + MinNameLength: old.MinNameLength, + CheckReceiver: old.CheckReceiver, + CheckReturn: old.CheckReturn, + CheckTypeParam: old.CheckTypeParam, + IgnoreNames: old.IgnoreNames, + IgnoreTypeAssertOk: old.IgnoreTypeAssertOk, + IgnoreMapIndexOk: old.IgnoreMapIndexOk, + IgnoreChanRecvOk: old.IgnoreChanRecvOk, + IgnoreDecls: old.IgnoreDecls, + } +} + +func toWhitespaceSettings(old versionone.WhitespaceSettings) versiontwo.WhitespaceSettings { + return versiontwo.WhitespaceSettings{ + MultiIf: old.MultiIf, + MultiFunc: old.MultiFunc, + } +} + +func toWrapcheckSettings(old versionone.WrapcheckSettings) versiontwo.WrapcheckSettings { + return versiontwo.WrapcheckSettings{ + ExtraIgnoreSigs: old.ExtraIgnoreSigs, + IgnoreSigs: old.IgnoreSigs, + IgnoreSigRegexps: old.IgnoreSigRegexps, + IgnorePackageGlobs: old.IgnorePackageGlobs, + IgnoreInterfaceRegexps: old.IgnoreInterfaceRegexps, + } +} + +func toWSLSettings(old versionone.WSLSettings) versiontwo.WSLSettings { + return versiontwo.WSLSettings{ + StrictAppend: old.StrictAppend, + AllowAssignAndCallCuddle: old.AllowAssignAndCallCuddle, + AllowAssignAndAnythingCuddle: old.AllowAssignAndAnythingCuddle, + AllowMultiLineAssignCuddle: old.AllowMultiLineAssignCuddle, + ForceCaseTrailingWhitespaceLimit: old.ForceCaseTrailingWhitespaceLimit, + AllowTrailingComment: old.AllowTrailingComment, + AllowSeparatedLeadingComment: old.AllowSeparatedLeadingComment, + AllowCuddleDeclaration: old.AllowCuddleDeclaration, + AllowCuddleWithCalls: old.AllowCuddleWithCalls, + AllowCuddleWithRHS: old.AllowCuddleWithRHS, + ForceCuddleErrCheckAndAssign: old.ForceCuddleErrCheckAndAssign, + ErrorVariableNames: old.ErrorVariableNames, + ForceExclusiveShortDeclarations: old.ForceExclusiveShortDeclarations, + } +} + +func toCustom(old map[string]versionone.CustomLinterSettings) map[string]versiontwo.CustomLinterSettings { + if old == nil { + return nil + } + + settings := map[string]versiontwo.CustomLinterSettings{} + + for k, s := range old { + settings[k] = versiontwo.CustomLinterSettings{ + Type: s.Type, + Path: s.Path, + Description: s.Description, + OriginalURL: s.OriginalURL, + Settings: s.Settings, + } + } + + return settings +} diff --git a/pkg/commands/internal/migrate/migrate_output.go b/pkg/commands/internal/migrate/migrate_output.go new file mode 100644 index 000000000000..c2ee009edb3e --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_output.go @@ -0,0 +1,103 @@ +package migrate + +import ( + "slices" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versiontwo" +) + +func toOutput(old *versionone.Config) versiontwo.Output { + formats := versiontwo.Formats{} + + oldFormats := cleanIncompatibleFormats(old.Output.Formats, "colored-line-number", "line-number") + oldFormats = cleanIncompatibleFormats(oldFormats, "colored-tab", "tab") + oldFormats = cleanIncompatibleFormats(oldFormats, "junit-xml-extended", "junit-xml") + + for _, format := range oldFormats { + switch ptr.Deref(format.Format) { + case "colored-line-number": + formats.Text.PrintLinterName = old.Output.PrintLinterName + formats.Text.PrintIssuedLine = old.Output.PrintIssuedLine + formats.Text.Colors = nil // color is true by default (flags). + formats.Text.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "line-number": + formats.Text.PrintLinterName = old.Output.PrintLinterName + formats.Text.PrintIssuedLine = old.Output.PrintIssuedLine + formats.Text.Colors = ptr.Pointer(false) + formats.Text.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "json": + formats.JSON.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "colored-tab": + formats.Tab.PrintLinterName = old.Output.PrintLinterName + formats.Tab.Colors = nil // Colors is true by default (flags). + formats.Tab.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "tab": + formats.Tab.PrintLinterName = old.Output.PrintLinterName + formats.Tab.Colors = ptr.Pointer(false) + formats.Tab.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "html": + formats.HTML.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "checkstyle": + formats.Checkstyle.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "code-climate": + formats.CodeClimate.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "junit-xml": + formats.JUnitXML.Extended = nil // Extended is false by default. + formats.JUnitXML.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "junit-xml-extended": + formats.JUnitXML.Extended = ptr.Pointer(true) + formats.JUnitXML.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "github-actions": + // Ignored + + case "teamcity": + formats.TeamCity.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + + case "sarif": + formats.Sarif.Path = ptr.Pointer(defaultFormatPath(ptr.Deref(format.Path))) + } + } + + return versiontwo.Output{ + Formats: formats, + SortOrder: old.Output.SortOrder, + PathPrefix: old.Output.PathPrefix, + ShowStats: nil, // Enforce the new default. (nil -> omitempty -> true) + } +} + +func defaultFormatPath(p string) string { + if p == "" { + return "stdout" + } + + return p +} + +func cleanIncompatibleFormats(old versionone.OutputFormats, f1, f2 string) versionone.OutputFormats { + index1 := slices.IndexFunc(old, func(format versionone.OutputFormat) bool { + return ptr.Deref(format.Format) == f1 + }) + + index2 := slices.IndexFunc(old, func(format versionone.OutputFormat) bool { + return ptr.Deref(format.Format) == f2 + }) + + if index1 >= 0 && index2 >= 0 { + return slices.Delete(old, index2, index2+1) + } + + return old +} diff --git a/pkg/commands/internal/migrate/migrate_run.go b/pkg/commands/internal/migrate/migrate_run.go new file mode 100644 index 000000000000..ebedecd5b7e9 --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_run.go @@ -0,0 +1,34 @@ +package migrate + +import ( + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versiontwo" +) + +func toRun(old *versionone.Config) versiontwo.Run { + var relativePathMode *string + if ptr.Deref(old.Run.RelativePathMode) != "cfg" { + // cfg is the new default. + relativePathMode = old.Run.RelativePathMode + } + + var concurrency *int + if ptr.Deref(old.Run.Concurrency) != 0 { + // 0 is the new default + concurrency = old.Run.Concurrency + } + + return versiontwo.Run{ + Timeout: 0, // Enforce new default. + Concurrency: concurrency, + Go: old.Run.Go, + RelativePathMode: relativePathMode, + BuildTags: old.Run.BuildTags, + ModulesDownloadMode: old.Run.ModulesDownloadMode, + ExitCodeIfIssuesFound: old.Run.ExitCodeIfIssuesFound, + AnalyzeTests: old.Run.AnalyzeTests, + AllowParallelRunners: old.Run.AllowParallelRunners, + AllowSerialRunners: old.Run.AllowSerialRunners, + } +} diff --git a/pkg/commands/internal/migrate/migrate_severity.go b/pkg/commands/internal/migrate/migrate_severity.go new file mode 100644 index 000000000000..00fd0f858662 --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_severity.go @@ -0,0 +1,33 @@ +package migrate + +import ( + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versiontwo" +) + +func toSeverity(old *versionone.Config) versiontwo.Severity { + var rules []versiontwo.SeverityRule + + for _, rule := range old.Severity.Rules { + names := convertStaticcheckLinterNames(convertAlternativeNames(rule.Linters)) + if len(rule.Linters) > 0 && len(names) == 0 { + continue + } + + rules = append(rules, versiontwo.SeverityRule{ + BaseRule: versiontwo.BaseRule{ + Linters: names, + Path: rule.Path, + PathExcept: rule.PathExcept, + Text: rule.Text, + Source: rule.Source, + }, + Severity: rule.Severity, + }) + } + + return versiontwo.Severity{ + Default: old.Severity.Default, + Rules: rules, + } +} diff --git a/pkg/commands/internal/migrate/migrate_test.go b/pkg/commands/internal/migrate/migrate_test.go new file mode 100644 index 000000000000..9880a4dbcb1f --- /dev/null +++ b/pkg/commands/internal/migrate/migrate_test.go @@ -0,0 +1,113 @@ +package migrate + +import ( + "bytes" + "io/fs" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/fakeloader" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/parser" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" +) + +type fakeFile struct { + bytes.Buffer + name string +} + +func newFakeFile(name string) *fakeFile { + return &fakeFile{name: name} +} + +func (f *fakeFile) Name() string { + return f.name +} + +func TestToConfig(t *testing.T) { + var testFiles []string + + err := filepath.WalkDir("testdata", func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + + if d.IsDir() { + return nil + } + + if strings.Contains(path, ".golden.") { + return nil + } + + testFiles = append(testFiles, path) + + return nil + }) + + require.NoError(t, err) + + for _, fileIn := range testFiles { + t.Run(fileIn, func(t *testing.T) { + t.Parallel() + + ext := filepath.Ext(fileIn) + fileGolden := strings.TrimSuffix(fileIn, ext) + ".golden" + ext + + testFile(t, fileIn, fileGolden, false) + }) + } +} + +func testFile(t *testing.T, in, golden string, update bool) { + t.Helper() + + old := versionone.NewConfig() + + // Fake load of the configuration. + // IMPORTANT: The default values from flags are not set. + err := fakeloader.Load(in, old) + require.NoError(t, err) + + if update { + updateGolden(t, golden, old) + } + + buf := newFakeFile("test" + filepath.Ext(golden)) + + err = parser.Encode(ToConfig(old), buf) + require.NoError(t, err) + + expected, err := os.ReadFile(golden) + require.NoError(t, err) + + switch filepath.Ext(golden) { + case ".yml": + assert.YAMLEq(t, string(expected), buf.String()) + case ".json": + assert.JSONEq(t, string(expected), buf.String()) + case ".toml": + assert.Equal(t, string(expected), buf.String()) + default: + require.Failf(t, "unsupported extension: %s", golden) + } +} + +func updateGolden(t *testing.T, golden string, old *versionone.Config) { + t.Helper() + + fileOut, err := os.Create(golden) + require.NoError(t, err) + + defer func() { + _ = fileOut.Close() + }() + + err = parser.Encode(ToConfig(old), fileOut) + require.NoError(t, err) +} diff --git a/pkg/commands/internal/migrate/parser/parser.go b/pkg/commands/internal/migrate/parser/parser.go new file mode 100644 index 000000000000..ea00b41f5a78 --- /dev/null +++ b/pkg/commands/internal/migrate/parser/parser.go @@ -0,0 +1,87 @@ +package parser + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" + "path/filepath" + "strings" + + "github.com/pelletier/go-toml/v2" + "gopkg.in/yaml.v3" +) + +type File interface { + io.ReadWriter + Name() string +} + +// Decode decodes a file into data. +// The choice of the decoder is based on the file extension. +func Decode(file File, data any) error { + ext := filepath.Ext(file.Name()) + + switch strings.ToLower(ext) { + case ".yaml", ".yml", ".json": + err := yaml.NewDecoder(file).Decode(data) + if err != nil && !errors.Is(err, io.EOF) { + return fmt.Errorf("YAML decode file %s: %w", file.Name(), err) + } + + case ".toml": + err := toml.NewDecoder(file).Decode(&data) + if err != nil { + return fmt.Errorf("TOML decode file %s: %w", file.Name(), err) + } + + default: + return fmt.Errorf("unsupported file type: %s", ext) + } + + return nil +} + +// Encode encodes data into a file. +// The choice of the encoder is based on the file extension. +func Encode(data any, dstFile File) error { + ext := filepath.Ext(dstFile.Name()) + + switch strings.ToLower(ext) { + case ".yml", ".yaml": + encoder := yaml.NewEncoder(dstFile) + encoder.SetIndent(2) + + return encoder.Encode(data) + + case ".toml": + encoder := toml.NewEncoder(dstFile) + + return encoder.Encode(data) + + case ".json": + // The JSON encoder converts empty struct to `{}` instead of nothing (even with omitempty JSON struct tags). + // So we need to use the YAML encoder as bridge to create JSON file. + + var buf bytes.Buffer + err := yaml.NewEncoder(&buf).Encode(data) + if err != nil { + return err + } + + raw := map[string]any{} + err = yaml.NewDecoder(&buf).Decode(raw) + if err != nil { + return err + } + + encoder := json.NewEncoder(dstFile) + encoder.SetIndent("", " ") + + return encoder.Encode(raw) + + default: + return fmt.Errorf("unsupported file type: %s", ext) + } +} diff --git a/pkg/commands/internal/migrate/ptr/ptr.go b/pkg/commands/internal/migrate/ptr/ptr.go new file mode 100644 index 000000000000..b0c7974e0e9f --- /dev/null +++ b/pkg/commands/internal/migrate/ptr/ptr.go @@ -0,0 +1,12 @@ +package ptr + +func Deref[T any](v *T) T { + if v == nil { + var zero T + return zero + } + + return *v +} + +func Pointer[T any](v T) *T { return &v } diff --git a/pkg/commands/internal/migrate/testdata/json/empty.golden.json b/pkg/commands/internal/migrate/testdata/json/empty.golden.json new file mode 100644 index 000000000000..019cc1ee7f82 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/json/empty.golden.json @@ -0,0 +1,27 @@ +{ + "formatters": { + "exclusions": { + "generated": "lax", + "paths": [ + "examples$" + ] + } + }, + "linters": { + "exclusions": { + "generated": "lax", + "paths": [ + "third_party$", + "builtin$", + "examples$" + ], + "presets": [ + "comments", + "common-false-positives", + "legacy", + "std-error-handling" + ] + } + }, + "version": "2" +} diff --git a/pkg/commands/internal/migrate/testdata/json/empty.json b/pkg/commands/internal/migrate/testdata/json/empty.json new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/pkg/commands/internal/migrate/testdata/toml/empty.golden.toml b/pkg/commands/internal/migrate/testdata/toml/empty.golden.toml new file mode 100644 index 000000000000..5b9e9de21202 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/toml/empty.golden.toml @@ -0,0 +1,23 @@ +version = '2' + +[linters] +[linters.exclusions] +generated = 'lax' +presets = [ + 'comments', + 'common-false-positives', + 'legacy', + 'std-error-handling' +] +paths = [ + 'third_party$', + 'builtin$', + 'examples$' +] + +[formatters] +[formatters.exclusions] +generated = 'lax' +paths = [ + 'examples$' +] diff --git a/pkg/commands/internal/migrate/testdata/toml/empty.toml b/pkg/commands/internal/migrate/testdata/toml/empty.toml new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/pkg/commands/internal/migrate/testdata/toml/linters-settings_goheader.golden.toml b/pkg/commands/internal/migrate/testdata/toml/linters-settings_goheader.golden.toml new file mode 100644 index 000000000000..a804c1d00564 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/toml/linters-settings_goheader.golden.toml @@ -0,0 +1,32 @@ +version = '2' + +[linters] +[linters.settings] +[linters.settings.goheader] +template = """ +Put here copyright header template for source code files +For example: +Note: {{ YEAR }} is a builtin value that returns the year relative to the current machine time. + +{{ AUTHOR }} {{ COMPANY }} {{ YEAR }} +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the \"License\"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an \"AS IS\" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +""" +template-path = '/path/to/my/template.tmpl' + +[linters.settings.goheader.values] +[linters.settings.goheader.values.const] +COMPANY = 'MY COMPANY' + +[linters.settings.goheader.values.regexp] +AUTHOR = '.*@mycompany\.com' diff --git a/pkg/commands/internal/migrate/testdata/toml/linters-settings_goheader.toml b/pkg/commands/internal/migrate/testdata/toml/linters-settings_goheader.toml new file mode 100644 index 000000000000..4ce0c0f2a5b3 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/toml/linters-settings_goheader.toml @@ -0,0 +1,39 @@ +[issues] +# Only to not generate unrelated elements inside golden. +exclude-use-default = false +# Only to not generate unrelated elements inside golden. +exclude-generated = "strict" +# Only to not generate unrelated elements inside golden. +exclude-dirs-use-default = false + +[linters-settings] + +[linters-settings.goheader] +template = """ +Put here copyright header template for source code files +For example: +Note: {{ YEAR }} is a builtin value that returns the year relative to the current machine time. + +{{ AUTHOR }} {{ COMPANY }} {{ YEAR }} +SPDX-License-Identifier: Apache-2.0 + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +""" +template-path = "/path/to/my/template.tmpl" + +[linters-settings.goheader.values] + +[linters-settings.goheader.values.const] +COMPANY = "MY COMPANY" + +[linters-settings.goheader.values.regexp] +AUTHOR = ".*@mycompany\\.com" diff --git a/pkg/commands/internal/migrate/testdata/yaml/empty.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/empty.golden.yml new file mode 100644 index 000000000000..10272697f830 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/empty.golden.yml @@ -0,0 +1,18 @@ +version: "2" +linters: + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + exclusions: + generated: lax + paths: + - examples$ diff --git a/pkg/commands/internal/migrate/testdata/yaml/empty.yml b/pkg/commands/internal/migrate/testdata/yaml/empty.yml new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_01_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_01_a.golden.yml new file mode 100644 index 000000000000..fa86b75d3a00 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_01_a.golden.yml @@ -0,0 +1,8 @@ +version: "2" +linters: + exclusions: + paths: + - .*\.my\.go$ + - lib/bad.go + - src/external_libs + - autogenerated_by_my_lib diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_01_a.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_01_a.yml new file mode 100644 index 000000000000..cd328a58bcc3 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_01_a.yml @@ -0,0 +1,14 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-dirs: + - src/external_libs + - autogenerated_by_my_lib + exclude-files: + - ".*\\.my\\.go$" + - lib/bad.go diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_01_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_01_b.golden.yml new file mode 100644 index 000000000000..51259f761a95 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_01_b.golden.yml @@ -0,0 +1,17 @@ +version: "2" +linters: + exclusions: + paths: + - .*\.my\.go$ + - lib/bad.go + - src/external_libs + - autogenerated_by_my_lib +formatters: + enable: + - gofmt + exclusions: + paths: + - .*\.my\.go$ + - lib/bad.go + - src/external_libs + - autogenerated_by_my_lib diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_01_b.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_01_b.yml new file mode 100644 index 000000000000..d74f9c2c80bb --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_01_b.yml @@ -0,0 +1,18 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-dirs: + - src/external_libs + - autogenerated_by_my_lib + exclude-files: + - ".*\\.my\\.go$" + - lib/bad.go + +linters: + enable: + - gofmt diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_02_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_02_a.golden.yml new file mode 100644 index 000000000000..8a6c4ca0ca54 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_02_a.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + exclusions: + rules: + - path: (.+)\.go$ + text: abcdef diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_02_a.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_02_a.yml new file mode 100644 index 000000000000..a8ad68fa78c8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_02_a.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-case-sensitive: false + exclude: + - abcdef diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_02_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_02_b.golden.yml new file mode 100644 index 000000000000..ce913a1ef188 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_02_b.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + exclusions: + rules: + - path: (.+)\.go$ + text: (?i)abcdef diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_02_b.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_02_b.yml new file mode 100644 index 000000000000..371323d8cb17 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_02_b.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-case-sensitive: true + exclude: + - abcdef diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_04_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_04_a.golden.yml new file mode 100644 index 000000000000..e0536ce14fe3 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_04_a.golden.yml @@ -0,0 +1,32 @@ +version: "2" +linters: + exclusions: + rules: + - linters: + - dupl + - errcheck + - gocyclo + - gosec + path: _test\.go + - linters: + - staticcheck + path-except: _test\.go + - linters: + - gosec + path: internal/hmac/ + text: weak cryptographic primitive + - linters: + - staticcheck + text: 'SA9003:' + - linters: + - staticcheck + text: 'ST1006:' + - linters: + - staticcheck + text: 'S1033:' + - linters: + - lll + source: '^//go:generate ' + - linters: + - err113 + source: foo diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_04_a.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_04_a.yml new file mode 100644 index 000000000000..5115e5a8fd1c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_04_a.yml @@ -0,0 +1,47 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-case-sensitive: false + exclude-rules: + - path: _test\.go + linters: + - gocyclo + - errcheck + - dupl + - gosec + + - path-except: _test\.go + linters: + - staticcheck + - stylecheck + - gosimple + + - path: internal/hmac/ + text: "weak cryptographic primitive" + linters: + - gosec + + - linters: + - staticcheck + text: "SA9003:" + + - linters: + - stylecheck + text: "ST1006:" + + - linters: + - gosimple + text: "S1033:" + + - linters: + - lll + source: "^//go:generate " + + - linters: + - goerr113 + source: "foo" diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_04_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_04_b.golden.yml new file mode 100644 index 000000000000..40d6d4967a45 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_04_b.golden.yml @@ -0,0 +1,32 @@ +version: "2" +linters: + exclusions: + rules: + - linters: + - dupl + - errcheck + - gocyclo + - gosec + path: _test\.go + - linters: + - staticcheck + path-except: _test\.go + - linters: + - gosec + path: internal/hmac/ + text: (?i)weak cryptographic primitive + - linters: + - staticcheck + text: '(?i)SA9003:' + - linters: + - staticcheck + text: '(?i)ST1006:' + - linters: + - staticcheck + text: '(?i)S1033:' + - linters: + - lll + source: '(?i)^//go:generate ' + - linters: + - err113 + source: (?i)foo diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_04_b.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_04_b.yml new file mode 100644 index 000000000000..2d77e7360e95 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_04_b.yml @@ -0,0 +1,47 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-case-sensitive: true + exclude-rules: + - path: _test\.go + linters: + - gocyclo + - errcheck + - dupl + - gosec + + - path-except: _test\.go + linters: + - staticcheck + - stylecheck + - gosimple + + - path: internal/hmac/ + text: "weak cryptographic primitive" + linters: + - gosec + + - linters: + - staticcheck + text: "SA9003:" + + - linters: + - stylecheck + text: "ST1006:" + + - linters: + - gosimple + text: "S1033:" + + - linters: + - lll + source: "^//go:generate " + + - linters: + - goerr113 + source: "foo" diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_04_c.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_04_c.golden.yml new file mode 100644 index 000000000000..26b4afdb1e3a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_04_c.golden.yml @@ -0,0 +1 @@ +version: "2" diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_04_c.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_04_c.yml new file mode 100644 index 000000000000..a699ed8eedf2 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_04_c.yml @@ -0,0 +1,31 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-case-sensitive: true + + exclude-rules: + - path: _test\.go + linters: + - typecheck + + - path-except: _test\.go + linters: + - typecheck + + - path: internal/hmac/ + text: "weak cryptographic primitive" + linters: + - typecheck + + - linters: + - typecheck + text: "SA9003:" + + - linters: + - typecheck + source: "foo" diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_05_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_05_a.golden.yml new file mode 100644 index 000000000000..26b4afdb1e3a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_05_a.golden.yml @@ -0,0 +1 @@ +version: "2" diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_05_a.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_05_a.yml new file mode 100644 index 000000000000..af4bf91f8348 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_05_a.yml @@ -0,0 +1,7 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-generated: strict diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_05_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_05_b.golden.yml new file mode 100644 index 000000000000..cee0ce09d5ff --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_05_b.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + exclusions: + generated: disable +formatters: + exclusions: + generated: disable diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_05_b.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_05_b.yml new file mode 100644 index 000000000000..1020cee385b3 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_05_b.yml @@ -0,0 +1,7 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-generated: disable diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_05_c.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_05_c.golden.yml new file mode 100644 index 000000000000..6311bf640f4e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_05_c.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + exclusions: + generated: lax +formatters: + exclusions: + generated: lax diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_05_c.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_05_c.yml new file mode 100644 index 000000000000..db5465604c05 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_05_c.yml @@ -0,0 +1,8 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-generated: lax + diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_a.golden.yml new file mode 100644 index 000000000000..26b4afdb1e3a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_a.golden.yml @@ -0,0 +1 @@ +version: "2" diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_a.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_a.yml new file mode 100644 index 000000000000..a0a5729e555d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_a.yml @@ -0,0 +1,8 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-use-default: false + diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_b.golden.yml new file mode 100644 index 000000000000..94d007dc75ef --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_b.golden.yml @@ -0,0 +1,8 @@ +version: "2" +linters: + exclusions: + presets: + - comments + - common-false-positives + - legacy + - std-error-handling diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_b.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_b.yml new file mode 100644 index 000000000000..ab1278c33880 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_b.yml @@ -0,0 +1,8 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-use-default: true + diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_c.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_c.golden.yml new file mode 100644 index 000000000000..26b4afdb1e3a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_c.golden.yml @@ -0,0 +1 @@ +version: "2" diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_c.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_c.yml new file mode 100644 index 000000000000..7c3480af1411 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_c.yml @@ -0,0 +1,24 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-use-default: true + # all + include: + - EXC0001 + - EXC0002 + - EXC0003 + - EXC0004 + - EXC0005 + - EXC0006 + - EXC0007 + - EXC0008 + - EXC0009 + - EXC0010 + - EXC0011 + - EXC0012 + - EXC0013 + - EXC0014 + - EXC0015 diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_d.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_d.golden.yml new file mode 100644 index 000000000000..b8a8f5d5968a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_d.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + exclusions: + presets: + - common-false-positives + - legacy + - std-error-handling diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_d.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_d.yml new file mode 100644 index 000000000000..9cf6da3b1bee --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_d.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-use-default: true + # Related to comments + include: + - EXC0014 + - EXC0015 diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_e.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_e.golden.yml new file mode 100644 index 000000000000..2c1012e31d59 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_e.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + exclusions: + presets: + - comments + - common-false-positives + - std-error-handling diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_e.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_e.yml new file mode 100644 index 000000000000..b7efc196be66 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_e.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-use-default: true + # Related to legacy + include: + - EXC0005 diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_f.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_f.golden.yml new file mode 100644 index 000000000000..f4cccdc57f2a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_f.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + exclusions: + presets: + - comments + - common-false-positives + - legacy diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_f.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_f.yml new file mode 100644 index 000000000000..d8da54941afd --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_f.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-use-default: true + # Related to std-error-handling + include: + - EXC0001 diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_g.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_g.golden.yml new file mode 100644 index 000000000000..a158cf917b1e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_g.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + exclusions: + presets: + - comments + - legacy + - std-error-handling diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_g.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_g.yml new file mode 100644 index 000000000000..9a4477568633 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_g.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-use-default: true + # Related to common-false-positives + include: + - EXC0006 + - EXC0007 diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_h.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_h.golden.yml new file mode 100644 index 000000000000..94d007dc75ef --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_h.golden.yml @@ -0,0 +1,8 @@ +version: "2" +linters: + exclusions: + presets: + - comments + - common-false-positives + - legacy + - std-error-handling diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_06_h.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_06_h.yml new file mode 100644 index 000000000000..6f61e8fc8106 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_06_h.yml @@ -0,0 +1,5 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_07_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_07_a.golden.yml new file mode 100644 index 000000000000..889baa58848a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_07_a.golden.yml @@ -0,0 +1,11 @@ +version: "2" +linters: + exclusions: + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + exclusions: + paths: + - examples$ diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_07_a.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_07_a.yml new file mode 100644 index 000000000000..34e28f8f3578 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_07_a.yml @@ -0,0 +1,7 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + + exclude-dirs-use-default: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_07_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_07_b.golden.yml new file mode 100644 index 000000000000..4b3500282ebc --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_07_b.golden.yml @@ -0,0 +1,14 @@ +version: "2" +linters: + default: none + exclusions: + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - goimports + exclusions: + paths: + - examples$ diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_07_b.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_07_b.yml new file mode 100644 index 000000000000..ed1b4f271f75 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_07_b.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + + exclude-dirs-use-default: true + +linters: + disable-all: true + enable: + - goimports diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_08_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_08_a.golden.yml new file mode 100644 index 000000000000..4c02e020fe5e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_08_a.golden.yml @@ -0,0 +1,5 @@ +version: "2" +issues: + max-issues-per-linter: 0 + max-same-issues: 0 + uniq-by-line: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_08_a.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_08_a.yml new file mode 100644 index 000000000000..fa9961fbe677 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_08_a.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + max-issues-per-linter: 0 + max-same-issues: 0 + uniq-by-line: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_08_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_08_b.golden.yml new file mode 100644 index 000000000000..86f88f7d71bf --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_08_b.golden.yml @@ -0,0 +1,4 @@ +version: "2" +issues: + max-issues-per-linter: 66 + uniq-by-line: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_08_b.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_08_b.yml new file mode 100644 index 000000000000..9236523fc6b3 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_08_b.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + max-issues-per-linter: 66 + uniq-by-line: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_09_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_09_a.golden.yml new file mode 100644 index 000000000000..f2490438953c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_09_a.golden.yml @@ -0,0 +1,8 @@ +version: "2" +issues: + new-from-rev: HEAD + new-from-merge-base: main + new-from-patch: path/to/patch/file + whole-files: true + new: true + fix: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_09_a.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_09_a.yml new file mode 100644 index 000000000000..4ea6f39c8abd --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_09_a.yml @@ -0,0 +1,14 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + new: true + new-from-merge-base: main + new-from-rev: HEAD + new-from-patch: path/to/patch/file + whole-files: true + fix: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_09_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_09_b.golden.yml new file mode 100644 index 000000000000..f5422097b369 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_09_b.golden.yml @@ -0,0 +1,8 @@ +version: "2" +issues: + new-from-rev: "" + new-from-merge-base: "" + new-from-patch: "" + whole-files: false + new: false + fix: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_09_b.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_09_b.yml new file mode 100644 index 000000000000..b0ad364fb597 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_09_b.yml @@ -0,0 +1,14 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + new: false + new-from-merge-base: '' + new-from-rev: '' + new-from-patch: '' + whole-files: false + fix: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_10.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_10.golden.yml new file mode 100644 index 000000000000..14b8dc090ab7 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_10.golden.yml @@ -0,0 +1,9 @@ +version: "2" +linters: + default: none +formatters: + enable: + - goimports + exclusions: + paths: + - \.(generated\.deepcopy|pb)\.go$ diff --git a/pkg/commands/internal/migrate/testdata/yaml/issues_10.yml b/pkg/commands/internal/migrate/testdata/yaml/issues_10.yml new file mode 100644 index 000000000000..67c81668e2aa --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/issues_10.yml @@ -0,0 +1,17 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + + exclude-rules: + - path: "\\.(generated\\.deepcopy|pb)\\.go$" + linters: + - goimports + +linters: + disable-all: true + enable: + - goimports diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_asasalint.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_asasalint.golden.yml new file mode 100644 index 000000000000..cfe1da194828 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_asasalint.golden.yml @@ -0,0 +1,13 @@ +version: "2" +linters: + settings: + asasalint: + exclude: + - Append + - \.Wrapf + use-builtin-exclusions: false + exclusions: + rules: + - linters: + - asasalint + path: (.+)_test\.go diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_asasalint.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_asasalint.yml new file mode 100644 index 000000000000..42ef7b77e3b4 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_asasalint.yml @@ -0,0 +1,15 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + asasalint: + exclude: + - Append + - \.Wrapf + use-builtin-exclusions: false + ignore-test: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_bidichk.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_bidichk.golden.yml new file mode 100644 index 000000000000..3283f461ae1d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_bidichk.golden.yml @@ -0,0 +1,13 @@ +version: "2" +linters: + settings: + bidichk: + left-to-right-embedding: true + right-to-left-embedding: false + pop-directional-formatting: false + left-to-right-override: false + right-to-left-override: false + left-to-right-isolate: false + right-to-left-isolate: false + first-strong-isolate: false + pop-directional-isolate: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_bidichk.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_bidichk.yml new file mode 100644 index 000000000000..c7425c8ba6b9 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_bidichk.yml @@ -0,0 +1,19 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + bidichk: + left-to-right-embedding: true + right-to-left-embedding: false + pop-directional-formatting: false + left-to-right-override: false + right-to-left-override: false + left-to-right-isolate: false + right-to-left-isolate: false + first-strong-isolate: false + pop-directional-isolate: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_copyloopvar.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_copyloopvar.golden.yml new file mode 100644 index 000000000000..85e8883c6991 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_copyloopvar.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + copyloopvar: + check-alias: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_copyloopvar.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_copyloopvar.yml new file mode 100644 index 000000000000..f95fe81d9c52 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_copyloopvar.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + copyloopvar: + check-alias: true + diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_custom.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_custom.golden.yml new file mode 100644 index 000000000000..a8bffb497b3c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_custom.golden.yml @@ -0,0 +1,11 @@ +version: "2" +linters: + settings: + custom: + example: + type: module + path: /path/to/example.so + description: This is an example usage of a plugin linter. + original-url: github.com/golangci/example-linter + settings: + foo: bar diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_custom.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_custom.yml new file mode 100644 index 000000000000..68c0d30ffb3c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_custom.yml @@ -0,0 +1,17 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + custom: + example: + type: module + path: /path/to/example.so + description: This is an example usage of a plugin linter. + original-url: github.com/golangci/example-linter + settings: + foo: bar diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_cyclop.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_cyclop.golden.yml new file mode 100644 index 000000000000..c2a3d2e838e1 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_cyclop.golden.yml @@ -0,0 +1,11 @@ +version: "2" +linters: + settings: + cyclop: + max-complexity: 10 + package-average: 0.5 + exclusions: + rules: + - linters: + - cyclop + path: (.+)_test\.go diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_cyclop.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_cyclop.yml new file mode 100644 index 000000000000..092cf9a140ae --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_cyclop.yml @@ -0,0 +1,13 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + cyclop: + max-complexity: 10 + package-average: 0.5 + skip-tests: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_decorder.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_decorder.golden.yml new file mode 100644 index 000000000000..f4881fedeb58 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_decorder.golden.yml @@ -0,0 +1,16 @@ +version: "2" +linters: + settings: + decorder: + dec-order: + - type + - const + - var + - func + ignore-underscore-vars: false + disable-dec-num-check: false + disable-type-dec-num-check: false + disable-const-dec-num-check: false + disable-var-dec-num-check: false + disable-dec-order-check: false + disable-init-func-first-check: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_decorder.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_decorder.yml new file mode 100644 index 000000000000..01fc08b9357b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_decorder.yml @@ -0,0 +1,22 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + decorder: + dec-order: + - type + - const + - var + - func + ignore-underscore-vars: false + disable-dec-order-check: false + disable-init-func-first-check: false + disable-dec-num-check: false + disable-type-dec-num-check: false + disable-const-dec-num-check: false + disable-var-dec-num-check: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_depguard.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_depguard.golden.yml new file mode 100644 index 000000000000..168f02012f3f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_depguard.golden.yml @@ -0,0 +1,19 @@ +version: "2" +linters: + settings: + depguard: + rules: + main: + list-mode: lax + files: + - '!**/*_a _file.go' + allow: + - $gostd + - github.com/OpenPeeDeeP + deny: + - pkg: math/rand$ + desc: use math/rand/v2 + - pkg: github.com/sirupsen/logrus + desc: not allowed + - pkg: github.com/pkg/errors + desc: Should be replaced by standard lib errors package diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_depguard.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_depguard.yml new file mode 100644 index 000000000000..874f669f76d5 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_depguard.yml @@ -0,0 +1,25 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + depguard: + rules: + main: + list-mode: lax + files: + - "!**/*_a _file.go" + allow: + - $gostd + - github.com/OpenPeeDeeP + deny: + - pkg: "math/rand$" + desc: use math/rand/v2 + - pkg: "github.com/sirupsen/logrus" + desc: not allowed + - pkg: "github.com/pkg/errors" + desc: Should be replaced by standard lib errors package diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dogsled.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dogsled.golden.yml new file mode 100644 index 000000000000..c75baa803659 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dogsled.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + dogsled: + max-blank-identifiers: 3 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dogsled.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dogsled.yml new file mode 100644 index 000000000000..3bee75f8ed29 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dogsled.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + dogsled: + max-blank-identifiers: 3 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupl.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupl.golden.yml new file mode 100644 index 000000000000..db94665fb25d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupl.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + dupl: + threshold: 100 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupl.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupl.yml new file mode 100644 index 000000000000..1746307e0324 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupl.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + dupl: + threshold: 100 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupword.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupword.golden.yml new file mode 100644 index 000000000000..3c80ae3c409d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupword.golden.yml @@ -0,0 +1,10 @@ +version: "2" +linters: + settings: + dupword: + keywords: + - the + - and + - a + ignore: + - 0C0C diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupword.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupword.yml new file mode 100644 index 000000000000..8e7149d7509c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_dupword.yml @@ -0,0 +1,16 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + dupword: + keywords: + - "the" + - "and" + - "a" + ignore: + - "0C0C" diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errcheck.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errcheck.golden.yml new file mode 100644 index 000000000000..8e2dbdc8326d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errcheck.golden.yml @@ -0,0 +1,11 @@ +version: "2" +linters: + settings: + errcheck: + disable-default-exclusions: true + check-type-assertions: true + check-blank: true + exclude-functions: + - io/ioutil.ReadFile + - io.Copy(*bytes.Buffer) + - io.Copy(os.Stdout) diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errcheck.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errcheck.yml new file mode 100644 index 000000000000..3655492deadf --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errcheck.yml @@ -0,0 +1,17 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + errcheck: + check-type-assertions: true + check-blank: true + disable-default-exclusions: true + exclude-functions: + - io/ioutil.ReadFile + - io.Copy(*bytes.Buffer) + - io.Copy(os.Stdout) diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errchkjson.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errchkjson.golden.yml new file mode 100644 index 000000000000..c04921dc9c61 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errchkjson.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + settings: + errchkjson: + check-error-free-encoding: true + report-no-exported: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errchkjson.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errchkjson.yml new file mode 100644 index 000000000000..238d61ce17a8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errchkjson.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + errchkjson: + check-error-free-encoding: true + report-no-exported: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errorlint.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errorlint.golden.yml new file mode 100644 index 000000000000..eccd711c22c5 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errorlint.golden.yml @@ -0,0 +1,14 @@ +version: "2" +linters: + settings: + errorlint: + errorf: false + errorf-multi: false + asserts: false + comparison: false + allowed-errors: + - err: io.EOF + fun: example.com/pkg.Read + allowed-errors-wildcard: + - err: example.com/pkg.ErrMagic + fun: example.com/pkg.Magic diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errorlint.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errorlint.yml new file mode 100644 index 000000000000..5c103aac9846 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_errorlint.yml @@ -0,0 +1,20 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + errorlint: + errorf: false + errorf-multi: false + asserts: false + comparison: false + allowed-errors: + - err: "io.EOF" + fun: "example.com/pkg.Read" + allowed-errors-wildcard: + - err: "example.com/pkg.ErrMagic" + fun: "example.com/pkg.Magic" diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustive.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustive.golden.yml new file mode 100644 index 000000000000..3501def2a73a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustive.golden.yml @@ -0,0 +1,14 @@ +version: "2" +linters: + settings: + exhaustive: + check: + - switch + - map + default-signifies-exhaustive: true + ignore-enum-members: Example.+ + ignore-enum-types: Example.+ + package-scope-only: true + explicit-exhaustive-map: true + explicit-exhaustive-switch: true + default-case-required: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustive.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustive.yml new file mode 100644 index 000000000000..a0a5be70a5f9 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustive.yml @@ -0,0 +1,21 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + exhaustive: + check: + - switch + - map + check-generated: true + default-signifies-exhaustive: true + ignore-enum-members: "Example.+" + ignore-enum-types: "Example.+" + package-scope-only: true + explicit-exhaustive-switch: true + explicit-exhaustive-map: true + default-case-required: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustruct.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustruct.golden.yml new file mode 100644 index 000000000000..d8d052435696 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustruct.golden.yml @@ -0,0 +1,9 @@ +version: "2" +linters: + settings: + exhaustruct: + include: + - .+\.Test + - example\.com/package\.ExampleStruct[\d]{1,2} + exclude: + - .+/cobra\.Command$ diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustruct.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustruct.yml new file mode 100644 index 000000000000..dffa888d2b8b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_exhaustruct.yml @@ -0,0 +1,15 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + exhaustruct: + include: + - '.+\.Test' + - 'example\.com/package\.ExampleStruct[\d]{1,2}' + exclude: + - '.+/cobra\.Command$' diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_fatcontext.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_fatcontext.golden.yml new file mode 100644 index 000000000000..9c29f6183468 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_fatcontext.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + fatcontext: + check-struct-pointers: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_fatcontext.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_fatcontext.yml new file mode 100644 index 000000000000..8cdf4e5600f0 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_fatcontext.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + fatcontext: + check-struct-pointers: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_forbidigo.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_forbidigo.golden.yml new file mode 100644 index 000000000000..24813752807b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_forbidigo.golden.yml @@ -0,0 +1,14 @@ +version: "2" +linters: + settings: + forbidigo: + forbid: + - pattern: ^print(ln)?$ + - pattern: ^fmt\.Print.*$ + msg: Do not commit print statements. + - pattern: fmt\.Print.*(# Do not commit print statements\.)? + - pattern: ^spew\.(ConfigState\.)?Dump$ + - pattern: ^v1.Dump$ + pkg: ^example.com/pkg/api/v1$ + exclude-godoc-examples: false + analyze-types: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_forbidigo.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_forbidigo.yml new file mode 100644 index 000000000000..ee612a2e9928 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_forbidigo.yml @@ -0,0 +1,20 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + forbidigo: + forbid: + - ^print(ln)?$ + - p: ^fmt\.Print.*$ + msg: Do not commit print statements. + - 'fmt\.Print.*(# Do not commit print statements\.)?' + - ^spew\.(ConfigState\.)?Dump$ + - p: ^v1.Dump$ + pkg: ^example.com/pkg/api/v1$ + exclude-godoc-examples: false + analyze-types: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_funlen.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_funlen.golden.yml new file mode 100644 index 000000000000..68f6f15fb907 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_funlen.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + settings: + funlen: + lines: -1 + statements: -1 + ignore-comments: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_funlen.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_funlen.yml new file mode 100644 index 000000000000..7e051d28a936 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_funlen.yml @@ -0,0 +1,13 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + funlen: + lines: -1 + statements: -1 + ignore-comments: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gci.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gci.golden.yml new file mode 100644 index 000000000000..b419c5835ae7 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gci.golden.yml @@ -0,0 +1,16 @@ +version: "2" +formatters: + settings: + gci: + sections: + - standard + - default + - prefix(github.com/org/project) + - blank + - dot + - alias + - localmodule + no-inline-comments: true + no-prefix-comments: true + custom-order: true + no-lex-order: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gci.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gci.yml new file mode 100644 index 000000000000..f63a23f20aab --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gci.yml @@ -0,0 +1,23 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gci: + sections: + - standard + - default + - prefix(github.com/org/project) + - blank + - dot + - alias + - localmodule + no-inline-comments: true + no-prefix-comments: true + skip-generated: false + custom-order: true + no-lex-order: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ginkgolinter.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ginkgolinter.golden.yml new file mode 100644 index 000000000000..f4c591a3b24d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ginkgolinter.golden.yml @@ -0,0 +1,16 @@ +version: "2" +linters: + settings: + ginkgolinter: + suppress-len-assertion: true + suppress-nil-assertion: true + suppress-err-assertion: true + suppress-compare-assertion: true + suppress-async-assertion: true + suppress-type-compare-assertion: true + forbid-focus-container: true + allow-havelen-zero: true + force-expect-to: true + validate-async-intervals: true + forbid-spec-pollution: true + force-succeed: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ginkgolinter.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ginkgolinter.yml new file mode 100644 index 000000000000..9139fd78bfe8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ginkgolinter.yml @@ -0,0 +1,22 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + ginkgolinter: + suppress-len-assertion: true + suppress-nil-assertion: true + suppress-err-assertion: true + suppress-compare-assertion: true + suppress-async-assertion: true + suppress-type-compare-assertion: true + forbid-focus-container: true + allow-havelen-zero: true + force-expect-to: true + validate-async-intervals: true + forbid-spec-pollution: true + force-succeed: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gochecksumtype.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gochecksumtype.golden.yml new file mode 100644 index 000000000000..37601424796f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gochecksumtype.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + settings: + gochecksumtype: + default-signifies-exhaustive: false + include-shared-interfaces: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gochecksumtype.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gochecksumtype.yml new file mode 100644 index 000000000000..b4bce589d19c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gochecksumtype.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gochecksumtype: + default-signifies-exhaustive: false + include-shared-interfaces: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocognit.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocognit.golden.yml new file mode 100644 index 000000000000..a14fe93fc4ae --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocognit.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + gocognit: + min-complexity: 10 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocognit.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocognit.yml new file mode 100644 index 000000000000..a95846e3edcb --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocognit.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gocognit: + min-complexity: 10 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goconst.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goconst.golden.yml new file mode 100644 index 000000000000..5f43c5e799e5 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goconst.golden.yml @@ -0,0 +1,17 @@ +version: "2" +linters: + settings: + goconst: + ignore-strings: foo.+ + match-constant: false + min-len: 2 + min-occurrences: 2 + numbers: true + min: 2 + max: 2 + ignore-calls: false + exclusions: + rules: + - linters: + - goconst + path: (.+)_test\.go diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goconst.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goconst.yml new file mode 100644 index 000000000000..c221e4d7a44d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goconst.yml @@ -0,0 +1,19 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + goconst: + min-len: 2 + min-occurrences: 2 + ignore-tests: true + match-constant: false + numbers: true + min: 2 + max: 2 + ignore-calls: false + ignore-strings: 'foo.+' diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocritic.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocritic.golden.yml new file mode 100644 index 000000000000..c83fb879a702 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocritic.golden.yml @@ -0,0 +1,265 @@ +version: "2" +linters: + settings: + gocritic: + disable-all: true + enabled-checks: + - appendAssign + - appendCombine + - argOrder + - assignOp + - badCall + - badCond + - badLock + - badRegexp + - badSorting + - badSyncOnceFunc + - boolExprSimplify + - builtinShadow + - builtinShadowDecl + - captLocal + - caseOrder + - codegenComment + - commentFormatting + - commentedOutCode + - commentedOutImport + - defaultCaseOrder + - deferInLoop + - deferUnlambda + - deprecatedComment + - docStub + - dupArg + - dupBranchBody + - dupCase + - dupImport + - dupSubExpr + - dynamicFmtString + - elseif + - emptyDecl + - emptyFallthrough + - emptyStringTest + - equalFold + - evalOrder + - exitAfterDefer + - exposedSyncMutex + - externalErrorReassign + - filepathJoin + - flagDeref + - flagName + - hexLiteral + - httpNoBody + - hugeParam + - ifElseChain + - importShadow + - indexAlloc + - initClause + - mapKey + - methodExprCall + - nestingReduce + - newDeref + - nilValReturn + - octalLiteral + - offBy1 + - paramTypeCombine + - preferDecodeRune + - preferFilepathJoin + - preferFprint + - preferStringWriter + - preferWriteByte + - ptrToRefParam + - rangeAppendAll + - rangeExprCopy + - rangeValCopy + - redundantSprint + - regexpMust + - regexpPattern + - regexpSimplify + - returnAfterHttpError + - ruleguard + - singleCaseSwitch + - sliceClear + - sloppyLen + - sloppyReassign + - sloppyTypeAssert + - sortSlice + - sprintfQuotedString + - sqlQuery + - stringConcatSimplify + - stringXbytes + - stringsCompare + - switchTrue + - syncMapLoadAndDelete + - timeExprSimplify + - todoCommentWithoutDetail + - tooManyResultsChecker + - truncateCmp + - typeAssertChain + - typeDefFirst + - typeSwitchVar + - typeUnparen + - uncheckedInlineErr + - underef + - unlabelStmt + - unlambda + - unnamedResult + - unnecessaryBlock + - unnecessaryDefer + - unslice + - valSwap + - weakCond + - whyNoLint + - wrapperFunc + - yodaStyleExpr + enable-all: true + disabled-checks: + - appendAssign + - appendCombine + - argOrder + - assignOp + - badCall + - badCond + - badLock + - badRegexp + - badSorting + - badSyncOnceFunc + - boolExprSimplify + - builtinShadow + - builtinShadowDecl + - captLocal + - caseOrder + - codegenComment + - commentFormatting + - commentedOutCode + - commentedOutImport + - defaultCaseOrder + - deferInLoop + - deferUnlambda + - deprecatedComment + - docStub + - dupArg + - dupBranchBody + - dupCase + - dupImport + - dupSubExpr + - dynamicFmtString + - elseif + - emptyDecl + - emptyFallthrough + - emptyStringTest + - equalFold + - evalOrder + - exitAfterDefer + - exposedSyncMutex + - externalErrorReassign + - filepathJoin + - flagDeref + - flagName + - hexLiteral + - httpNoBody + - hugeParam + - ifElseChain + - importShadow + - indexAlloc + - initClause + - mapKey + - methodExprCall + - nestingReduce + - newDeref + - nilValReturn + - octalLiteral + - offBy1 + - paramTypeCombine + - preferDecodeRune + - preferFilepathJoin + - preferFprint + - preferStringWriter + - preferWriteByte + - ptrToRefParam + - rangeAppendAll + - rangeExprCopy + - rangeValCopy + - redundantSprint + - regexpMust + - regexpPattern + - regexpSimplify + - returnAfterHttpError + - ruleguard + - singleCaseSwitch + - sliceClear + - sloppyLen + - sloppyReassign + - sloppyTypeAssert + - sortSlice + - sprintfQuotedString + - sqlQuery + - stringConcatSimplify + - stringXbytes + - stringsCompare + - switchTrue + - syncMapLoadAndDelete + - timeExprSimplify + - todoCommentWithoutDetail + - tooManyResultsChecker + - truncateCmp + - typeAssertChain + - typeDefFirst + - typeSwitchVar + - typeUnparen + - uncheckedInlineErr + - underef + - unlabelStmt + - unlambda + - unnamedResult + - unnecessaryBlock + - unnecessaryDefer + - unslice + - valSwap + - weakCond + - whyNoLint + - wrapperFunc + - yodaStyleExpr + enabled-tags: + - diagnostic + - style + - performance + - experimental + - opinionated + disabled-tags: + - diagnostic + - style + - performance + - experimental + - opinionated + settings: + captLocal: + paramsOnly: false + commentedOutCode: + minLength: 50 + elseif: + skipBalanced: false + hugeParam: + sizeThreshold: 70 + ifElseChain: + minThreshold: 4 + nestingReduce: + bodyWidth: 4 + rangeExprCopy: + sizeThreshold: 516 + skipTestFuncs: false + rangeValCopy: + sizeThreshold: 32 + skipTestFuncs: false + ruleguard: + debug: emptyDecl + disable: myGroupName,#myTagName + enable: myGroupName,#myTagName + failOn: dsl,import + rules: ${base-path}/ruleguard/rules-*.go,${base-path}/myrule1.go + tooManyResultsChecker: + maxResults: 10 + truncateCmp: + skipArchDependent: false + underef: + skipRecvDeref: false + unnamedResult: + checkExported: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocritic.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocritic.yml new file mode 100644 index 000000000000..d1d6e94c19cc --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocritic.yml @@ -0,0 +1,271 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gocritic: + disable-all: true + enabled-checks: + - appendAssign + - appendCombine + - argOrder + - assignOp + - badCall + - badCond + - badLock + - badRegexp + - badSorting + - badSyncOnceFunc + - boolExprSimplify + - builtinShadow + - builtinShadowDecl + - captLocal + - caseOrder + - codegenComment + - commentFormatting + - commentedOutCode + - commentedOutImport + - defaultCaseOrder + - deferInLoop + - deferUnlambda + - deprecatedComment + - docStub + - dupArg + - dupBranchBody + - dupCase + - dupImport + - dupSubExpr + - dynamicFmtString + - elseif + - emptyDecl + - emptyFallthrough + - emptyStringTest + - equalFold + - evalOrder + - exitAfterDefer + - exposedSyncMutex + - externalErrorReassign + - filepathJoin + - flagDeref + - flagName + - hexLiteral + - httpNoBody + - hugeParam + - ifElseChain + - importShadow + - indexAlloc + - initClause + - mapKey + - methodExprCall + - nestingReduce + - newDeref + - nilValReturn + - octalLiteral + - offBy1 + - paramTypeCombine + - preferDecodeRune + - preferFilepathJoin + - preferFprint + - preferStringWriter + - preferWriteByte + - ptrToRefParam + - rangeAppendAll + - rangeExprCopy + - rangeValCopy + - redundantSprint + - regexpMust + - regexpPattern + - regexpSimplify + - returnAfterHttpError + - ruleguard + - singleCaseSwitch + - sliceClear + - sloppyLen + - sloppyReassign + - sloppyTypeAssert + - sortSlice + - sprintfQuotedString + - sqlQuery + - stringConcatSimplify + - stringXbytes + - stringsCompare + - switchTrue + - syncMapLoadAndDelete + - timeExprSimplify + - todoCommentWithoutDetail + - tooManyResultsChecker + - truncateCmp + - typeAssertChain + - typeDefFirst + - typeSwitchVar + - typeUnparen + - uncheckedInlineErr + - underef + - unlabelStmt + - unlambda + - unnamedResult + - unnecessaryBlock + - unnecessaryDefer + - unslice + - valSwap + - weakCond + - whyNoLint + - wrapperFunc + - yodaStyleExpr + enable-all: true + disabled-checks: + - appendAssign + - appendCombine + - argOrder + - assignOp + - badCall + - badCond + - badLock + - badRegexp + - badSorting + - badSyncOnceFunc + - boolExprSimplify + - builtinShadow + - builtinShadowDecl + - captLocal + - caseOrder + - codegenComment + - commentFormatting + - commentedOutCode + - commentedOutImport + - defaultCaseOrder + - deferInLoop + - deferUnlambda + - deprecatedComment + - docStub + - dupArg + - dupBranchBody + - dupCase + - dupImport + - dupSubExpr + - dynamicFmtString + - elseif + - emptyDecl + - emptyFallthrough + - emptyStringTest + - equalFold + - evalOrder + - exitAfterDefer + - exposedSyncMutex + - externalErrorReassign + - filepathJoin + - flagDeref + - flagName + - hexLiteral + - httpNoBody + - hugeParam + - ifElseChain + - importShadow + - indexAlloc + - initClause + - mapKey + - methodExprCall + - nestingReduce + - newDeref + - nilValReturn + - octalLiteral + - offBy1 + - paramTypeCombine + - preferDecodeRune + - preferFilepathJoin + - preferFprint + - preferStringWriter + - preferWriteByte + - ptrToRefParam + - rangeAppendAll + - rangeExprCopy + - rangeValCopy + - redundantSprint + - regexpMust + - regexpPattern + - regexpSimplify + - returnAfterHttpError + - ruleguard + - singleCaseSwitch + - sliceClear + - sloppyLen + - sloppyReassign + - sloppyTypeAssert + - sortSlice + - sprintfQuotedString + - sqlQuery + - stringConcatSimplify + - stringXbytes + - stringsCompare + - switchTrue + - syncMapLoadAndDelete + - timeExprSimplify + - todoCommentWithoutDetail + - tooManyResultsChecker + - truncateCmp + - typeAssertChain + - typeDefFirst + - typeSwitchVar + - typeUnparen + - uncheckedInlineErr + - underef + - unlabelStmt + - unlambda + - unnamedResult + - unnecessaryBlock + - unnecessaryDefer + - unslice + - valSwap + - weakCond + - whyNoLint + - wrapperFunc + - yodaStyleExpr + enabled-tags: + - diagnostic + - style + - performance + - experimental + - opinionated + disabled-tags: + - diagnostic + - style + - performance + - experimental + - opinionated + settings: + captLocal: + paramsOnly: false + commentedOutCode: + minLength: 50 + elseif: + skipBalanced: false + hugeParam: + sizeThreshold: 70 + ifElseChain: + minThreshold: 4 + nestingReduce: + bodyWidth: 4 + rangeExprCopy: + sizeThreshold: 516 + skipTestFuncs: false + rangeValCopy: + sizeThreshold: 32 + skipTestFuncs: false + ruleguard: + debug: 'emptyDecl' + failOn: dsl,import + rules: '${configDir}/ruleguard/rules-*.go,${configDir}/myrule1.go' + enable: "myGroupName,#myTagName" + disable: "myGroupName,#myTagName" + tooManyResultsChecker: + maxResults: 10 + truncateCmp: + skipArchDependent: false + underef: + skipRecvDeref: false + unnamedResult: + checkExported: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocyclo.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocyclo.golden.yml new file mode 100644 index 000000000000..a7c848793964 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocyclo.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + gocyclo: + min-complexity: 10 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocyclo.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocyclo.yml new file mode 100644 index 000000000000..b069212a2b7e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gocyclo.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gocyclo: + min-complexity: 10 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godot.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godot.golden.yml new file mode 100644 index 000000000000..8b209b751a7b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godot.golden.yml @@ -0,0 +1,10 @@ +version: "2" +linters: + settings: + godot: + scope: toplevel + exclude: + - '^fixme:' + - '^todo:' + capital: true + period: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godot.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godot.yml new file mode 100644 index 000000000000..534b28d22a8c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godot.yml @@ -0,0 +1,16 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + godot: + scope: toplevel + exclude: + - "^fixme:" + - "^todo:" + period: false + capital: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godox.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godox.golden.yml new file mode 100644 index 000000000000..f85840b569ca --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godox.golden.yml @@ -0,0 +1,8 @@ +version: "2" +linters: + settings: + godox: + keywords: + - NOTE + - OPTIMIZE + - HACK diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godox.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godox.yml new file mode 100644 index 000000000000..69927dbd9875 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_godox.yml @@ -0,0 +1,14 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + godox: + keywords: + - NOTE + - OPTIMIZE + - HACK diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofmt.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofmt.golden.yml new file mode 100644 index 000000000000..06d10d2c4425 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofmt.golden.yml @@ -0,0 +1,10 @@ +version: "2" +formatters: + settings: + gofmt: + simplify: false + rewrite-rules: + - pattern: interface{} + replacement: any + - pattern: a[b:len(a)] + replacement: a[b:] diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofmt.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofmt.yml new file mode 100644 index 000000000000..7a2ea16eb5fd --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofmt.yml @@ -0,0 +1,16 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gofmt: + simplify: false + rewrite-rules: + - pattern: 'interface{}' + replacement: 'any' + - pattern: 'a[b:len(a)]' + replacement: 'a[b:]' diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofumpt.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofumpt.golden.yml new file mode 100644 index 000000000000..841772f34ce4 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofumpt.golden.yml @@ -0,0 +1,6 @@ +version: "2" +formatters: + settings: + gofumpt: + module-path: github.com/org/project + extra-rules: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofumpt.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofumpt.yml new file mode 100644 index 000000000000..7f134d7a8dad --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gofumpt.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gofumpt: + module-path: github.com/org/project + extra-rules: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goheader.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goheader.golden.yml new file mode 100644 index 000000000000..bedacc82035a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goheader.golden.yml @@ -0,0 +1,29 @@ +version: "2" +linters: + settings: + goheader: + values: + const: + COMPANY: MY COMPANY + regexp: + AUTHOR: .*@mycompany\.com + template: |- + Put here copyright header template for source code files + For example: + Note: {{ YEAR }} is a builtin value that returns the year relative to the current machine time. + + {{ AUTHOR }} {{ COMPANY }} {{ YEAR }} + SPDX-License-Identifier: Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + template-path: /path/to/my/template.tmpl diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goheader.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goheader.yml new file mode 100644 index 000000000000..6b73f7d65352 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goheader.yml @@ -0,0 +1,35 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + goheader: + values: + const: + COMPANY: MY COMPANY + regexp: + AUTHOR: .*@mycompany\.com + template: |- + Put here copyright header template for source code files + For example: + Note: {{ YEAR }} is a builtin value that returns the year relative to the current machine time. + + {{ AUTHOR }} {{ COMPANY }} {{ YEAR }} + SPDX-License-Identifier: Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at: + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + template-path: /path/to/my/template.tmpl diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goimports.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goimports.golden.yml new file mode 100644 index 000000000000..fe7094da9030 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goimports.golden.yml @@ -0,0 +1,6 @@ +version: "2" +formatters: + settings: + goimports: + local-prefixes: + - github.com/org/project diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goimports.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goimports.yml new file mode 100644 index 000000000000..8559efd2448e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_goimports.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + goimports: + local-prefixes: github.com/org/project diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomoddirectives.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomoddirectives.golden.yml new file mode 100644 index 000000000000..aba97f8f54fc --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomoddirectives.golden.yml @@ -0,0 +1,14 @@ +version: "2" +linters: + settings: + gomoddirectives: + replace-allow-list: + - launchpad.net/gocheck + replace-local: true + exclude-forbidden: true + retract-allow-no-explanation: true + toolchain-forbidden: true + toolchain-pattern: go1\.23\.\d+$ + tool-forbidden: true + go-debug-forbidden: true + go-version-pattern: \d\.\d+(\.0)? diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomoddirectives.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomoddirectives.yml new file mode 100644 index 000000000000..8e9fedda6f07 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomoddirectives.yml @@ -0,0 +1,20 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gomoddirectives: + replace-local: true + replace-allow-list: + - launchpad.net/gocheck + retract-allow-no-explanation: true + exclude-forbidden: true + toolchain-forbidden: true + toolchain-pattern: 'go1\.23\.\d+$' + tool-forbidden: true + go-debug-forbidden: true + go-version-pattern: '\d\.\d+(\.0)?' diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomodguard.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomodguard.golden.yml new file mode 100644 index 000000000000..6755b101d5be --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomodguard.golden.yml @@ -0,0 +1,20 @@ +version: "2" +linters: + settings: + gomodguard: + allowed: + modules: + - gopkg.in/yaml.v2 + domains: + - golang.org + blocked: + modules: + - github.com/uudashr/go-module: + recommendations: + - golang.org/x/mod + reason: '`mod` is the official go.mod parser library.' + versions: + - github.com/mitchellh/go-homedir: + version: < 1.1.0 + reason: testing if blocked version constraint works. + local-replace-directives: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomodguard.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomodguard.yml new file mode 100644 index 000000000000..03f7ed3ed768 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gomodguard.yml @@ -0,0 +1,26 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gomodguard: + allowed: + modules: + - gopkg.in/yaml.v2 + domains: + - golang.org + blocked: + modules: + - github.com/uudashr/go-module: + recommendations: + - golang.org/x/mod + reason: "`mod` is the official go.mod parser library." + versions: + - github.com/mitchellh/go-homedir: + version: "< 1.1.0" + reason: "testing if blocked version constraint works." + local_replace_directives: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosec.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosec.golden.yml new file mode 100644 index 000000000000..5a87f9b4703e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosec.golden.yml @@ -0,0 +1,109 @@ +version: "2" +linters: + settings: + gosec: + includes: + - G101 + - G102 + - G103 + - G104 + - G106 + - G107 + - G108 + - G109 + - G110 + - G111 + - G112 + - G113 + - G114 + - G115 + - G201 + - G202 + - G203 + - G204 + - G301 + - G302 + - G303 + - G304 + - G305 + - G306 + - G307 + - G401 + - G402 + - G403 + - G404 + - G405 + - G406 + - G501 + - G502 + - G503 + - G504 + - G505 + - G506 + - G507 + - G601 + - G602 + excludes: + - G101 + - G102 + - G103 + - G104 + - G106 + - G107 + - G108 + - G109 + - G110 + - G111 + - G112 + - G113 + - G114 + - G115 + - G201 + - G202 + - G203 + - G204 + - G301 + - G302 + - G303 + - G304 + - G305 + - G306 + - G307 + - G401 + - G402 + - G403 + - G404 + - G405 + - G406 + - G501 + - G502 + - G503 + - G504 + - G505 + - G506 + - G507 + - G601 + - G602 + severity: medium + confidence: medium + config: + G101: + entropy_threshold: "80.0" + ignore_entropy: false + pattern: (?i)example + per_char_threshold: "3.0" + truncate: "32" + G104: + fmt: + - Fscanf + G111: + pattern: custom\.Dir\(\) + G301: "0750" + G302: "0600" + G306: "0600" + global: + '#nosec': '#my-custom-nosec' + audit: true + nosec: true + show-ignored: true + concurrency: 12 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosec.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosec.yml new file mode 100644 index 000000000000..77be008af47c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosec.yml @@ -0,0 +1,116 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gosec: + includes: + - G101 + - G102 + - G103 + - G104 + - G106 + - G107 + - G108 + - G109 + - G110 + - G111 + - G112 + - G113 + - G114 + - G115 + - G201 + - G202 + - G203 + - G204 + - G301 + - G302 + - G303 + - G304 + - G305 + - G306 + - G307 + - G401 + - G402 + - G403 + - G404 + - G405 + - G406 + - G501 + - G502 + - G503 + - G504 + - G505 + - G506 + - G507 + - G601 + - G602 + excludes: + - G101 + - G102 + - G103 + - G104 + - G106 + - G107 + - G108 + - G109 + - G110 + - G111 + - G112 + - G113 + - G114 + - G115 + - G201 + - G202 + - G203 + - G204 + - G301 + - G302 + - G303 + - G304 + - G305 + - G306 + - G307 + - G401 + - G402 + - G403 + - G404 + - G405 + - G406 + - G501 + - G502 + - G503 + - G504 + - G505 + - G506 + - G507 + - G601 + - G602 + exclude-generated: true + severity: medium + confidence: medium + concurrency: 12 + config: + global: + nosec: true + "#nosec": "#my-custom-nosec" + show-ignored: true + audit: true + G101: + pattern: "(?i)example" + ignore_entropy: false + entropy_threshold: "80.0" + per_char_threshold: "3.0" + truncate: "32" + G104: + fmt: + - Fscanf + G111: + pattern: "custom\\.Dir\\(\\)" + G301: "0750" + G302: "0600" + G306: "0600" diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosimple.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosimple.golden.yml new file mode 100644 index 000000000000..db5042d5f63f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosimple.golden.yml @@ -0,0 +1,40 @@ +version: "2" +linters: + settings: + staticcheck: + checks: + - S1000 + - S1001 + - S1002 + - S1003 + - S1004 + - S1005 + - S1006 + - S1007 + - S1008 + - S1009 + - S1010 + - S1011 + - S1012 + - S1016 + - S1017 + - S1018 + - S1019 + - S1020 + - S1021 + - S1023 + - S1024 + - S1025 + - S1028 + - S1029 + - S1030 + - S1031 + - S1032 + - S1033 + - S1034 + - S1035 + - S1036 + - S1037 + - S1038 + - S1039 + - S1040 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosimple.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosimple.yml new file mode 100644 index 000000000000..c72ea11f1f59 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosimple.yml @@ -0,0 +1,46 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gosimple: + checks: + - S1000 + - S1001 + - S1002 + - S1003 + - S1004 + - S1005 + - S1006 + - S1007 + - S1008 + - S1009 + - S1010 + - S1011 + - S1012 + - S1016 + - S1017 + - S1018 + - S1019 + - S1020 + - S1021 + - S1023 + - S1024 + - S1025 + - S1028 + - S1029 + - S1030 + - S1031 + - S1032 + - S1033 + - S1034 + - S1035 + - S1036 + - S1037 + - S1038 + - S1039 + - S1040 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosmopolitan.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosmopolitan.golden.yml new file mode 100644 index 000000000000..86e51bebbfe6 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosmopolitan.golden.yml @@ -0,0 +1,17 @@ +version: "2" +linters: + settings: + gosmopolitan: + allow-time-local: true + escape-hatches: + - github.com/nicksnyder/go-i18n/v2/i18n.Message + - example.com/your/project/i18n/markers.Raw + - example.com/your/project/i18n/markers.OK + - example.com/your/project/i18n/markers.TODO + - command-line-arguments.Simple + watch-for-scripts: + - Devanagari + - Han + - Hangul + - Hiragana + - Katakana diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosmopolitan.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosmopolitan.yml new file mode 100644 index 000000000000..0e62c53948d1 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_gosmopolitan.yml @@ -0,0 +1,24 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + gosmopolitan: + allow-time-local: true + escape-hatches: + - 'github.com/nicksnyder/go-i18n/v2/i18n.Message' + - 'example.com/your/project/i18n/markers.Raw' + - 'example.com/your/project/i18n/markers.OK' + - 'example.com/your/project/i18n/markers.TODO' + - 'command-line-arguments.Simple' + ignore-tests: false + watch-for-scripts: + - Devanagari + - Han + - Hangul + - Hiragana + - Katakana diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_govet.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_govet.golden.yml new file mode 100644 index 000000000000..cad000b4b3e8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_govet.golden.yml @@ -0,0 +1,108 @@ +version: "2" +linters: + settings: + govet: + enable: + - appends + - asmdecl + - assign + - atomic + - atomicalign + - bools + - buildtag + - cgocall + - composites + - copylocks + - deepequalerrors + - defers + - directive + - errorsas + - fieldalignment + - findcall + - framepointer + - httpresponse + - ifaceassert + - loopclosure + - lostcancel + - nilfunc + - nilness + - printf + - reflectvaluecompare + - shadow + - shift + - sigchanyzer + - slog + - sortslice + - stdmethods + - stdversion + - stringintconv + - structtag + - testinggoroutine + - tests + - timeformat + - unmarshal + - unreachable + - unsafeptr + - unusedresult + - unusedwrite + - waitgroup + disable: + - appends + - asmdecl + - assign + - atomic + - atomicalign + - bools + - buildtag + - cgocall + - composites + - copylocks + - deepequalerrors + - defers + - directive + - errorsas + - fieldalignment + - findcall + - framepointer + - httpresponse + - ifaceassert + - loopclosure + - lostcancel + - nilfunc + - nilness + - printf + - reflectvaluecompare + - shadow + - shift + - sigchanyzer + - slog + - sortslice + - stdmethods + - stdversion + - stringintconv + - structtag + - testinggoroutine + - tests + - timeformat + - unmarshal + - unreachable + - unsafeptr + - unusedresult + - unusedwrite + - waitgroup + enable-all: true + disable-all: true + settings: + printf: + funcs: + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf + shadow: + strict: true + unusedresult: + funcs: + - pkg.MyFunc + stringmethods: + - MyMethod diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_govet.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_govet.yml new file mode 100644 index 000000000000..821c4bb17d32 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_govet.yml @@ -0,0 +1,114 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + govet: + disable-all: true + enable: + - appends + - asmdecl + - assign + - atomic + - atomicalign + - bools + - buildtag + - cgocall + - composites + - copylocks + - deepequalerrors + - defers + - directive + - errorsas + - fieldalignment + - findcall + - framepointer + - httpresponse + - ifaceassert + - loopclosure + - lostcancel + - nilfunc + - nilness + - printf + - reflectvaluecompare + - shadow + - shift + - sigchanyzer + - slog + - sortslice + - stdmethods + - stdversion + - stringintconv + - structtag + - testinggoroutine + - tests + - timeformat + - unmarshal + - unreachable + - unsafeptr + - unusedresult + - unusedwrite + - waitgroup + enable-all: true + disable: + - appends + - asmdecl + - assign + - atomic + - atomicalign + - bools + - buildtag + - cgocall + - composites + - copylocks + - deepequalerrors + - defers + - directive + - errorsas + - fieldalignment + - findcall + - framepointer + - httpresponse + - ifaceassert + - loopclosure + - lostcancel + - nilfunc + - nilness + - printf + - reflectvaluecompare + - shadow + - shift + - sigchanyzer + - slog + - sortslice + - stdmethods + - stdversion + - stringintconv + - structtag + - testinggoroutine + - tests + - timeformat + - unmarshal + - unreachable + - unsafeptr + - unusedresult + - unusedwrite + - waitgroup + settings: + printf: + funcs: + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf + - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf + shadow: + strict: true + unusedresult: + funcs: + - pkg.MyFunc + stringmethods: + - MyMethod diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_grouper.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_grouper.golden.yml new file mode 100644 index 000000000000..2d9a0e620b20 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_grouper.golden.yml @@ -0,0 +1,12 @@ +version: "2" +linters: + settings: + grouper: + const-require-single-const: true + const-require-grouping: true + import-require-single-import: true + import-require-grouping: true + type-require-single-type: true + type-require-grouping: true + var-require-single-var: true + var-require-grouping: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_grouper.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_grouper.yml new file mode 100644 index 000000000000..af941c6bd7d4 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_grouper.yml @@ -0,0 +1,18 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + grouper: + const-require-single-const: true + const-require-grouping: true + import-require-single-import: true + import-require-grouping: true + type-require-single-type: true + type-require-grouping: true + var-require-single-var: true + var-require-grouping: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_iface.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_iface.golden.yml new file mode 100644 index 000000000000..938b4af35d3f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_iface.golden.yml @@ -0,0 +1,12 @@ +version: "2" +linters: + settings: + iface: + enable: + - identical + - unused + - opaque + settings: + unused: + exclude: + - github.com/example/log diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_iface.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_iface.yml new file mode 100644 index 000000000000..b18faffb684e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_iface.yml @@ -0,0 +1,18 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + iface: + enable: + - identical + - unused + - opaque + settings: + unused: + exclude: + - github.com/example/log diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_importas.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_importas.golden.yml new file mode 100644 index 000000000000..28c180a76ebd --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_importas.golden.yml @@ -0,0 +1,15 @@ +version: "2" +linters: + settings: + importas: + alias: + - pkg: knative.dev/serving/pkg/apis/serving/v1 + alias: servingv1 + - pkg: knative.dev/serving/pkg/apis/autoscaling/v1alpha1 + alias: autoscalingv1alpha1 + - pkg: knative.dev/serving/pkg/apis/(\w+)/(v[\w\d]+) + alias: $1$2 + - pkg: errors + alias: "" + no-unaliased: true + no-extra-aliases: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_importas.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_importas.yml new file mode 100644 index 000000000000..2830b85f529b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_importas.yml @@ -0,0 +1,21 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + importas: + no-unaliased: true + no-extra-aliases: true + alias: + - pkg: knative.dev/serving/pkg/apis/serving/v1 + alias: servingv1 + - pkg: knative.dev/serving/pkg/apis/autoscaling/v1alpha1 + alias: autoscalingv1alpha1 + - pkg: knative.dev/serving/pkg/apis/(\w+)/(v[\w\d]+) + alias: $1$2 + - pkg: errors + alias: "" diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_inamedparam.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_inamedparam.golden.yml new file mode 100644 index 000000000000..e58d8245ba1a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_inamedparam.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + inamedparam: + skip-single-param: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_inamedparam.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_inamedparam.yml new file mode 100644 index 000000000000..5b786db846e8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_inamedparam.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + inamedparam: + skip-single-param: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_interfacebloat.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_interfacebloat.golden.yml new file mode 100644 index 000000000000..fbc0e91339b8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_interfacebloat.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + interfacebloat: + max: 5 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_interfacebloat.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_interfacebloat.yml new file mode 100644 index 000000000000..1b22fa99c8c5 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_interfacebloat.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + interfacebloat: + max: 5 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ireturn.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ireturn.golden.yml new file mode 100644 index 000000000000..d169f90fec19 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ireturn.golden.yml @@ -0,0 +1,9 @@ +version: "2" +linters: + settings: + ireturn: + allow: + - anon + - (or|er)$ + reject: + - github.com\/user\/package\/v4\.Type diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ireturn.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ireturn.yml new file mode 100644 index 000000000000..f8a16bb6bcb6 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_ireturn.yml @@ -0,0 +1,15 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + ireturn: + allow: + - anon + - (or|er)$ + reject: + - github.com\/user\/package\/v4\.Type diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_lll.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_lll.golden.yml new file mode 100644 index 000000000000..78be6a91b37a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_lll.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + settings: + lll: + line-length: 120 + tab-width: 1 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_lll.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_lll.yml new file mode 100644 index 000000000000..1983c17e88b6 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_lll.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + lll: + line-length: 120 + tab-width: 1 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_loggercheck.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_loggercheck.golden.yml new file mode 100644 index 000000000000..0734f003c15b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_loggercheck.golden.yml @@ -0,0 +1,15 @@ +version: "2" +linters: + settings: + loggercheck: + kitlog: false + klog: false + logr: false + slog: false + zap: false + require-string-key: true + no-printf-like: true + rules: + - k8s.io/klog/v2.InfoS + - (github.com/go-logr/logr.Logger).Error + - (*go.uber.org/zap.SugaredLogger).With diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_loggercheck.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_loggercheck.yml new file mode 100644 index 000000000000..c486adef8614 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_loggercheck.yml @@ -0,0 +1,21 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + loggercheck: + kitlog: false + klog: false + logr: false + slog: false + zap: false + require-string-key: true + no-printf-like: true + rules: + - k8s.io/klog/v2.InfoS + - (github.com/go-logr/logr.Logger).Error + - (*go.uber.org/zap.SugaredLogger).With diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_maintidx.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_maintidx.golden.yml new file mode 100644 index 000000000000..97f413c8c5ef --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_maintidx.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + maintidx: + under: 100 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_maintidx.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_maintidx.yml new file mode 100644 index 000000000000..167ce5ae8925 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_maintidx.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + maintidx: + under: 100 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_makezero.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_makezero.golden.yml new file mode 100644 index 000000000000..2d08fd07a20f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_makezero.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + makezero: + always: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_makezero.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_makezero.yml new file mode 100644 index 000000000000..fc33596016d2 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_makezero.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + makezero: + always: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_misspell.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_misspell.golden.yml new file mode 100644 index 000000000000..b0600a875b72 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_misspell.golden.yml @@ -0,0 +1,13 @@ +version: "2" +linters: + settings: + misspell: + mode: restricted + locale: US + extra-words: + - typo: iff + correction: if + - typo: cancelation + correction: cancellation + ignore-rules: + - someword diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_misspell.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_misspell.yml new file mode 100644 index 000000000000..212ad9db96de --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_misspell.yml @@ -0,0 +1,19 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + misspell: + locale: US + ignore-words: + - someword + extra-words: + - typo: "iff" + correction: "if" + - typo: "cancelation" + correction: "cancellation" + mode: restricted diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_mnd.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_mnd.golden.yml new file mode 100644 index 000000000000..5f10379e2119 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_mnd.golden.yml @@ -0,0 +1,20 @@ +version: "2" +linters: + settings: + mnd: + checks: + - argument + - case + - condition + - operation + - return + - assign + ignored-numbers: + - "0666" + - "0755" + - "42" + ignored-files: + - magic1_.+\.go$ + ignored-functions: + - ^math\. + - ^http\.StatusText$ diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_mnd.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_mnd.yml new file mode 100644 index 000000000000..ca12f0a87bc8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_mnd.yml @@ -0,0 +1,26 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + mnd: + checks: + - argument + - case + - condition + - operation + - return + - assign + ignored-numbers: + - '0666' + - '0755' + - '42' + ignored-files: + - 'magic1_.+\.go$' + ignored-functions: + - '^math\.' + - '^http\.StatusText$' diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_musttag.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_musttag.golden.yml new file mode 100644 index 000000000000..227fd072bd0a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_musttag.golden.yml @@ -0,0 +1,8 @@ +version: "2" +linters: + settings: + musttag: + functions: + - name: github.com/hashicorp/hcl/v2/hclsimple.DecodeFile + tag: hcl + arg-pos: 2 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_musttag.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_musttag.yml new file mode 100644 index 000000000000..b003c1206f42 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_musttag.yml @@ -0,0 +1,14 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + musttag: + functions: + - name: github.com/hashicorp/hcl/v2/hclsimple.DecodeFile + tag: hcl + arg-pos: 2 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nakedret.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nakedret.golden.yml new file mode 100644 index 000000000000..a0fdcb55bc28 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nakedret.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + nakedret: + max-func-lines: 31 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nakedret.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nakedret.yml new file mode 100644 index 000000000000..191b888bdd78 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nakedret.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + nakedret: + max-func-lines: 31 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nestif.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nestif.golden.yml new file mode 100644 index 000000000000..df82198c74a9 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nestif.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + nestif: + min-complexity: 4 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nestif.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nestif.yml new file mode 100644 index 000000000000..5ec72a2edbc3 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nestif.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + nestif: + min-complexity: 4 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nilnil.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nilnil.golden.yml new file mode 100644 index 000000000000..da47371d5712 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nilnil.golden.yml @@ -0,0 +1,13 @@ +version: "2" +linters: + settings: + nilnil: + detect-opposite: true + checked-types: + - chan + - func + - iface + - map + - ptr + - uintptr + - unsafeptr diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nilnil.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nilnil.yml new file mode 100644 index 000000000000..0e48650383cc --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nilnil.yml @@ -0,0 +1,19 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + nilnil: + detect-opposite: true + checked-types: + - chan + - func + - iface + - map + - ptr + - uintptr + - unsafeptr diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nlreturn.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nlreturn.golden.yml new file mode 100644 index 000000000000..964bc1c5a12f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nlreturn.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + nlreturn: + block-size: 2 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nlreturn.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nlreturn.yml new file mode 100644 index 000000000000..8ea8f8a66c3d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nlreturn.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + nlreturn: + block-size: 2 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nolintlint.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nolintlint.golden.yml new file mode 100644 index 000000000000..95aa95dbb92f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nolintlint.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + settings: + nolintlint: + require-explanation: true + require-specific: true + allow-unused: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nolintlint.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nolintlint.yml new file mode 100644 index 000000000000..1f47310296e9 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nolintlint.yml @@ -0,0 +1,14 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + nolintlint: + allow-unused: true + allow-no-explanation: [ ] + require-explanation: true + require-specific: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nonamedreturns.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nonamedreturns.golden.yml new file mode 100644 index 000000000000..6b33435d686e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nonamedreturns.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + nonamedreturns: + report-error-in-defer: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nonamedreturns.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nonamedreturns.yml new file mode 100644 index 000000000000..30e58b2b5d4b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_nonamedreturns.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + nonamedreturns: + report-error-in-defer: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_paralleltest.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_paralleltest.golden.yml new file mode 100644 index 000000000000..2d37f645ee56 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_paralleltest.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + settings: + paralleltest: + ignore-missing: true + ignore-missing-subtests: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_paralleltest.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_paralleltest.yml new file mode 100644 index 000000000000..0790fd716442 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_paralleltest.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + paralleltest: + ignore-missing: true + ignore-missing-subtests: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_perfsprint.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_perfsprint.golden.yml new file mode 100644 index 000000000000..46ac04301bdc --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_perfsprint.golden.yml @@ -0,0 +1,14 @@ +version: "2" +linters: + settings: + perfsprint: + integer-format: false + int-conversion: false + error-format: false + err-error: true + errorf: false + string-format: false + sprintf1: false + strconcat: false + bool-format: false + hex-format: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_perfsprint.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_perfsprint.yml new file mode 100644 index 000000000000..2406683b8769 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_perfsprint.yml @@ -0,0 +1,20 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + perfsprint: + integer-format: false + int-conversion: false + error-format: false + err-error: true + errorf: false + string-format: false + sprintf1: false + strconcat: false + bool-format: false + hex-format: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_prealloc.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_prealloc.golden.yml new file mode 100644 index 000000000000..dc093a6f7a9f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_prealloc.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + settings: + prealloc: + simple: false + range-loops: false + for-loops: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_prealloc.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_prealloc.yml new file mode 100644 index 000000000000..c02a4e7287e0 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_prealloc.yml @@ -0,0 +1,13 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + prealloc: + simple: false + range-loops: false + for-loops: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_predeclared.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_predeclared.golden.yml new file mode 100644 index 000000000000..be7f2826d14c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_predeclared.golden.yml @@ -0,0 +1,8 @@ +version: "2" +linters: + settings: + predeclared: + ignore: + - new + - int + qualified-name: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_predeclared.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_predeclared.yml new file mode 100644 index 000000000000..48ccdd0ef6bc --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_predeclared.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + predeclared: + ignore: "new,int" + q: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_promlinter.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_promlinter.golden.yml new file mode 100644 index 000000000000..7eb009939ac7 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_promlinter.golden.yml @@ -0,0 +1,14 @@ +version: "2" +linters: + settings: + promlinter: + strict: true + disabled-linters: + - Help + - MetricUnits + - Counter + - HistogramSummaryReserved + - MetricTypeInName + - ReservedChars + - CamelCase + - UnitAbbreviations diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_promlinter.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_promlinter.yml new file mode 100644 index 000000000000..3a0ffb9b7eec --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_promlinter.yml @@ -0,0 +1,20 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + promlinter: + strict: true + disabled-linters: + - Help + - MetricUnits + - Counter + - HistogramSummaryReserved + - MetricTypeInName + - ReservedChars + - CamelCase + - UnitAbbreviations diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_protogetter.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_protogetter.golden.yml new file mode 100644 index 000000000000..af8b285875de --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_protogetter.golden.yml @@ -0,0 +1,12 @@ +version: "2" +linters: + settings: + protogetter: + skip-generated-by: + - protoc-gen-go-my-own-generator + skip-files: + - '*.pb.go' + - '*/vendor/*' + - /full/path/to/file.go + skip-any-generated: true + replace-first-arg-in-append: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_protogetter.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_protogetter.yml new file mode 100644 index 000000000000..ae85f5772829 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_protogetter.yml @@ -0,0 +1,17 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + protogetter: + skip-generated-by: ["protoc-gen-go-my-own-generator"] + skip-files: + - "*.pb.go" + - "*/vendor/*" + - "/full/path/to/file.go" + skip-any-generated: true + replace-first-arg-in-append: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_reassign.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_reassign.golden.yml new file mode 100644 index 000000000000..0b16808bc5cd --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_reassign.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + settings: + reassign: + patterns: + - .* diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_reassign.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_reassign.yml new file mode 100644 index 000000000000..c14d8ffc4edd --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_reassign.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + reassign: + patterns: + - ".*" diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_recvcheck.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_recvcheck.golden.yml new file mode 100644 index 000000000000..e9483b139eb8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_recvcheck.golden.yml @@ -0,0 +1,7 @@ +version: "2" +linters: + settings: + recvcheck: + disable-builtin: true + exclusions: + - '*.Value' diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_recvcheck.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_recvcheck.yml new file mode 100644 index 000000000000..a34d7f7ecb99 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_recvcheck.yml @@ -0,0 +1,13 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + recvcheck: + disable-builtin: true + exclusions: + - "*.Value" diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_revive.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_revive.golden.yml new file mode 100644 index 000000000000..f9daab227bca --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_revive.golden.yml @@ -0,0 +1,525 @@ +version: "2" +linters: + settings: + revive: + max-open-files: 2048 + confidence: 0.1 + severity: error + enable-all-rules: true + rules: + - name: add-constant + arguments: + - allowFloats: 0.0,0.,1.0,1.,2.0,2. + allowInts: 0,1,2 + allowStrs: '""' + maxLitCount: "3" + severity: warning + disabled: false + exclude: + - "" + - name: argument-limit + arguments: + - 4 + severity: warning + disabled: false + exclude: + - "" + - name: atomic + severity: warning + disabled: false + exclude: + - "" + - name: banned-characters + arguments: + - Ω + - Σ + - σ + - "7" + severity: warning + disabled: false + exclude: + - "" + - name: bare-return + severity: warning + disabled: false + exclude: + - "" + - name: blank-imports + severity: warning + disabled: false + exclude: + - "" + - name: bool-literal-in-expr + severity: warning + disabled: false + exclude: + - "" + - name: call-to-gc + severity: warning + disabled: false + exclude: + - "" + - name: cognitive-complexity + arguments: + - 7 + severity: warning + disabled: false + exclude: + - "" + - name: comment-spacings + arguments: + - mypragma + - otherpragma + severity: warning + disabled: false + exclude: + - "" + - name: comments-density + arguments: + - 15 + severity: warning + disabled: false + exclude: + - "" + - name: confusing-naming + severity: warning + disabled: false + exclude: + - "" + - name: confusing-results + severity: warning + disabled: false + exclude: + - "" + - name: constant-logical-expr + severity: warning + disabled: false + exclude: + - "" + - name: context-as-argument + arguments: + - allowTypesBefore: '*testing.T,*github.com/user/repo/testing.Harness' + severity: warning + disabled: false + exclude: + - "" + - name: context-keys-type + severity: warning + disabled: false + exclude: + - "" + - name: cyclomatic + arguments: + - 3 + severity: warning + disabled: false + exclude: + - "" + - name: datarace + severity: warning + disabled: false + exclude: + - "" + - name: deep-exit + severity: warning + disabled: false + exclude: + - "" + - name: defer + arguments: + - - call-chain + - loop + severity: warning + disabled: false + exclude: + - "" + - name: dot-imports + severity: warning + disabled: false + exclude: + - "" + - name: duplicated-imports + severity: warning + disabled: false + exclude: + - "" + - name: early-return + arguments: + - preserveScope + - allowJump + severity: warning + disabled: false + exclude: + - "" + - name: empty-block + severity: warning + disabled: false + exclude: + - "" + - name: empty-lines + severity: warning + disabled: false + exclude: + - "" + - name: enforce-map-style + arguments: + - make + severity: warning + disabled: false + exclude: + - "" + - name: enforce-repeated-arg-type-style + arguments: + - short + severity: warning + disabled: false + exclude: + - "" + - name: enforce-slice-style + arguments: + - make + severity: warning + disabled: false + exclude: + - "" + - name: error-naming + severity: warning + disabled: false + exclude: + - "" + - name: error-return + severity: warning + disabled: false + exclude: + - "" + - name: error-strings + arguments: + - xerrors.New + severity: warning + disabled: false + exclude: + - "" + - name: errorf + severity: warning + disabled: false + exclude: + - "" + - name: exported + arguments: + - checkPrivateReceivers + - disableStutteringCheck + - checkPublicInterface + - disableChecksOnFunctions + severity: warning + disabled: false + exclude: + - "" + - name: file-header + arguments: + - This is the text that must appear at the top of source files. + severity: warning + disabled: false + exclude: + - "" + - name: file-length-limit + arguments: + - max: 100 + skipBlankLines: true + skipComments: true + severity: warning + disabled: false + exclude: + - "" + - name: filename-format + arguments: + - ^[_a-z][_a-z0-9]*\.go$ + severity: warning + disabled: false + exclude: + - "" + - name: flag-parameter + severity: warning + disabled: false + exclude: + - "" + - name: function-length + arguments: + - 10 + - 0 + severity: warning + disabled: false + exclude: + - "" + - name: function-result-limit + arguments: + - 3 + severity: warning + disabled: false + exclude: + - "" + - name: get-return + severity: warning + disabled: false + exclude: + - "" + - name: identical-branches + severity: warning + disabled: false + exclude: + - "" + - name: if-return + severity: warning + disabled: false + exclude: + - "" + - name: import-alias-naming + arguments: + - ^[a-z][a-z0-9]{0,}$ + severity: warning + disabled: false + exclude: + - "" + - name: import-shadowing + severity: warning + disabled: false + exclude: + - "" + - name: imports-blocklist + arguments: + - crypto/md5 + - crypto/sha1 + severity: warning + disabled: false + exclude: + - "" + - name: increment-decrement + severity: warning + disabled: false + exclude: + - "" + - name: indent-error-flow + arguments: + - preserveScope + severity: warning + disabled: false + exclude: + - "" + - name: line-length-limit + arguments: + - 80 + severity: warning + disabled: false + exclude: + - "" + - name: max-control-nesting + arguments: + - 3 + severity: warning + disabled: false + exclude: + - "" + - name: max-public-structs + arguments: + - 3 + severity: warning + disabled: false + exclude: + - "" + - name: modifies-parameter + severity: warning + disabled: false + exclude: + - "" + - name: modifies-value-receiver + severity: warning + disabled: false + exclude: + - "" + - name: nested-structs + severity: warning + disabled: false + exclude: + - "" + - name: optimize-operands-order + severity: warning + disabled: false + exclude: + - "" + - name: package-comments + severity: warning + disabled: false + exclude: + - "" + - name: range + severity: warning + disabled: false + exclude: + - "" + - name: range-val-address + severity: warning + disabled: false + exclude: + - "" + - name: range-val-in-closure + severity: warning + disabled: false + exclude: + - "" + - name: receiver-naming + arguments: + - maxLength: 2 + severity: warning + disabled: false + exclude: + - "" + - name: redefines-builtin-id + severity: warning + disabled: false + exclude: + - "" + - name: redundant-build-tag + severity: warning + disabled: false + exclude: + - "" + - name: redundant-import-alias + severity: warning + disabled: false + exclude: + - "" + - name: string-format + arguments: + - - core.WriteError[1].Message + - /^([^A-Z]|$)/ + - must not start with a capital letter + - - fmt.Errorf[0] + - /(^|[^\.!?])$/ + - must not end in punctuation + - - panic + - /^[^\n]*$/ + - must not contain line breaks + severity: warning + disabled: false + exclude: + - "" + - name: string-of-int + severity: warning + disabled: false + exclude: + - "" + - name: struct-tag + arguments: + - json,inline + - bson,outline,gnu + severity: warning + disabled: false + exclude: + - "" + - name: superfluous-else + arguments: + - preserveScope + severity: warning + disabled: false + exclude: + - "" + - name: time-equal + severity: warning + disabled: false + exclude: + - "" + - name: time-naming + severity: warning + disabled: false + exclude: + - "" + - name: unchecked-type-assertion + arguments: + - acceptIgnoredAssertionResult: true + severity: warning + disabled: false + exclude: + - "" + - name: unconditional-recursion + severity: warning + disabled: false + exclude: + - "" + - name: unexported-naming + severity: warning + disabled: false + exclude: + - "" + - name: unexported-return + severity: warning + disabled: false + exclude: + - "" + - name: unhandled-error + arguments: + - fmt.Printf + - myFunction + severity: warning + disabled: false + exclude: + - "" + - name: unnecessary-stmt + severity: warning + disabled: false + exclude: + - "" + - name: unreachable-code + severity: warning + disabled: false + exclude: + - "" + - name: unused-parameter + arguments: + - allowRegex: ^_ + severity: warning + disabled: false + exclude: + - "" + - name: unused-receiver + arguments: + - allowRegex: ^_ + severity: warning + disabled: false + exclude: + - "" + - name: use-any + severity: warning + disabled: false + exclude: + - "" + - name: use-errors-new + severity: warning + disabled: false + exclude: + - "" + - name: useless-break + severity: warning + disabled: false + exclude: + - "" + - name: var-declaration + severity: warning + disabled: false + exclude: + - "" + - name: var-naming + arguments: + - - ID + - - VM + - - upperCaseConst: true + severity: warning + disabled: false + exclude: + - "" + - name: waitgroup-by-value + severity: warning + disabled: false + exclude: + - "" + directives: + - name: specify-disable-reason + severity: error diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_revive.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_revive.yml new file mode 100644 index 000000000000..1d5506a64e02 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_revive.yml @@ -0,0 +1,435 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + revive: + max-open-files: 2048 + ignore-generated-header: true + severity: error + enable-all-rules: true + directives: + - name: specify-disable-reason + severity: error + confidence: 0.1 + rules: + - name: add-constant + severity: warning + disabled: false + exclude: [""] + arguments: + - maxLitCount: "3" + allowStrs: '""' + allowInts: "0,1,2" + allowFloats: "0.0,0.,1.0,1.,2.0,2." + - name: argument-limit + severity: warning + disabled: false + exclude: [""] + arguments: [ 4 ] + - name: atomic + severity: warning + disabled: false + exclude: [""] + - name: banned-characters + severity: warning + disabled: false + exclude: [""] + arguments: [ "Ω","Σ","σ", "7" ] + - name: bare-return + severity: warning + disabled: false + exclude: [""] + - name: blank-imports + severity: warning + disabled: false + exclude: [""] + - name: bool-literal-in-expr + severity: warning + disabled: false + exclude: [""] + - name: call-to-gc + severity: warning + disabled: false + exclude: [""] + - name: cognitive-complexity + severity: warning + disabled: false + exclude: [""] + arguments: [ 7 ] + - name: comment-spacings + severity: warning + disabled: false + exclude: [""] + arguments: + - mypragma + - otherpragma + - name: comments-density + severity: warning + disabled: false + exclude: [""] + arguments: [ 15 ] + - name: confusing-naming + severity: warning + disabled: false + exclude: [""] + - name: confusing-results + severity: warning + disabled: false + exclude: [""] + - name: constant-logical-expr + severity: warning + disabled: false + exclude: [""] + - name: context-as-argument + severity: warning + disabled: false + exclude: [""] + arguments: + - allowTypesBefore: "*testing.T,*github.com/user/repo/testing.Harness" + - name: context-keys-type + severity: warning + disabled: false + exclude: [""] + - name: cyclomatic + severity: warning + disabled: false + exclude: [""] + arguments: [ 3 ] + - name: datarace + severity: warning + disabled: false + exclude: [""] + - name: deep-exit + severity: warning + disabled: false + exclude: [""] + - name: defer + severity: warning + disabled: false + exclude: [""] + arguments: + - [ "call-chain", "loop" ] + - name: dot-imports + severity: warning + disabled: false + exclude: [""] + arguments: [ ] + - name: duplicated-imports + severity: warning + disabled: false + exclude: [""] + - name: early-return + severity: warning + disabled: false + exclude: [""] + arguments: + - "preserveScope" + - "allowJump" + - name: empty-block + severity: warning + disabled: false + exclude: [""] + - name: empty-lines + severity: warning + disabled: false + exclude: [""] + - name: enforce-map-style + severity: warning + disabled: false + exclude: [""] + arguments: + - "make" + - name: enforce-repeated-arg-type-style + severity: warning + disabled: false + exclude: [""] + arguments: + - "short" + - name: enforce-slice-style + severity: warning + disabled: false + exclude: [""] + arguments: + - "make" + - name: error-naming + severity: warning + disabled: false + exclude: [""] + - name: error-return + severity: warning + disabled: false + exclude: [""] + - name: error-strings + severity: warning + disabled: false + exclude: [""] + arguments: + - "xerrors.New" + - name: errorf + severity: warning + disabled: false + exclude: [""] + - name: exported + severity: warning + disabled: false + exclude: [""] + arguments: + - "checkPrivateReceivers" + - "disableStutteringCheck" + - "checkPublicInterface" + - "disableChecksOnFunctions" + - name: file-header + severity: warning + disabled: false + exclude: [""] + arguments: + - This is the text that must appear at the top of source files. + - name: file-length-limit + severity: warning + disabled: false + exclude: [""] + arguments: + - max: 100 + skipComments: true + skipBlankLines: true + - name: filename-format + severity: warning + disabled: false + exclude: [""] + arguments: + - "^[_a-z][_a-z0-9]*\\.go$" + - name: flag-parameter + severity: warning + disabled: false + exclude: [""] + - name: function-length + severity: warning + disabled: false + exclude: [""] + arguments: [ 10, 0 ] + - name: function-result-limit + severity: warning + disabled: false + exclude: [""] + arguments: [ 3 ] + - name: get-return + severity: warning + disabled: false + exclude: [""] + - name: identical-branches + severity: warning + disabled: false + exclude: [""] + - name: if-return + severity: warning + disabled: false + exclude: [""] + - name: import-alias-naming + severity: warning + disabled: false + exclude: [""] + arguments: + - "^[a-z][a-z0-9]{0,}$" + - name: import-shadowing + severity: warning + disabled: false + exclude: [""] + - name: imports-blocklist + severity: warning + disabled: false + exclude: [""] + arguments: + - "crypto/md5" + - "crypto/sha1" + - name: increment-decrement + severity: warning + disabled: false + exclude: [""] + - name: indent-error-flow + severity: warning + disabled: false + exclude: [""] + arguments: + - "preserveScope" + - name: line-length-limit + severity: warning + disabled: false + exclude: [""] + arguments: [ 80 ] + - name: max-control-nesting + severity: warning + disabled: false + exclude: [""] + arguments: [ 3 ] + - name: max-public-structs + severity: warning + disabled: false + exclude: [""] + arguments: [ 3 ] + - name: modifies-parameter + severity: warning + disabled: false + exclude: [""] + - name: modifies-value-receiver + severity: warning + disabled: false + exclude: [""] + - name: nested-structs + severity: warning + disabled: false + exclude: [""] + - name: optimize-operands-order + severity: warning + disabled: false + exclude: [""] + - name: package-comments + severity: warning + disabled: false + exclude: [""] + - name: range + severity: warning + disabled: false + exclude: [""] + - name: range-val-address + severity: warning + disabled: false + exclude: [""] + - name: range-val-in-closure + severity: warning + disabled: false + exclude: [""] + - name: receiver-naming + severity: warning + disabled: false + exclude: [""] + arguments: + - maxLength: 2 + - name: redefines-builtin-id + severity: warning + disabled: false + exclude: [""] + - name: redundant-build-tag + severity: warning + disabled: false + exclude: [""] + - name: redundant-import-alias + severity: warning + disabled: false + exclude: [""] + - name: string-format + severity: warning + disabled: false + exclude: [""] + arguments: + - - 'core.WriteError[1].Message' + - '/^([^A-Z]|$)/' + - must not start with a capital letter + - - 'fmt.Errorf[0]' + - '/(^|[^\.!?])$/' + - must not end in punctuation + - - panic + - '/^[^\n]*$/' + - must not contain line breaks + - name: string-of-int + severity: warning + disabled: false + exclude: [""] + - name: struct-tag + severity: warning + disabled: false + exclude: [""] + arguments: + - "json,inline" + - "bson,outline,gnu" + - name: superfluous-else + severity: warning + disabled: false + exclude: [""] + arguments: + - "preserveScope" + - name: time-equal + severity: warning + disabled: false + exclude: [""] + - name: time-naming + severity: warning + disabled: false + exclude: [""] + - name: unchecked-type-assertion + severity: warning + disabled: false + exclude: [""] + arguments: + - acceptIgnoredAssertionResult: true + - name: unconditional-recursion + severity: warning + disabled: false + exclude: [""] + - name: unexported-naming + severity: warning + disabled: false + exclude: [""] + - name: unexported-return + severity: warning + disabled: false + exclude: [""] + - name: unhandled-error + severity: warning + disabled: false + exclude: [""] + arguments: + - "fmt.Printf" + - "myFunction" + - name: unnecessary-stmt + severity: warning + disabled: false + exclude: [""] + - name: unreachable-code + severity: warning + disabled: false + exclude: [""] + - name: unused-parameter + severity: warning + disabled: false + exclude: [""] + arguments: + - allowRegex: "^_" + - name: unused-receiver + severity: warning + disabled: false + exclude: [""] + arguments: + - allowRegex: "^_" + - name: use-any + severity: warning + disabled: false + exclude: [""] + - name: use-errors-new + severity: warning + disabled: false + exclude: [""] + - name: useless-break + severity: warning + disabled: false + exclude: [""] + - name: var-declaration + severity: warning + disabled: false + exclude: [""] + - name: var-naming + severity: warning + disabled: false + exclude: [""] + arguments: + - [ "ID" ] + - [ "VM" ] + - - upperCaseConst: true + - name: waitgroup-by-value + severity: warning + disabled: false + exclude: [""] diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_rowserrcheck.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_rowserrcheck.golden.yml new file mode 100644 index 000000000000..700ee72801d6 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_rowserrcheck.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + settings: + rowserrcheck: + packages: + - github.com/jmoiron/sqlx diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_rowserrcheck.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_rowserrcheck.yml new file mode 100644 index 000000000000..41bc1bd58b8e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_rowserrcheck.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + rowserrcheck: + packages: + - github.com/jmoiron/sqlx diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_sloglint.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_sloglint.golden.yml new file mode 100644 index 000000000000..e18739406e38 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_sloglint.golden.yml @@ -0,0 +1,19 @@ +version: "2" +linters: + settings: + sloglint: + no-mixed-args: false + kv-only: true + attr-only: true + no-global: all + context: all + static-msg: true + no-raw-keys: true + key-naming-case: snake + forbidden-keys: + - time + - level + - msg + - source + - foo + args-on-sep-lines: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_sloglint.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_sloglint.yml new file mode 100644 index 000000000000..01f2eee9e94d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_sloglint.yml @@ -0,0 +1,25 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + sloglint: + no-mixed-args: false + kv-only: true + attr-only: true + no-global: "all" + context: "all" + static-msg: true + no-raw-keys: true + key-naming-case: snake + forbidden-keys: + - time + - level + - msg + - source + - foo + args-on-sep-lines: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_spancheck.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_spancheck.golden.yml new file mode 100644 index 000000000000..89812e5254ae --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_spancheck.golden.yml @@ -0,0 +1,12 @@ +version: "2" +linters: + settings: + spancheck: + checks: + - end + - record-error + - set-status + ignore-check-signatures: + - telemetry.RecordError + extra-start-span-signatures: + - github.com/user/repo/telemetry/trace.Start:opentelemetry diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_spancheck.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_spancheck.yml new file mode 100644 index 000000000000..641344b0e6d6 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_spancheck.yml @@ -0,0 +1,18 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + spancheck: + checks: + - end + - record-error + - set-status + ignore-check-signatures: + - "telemetry.RecordError" + extra-start-span-signatures: + - "github.com/user/repo/telemetry/trace.Start:opentelemetry" diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck.golden.yml new file mode 100644 index 000000000000..a78fade87454 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck.golden.yml @@ -0,0 +1,100 @@ +version: "2" +linters: + settings: + staticcheck: + checks: + - SA1000 + - SA1001 + - SA1002 + - SA1003 + - SA1004 + - SA1005 + - SA1006 + - SA1007 + - SA1008 + - SA1010 + - SA1011 + - SA1012 + - SA1013 + - SA1014 + - SA1015 + - SA1016 + - SA1017 + - SA1018 + - SA1019 + - SA1020 + - SA1021 + - SA1023 + - SA1024 + - SA1025 + - SA1026 + - SA1027 + - SA1028 + - SA1029 + - SA1030 + - SA1031 + - SA1032 + - SA2000 + - SA2001 + - SA2002 + - SA2003 + - SA3000 + - SA3001 + - SA4000 + - SA4001 + - SA4003 + - SA4004 + - SA4005 + - SA4006 + - SA4008 + - SA4009 + - SA4010 + - SA4011 + - SA4012 + - SA4013 + - SA4014 + - SA4015 + - SA4016 + - SA4017 + - SA4018 + - SA4019 + - SA4020 + - SA4021 + - SA4022 + - SA4023 + - SA4024 + - SA4025 + - SA4026 + - SA4027 + - SA4028 + - SA4029 + - SA4030 + - SA4031 + - SA4032 + - SA5000 + - SA5001 + - SA5002 + - SA5003 + - SA5004 + - SA5005 + - SA5007 + - SA5008 + - SA5009 + - SA5010 + - SA5011 + - SA5012 + - SA6000 + - SA6001 + - SA6002 + - SA6003 + - SA6005 + - SA6006 + - SA9001 + - SA9002 + - SA9003 + - SA9004 + - SA9005 + - SA9006 + - SA9007 + - SA9008 + - SA9009 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck.yml new file mode 100644 index 000000000000..242bd5e9ddee --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_staticcheck.yml @@ -0,0 +1,106 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + staticcheck: + checks: + - SA1000 + - SA1001 + - SA1002 + - SA1003 + - SA1004 + - SA1005 + - SA1006 + - SA1007 + - SA1008 + - SA1010 + - SA1011 + - SA1012 + - SA1013 + - SA1014 + - SA1015 + - SA1016 + - SA1017 + - SA1018 + - SA1019 + - SA1020 + - SA1021 + - SA1023 + - SA1024 + - SA1025 + - SA1026 + - SA1027 + - SA1028 + - SA1029 + - SA1030 + - SA1031 + - SA1032 + - SA2000 + - SA2001 + - SA2002 + - SA2003 + - SA3000 + - SA3001 + - SA4000 + - SA4001 + - SA4003 + - SA4004 + - SA4005 + - SA4006 + - SA4008 + - SA4009 + - SA4010 + - SA4011 + - SA4012 + - SA4013 + - SA4014 + - SA4015 + - SA4016 + - SA4017 + - SA4018 + - SA4019 + - SA4020 + - SA4021 + - SA4022 + - SA4023 + - SA4024 + - SA4025 + - SA4026 + - SA4027 + - SA4028 + - SA4029 + - SA4030 + - SA4031 + - SA4032 + - SA5000 + - SA5001 + - SA5002 + - SA5003 + - SA5004 + - SA5005 + - SA5007 + - SA5008 + - SA5009 + - SA5010 + - SA5011 + - SA5012 + - SA6000 + - SA6001 + - SA6002 + - SA6003 + - SA6005 + - SA6006 + - SA9001 + - SA9002 + - SA9003 + - SA9004 + - SA9005 + - SA9006 + - SA9007 + - SA9008 + - SA9009 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_stylecheck.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_stylecheck.golden.yml new file mode 100644 index 000000000000..26656198786d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_stylecheck.golden.yml @@ -0,0 +1,73 @@ +version: "2" +linters: + settings: + staticcheck: + checks: + - ST1000 + - ST1001 + - ST1003 + - ST1005 + - ST1006 + - ST1008 + - ST1011 + - ST1012 + - ST1013 + - ST1015 + - ST1016 + - ST1017 + - ST1018 + - ST1019 + - ST1020 + - ST1021 + - ST1022 + - ST1023 + initialisms: + - ACL + - API + - ASCII + - CPU + - CSS + - DNS + - EOF + - GUID + - HTML + - HTTP + - HTTPS + - ID + - IP + - JSON + - QPS + - RAM + - RPC + - SLA + - SMTP + - SQL + - SSH + - TCP + - TLS + - TTL + - UDP + - UI + - GID + - UID + - UUID + - URI + - URL + - UTF8 + - VM + - XML + - XMPP + - XSRF + - XSS + - SIP + - RTP + - AMQP + - DB + - TS + dot-import-whitelist: + - fmt + http-status-code-whitelist: + - "200" + - "400" + - "404" + - "500" diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_stylecheck.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_stylecheck.yml new file mode 100644 index 000000000000..199d27bb4bcd --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_stylecheck.yml @@ -0,0 +1,33 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + stylecheck: + dot-import-whitelist: + - fmt + initialisms: [ "ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS", "SIP", "RTP", "AMQP", "DB", "TS" ] + http-status-code-whitelist: [ "200", "400", "404", "500" ] + checks: + - ST1000 + - ST1001 + - ST1003 + - ST1005 + - ST1006 + - ST1008 + - ST1011 + - ST1012 + - ST1013 + - ST1015 + - ST1016 + - ST1017 + - ST1018 + - ST1019 + - ST1020 + - ST1021 + - ST1022 + - ST1023 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagalign.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagalign.golden.yml new file mode 100644 index 000000000000..012d798bd2d8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagalign.golden.yml @@ -0,0 +1,15 @@ +version: "2" +linters: + settings: + tagalign: + align: false + sort: false + order: + - json + - yaml + - yml + - toml + - mapstructure + - binding + - validate + strict: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagalign.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagalign.yml new file mode 100644 index 000000000000..858213559200 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagalign.yml @@ -0,0 +1,21 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + tagalign: + align: false + sort: false + order: + - json + - yaml + - yml + - toml + - mapstructure + - binding + - validate + strict: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagliatelle.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagliatelle.golden.yml new file mode 100644 index 000000000000..b65c3241e5f5 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagliatelle.golden.yml @@ -0,0 +1,27 @@ +version: "2" +linters: + settings: + tagliatelle: + case: + rules: + avro: snake + bson: camel + env: upperSnake + envconfig: upperSnake + json: camel + mapstructure: kebab + toml: camel + whatever: snake + xml: camel + yaml: camel + extended-rules: + json: + case: camel + extra-initialisms: true + initialism-overrides: + DB: true + LHS: false + use-field-name: true + ignored-fields: + - Bar + - Foo diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagliatelle.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagliatelle.yml new file mode 100644 index 000000000000..420a4e1d9f97 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_tagliatelle.yml @@ -0,0 +1,45 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + tagliatelle: + case: + rules: + json: camel + yaml: camel + xml: camel + toml: camel + bson: camel + avro: snake + mapstructure: kebab + env: upperSnake + envconfig: upperSnake + whatever: snake + extended-rules: + json: + case: camel + extra-initialisms: true + initialism-overrides: + DB: true + LHS: false + use-field-name: true + ignored-fields: + - Bar + - Foo + overrides: + - + pkg: foo/bar + rules: + json: snake + xml: pascal + extended-rules: + use-field-name: true + ignored-fields: + - Bar + - Foo + ignore: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testifylint.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testifylint.golden.yml new file mode 100644 index 000000000000..dbae40e35c5d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testifylint.golden.yml @@ -0,0 +1,67 @@ +version: "2" +linters: + settings: + testifylint: + enable-all: true + disable-all: true + enable: + - blank-import + - bool-compare + - compares + - contains + - empty + - encoded-compare + - error-is-as + - error-nil + - expected-actual + - float-compare + - formatter + - go-require + - len + - negative-positive + - nil-compare + - regexp + - require-error + - suite-broken-parallel + - suite-dont-use-pkg + - suite-extra-assert-call + - suite-subtest-run + - suite-thelper + - useless-assert + disable: + - blank-import + - bool-compare + - compares + - contains + - empty + - encoded-compare + - error-is-as + - error-nil + - expected-actual + - float-compare + - formatter + - go-require + - len + - negative-positive + - nil-compare + - regexp + - require-error + - suite-broken-parallel + - suite-dont-use-pkg + - suite-extra-assert-call + - suite-subtest-run + - suite-thelper + - useless-assert + bool-compare: + ignore-custom-types: true + expected-actual: + pattern: ^expected + formatter: + check-format-string: false + require-f-funcs: true + go-require: + ignore-http-handlers: true + require-error: + fn-pattern: ^(Errorf?|NoErrorf?)$ + suite-extra-assert-call: + mode: require diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testifylint.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testifylint.yml new file mode 100644 index 000000000000..80351696d14b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testifylint.yml @@ -0,0 +1,73 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + testifylint: + enable-all: true + disable: + - blank-import + - bool-compare + - compares + - contains + - empty + - encoded-compare + - error-is-as + - error-nil + - expected-actual + - float-compare + - formatter + - go-require + - len + - negative-positive + - nil-compare + - regexp + - require-error + - suite-broken-parallel + - suite-dont-use-pkg + - suite-extra-assert-call + - suite-subtest-run + - suite-thelper + - useless-assert + disable-all: true + enable: + - blank-import + - bool-compare + - compares + - contains + - empty + - encoded-compare + - error-is-as + - error-nil + - expected-actual + - float-compare + - formatter + - go-require + - len + - negative-positive + - nil-compare + - regexp + - require-error + - suite-broken-parallel + - suite-dont-use-pkg + - suite-extra-assert-call + - suite-subtest-run + - suite-thelper + - useless-assert + bool-compare: + ignore-custom-types: true + expected-actual: + pattern: ^expected + formatter: + check-format-string: false + require-f-funcs: true + go-require: + ignore-http-handlers: true + require-error: + fn-pattern: ^(Errorf?|NoErrorf?)$ + suite-extra-assert-call: + mode: require diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testpackage.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testpackage.golden.yml new file mode 100644 index 000000000000..1d993011cfd6 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testpackage.golden.yml @@ -0,0 +1,8 @@ +version: "2" +linters: + settings: + testpackage: + skip-regexp: (export|internal)_test\.go + allow-packages: + - example + - main diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testpackage.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testpackage.yml new file mode 100644 index 000000000000..a3af5518cab3 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_testpackage.yml @@ -0,0 +1,14 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + testpackage: + skip-regexp: (export|internal)_test\.go + allow-packages: + - example + - main diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_thelper.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_thelper.golden.yml new file mode 100644 index 000000000000..0fc94b5d43b8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_thelper.golden.yml @@ -0,0 +1,20 @@ +version: "2" +linters: + settings: + thelper: + test: + first: false + name: false + begin: false + fuzz: + first: false + name: false + begin: false + benchmark: + first: false + name: false + begin: false + tb: + first: false + name: false + begin: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_thelper.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_thelper.yml new file mode 100644 index 000000000000..080d0b282e06 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_thelper.yml @@ -0,0 +1,26 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + thelper: + test: + first: false + name: false + begin: false + benchmark: + first: false + name: false + begin: false + tb: + first: false + name: false + begin: false + fuzz: + first: false + name: false + begin: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unconvert.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unconvert.golden.yml new file mode 100644 index 000000000000..698466dcb44a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unconvert.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + settings: + unconvert: + fast-math: true + safe: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unconvert.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unconvert.yml new file mode 100644 index 000000000000..6aea35d5750e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unconvert.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + unconvert: + fast-math: true + safe: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unparam.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unparam.golden.yml new file mode 100644 index 000000000000..6b82a3776c0f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unparam.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + settings: + unparam: + check-exported: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unparam.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unparam.yml new file mode 100644 index 000000000000..2b5518adb4ce --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unparam.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + unparam: + check-exported: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unused.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unused.golden.yml new file mode 100644 index 000000000000..9cd72d9690b8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unused.golden.yml @@ -0,0 +1,10 @@ +version: "2" +linters: + settings: + unused: + field-writes-are-uses: false + post-statements-are-reads: true + exported-fields-are-used: false + parameters-are-used: false + local-variables-are-used: false + generated-is-used: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unused.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unused.yml new file mode 100644 index 000000000000..ffd7e1a774e8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_unused.yml @@ -0,0 +1,16 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + unused: + field-writes-are-uses: false + post-statements-are-reads: true + exported-fields-are-used: false + parameters-are-used: false + local-variables-are-used: false + generated-is-used: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usestdlibvars.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usestdlibvars.golden.yml new file mode 100644 index 000000000000..901e7ff1bc5d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usestdlibvars.golden.yml @@ -0,0 +1,14 @@ +version: "2" +linters: + settings: + usestdlibvars: + http-method: false + http-status-code: false + time-weekday: true + time-month: true + time-layout: true + crypto-hash: true + default-rpc-path: true + sql-isolation-level: true + tls-signature-scheme: true + constant-kind: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usestdlibvars.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usestdlibvars.yml new file mode 100644 index 000000000000..b9eae89f58d7 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usestdlibvars.yml @@ -0,0 +1,20 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + usestdlibvars: + http-method: false + http-status-code: false + time-weekday: true + time-month: true + time-layout: true + crypto-hash: true + default-rpc-path: true + sql-isolation-level: true + tls-signature-scheme: true + constant-kind: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usetesting.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usetesting.golden.yml new file mode 100644 index 000000000000..e309adfab13a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usetesting.golden.yml @@ -0,0 +1,11 @@ +version: "2" +linters: + settings: + usetesting: + context-background: false + context-todo: false + os-chdir: false + os-mkdir-temp: false + os-setenv: false + os-temp-dir: true + os-create-temp: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usetesting.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usetesting.yml new file mode 100644 index 000000000000..2b4d86117ea5 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_usetesting.yml @@ -0,0 +1,17 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + usetesting: + os-create-temp: false + os-mkdir-temp: false + os-setenv: false + os-temp-dir: true + os-chdir: false + context-background: false + context-todo: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_varnamelen.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_varnamelen.golden.yml new file mode 100644 index 000000000000..dcfe0c357ad5 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_varnamelen.golden.yml @@ -0,0 +1,23 @@ +version: "2" +linters: + settings: + varnamelen: + max-distance: 6 + min-name-length: 2 + check-receiver: true + check-return: true + check-type-param: true + ignore-names: + - err + ignore-type-assert-ok: true + ignore-map-index-ok: true + ignore-chan-recv-ok: true + ignore-decls: + - c echo.Context + - t testing.T + - f *foo.Bar + - e error + - i int + - const C + - T any + - m map[string]int diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_varnamelen.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_varnamelen.yml new file mode 100644 index 000000000000..8d0e6fa297e2 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_varnamelen.yml @@ -0,0 +1,29 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + varnamelen: + max-distance: 6 + min-name-length: 2 + check-receiver: true + check-return: true + check-type-param: true + ignore-type-assert-ok: true + ignore-map-index-ok: true + ignore-chan-recv-ok: true + ignore-names: + - err + ignore-decls: + - c echo.Context + - t testing.T + - f *foo.Bar + - e error + - i int + - const C + - T any + - m map[string]int diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_whitespace.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_whitespace.golden.yml new file mode 100644 index 000000000000..956381df4d7b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_whitespace.golden.yml @@ -0,0 +1,6 @@ +version: "2" +linters: + settings: + whitespace: + multi-if: true + multi-func: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_whitespace.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_whitespace.yml new file mode 100644 index 000000000000..4d7f0fcc7150 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_whitespace.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + whitespace: + multi-if: true + multi-func: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wrapcheck.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wrapcheck.golden.yml new file mode 100644 index 000000000000..cd706f1c8969 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wrapcheck.golden.yml @@ -0,0 +1,24 @@ +version: "2" +linters: + settings: + wrapcheck: + extra-ignore-sigs: + - .CustomError( + - .SpecificWrap( + ignore-sigs: + - .Errorf( + - errors.New( + - errors.Unwrap( + - errors.Join( + - .Wrap( + - .Wrapf( + - .WithMessage( + - .WithMessagef( + - .WithStack( + ignore-sig-regexps: + - \.New.*Error\( + ignore-package-globs: + - encoding/* + - github.com/pkg/* + ignore-interface-regexps: + - ^(?i)c(?-i)ach(ing|e) diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wrapcheck.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wrapcheck.yml new file mode 100644 index 000000000000..02b1e2e864b0 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wrapcheck.yml @@ -0,0 +1,30 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + wrapcheck: + extra-ignore-sigs: + - .CustomError( + - .SpecificWrap( + ignoreSigs: + - .Errorf( + - errors.New( + - errors.Unwrap( + - errors.Join( + - .Wrap( + - .Wrapf( + - .WithMessage( + - .WithMessagef( + - .WithStack( + ignoreSigRegexps: + - \.New.*Error\( + ignorePackageGlobs: + - encoding/* + - github.com/pkg/* + ignoreInterfaceRegexps: + - ^(?i)c(?-i)ach(ing|e) diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wsl.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wsl.golden.yml new file mode 100644 index 000000000000..aba22c31e21b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wsl.golden.yml @@ -0,0 +1,22 @@ +version: "2" +linters: + settings: + wsl: + strict-append: false + allow-assign-and-call: false + allow-assign-and-anything: true + allow-multiline-assign: false + force-case-trailing-whitespace: 1 + allow-trailing-comment: true + allow-separated-leading-comment: true + allow-cuddle-declarations: true + allow-cuddle-with-calls: + - Foo + - Bar + allow-cuddle-with-rhs: + - Foo + - Bar + force-err-cuddling: true + error-variable-names: + - foo + force-short-decl-cuddling: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wsl.yml b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wsl.yml new file mode 100644 index 000000000000..a437fa657b7b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters-settings_wsl.yml @@ -0,0 +1,23 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters-settings: + wsl: + strict-append: false + allow-assign-and-call: false + allow-assign-and-anything: true + allow-multiline-assign: false + force-case-trailing-whitespace: 1 + allow-trailing-comment: true + allow-separated-leading-comment: true + allow-cuddle-declarations: true + allow-cuddle-with-calls: [ "Foo", "Bar" ] + allow-cuddle-with-rhs: [ "Foo", "Bar" ] + force-err-cuddling: true + error-variable-names: [ "foo" ] + force-short-decl-cuddling: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_01.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_01.golden.yml new file mode 100644 index 000000000000..a226c8f1cea0 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_01.golden.yml @@ -0,0 +1,115 @@ +version: "2" +linters: + default: none + enable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + - errchkjson + - errname + - errorlint + - exhaustive + - exhaustruct + - exptostd + - fatcontext + - forbidigo + - forcetypeassert + - funlen + - ginkgolinter + - gocheckcompilerdirectives + - gochecknoglobals + - gochecknoinits + - gochecksumtype + - gocognit + - goconst + - gocritic + - gocyclo + - godot + - godox + - goheader + - gomoddirectives + - gomodguard + - goprintffuncname + - gosec + - gosmopolitan + - govet + - grouper + - iface + - importas + - inamedparam + - ineffassign + - interfacebloat + - intrange + - ireturn + - lll + - loggercheck + - maintidx + - makezero + - mirror + - misspell + - mnd + - musttag + - mycustomlinter1 + - mycustomlinter2 + - nakedret + - nestif + - nilerr + - nilnesserr + - nilnil + - nlreturn + - noctx + - nolintlint + - nonamedreturns + - nosprintfhostport + - paralleltest + - perfsprint + - prealloc + - predeclared + - promlinter + - protogetter + - reassign + - recvcheck + - revive + - rowserrcheck + - sloglint + - spancheck + - sqlclosecheck + - staticcheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - unused + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint +formatters: + enable: + - gci + - gofmt + - gofumpt + - goimports diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_01.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_01.yml new file mode 100644 index 000000000000..06b4e8d75176 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_01.yml @@ -0,0 +1,123 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: disable-all + enable +linters: + disable-all: true + enable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + - errchkjson + - errname + - errorlint + - exhaustive + - exhaustruct + - exptostd + - fatcontext + - forbidigo + - forcetypeassert + - funlen + - gci + - ginkgolinter + - gocheckcompilerdirectives + - gochecknoglobals + - gochecknoinits + - gochecksumtype + - gocognit + - goconst + - gocritic + - gocyclo + - godot + - godox + - gofmt + - gofumpt + - goheader + - goimports + - gomoddirectives + - gomodguard + - goprintffuncname + - gosec + - gosimple + - gosmopolitan + - govet + - grouper + - iface + - importas + - inamedparam + - ineffassign + - interfacebloat + - intrange + - ireturn + - lll + - loggercheck + - maintidx + - makezero + - mirror + - misspell + - mnd + - musttag + - nakedret + - nestif + - nilerr + - nilnesserr + - nilnil + - nlreturn + - noctx + - nolintlint + - nonamedreturns + - nosprintfhostport + - paralleltest + - perfsprint + - prealloc + - predeclared + - promlinter + - protogetter + - reassign + - recvcheck + - revive + - rowserrcheck + - sloglint + - spancheck + - sqlclosecheck + - staticcheck + - stylecheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - unused + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint + - mycustomlinter1 + - mycustomlinter2 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_02.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_02.golden.yml new file mode 100644 index 000000000000..dc734d8b4aae --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_02.golden.yml @@ -0,0 +1,109 @@ +version: "2" +linters: + default: all + disable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + - errchkjson + - errname + - errorlint + - exhaustive + - exhaustruct + - exptostd + - fatcontext + - forbidigo + - forcetypeassert + - funlen + - ginkgolinter + - gocheckcompilerdirectives + - gochecknoglobals + - gochecknoinits + - gochecksumtype + - gocognit + - goconst + - gocritic + - gocyclo + - godot + - godox + - goheader + - gomoddirectives + - gomodguard + - goprintffuncname + - gosec + - gosmopolitan + - govet + - grouper + - iface + - importas + - inamedparam + - ineffassign + - interfacebloat + - intrange + - ireturn + - lll + - loggercheck + - maintidx + - makezero + - mirror + - misspell + - mnd + - musttag + - mycustomlinter1 + - mycustomlinter2 + - nakedret + - nestif + - nilerr + - nilnesserr + - nilnil + - nlreturn + - noctx + - nolintlint + - nonamedreturns + - nosprintfhostport + - paralleltest + - perfsprint + - prealloc + - predeclared + - promlinter + - protogetter + - reassign + - recvcheck + - revive + - rowserrcheck + - sloglint + - spancheck + - sqlclosecheck + - staticcheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - unused + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_02.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_02.yml new file mode 100644 index 000000000000..f27fd4d96db6 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_02.yml @@ -0,0 +1,137 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: enable-all + disable +linters: + enable-all: true + disable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + - errchkjson + - errname + - errorlint + - exhaustive + - exhaustruct + - exptostd + - fatcontext + - forbidigo + - forcetypeassert + - funlen + - gci + - ginkgolinter + - gocheckcompilerdirectives + - gochecknoglobals + - gochecknoinits + - gochecksumtype + - gocognit + - goconst + - gocritic + - gocyclo + - godot + - godox + - gofmt + - gofumpt + - goheader + - goimports + - gomoddirectives + - gomodguard + - goprintffuncname + - gosec + - gosimple + - gosmopolitan + - govet + - grouper + - iface + - importas + - inamedparam + - ineffassign + - interfacebloat + - intrange + - ireturn + - lll + - loggercheck + - maintidx + - makezero + - mirror + - misspell + - mnd + - musttag + - nakedret + - nestif + - nilerr + - nilnesserr + - nilnil + - nlreturn + - noctx + - nolintlint + - nonamedreturns + - nosprintfhostport + - paralleltest + - perfsprint + - prealloc + - predeclared + - promlinter + - protogetter + - reassign + - recvcheck + - revive + - rowserrcheck + - sloglint + - spancheck + - sqlclosecheck + - staticcheck + - stylecheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - unused + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint + - deadcode # Deprecated + - execinquery # Deprecated + - exhaustivestruct # Deprecated + - exportloopref # Deprecated + - golint # Deprecated + - gomnd # Deprecated + - ifshort # Deprecated + - interfacer # Deprecated + - maligned # Deprecated + - nosnakecase # Deprecated + - scopelint # Deprecated + - structcheck # Deprecated + - tenv # Deprecated + - varcheck # Deprecated + - mycustomlinter1 + - mycustomlinter2 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_03.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_03.golden.yml new file mode 100644 index 000000000000..e9ee53176afe --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_03.golden.yml @@ -0,0 +1,46 @@ +version: "2" +linters: + enable: + - mycustomlinter1 + - mycustomlinter2 + - sqlclosecheck + - staticcheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint + disable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - mnd + - mycustomlinter3 + - mycustomlinter4 +formatters: + enable: + - gofmt diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_03.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_03.yml new file mode 100644 index 000000000000..6204a475eaab --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_03.yml @@ -0,0 +1,69 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: enable + disable +linters: + enable: + - gofmt + - sqlclosecheck + - staticcheck + - stylecheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - unused + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint + - mycustomlinter1 + - mycustomlinter2 + + disable: + - goimports + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - deadcode # Deprecated + - execinquery # Deprecated + - exhaustivestruct # Deprecated + - exportloopref # Deprecated + - golint # Deprecated + - gomnd # Deprecated + - ifshort # Deprecated + - interfacer # Deprecated + - maligned # Deprecated + - nosnakecase # Deprecated + - scopelint # Deprecated + - structcheck # Deprecated + - tenv # Deprecated + - varcheck # Deprecated + - mycustomlinter3 + - mycustomlinter4 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_04.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_04.golden.yml new file mode 100644 index 000000000000..ab3c9daa1dc5 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_04.golden.yml @@ -0,0 +1,29 @@ +version: "2" +linters: + default: none + enable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + - gomoddirectives + - gomodguard +formatters: + enable: + - gci + - gofmt + - gofumpt + - goimports diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_04.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_04.yml new file mode 100644 index 000000000000..8c2cde07f0df --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_04.yml @@ -0,0 +1,33 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: disable-all + enable + presets +linters: + disable-all: true + enable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + + presets: + - format + - module diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_05.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_05.golden.yml new file mode 100644 index 000000000000..7a86200e614f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_05.golden.yml @@ -0,0 +1,27 @@ +version: "2" +linters: + default: all + disable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck +formatters: + enable: + - gci + - gofmt + - gofumpt + - goimports diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_05.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_05.yml new file mode 100644 index 000000000000..bfbd24bc2b0f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_05.yml @@ -0,0 +1,33 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: enable-all + disable + presets +linters: + enable-all: true + disable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + + presets: + - format + - module diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_06.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_06.golden.yml new file mode 100644 index 000000000000..b0d4ab2d2ebc --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_06.golden.yml @@ -0,0 +1,50 @@ +version: "2" +linters: + enable: + - gomoddirectives + - gomodguard + - mycustomlinter1 + - mycustomlinter2 + - sqlclosecheck + - staticcheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint + disable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - mnd + - mycustomlinter3 + - mycustomlinter4 +formatters: + enable: + - gci + - gofmt + - gofumpt diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_06.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_06.yml new file mode 100644 index 000000000000..c85deb385c54 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_06.yml @@ -0,0 +1,73 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: enable + disable + presets +linters: + enable: + - gofmt + - sqlclosecheck + - staticcheck + - stylecheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - unused + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint + - mycustomlinter1 + - mycustomlinter2 + + disable: + - goimports + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - deadcode # Deprecated + - execinquery # Deprecated + - exhaustivestruct # Deprecated + - exportloopref # Deprecated + - golint # Deprecated + - gomnd # Deprecated + - ifshort # Deprecated + - interfacer # Deprecated + - maligned # Deprecated + - nosnakecase # Deprecated + - scopelint # Deprecated + - structcheck # Deprecated + - tenv # Deprecated + - varcheck # Deprecated + - mycustomlinter3 + - mycustomlinter4 + + presets: + - format + - module diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_07.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_07.golden.yml new file mode 100644 index 000000000000..9d6ae59f2ba0 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_07.golden.yml @@ -0,0 +1,113 @@ +version: "2" +linters: + default: none + enable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + - errchkjson + - errname + - errorlint + - exhaustive + - exhaustruct + - exptostd + - fatcontext + - forbidigo + - forcetypeassert + - funlen + - ginkgolinter + - gocheckcompilerdirectives + - gochecknoglobals + - gochecknoinits + - gochecksumtype + - gocognit + - goconst + - gocritic + - gocyclo + - godot + - godox + - goheader + - gomoddirectives + - gomodguard + - goprintffuncname + - gosec + - gosmopolitan + - govet + - grouper + - iface + - importas + - inamedparam + - ineffassign + - interfacebloat + - intrange + - ireturn + - lll + - loggercheck + - maintidx + - makezero + - mirror + - misspell + - mnd + - musttag + - nakedret + - nestif + - nilerr + - nilnesserr + - nilnil + - nlreturn + - noctx + - nolintlint + - nonamedreturns + - nosprintfhostport + - paralleltest + - perfsprint + - prealloc + - predeclared + - promlinter + - protogetter + - reassign + - recvcheck + - revive + - rowserrcheck + - sloglint + - spancheck + - sqlclosecheck + - staticcheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - unused + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint +formatters: + enable: + - gci + - gofmt + - gofumpt + - goimports diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_07.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_07.yml new file mode 100644 index 000000000000..0690f8696743 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_07.yml @@ -0,0 +1,122 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: disable-all + enable + fast +linters: + fast: true + disable-all: true + enable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + - errchkjson + - errname + - errorlint + - exhaustive + - exhaustruct + - exptostd + - fatcontext + - forbidigo + - forcetypeassert + - funlen + - gci + - ginkgolinter + - gocheckcompilerdirectives + - gochecknoglobals + - gochecknoinits + - gochecksumtype + - gocognit + - goconst + - gocritic + - gocyclo + - godot + - godox + - gofmt + - gofumpt + - goheader + - goimports + - gomoddirectives + - gomodguard + - goprintffuncname + - gosec + - gosimple + - gosmopolitan + - govet + - grouper + - iface + - importas + - inamedparam + - ineffassign + - interfacebloat + - intrange + - ireturn + - lll + - loggercheck + - maintidx + - makezero + - mirror + - misspell + - mnd + - musttag + - nakedret + - nestif + - nilerr + - nilnesserr + - nilnil + - nlreturn + - noctx + - nolintlint + - nonamedreturns + - nosprintfhostport + - paralleltest + - perfsprint + - prealloc + - predeclared + - promlinter + - protogetter + - reassign + - recvcheck + - revive + - rowserrcheck + - sloglint + - spancheck + - sqlclosecheck + - staticcheck + - stylecheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - unused + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_08.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_08.golden.yml new file mode 100644 index 000000000000..44d8d379dd89 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_08.golden.yml @@ -0,0 +1,82 @@ +version: "2" +linters: + default: all + disable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + - errchkjson + - errname + - errorlint + - exhaustive + - exhaustruct + - exptostd + - fatcontext + - forbidigo + - forcetypeassert + - funlen + - ginkgolinter + - gocheckcompilerdirectives + - gochecknoglobals + - gochecknoinits + - gochecksumtype + - gocognit + - gocritic + - gosec + - gosmopolitan + - govet + - iface + - importas + - intrange + - ireturn + - loggercheck + - makezero + - mirror + - musttag + - nilerr + - nilnesserr + - nilnil + - noctx + - nonamedreturns + - paralleltest + - perfsprint + - protogetter + - reassign + - recvcheck + - revive + - rowserrcheck + - sloglint + - spancheck + - sqlclosecheck + - staticcheck + - tagliatelle + - testifylint + - thelper + - tparallel + - unconvert + - unparam + - unused + - usetesting + - varnamelen + - wastedassign + - wrapcheck + - zerologlint +formatters: + enable: + - gofmt + - gofumpt + - goimports diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_08.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_08.yml new file mode 100644 index 000000000000..97039474d62d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_08.yml @@ -0,0 +1,48 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: enable-all + disable + fast +linters: + fast: true + enable-all: true + disable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - err113 + - errcheck + - errchkjson + - errname + - errorlint + - exhaustive + - exhaustruct + - exptostd + - fatcontext + - forbidigo + - forcetypeassert + - funlen + - gci + - ginkgolinter + - gocheckcompilerdirectives + - gochecknoglobals + - gochecknoinits + - gochecksumtype + - gocognit + diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_09.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_09.golden.yml new file mode 100644 index 000000000000..7154856c8057 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_09.golden.yml @@ -0,0 +1,49 @@ +version: "2" +linters: + enable: + - mycustomlinter1 + - mycustomlinter2 + - sqlclosecheck + - staticcheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint + disable: + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - errcheck + - govet + - mnd + - mycustomlinter3 + - mycustomlinter4 + - staticcheck +formatters: + enable: + - gofmt diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_09.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_09.yml new file mode 100644 index 000000000000..d45a2bb98e83 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_09.yml @@ -0,0 +1,70 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: enable + disable + fast +linters: + fast: true + enable: + - gofmt + - sqlclosecheck + - staticcheck + - stylecheck + - tagalign + - tagliatelle + - testableexamples + - testifylint + - testpackage + - thelper + - tparallel + - unconvert + - unparam + - unused + - usestdlibvars + - usetesting + - varnamelen + - wastedassign + - whitespace + - wrapcheck + - wsl + - zerologlint + - mycustomlinter1 + - mycustomlinter2 + + disable: + - goimports + - asasalint + - asciicheck + - bidichk + - bodyclose + - canonicalheader + - containedctx + - contextcheck + - copyloopvar + - cyclop + - decorder + - depguard + - dogsled + - dupl + - dupword + - durationcheck + - deadcode # Deprecated + - execinquery # Deprecated + - exhaustivestruct # Deprecated + - exportloopref # Deprecated + - golint # Deprecated + - gomnd # Deprecated + - ifshort # Deprecated + - interfacer # Deprecated + - maligned # Deprecated + - nosnakecase # Deprecated + - scopelint # Deprecated + - structcheck # Deprecated + - tenv # Deprecated + - varcheck # Deprecated + - mycustomlinter3 + - mycustomlinter4 diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_10.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_10.golden.yml new file mode 100644 index 000000000000..559458ea366b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_10.golden.yml @@ -0,0 +1,17 @@ +version: "2" +linters: + enable: + - depguard + - gomoddirectives + - gomodguard + disable: + - errcheck + - govet + - staticcheck + - unused +formatters: + enable: + - gci + - gofmt + - gofumpt + - goimports diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_10.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_10.yml new file mode 100644 index 000000000000..b89e4e3c8e91 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_10.yml @@ -0,0 +1,17 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +# case: presets + fast +linters: + fast: true + + presets: + - format + - metalinter + - module + diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_11.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_11.golden.yml new file mode 100644 index 000000000000..5cd5e6e72c02 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_11.golden.yml @@ -0,0 +1,8 @@ +version: "2" +linters: + default: all +formatters: + enable: + - gofmt + - gofumpt + - goimports diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_11.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_11.yml new file mode 100644 index 000000000000..dd20d9f37b1c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_11.yml @@ -0,0 +1,13 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters: + enable-all: true + disable: + - typecheck + - gci diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_12.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_12.golden.yml new file mode 100644 index 000000000000..21bc0b640e18 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_12.golden.yml @@ -0,0 +1,5 @@ +version: "2" +linters: + default: none + enable: + - govet diff --git a/pkg/commands/internal/migrate/testdata/yaml/linters_12.yml b/pkg/commands/internal/migrate/testdata/yaml/linters_12.yml new file mode 100644 index 000000000000..a03b09832777 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/linters_12.yml @@ -0,0 +1,13 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +linters: + disable-all: true + enable: + - typecheck + - govet diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_a.golden.yml new file mode 100644 index 000000000000..01a217688135 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_a.golden.yml @@ -0,0 +1,22 @@ +version: "2" +output: + formats: + text: + path: stdout + json: + path: stderr + tab: + path: stdout + html: + path: stdout + checkstyle: + path: report.xml + code-climate: + path: stdout + junit-xml: + path: stdout + extended: true + teamcity: + path: stdout + sarif: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_a.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_a.yml new file mode 100644 index 000000000000..d0db128190cc --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_a.yml @@ -0,0 +1,25 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: colored-line-number + - format: line-number + - format: json + path: stderr + - format: colored-tab + - format: tab + - format: html + - format: checkstyle + path: report.xml + - format: code-climate + - format: junit-xml + - format: junit-xml-extended + - format: github-actions + - format: teamcity + - format: sarif diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_b.golden.yml new file mode 100644 index 000000000000..3238590337c5 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_b.golden.yml @@ -0,0 +1,25 @@ +version: "2" +output: + formats: + text: + path: stdout + print-linter-name: true + print-issued-lines: true + json: + path: stderr + tab: + path: stdout + print-linter-name: true + html: + path: stdout + checkstyle: + path: report.xml + code-climate: + path: stdout + junit-xml: + path: stdout + extended: true + teamcity: + path: stdout + sarif: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_b.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_b.yml new file mode 100644 index 000000000000..68c2dccae784 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_b.yml @@ -0,0 +1,28 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: colored-line-number + - format: line-number + - format: json + path: stderr + - format: colored-tab + - format: tab + - format: html + - format: checkstyle + path: report.xml + - format: code-climate + - format: junit-xml + - format: junit-xml-extended + - format: github-actions + - format: teamcity + - format: sarif + + print-issued-lines: true + print-linter-name: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_c.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_c.golden.yml new file mode 100644 index 000000000000..a3a7bb1a791b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_c.golden.yml @@ -0,0 +1,25 @@ +version: "2" +output: + formats: + text: + path: stdout + print-linter-name: false + print-issued-lines: false + json: + path: stderr + tab: + path: stdout + print-linter-name: false + html: + path: stdout + checkstyle: + path: report.xml + code-climate: + path: stdout + junit-xml: + path: stdout + extended: true + teamcity: + path: stdout + sarif: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_c.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_c.yml new file mode 100644 index 000000000000..285a7c8770c4 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_c.yml @@ -0,0 +1,28 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: colored-line-number + - format: line-number + - format: json + path: stderr + - format: colored-tab + - format: tab + - format: html + - format: checkstyle + path: report.xml + - format: code-climate + - format: junit-xml + - format: junit-xml-extended + - format: github-actions + - format: teamcity + - format: sarif + + print-issued-lines: false + print-linter-name: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_d.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_d.golden.yml new file mode 100644 index 000000000000..74a667b5bf62 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_d.golden.yml @@ -0,0 +1,25 @@ +version: "2" +output: + formats: + text: + path: stdout + print-linter-name: false + print-issued-lines: true + json: + path: stderr + tab: + path: stdout + print-linter-name: false + html: + path: stdout + checkstyle: + path: report.xml + code-climate: + path: stdout + junit-xml: + path: stdout + extended: true + teamcity: + path: stdout + sarif: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_d.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_d.yml new file mode 100644 index 000000000000..5db09c44d6c2 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_d.yml @@ -0,0 +1,28 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: colored-line-number + - format: line-number + - format: json + path: stderr + - format: colored-tab + - format: tab + - format: html + - format: checkstyle + path: report.xml + - format: code-climate + - format: junit-xml + - format: junit-xml-extended + - format: github-actions + - format: teamcity + - format: sarif + + print-issued-lines: true + print-linter-name: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_f.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_f.golden.yml new file mode 100644 index 000000000000..4b9cce2039cc --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_f.golden.yml @@ -0,0 +1,25 @@ +version: "2" +output: + formats: + text: + path: stdout + print-linter-name: true + print-issued-lines: false + json: + path: stderr + tab: + path: stdout + print-linter-name: true + html: + path: stdout + checkstyle: + path: report.xml + code-climate: + path: stdout + junit-xml: + path: stdout + extended: true + teamcity: + path: stdout + sarif: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_f.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_f.yml new file mode 100644 index 000000000000..647cb344a1f7 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_f.yml @@ -0,0 +1,28 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: colored-line-number + - format: line-number + - format: json + path: stderr + - format: colored-tab + - format: tab + - format: html + - format: checkstyle + path: report.xml + - format: code-climate + - format: junit-xml + - format: junit-xml-extended + - format: github-actions + - format: teamcity + - format: sarif + + print-issued-lines: false + print-linter-name: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_g.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_g.golden.yml new file mode 100644 index 000000000000..391cd2349159 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_g.golden.yml @@ -0,0 +1,5 @@ +version: "2" +output: + formats: + text: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_g.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_g.yml new file mode 100644 index 000000000000..516fd62a59d2 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_g.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: colored-line-number + - format: line-number diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_h.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_h.golden.yml new file mode 100644 index 000000000000..8090a8d4ab43 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_h.golden.yml @@ -0,0 +1,6 @@ +version: "2" +output: + formats: + text: + path: stdout + colors: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_h.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_h.yml new file mode 100644 index 000000000000..1904b6d7bfa1 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_h.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: line-number diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_i.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_i.golden.yml new file mode 100644 index 000000000000..391cd2349159 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_i.golden.yml @@ -0,0 +1,5 @@ +version: "2" +output: + formats: + text: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_i.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_i.yml new file mode 100644 index 000000000000..2866cc217307 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_i.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: colored-line-number diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_j.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_j.golden.yml new file mode 100644 index 000000000000..123d941b6259 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_j.golden.yml @@ -0,0 +1,5 @@ +version: "2" +output: + formats: + tab: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_j.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_j.yml new file mode 100644 index 000000000000..a793cd6bf6f1 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_j.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: colored-tab + - format: tab diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_k.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_k.golden.yml new file mode 100644 index 000000000000..e79d2a809d50 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_k.golden.yml @@ -0,0 +1,6 @@ +version: "2" +output: + formats: + tab: + path: stdout + colors: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_k.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_k.yml new file mode 100644 index 000000000000..a20af280388e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_k.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: tab diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_l.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_l.golden.yml new file mode 100644 index 000000000000..123d941b6259 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_l.golden.yml @@ -0,0 +1,5 @@ +version: "2" +output: + formats: + tab: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_l.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_l.yml new file mode 100644 index 000000000000..759e93c2e220 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_l.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: colored-tab diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_m.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_m.golden.yml new file mode 100644 index 000000000000..ad3923ee39da --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_m.golden.yml @@ -0,0 +1,6 @@ +version: "2" +output: + formats: + junit-xml: + path: stdout + extended: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_m.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_m.yml new file mode 100644 index 000000000000..c1a264a1fdc6 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_m.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: junit-xml + - format: junit-xml-extended diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_o.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_o.golden.yml new file mode 100644 index 000000000000..ad3923ee39da --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_o.golden.yml @@ -0,0 +1,6 @@ +version: "2" +output: + formats: + junit-xml: + path: stdout + extended: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_o.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_o.yml new file mode 100644 index 000000000000..95e79f68e3a0 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_o.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: junit-xml-extended diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_p.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_p.golden.yml new file mode 100644 index 000000000000..f02ec6d441bd --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_p.golden.yml @@ -0,0 +1,5 @@ +version: "2" +output: + formats: + junit-xml: + path: stdout diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_01_p.yml b/pkg/commands/internal/migrate/testdata/yaml/output_01_p.yml new file mode 100644 index 000000000000..1b8938caa19e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_01_p.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + formats: + - format: junit-xml diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_02.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_02.golden.yml new file mode 100644 index 000000000000..26b4afdb1e3a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_02.golden.yml @@ -0,0 +1 @@ +version: "2" diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_02.yml b/pkg/commands/internal/migrate/testdata/yaml/output_02.yml new file mode 100644 index 000000000000..ecb2068c215f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_02.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + print-issued-lines: true + print-linter-name: true + sort-results: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_03.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_03.golden.yml new file mode 100644 index 000000000000..ebe416122d3c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_03.golden.yml @@ -0,0 +1,6 @@ +version: "2" +output: + sort-order: + - linter + - severity + - file diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_03.yml b/pkg/commands/internal/migrate/testdata/yaml/output_03.yml new file mode 100644 index 000000000000..c35ec48d37ac --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_03.yml @@ -0,0 +1,14 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + sort-results: true + sort-order: + - linter + - severity + - file diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_04.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/output_04.golden.yml new file mode 100644 index 000000000000..d01ac98b0757 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_04.golden.yml @@ -0,0 +1,3 @@ +version: "2" +output: + path-prefix: foo diff --git a/pkg/commands/internal/migrate/testdata/yaml/output_04.yml b/pkg/commands/internal/migrate/testdata/yaml/output_04.yml new file mode 100644 index 000000000000..55c188166673 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/output_04.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +output: + path-prefix: "foo" diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_01.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_01.golden.yml new file mode 100644 index 000000000000..26b4afdb1e3a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_01.golden.yml @@ -0,0 +1 @@ +version: "2" diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_01.yml b/pkg/commands/internal/migrate/testdata/yaml/run_01.yml new file mode 100644 index 000000000000..56043b3715b8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_01.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + timeout: 5m diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_02_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_02_a.golden.yml new file mode 100644 index 000000000000..26b4afdb1e3a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_02_a.golden.yml @@ -0,0 +1 @@ +version: "2" diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_02_a.yml b/pkg/commands/internal/migrate/testdata/yaml/run_02_a.yml new file mode 100644 index 000000000000..2930d6c47d2a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_02_a.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + relative-path-mode: cfg + diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_02_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_02_b.golden.yml new file mode 100644 index 000000000000..0fcd0c5d4e1d --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_02_b.golden.yml @@ -0,0 +1,3 @@ +version: "2" +run: + relative-path-mode: gomod diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_02_b.yml b/pkg/commands/internal/migrate/testdata/yaml/run_02_b.yml new file mode 100644 index 000000000000..99cf99685338 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_02_b.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + relative-path-mode: gomod + diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_03_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_03_a.golden.yml new file mode 100644 index 000000000000..eafa6acefe49 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_03_a.golden.yml @@ -0,0 +1,3 @@ +version: "2" +run: + issues-exit-code: 2 diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_03_a.yml b/pkg/commands/internal/migrate/testdata/yaml/run_03_a.yml new file mode 100644 index 000000000000..d58a540017ae --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_03_a.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + issues-exit-code: 2 diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_03_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_03_b.golden.yml new file mode 100644 index 000000000000..f744851ff460 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_03_b.golden.yml @@ -0,0 +1,3 @@ +version: "2" +run: + issues-exit-code: 0 diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_03_b.yml b/pkg/commands/internal/migrate/testdata/yaml/run_03_b.yml new file mode 100644 index 000000000000..8a51ff80ea53 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_03_b.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + issues-exit-code: 0 diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_04_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_04_a.golden.yml new file mode 100644 index 000000000000..51123fa772a9 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_04_a.golden.yml @@ -0,0 +1,3 @@ +version: "2" +run: + tests: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_04_a.yml b/pkg/commands/internal/migrate/testdata/yaml/run_04_a.yml new file mode 100644 index 000000000000..d9597bfe3439 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_04_a.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + tests: false diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_04_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_04_b.golden.yml new file mode 100644 index 000000000000..9fe8017d2be4 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_04_b.golden.yml @@ -0,0 +1,3 @@ +version: "2" +run: + tests: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_04_b.yml b/pkg/commands/internal/migrate/testdata/yaml/run_04_b.yml new file mode 100644 index 000000000000..776b8c65c4f4 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_04_b.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + tests: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_05.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_05.golden.yml new file mode 100644 index 000000000000..4112af35c08c --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_05.golden.yml @@ -0,0 +1,4 @@ +version: "2" +run: + build-tags: + - mytag diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_05.yml b/pkg/commands/internal/migrate/testdata/yaml/run_05.yml new file mode 100644 index 000000000000..b02e5cedcdca --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_05.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + build-tags: + - mytag diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_06.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_06.golden.yml new file mode 100644 index 000000000000..292775be4a4b --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_06.golden.yml @@ -0,0 +1,3 @@ +version: "2" +run: + modules-download-mode: readonly diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_06.yml b/pkg/commands/internal/migrate/testdata/yaml/run_06.yml new file mode 100644 index 000000000000..7dc32ded5161 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_06.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + modules-download-mode: readonly diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_07.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_07.golden.yml new file mode 100644 index 000000000000..3e8a3e09f37a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_07.golden.yml @@ -0,0 +1,4 @@ +version: "2" +run: + allow-parallel-runners: true + allow-serial-runners: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_07.yml b/pkg/commands/internal/migrate/testdata/yaml/run_07.yml new file mode 100644 index 000000000000..25f83789918f --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_07.yml @@ -0,0 +1,12 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + allow-parallel-runners: true + allow-serial-runners: true + diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_08.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_08.golden.yml new file mode 100644 index 000000000000..cc8f3038379e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_08.golden.yml @@ -0,0 +1,3 @@ +version: "2" +run: + go: "1.19" diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_08.yml b/pkg/commands/internal/migrate/testdata/yaml/run_08.yml new file mode 100644 index 000000000000..e326f4694dae --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_08.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + go: '1.19' diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_09_a.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_09_a.golden.yml new file mode 100644 index 000000000000..99dbe80a983a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_09_a.golden.yml @@ -0,0 +1,3 @@ +version: "2" +run: + concurrency: 4 diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_09_a.yml b/pkg/commands/internal/migrate/testdata/yaml/run_09_a.yml new file mode 100644 index 000000000000..d8075dfb049a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_09_a.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + concurrency: 4 diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_09_b.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_09_b.golden.yml new file mode 100644 index 000000000000..26b4afdb1e3a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_09_b.golden.yml @@ -0,0 +1 @@ +version: "2" diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_09_b.yml b/pkg/commands/internal/migrate/testdata/yaml/run_09_b.yml new file mode 100644 index 000000000000..a7fd382c3cd1 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_09_b.yml @@ -0,0 +1,10 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + concurrency: 0 diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_10.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/run_10.golden.yml new file mode 100644 index 000000000000..410e895d7cd8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_10.golden.yml @@ -0,0 +1,12 @@ +version: "2" +run: + concurrency: 4 + go: "1.19" + relative-path-mode: gomod + build-tags: + - mytag + modules-download-mode: readonly + issues-exit-code: 2 + tests: false + allow-parallel-runners: true + allow-serial-runners: true diff --git a/pkg/commands/internal/migrate/testdata/yaml/run_10.yml b/pkg/commands/internal/migrate/testdata/yaml/run_10.yml new file mode 100644 index 000000000000..4e8911a0f928 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/run_10.yml @@ -0,0 +1,20 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +run: + timeout: 5m + relative-path-mode: gomod + issues-exit-code: 2 + tests: false + build-tags: + - mytag + modules-download-mode: readonly + allow-parallel-runners: true + allow-serial-runners: true + go: '1.19' + concurrency: 4 diff --git a/pkg/commands/internal/migrate/testdata/yaml/severity_01.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/severity_01.golden.yml new file mode 100644 index 000000000000..e4d07371a241 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/severity_01.golden.yml @@ -0,0 +1,7 @@ +version: "2" +severity: + default: error + rules: + - linters: + - dupl + severity: info diff --git a/pkg/commands/internal/migrate/testdata/yaml/severity_01.yml b/pkg/commands/internal/migrate/testdata/yaml/severity_01.yml new file mode 100644 index 000000000000..f827ca02b1b8 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/severity_01.yml @@ -0,0 +1,15 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +severity: + default-severity: error + case-sensitive: true + rules: + - linters: + - dupl + severity: info diff --git a/pkg/commands/internal/migrate/testdata/yaml/severity_02.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/severity_02.golden.yml new file mode 100644 index 000000000000..479e3c874195 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/severity_02.golden.yml @@ -0,0 +1,3 @@ +version: "2" +severity: + default: error diff --git a/pkg/commands/internal/migrate/testdata/yaml/severity_02.yml b/pkg/commands/internal/migrate/testdata/yaml/severity_02.yml new file mode 100644 index 000000000000..ed64fdd61045 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/severity_02.yml @@ -0,0 +1,11 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +severity: + default-severity: error + diff --git a/pkg/commands/internal/migrate/testdata/yaml/severity_03.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/severity_03.golden.yml new file mode 100644 index 000000000000..26b4afdb1e3a --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/severity_03.golden.yml @@ -0,0 +1 @@ +version: "2" diff --git a/pkg/commands/internal/migrate/testdata/yaml/severity_03.yml b/pkg/commands/internal/migrate/testdata/yaml/severity_03.yml new file mode 100644 index 000000000000..f8f8363131ff --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/severity_03.yml @@ -0,0 +1,35 @@ +issues: + # Only to not generate unrelated elements inside golden. + exclude-use-default: false + # Only to not generate unrelated elements inside golden. + exclude-generated: strict + # Only to not generate unrelated elements inside golden. + exclude-dirs-use-default: false + +severity: + rules: + - path: _test\.go + severity: info + linters: + - typecheck + + - path-except: _test\.go + severity: info + linters: + - typecheck + + - path: internal/hmac/ + severity: info + text: "weak cryptographic primitive" + linters: + - typecheck + + - linters: + - typecheck + text: "SA9003:" + severity: info + + - linters: + - typecheck + source: "foo" + severity: info diff --git a/pkg/commands/internal/migrate/testdata/yaml/unknown-fields.golden.yml b/pkg/commands/internal/migrate/testdata/yaml/unknown-fields.golden.yml new file mode 100644 index 000000000000..10272697f830 --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/unknown-fields.golden.yml @@ -0,0 +1,18 @@ +version: "2" +linters: + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + exclusions: + generated: lax + paths: + - examples$ diff --git a/pkg/commands/internal/migrate/testdata/yaml/unknown-fields.yml b/pkg/commands/internal/migrate/testdata/yaml/unknown-fields.yml new file mode 100644 index 000000000000..fa26685adf9e --- /dev/null +++ b/pkg/commands/internal/migrate/testdata/yaml/unknown-fields.yml @@ -0,0 +1,2 @@ +foo: + bar: a diff --git a/pkg/commands/internal/migrate/versionone/base_rule.go b/pkg/commands/internal/migrate/versionone/base_rule.go new file mode 100644 index 000000000000..244e25997bf4 --- /dev/null +++ b/pkg/commands/internal/migrate/versionone/base_rule.go @@ -0,0 +1,9 @@ +package versionone + +type BaseRule struct { + Linters []string `mapstructure:"linters"` + Path *string `mapstructure:"path"` + PathExcept *string `mapstructure:"path-except"` + Text *string `mapstructure:"text"` + Source *string `mapstructure:"source"` +} diff --git a/pkg/commands/internal/migrate/versionone/config.go b/pkg/commands/internal/migrate/versionone/config.go new file mode 100644 index 000000000000..1e9d0ee151db --- /dev/null +++ b/pkg/commands/internal/migrate/versionone/config.go @@ -0,0 +1,18 @@ +package versionone + +type Config struct { + Version string `mapstructure:"version"` // From v2, to be able to detect already migrated config file. + + Run Run `mapstructure:"run"` + + Output Output `mapstructure:"output"` + + LintersSettings LintersSettings `mapstructure:"linters-settings"` + Linters Linters `mapstructure:"linters"` + Issues Issues `mapstructure:"issues"` + Severity Severity `mapstructure:"severity"` +} + +func NewConfig() *Config { + return &Config{} +} diff --git a/pkg/commands/internal/migrate/versionone/doc.go b/pkg/commands/internal/migrate/versionone/doc.go new file mode 100644 index 000000000000..fb945f3c5843 --- /dev/null +++ b/pkg/commands/internal/migrate/versionone/doc.go @@ -0,0 +1,4 @@ +// Package versionone contains a modified copy of v1 configuration. +// The structures are altered to use pointer on builtin types. +// The field version is added to enforce the detection of already migrated file. +package versionone diff --git a/pkg/commands/internal/migrate/versionone/issues.go b/pkg/commands/internal/migrate/versionone/issues.go new file mode 100644 index 000000000000..bac6ba9ca262 --- /dev/null +++ b/pkg/commands/internal/migrate/versionone/issues.go @@ -0,0 +1,32 @@ +package versionone + +type Issues struct { + IncludeDefaultExcludes []string `mapstructure:"include"` + ExcludeCaseSensitive *bool `mapstructure:"exclude-case-sensitive"` + ExcludePatterns []string `mapstructure:"exclude"` + ExcludeRules []ExcludeRule `mapstructure:"exclude-rules"` + UseDefaultExcludes *bool `mapstructure:"exclude-use-default"` + + ExcludeGenerated *string `mapstructure:"exclude-generated"` + + ExcludeFiles []string `mapstructure:"exclude-files"` + ExcludeDirs []string `mapstructure:"exclude-dirs"` + + UseDefaultExcludeDirs *bool `mapstructure:"exclude-dirs-use-default"` + + MaxIssuesPerLinter *int `mapstructure:"max-issues-per-linter"` + MaxSameIssues *int `mapstructure:"max-same-issues"` + UniqByLine *bool `mapstructure:"uniq-by-line"` + + DiffFromRevision *string `mapstructure:"new-from-rev"` + DiffFromMergeBase *string `mapstructure:"new-from-merge-base"` + DiffPatchFilePath *string `mapstructure:"new-from-patch"` + WholeFiles *bool `mapstructure:"whole-files"` + Diff *bool `mapstructure:"new"` + + NeedFix *bool `mapstructure:"fix"` +} + +type ExcludeRule struct { + BaseRule `mapstructure:",squash"` +} diff --git a/pkg/commands/internal/migrate/versionone/linters.go b/pkg/commands/internal/migrate/versionone/linters.go new file mode 100644 index 000000000000..d6a490fee0ff --- /dev/null +++ b/pkg/commands/internal/migrate/versionone/linters.go @@ -0,0 +1,11 @@ +package versionone + +type Linters struct { + Enable []string `mapstructure:"enable"` + Disable []string `mapstructure:"disable"` + EnableAll *bool `mapstructure:"enable-all"` + DisableAll *bool `mapstructure:"disable-all"` + Fast *bool `mapstructure:"fast"` + + Presets []string `mapstructure:"presets"` +} diff --git a/pkg/commands/internal/migrate/versionone/linters_settings.go b/pkg/commands/internal/migrate/versionone/linters_settings.go new file mode 100644 index 000000000000..bff3cf7df13a --- /dev/null +++ b/pkg/commands/internal/migrate/versionone/linters_settings.go @@ -0,0 +1,865 @@ +package versionone + +import ( + "encoding" + + "gopkg.in/yaml.v3" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" +) + +type LintersSettings struct { + Asasalint AsasalintSettings `mapstructure:"asasalint"` + BiDiChk BiDiChkSettings `mapstructure:"bidichk"` + CopyLoopVar CopyLoopVarSettings `mapstructure:"copyloopvar"` + Cyclop Cyclop `mapstructure:"cyclop"` + Decorder DecorderSettings `mapstructure:"decorder"` + Depguard DepGuardSettings `mapstructure:"depguard"` + Dogsled DogsledSettings `mapstructure:"dogsled"` + Dupl DuplSettings `mapstructure:"dupl"` + DupWord DupWordSettings `mapstructure:"dupword"` + Errcheck ErrcheckSettings `mapstructure:"errcheck"` + ErrChkJSON ErrChkJSONSettings `mapstructure:"errchkjson"` + ErrorLint ErrorLintSettings `mapstructure:"errorlint"` + Exhaustive ExhaustiveSettings `mapstructure:"exhaustive"` + Exhaustruct ExhaustructSettings `mapstructure:"exhaustruct"` + Fatcontext FatcontextSettings `mapstructure:"fatcontext"` + Forbidigo ForbidigoSettings `mapstructure:"forbidigo"` + Funlen FunlenSettings `mapstructure:"funlen"` + GinkgoLinter GinkgoLinterSettings `mapstructure:"ginkgolinter"` + Gocognit GocognitSettings `mapstructure:"gocognit"` + GoChecksumType GoChecksumTypeSettings `mapstructure:"gochecksumtype"` + Goconst GoConstSettings `mapstructure:"goconst"` + Gocritic GoCriticSettings `mapstructure:"gocritic"` + Gocyclo GoCycloSettings `mapstructure:"gocyclo"` + Godot GodotSettings `mapstructure:"godot"` + Godox GodoxSettings `mapstructure:"godox"` + Goheader GoHeaderSettings `mapstructure:"goheader"` + GoModDirectives GoModDirectivesSettings `mapstructure:"gomoddirectives"` + Gomodguard GoModGuardSettings `mapstructure:"gomodguard"` + Gosec GoSecSettings `mapstructure:"gosec"` + Gosimple StaticCheckSettings `mapstructure:"gosimple"` + Gosmopolitan GosmopolitanSettings `mapstructure:"gosmopolitan"` + Govet GovetSettings `mapstructure:"govet"` + Grouper GrouperSettings `mapstructure:"grouper"` + Iface IfaceSettings `mapstructure:"iface"` + ImportAs ImportAsSettings `mapstructure:"importas"` + Inamedparam INamedParamSettings `mapstructure:"inamedparam"` + InterfaceBloat InterfaceBloatSettings `mapstructure:"interfacebloat"` + Ireturn IreturnSettings `mapstructure:"ireturn"` + Lll LllSettings `mapstructure:"lll"` + LoggerCheck LoggerCheckSettings `mapstructure:"loggercheck"` + MaintIdx MaintIdxSettings `mapstructure:"maintidx"` + Makezero MakezeroSettings `mapstructure:"makezero"` + Misspell MisspellSettings `mapstructure:"misspell"` + Mnd MndSettings `mapstructure:"mnd"` + MustTag MustTagSettings `mapstructure:"musttag"` + Nakedret NakedretSettings `mapstructure:"nakedret"` + Nestif NestifSettings `mapstructure:"nestif"` + NilNil NilNilSettings `mapstructure:"nilnil"` + Nlreturn NlreturnSettings `mapstructure:"nlreturn"` + NoLintLint NoLintLintSettings `mapstructure:"nolintlint"` + NoNamedReturns NoNamedReturnsSettings `mapstructure:"nonamedreturns"` + ParallelTest ParallelTestSettings `mapstructure:"paralleltest"` + PerfSprint PerfSprintSettings `mapstructure:"perfsprint"` + Prealloc PreallocSettings `mapstructure:"prealloc"` + Predeclared PredeclaredSettings `mapstructure:"predeclared"` + Promlinter PromlinterSettings `mapstructure:"promlinter"` + ProtoGetter ProtoGetterSettings `mapstructure:"protogetter"` + Reassign ReassignSettings `mapstructure:"reassign"` + Recvcheck RecvcheckSettings `mapstructure:"recvcheck"` + Revive ReviveSettings `mapstructure:"revive"` + RowsErrCheck RowsErrCheckSettings `mapstructure:"rowserrcheck"` + SlogLint SlogLintSettings `mapstructure:"sloglint"` + Spancheck SpancheckSettings `mapstructure:"spancheck"` + Staticcheck StaticCheckSettings `mapstructure:"staticcheck"` + Stylecheck StaticCheckSettings `mapstructure:"stylecheck"` + TagAlign TagAlignSettings `mapstructure:"tagalign"` + Tagliatelle TagliatelleSettings `mapstructure:"tagliatelle"` + Tenv TenvSettings `mapstructure:"tenv"` + Testifylint TestifylintSettings `mapstructure:"testifylint"` + Testpackage TestpackageSettings `mapstructure:"testpackage"` + Thelper ThelperSettings `mapstructure:"thelper"` + Unconvert UnconvertSettings `mapstructure:"unconvert"` + Unparam UnparamSettings `mapstructure:"unparam"` + Unused UnusedSettings `mapstructure:"unused"` + UseStdlibVars UseStdlibVarsSettings `mapstructure:"usestdlibvars"` + UseTesting UseTestingSettings `mapstructure:"usetesting"` + Varnamelen VarnamelenSettings `mapstructure:"varnamelen"` + Whitespace WhitespaceSettings `mapstructure:"whitespace"` + Wrapcheck WrapcheckSettings `mapstructure:"wrapcheck"` + WSL WSLSettings `mapstructure:"wsl"` + + Custom map[string]CustomLinterSettings `mapstructure:"custom"` + + Gci GciSettings `mapstructure:"gci"` + GoFmt GoFmtSettings `mapstructure:"gofmt"` + GoFumpt GoFumptSettings `mapstructure:"gofumpt"` + GoImports GoImportsSettings `mapstructure:"goimports"` +} + +type AsasalintSettings struct { + Exclude []string `mapstructure:"exclude"` + UseBuiltinExclusions *bool `mapstructure:"use-builtin-exclusions"` + IgnoreTest *bool `mapstructure:"ignore-test"` +} + +type BiDiChkSettings struct { + LeftToRightEmbedding *bool `mapstructure:"left-to-right-embedding"` + RightToLeftEmbedding *bool `mapstructure:"right-to-left-embedding"` + PopDirectionalFormatting *bool `mapstructure:"pop-directional-formatting"` + LeftToRightOverride *bool `mapstructure:"left-to-right-override"` + RightToLeftOverride *bool `mapstructure:"right-to-left-override"` + LeftToRightIsolate *bool `mapstructure:"left-to-right-isolate"` + RightToLeftIsolate *bool `mapstructure:"right-to-left-isolate"` + FirstStrongIsolate *bool `mapstructure:"first-strong-isolate"` + PopDirectionalIsolate *bool `mapstructure:"pop-directional-isolate"` +} + +type CopyLoopVarSettings struct { + CheckAlias *bool `mapstructure:"check-alias"` + + // Deprecated: use CheckAlias + IgnoreAlias *bool `mapstructure:"ignore-alias"` +} + +type Cyclop struct { + MaxComplexity *int `mapstructure:"max-complexity"` + PackageAverage *float64 `mapstructure:"package-average"` + SkipTests *bool `mapstructure:"skip-tests"` +} + +type DepGuardSettings struct { + Rules map[string]*DepGuardList `mapstructure:"rules"` +} + +type DepGuardList struct { + ListMode *string `mapstructure:"list-mode"` + Files []string `mapstructure:"files"` + Allow []string `mapstructure:"allow"` + Deny []DepGuardDeny `mapstructure:"deny"` +} + +type DepGuardDeny struct { + Pkg *string `mapstructure:"pkg"` + Desc *string `mapstructure:"desc"` +} + +type DecorderSettings struct { + DecOrder []string `mapstructure:"dec-order"` + IgnoreUnderscoreVars *bool `mapstructure:"ignore-underscore-vars"` + DisableDecNumCheck *bool `mapstructure:"disable-dec-num-check"` + DisableTypeDecNumCheck *bool `mapstructure:"disable-type-dec-num-check"` + DisableConstDecNumCheck *bool `mapstructure:"disable-const-dec-num-check"` + DisableVarDecNumCheck *bool `mapstructure:"disable-var-dec-num-check"` + DisableDecOrderCheck *bool `mapstructure:"disable-dec-order-check"` + DisableInitFuncFirstCheck *bool `mapstructure:"disable-init-func-first-check"` +} + +type DogsledSettings struct { + MaxBlankIdentifiers *int `mapstructure:"max-blank-identifiers"` +} + +type DuplSettings struct { + Threshold *int `mapstructure:"threshold"` +} + +type DupWordSettings struct { + Keywords []string `mapstructure:"keywords"` + Ignore []string `mapstructure:"ignore"` +} + +type ErrcheckSettings struct { + DisableDefaultExclusions *bool `mapstructure:"disable-default-exclusions"` + CheckTypeAssertions *bool `mapstructure:"check-type-assertions"` + CheckAssignToBlank *bool `mapstructure:"check-blank"` + ExcludeFunctions []string `mapstructure:"exclude-functions"` + + // Deprecated: use ExcludeFunctions instead + Exclude *string `mapstructure:"exclude"` + + // Deprecated: use ExcludeFunctions instead + Ignore *string `mapstructure:"ignore"` +} + +type ErrChkJSONSettings struct { + CheckErrorFreeEncoding *bool `mapstructure:"check-error-free-encoding"` + ReportNoExported *bool `mapstructure:"report-no-exported"` +} + +type ErrorLintSettings struct { + Errorf *bool `mapstructure:"errorf"` + ErrorfMulti *bool `mapstructure:"errorf-multi"` + Asserts *bool `mapstructure:"asserts"` + Comparison *bool `mapstructure:"comparison"` + AllowedErrors []ErrorLintAllowPair `mapstructure:"allowed-errors"` + AllowedErrorsWildcard []ErrorLintAllowPair `mapstructure:"allowed-errors-wildcard"` +} + +type ErrorLintAllowPair struct { + Err *string `mapstructure:"err"` + Fun *string `mapstructure:"fun"` +} + +type ExhaustiveSettings struct { + Check []string `mapstructure:"check"` + CheckGenerated *bool `mapstructure:"check-generated"` + DefaultSignifiesExhaustive *bool `mapstructure:"default-signifies-exhaustive"` + IgnoreEnumMembers *string `mapstructure:"ignore-enum-members"` + IgnoreEnumTypes *string `mapstructure:"ignore-enum-types"` + PackageScopeOnly *bool `mapstructure:"package-scope-only"` + ExplicitExhaustiveMap *bool `mapstructure:"explicit-exhaustive-map"` + ExplicitExhaustiveSwitch *bool `mapstructure:"explicit-exhaustive-switch"` + DefaultCaseRequired *bool `mapstructure:"default-case-required"` +} + +type ExhaustructSettings struct { + Include []string `mapstructure:"include"` + Exclude []string `mapstructure:"exclude"` +} + +type FatcontextSettings struct { + CheckStructPointers *bool `mapstructure:"check-struct-pointers"` +} + +type ForbidigoSettings struct { + Forbid []ForbidigoPattern `mapstructure:"forbid"` + ExcludeGodocExamples *bool `mapstructure:"exclude-godoc-examples"` + AnalyzeTypes *bool `mapstructure:"analyze-types"` +} + +var _ encoding.TextUnmarshaler = &ForbidigoPattern{} + +// ForbidigoPattern corresponds to forbidigo.pattern and adds mapstructure support. +// The YAML field names must match what forbidigo expects. +type ForbidigoPattern struct { + // patternString gets populated when the config contains a *string as entry in ForbidigoSettings.Forbid[] + // because ForbidigoPattern implements encoding.TextUnmarshaler + // and the reader uses the mapstructure.TextUnmarshallerHookFunc as decoder hook. + // + // If the entry is a map, then the other fields are set as usual by mapstructure. + patternString *string + Pattern *string `yaml:"p" mapstructure:"p"` + Package *string `yaml:"pkg,omitempty" mapstructure:"pkg,omitempty"` + Msg *string `yaml:"msg,omitempty" mapstructure:"msg,omitempty"` +} + +func (p *ForbidigoPattern) UnmarshalText(text []byte) error { + // Validation happens when instantiating forbidigo. + p.patternString = ptr.Pointer(string(text)) + return nil +} + +// MarshalString converts the pattern into a *string as needed by forbidigo.NewLinter. +// +// MarshalString is intentionally not called MarshalText, +// although it has the same signature +// because implementing encoding.TextMarshaler led to infinite recursion when yaml.Marshal called MarshalText. +func (p *ForbidigoPattern) MarshalString() ([]byte, error) { + if ptr.Deref(p.patternString) != "" { + return []byte(ptr.Deref(p.patternString)), nil + } + + return yaml.Marshal(p) +} + +type FunlenSettings struct { + Lines *int `mapstructure:"lines"` + Statements *int `mapstructure:"statements"` + IgnoreComments *bool `mapstructure:"ignore-comments"` +} + +type GinkgoLinterSettings struct { + SuppressLenAssertion *bool `mapstructure:"suppress-len-assertion"` + SuppressNilAssertion *bool `mapstructure:"suppress-nil-assertion"` + SuppressErrAssertion *bool `mapstructure:"suppress-err-assertion"` + SuppressCompareAssertion *bool `mapstructure:"suppress-compare-assertion"` + SuppressAsyncAssertion *bool `mapstructure:"suppress-async-assertion"` + SuppressTypeCompareWarning *bool `mapstructure:"suppress-type-compare-assertion"` + ForbidFocusContainer *bool `mapstructure:"forbid-focus-container"` + AllowHaveLenZero *bool `mapstructure:"allow-havelen-zero"` + ForceExpectTo *bool `mapstructure:"force-expect-to"` + ValidateAsyncIntervals *bool `mapstructure:"validate-async-intervals"` + ForbidSpecPollution *bool `mapstructure:"forbid-spec-pollution"` + ForceSucceedForFuncs *bool `mapstructure:"force-succeed"` +} + +type GoChecksumTypeSettings struct { + DefaultSignifiesExhaustive *bool `mapstructure:"default-signifies-exhaustive"` + IncludeSharedInterfaces *bool `mapstructure:"include-shared-interfaces"` +} + +type GocognitSettings struct { + MinComplexity *int `mapstructure:"min-complexity"` +} + +type GoConstSettings struct { + IgnoreStrings *string `mapstructure:"ignore-strings"` + IgnoreTests *bool `mapstructure:"ignore-tests"` + MatchWithConstants *bool `mapstructure:"match-constant"` + MinStringLen *int `mapstructure:"min-len"` + MinOccurrencesCount *int `mapstructure:"min-occurrences"` + ParseNumbers *bool `mapstructure:"numbers"` + NumberMin *int `mapstructure:"min"` + NumberMax *int `mapstructure:"max"` + IgnoreCalls *bool `mapstructure:"ignore-calls"` +} + +type GoCriticSettings struct { + Go *string `mapstructure:"-"` + DisableAll *bool `mapstructure:"disable-all"` + EnabledChecks []string `mapstructure:"enabled-checks"` + EnableAll *bool `mapstructure:"enable-all"` + DisabledChecks []string `mapstructure:"disabled-checks"` + EnabledTags []string `mapstructure:"enabled-tags"` + DisabledTags []string `mapstructure:"disabled-tags"` + SettingsPerCheck map[string]GoCriticCheckSettings `mapstructure:"settings"` +} + +type GoCriticCheckSettings map[string]any + +type GoCycloSettings struct { + MinComplexity *int `mapstructure:"min-complexity"` +} + +type GodotSettings struct { + Scope *string `mapstructure:"scope"` + Exclude []string `mapstructure:"exclude"` + Capital *bool `mapstructure:"capital"` + Period *bool `mapstructure:"period"` + + // Deprecated: use Scope instead + CheckAll *bool `mapstructure:"check-all"` +} + +type GodoxSettings struct { + Keywords []string `mapstructure:"keywords"` +} + +type GoHeaderSettings struct { + Values map[string]map[string]string `mapstructure:"values"` + Template *string `mapstructure:"template"` + TemplatePath *string `mapstructure:"template-path"` +} + +type GoModDirectivesSettings struct { + ReplaceAllowList []string `mapstructure:"replace-allow-list"` + ReplaceLocal *bool `mapstructure:"replace-local"` + ExcludeForbidden *bool `mapstructure:"exclude-forbidden"` + RetractAllowNoExplanation *bool `mapstructure:"retract-allow-no-explanation"` + ToolchainForbidden *bool `mapstructure:"toolchain-forbidden"` + ToolchainPattern *string `mapstructure:"toolchain-pattern"` + ToolForbidden *bool `mapstructure:"tool-forbidden"` + GoDebugForbidden *bool `mapstructure:"go-debug-forbidden"` + GoVersionPattern *string `mapstructure:"go-version-pattern"` +} + +type GoModGuardSettings struct { + Allowed struct { + Modules []string `mapstructure:"modules"` + Domains []string `mapstructure:"domains"` + } `mapstructure:"allowed"` + Blocked struct { + Modules []map[string]struct { + Recommendations []string `mapstructure:"recommendations"` + Reason *string `mapstructure:"reason"` + } `mapstructure:"modules"` + Versions []map[string]struct { + Version *string `mapstructure:"version"` + Reason *string `mapstructure:"reason"` + } `mapstructure:"versions"` + LocalReplaceDirectives *bool `mapstructure:"local_replace_directives"` + } `mapstructure:"blocked"` +} + +type GoSecSettings struct { + Includes []string `mapstructure:"includes"` + Excludes []string `mapstructure:"excludes"` + Severity *string `mapstructure:"severity"` + Confidence *string `mapstructure:"confidence"` + ExcludeGenerated *bool `mapstructure:"exclude-generated"` + Config map[string]any `mapstructure:"config"` + Concurrency *int `mapstructure:"concurrency"` +} + +type GosmopolitanSettings struct { + AllowTimeLocal *bool `mapstructure:"allow-time-local"` + EscapeHatches []string `mapstructure:"escape-hatches"` + IgnoreTests *bool `mapstructure:"ignore-tests"` + WatchForScripts []string `mapstructure:"watch-for-scripts"` +} + +type GovetSettings struct { + Go *string `mapstructure:"-"` + + Enable []string `mapstructure:"enable"` + Disable []string `mapstructure:"disable"` + EnableAll *bool `mapstructure:"enable-all"` + DisableAll *bool `mapstructure:"disable-all"` + + Settings map[string]map[string]any `mapstructure:"settings"` + + // Deprecated: the linter should be enabled inside Enable. + CheckShadowing *bool `mapstructure:"check-shadowing"` +} + +type GrouperSettings struct { + ConstRequireSingleConst *bool `mapstructure:"const-require-single-const"` + ConstRequireGrouping *bool `mapstructure:"const-require-grouping"` + ImportRequireSingleImport *bool `mapstructure:"import-require-single-import"` + ImportRequireGrouping *bool `mapstructure:"import-require-grouping"` + TypeRequireSingleType *bool `mapstructure:"type-require-single-type"` + TypeRequireGrouping *bool `mapstructure:"type-require-grouping"` + VarRequireSingleVar *bool `mapstructure:"var-require-single-var"` + VarRequireGrouping *bool `mapstructure:"var-require-grouping"` +} + +type IfaceSettings struct { + Enable []string `mapstructure:"enable"` + Settings map[string]map[string]any `mapstructure:"settings"` +} + +type ImportAsSettings struct { + Alias []ImportAsAlias `mapstructure:"alias"` + NoUnaliased *bool `mapstructure:"no-unaliased"` + NoExtraAliases *bool `mapstructure:"no-extra-aliases"` +} + +type ImportAsAlias struct { + Pkg *string `mapstructure:"pkg"` + Alias *string `mapstructure:"alias"` +} + +type INamedParamSettings struct { + SkipSingleParam *bool `mapstructure:"skip-single-param"` +} + +type InterfaceBloatSettings struct { + Max *int `mapstructure:"max"` +} + +type IreturnSettings struct { + Allow []string `mapstructure:"allow"` + Reject []string `mapstructure:"reject"` +} + +type LllSettings struct { + LineLength *int `mapstructure:"line-length"` + TabWidth *int `mapstructure:"tab-width"` +} + +type LoggerCheckSettings struct { + Kitlog *bool `mapstructure:"kitlog"` + Klog *bool `mapstructure:"klog"` + Logr *bool `mapstructure:"logr"` + Slog *bool `mapstructure:"slog"` + Zap *bool `mapstructure:"zap"` + RequireStringKey *bool `mapstructure:"require-string-key"` + NoPrintfLike *bool `mapstructure:"no-printf-like"` + Rules []string `mapstructure:"rules"` +} + +type MaintIdxSettings struct { + Under *int `mapstructure:"under"` +} + +type MakezeroSettings struct { + Always *bool `mapstructure:"always"` +} + +type MisspellSettings struct { + Mode *string `mapstructure:"mode"` + Locale *string `mapstructure:"locale"` + ExtraWords []MisspellExtraWords `mapstructure:"extra-words"` + // TODO(ldez): v2 the option must be renamed to `IgnoredRules`. + IgnoreWords []string `mapstructure:"ignore-words"` +} + +type MisspellExtraWords struct { + Typo *string `mapstructure:"typo"` + Correction *string `mapstructure:"correction"` +} + +type MustTagSettings struct { + Functions []struct { + Name *string `mapstructure:"name"` + Tag *string `mapstructure:"tag"` + ArgPos *int `mapstructure:"arg-pos"` + } `mapstructure:"functions"` +} + +type NakedretSettings struct { + MaxFuncLines uint `mapstructure:"max-func-lines"` +} + +type NestifSettings struct { + MinComplexity *int `mapstructure:"min-complexity"` +} + +type NilNilSettings struct { + DetectOpposite *bool `mapstructure:"detect-opposite"` + CheckedTypes []string `mapstructure:"checked-types"` +} + +type NlreturnSettings struct { + BlockSize *int `mapstructure:"block-size"` +} + +type MndSettings struct { + Checks []string `mapstructure:"checks"` + IgnoredNumbers []string `mapstructure:"ignored-numbers"` + IgnoredFiles []string `mapstructure:"ignored-files"` + IgnoredFunctions []string `mapstructure:"ignored-functions"` +} + +type NoLintLintSettings struct { + RequireExplanation *bool `mapstructure:"require-explanation"` + RequireSpecific *bool `mapstructure:"require-specific"` + AllowNoExplanation []string `mapstructure:"allow-no-explanation"` + AllowUnused *bool `mapstructure:"allow-unused"` +} + +type NoNamedReturnsSettings struct { + ReportErrorInDefer *bool `mapstructure:"report-error-in-defer"` +} + +type ParallelTestSettings struct { + Go *string `mapstructure:"-"` + IgnoreMissing *bool `mapstructure:"ignore-missing"` + IgnoreMissingSubtests *bool `mapstructure:"ignore-missing-subtests"` +} + +type PerfSprintSettings struct { + IntegerFormat *bool `mapstructure:"integer-format"` + IntConversion *bool `mapstructure:"int-conversion"` + + ErrorFormat *bool `mapstructure:"error-format"` + ErrError *bool `mapstructure:"err-error"` + ErrorF *bool `mapstructure:"errorf"` + + StringFormat *bool `mapstructure:"string-format"` + SprintF1 *bool `mapstructure:"sprintf1"` + StrConcat *bool `mapstructure:"strconcat"` + + BoolFormat *bool `mapstructure:"bool-format"` + HexFormat *bool `mapstructure:"hex-format"` +} + +type PreallocSettings struct { + Simple *bool `mapstructure:"simple"` + RangeLoops *bool `mapstructure:"range-loops"` + ForLoops *bool `mapstructure:"for-loops"` +} + +type PredeclaredSettings struct { + Ignore *string `mapstructure:"ignore"` + Qualified *bool `mapstructure:"q"` +} + +type PromlinterSettings struct { + Strict *bool `mapstructure:"strict"` + DisabledLinters []string `mapstructure:"disabled-linters"` +} + +type ProtoGetterSettings struct { + SkipGeneratedBy []string `mapstructure:"skip-generated-by"` + SkipFiles []string `mapstructure:"skip-files"` + SkipAnyGenerated *bool `mapstructure:"skip-any-generated"` + ReplaceFirstArgInAppend *bool `mapstructure:"replace-first-arg-in-append"` +} + +type ReassignSettings struct { + Patterns []string `mapstructure:"patterns"` +} + +type RecvcheckSettings struct { + DisableBuiltin *bool `mapstructure:"disable-builtin"` + Exclusions []string `mapstructure:"exclusions"` +} + +type ReviveSettings struct { + Go *string `mapstructure:"-"` + MaxOpenFiles *int `mapstructure:"max-open-files"` + IgnoreGeneratedHeader *bool `mapstructure:"ignore-generated-header"` + Confidence *float64 `mapstructure:"confidence"` + Severity *string `mapstructure:"severity"` + EnableAllRules *bool `mapstructure:"enable-all-rules"` + Rules []struct { + Name *string `mapstructure:"name"` + Arguments []any `mapstructure:"arguments"` + Severity *string `mapstructure:"severity"` + Disabled *bool `mapstructure:"disabled"` + Exclude []string `mapstructure:"exclude"` + } `mapstructure:"rules"` + ErrorCode *int `mapstructure:"error-code"` + WarningCode *int `mapstructure:"warning-code"` + Directives []struct { + Name *string `mapstructure:"name"` + Severity *string `mapstructure:"severity"` + } `mapstructure:"directives"` +} + +type RowsErrCheckSettings struct { + Packages []string `mapstructure:"packages"` +} + +type SlogLintSettings struct { + NoMixedArgs *bool `mapstructure:"no-mixed-args"` + KVOnly *bool `mapstructure:"kv-only"` + AttrOnly *bool `mapstructure:"attr-only"` + NoGlobal *string `mapstructure:"no-global"` + Context *string `mapstructure:"context"` + StaticMsg *bool `mapstructure:"static-msg"` + NoRawKeys *bool `mapstructure:"no-raw-keys"` + KeyNamingCase *string `mapstructure:"key-naming-case"` + ForbiddenKeys []string `mapstructure:"forbidden-keys"` + ArgsOnSepLines *bool `mapstructure:"args-on-sep-lines"` +} + +type SpancheckSettings struct { + Checks []string `mapstructure:"checks"` + IgnoreCheckSignatures []string `mapstructure:"ignore-check-signatures"` + ExtraStartSpanSignatures []string `mapstructure:"extra-start-span-signatures"` +} + +type StaticCheckSettings struct { + Checks []string `mapstructure:"checks"` + Initialisms []string `mapstructure:"initialisms"` // only for stylecheck + DotImportWhitelist []string `mapstructure:"dot-import-whitelist"` // only for stylecheck + HTTPStatusCodeWhitelist []string `mapstructure:"http-status-code-whitelist"` // only for stylecheck +} + +type TagAlignSettings struct { + Align *bool `mapstructure:"align"` + Sort *bool `mapstructure:"sort"` + Order []string `mapstructure:"order"` + Strict *bool `mapstructure:"strict"` +} + +type TagliatelleSettings struct { + Case TagliatelleCase `mapstructure:"case"` +} + +type TagliatelleCase struct { + TagliatelleBase `mapstructure:",squash"` + Overrides []TagliatelleOverrides `mapstructure:"overrides"` +} + +type TagliatelleOverrides struct { + TagliatelleBase `mapstructure:",squash"` + Package *string `mapstructure:"pkg"` + Ignore *bool `mapstructure:"ignore"` +} + +type TagliatelleBase struct { + Rules map[string]string `mapstructure:"rules"` + ExtendedRules map[string]TagliatelleExtendedRule `mapstructure:"extended-rules"` + UseFieldName *bool `mapstructure:"use-field-name"` + IgnoredFields []string `mapstructure:"ignored-fields"` +} + +type TagliatelleExtendedRule struct { + Case *string `mapstructure:"case"` + ExtraInitialisms *bool `mapstructure:"extra-initialisms"` + InitialismOverrides map[string]bool `mapstructure:"initialism-overrides"` +} + +type TestifylintSettings struct { + EnableAll *bool `mapstructure:"enable-all"` + DisableAll *bool `mapstructure:"disable-all"` + EnabledCheckers []string `mapstructure:"enable"` + DisabledCheckers []string `mapstructure:"disable"` + + BoolCompare struct { + IgnoreCustomTypes *bool `mapstructure:"ignore-custom-types"` + } `mapstructure:"bool-compare"` + + ExpectedActual struct { + ExpVarPattern *string `mapstructure:"pattern"` + } `mapstructure:"expected-actual"` + + Formatter struct { + CheckFormatString *bool `mapstructure:"check-format-string"` + RequireFFuncs *bool `mapstructure:"require-f-funcs"` + } `mapstructure:"formatter"` + + GoRequire struct { + IgnoreHTTPHandlers *bool `mapstructure:"ignore-http-handlers"` + } `mapstructure:"go-require"` + + RequireError struct { + FnPattern *string `mapstructure:"fn-pattern"` + } `mapstructure:"require-error"` + + SuiteExtraAssertCall struct { + Mode *string `mapstructure:"mode"` + } `mapstructure:"suite-extra-assert-call"` +} + +type TestpackageSettings struct { + SkipRegexp *string `mapstructure:"skip-regexp"` + AllowPackages []string `mapstructure:"allow-packages"` +} + +type ThelperSettings struct { + Test ThelperOptions `mapstructure:"test"` + Fuzz ThelperOptions `mapstructure:"fuzz"` + Benchmark ThelperOptions `mapstructure:"benchmark"` + TB ThelperOptions `mapstructure:"tb"` +} + +type ThelperOptions struct { + First *bool `mapstructure:"first"` + Name *bool `mapstructure:"name"` + Begin *bool `mapstructure:"begin"` +} + +type TenvSettings struct { + All *bool `mapstructure:"all"` +} + +type UseStdlibVarsSettings struct { + HTTPMethod *bool `mapstructure:"http-method"` + HTTPStatusCode *bool `mapstructure:"http-status-code"` + TimeWeekday *bool `mapstructure:"time-weekday"` + TimeMonth *bool `mapstructure:"time-month"` + TimeLayout *bool `mapstructure:"time-layout"` + CryptoHash *bool `mapstructure:"crypto-hash"` + DefaultRPCPath *bool `mapstructure:"default-rpc-path"` + SQLIsolationLevel *bool `mapstructure:"sql-isolation-level"` + TLSSignatureScheme *bool `mapstructure:"tls-signature-scheme"` + ConstantKind *bool `mapstructure:"constant-kind"` + + // Deprecated + OSDevNull *bool `mapstructure:"os-dev-null"` + // Deprecated + SyslogPriority *bool `mapstructure:"syslog-priority"` +} + +type UseTestingSettings struct { + ContextBackground *bool `mapstructure:"context-background"` + ContextTodo *bool `mapstructure:"context-todo"` + OSChdir *bool `mapstructure:"os-chdir"` + OSMkdirTemp *bool `mapstructure:"os-mkdir-temp"` + OSSetenv *bool `mapstructure:"os-setenv"` + OSTempDir *bool `mapstructure:"os-temp-dir"` + OSCreateTemp *bool `mapstructure:"os-create-temp"` +} + +type UnconvertSettings struct { + FastMath *bool `mapstructure:"fast-math"` + Safe *bool `mapstructure:"safe"` +} + +type UnparamSettings struct { + CheckExported *bool `mapstructure:"check-exported"` + Algo *string `mapstructure:"algo"` +} + +type UnusedSettings struct { + FieldWritesAreUses *bool `mapstructure:"field-writes-are-uses"` + PostStatementsAreReads *bool `mapstructure:"post-statements-are-reads"` + ExportedFieldsAreUsed *bool `mapstructure:"exported-fields-are-used"` + ParametersAreUsed *bool `mapstructure:"parameters-are-used"` + LocalVariablesAreUsed *bool `mapstructure:"local-variables-are-used"` + GeneratedIsUsed *bool `mapstructure:"generated-is-used"` + + // Deprecated + ExportedIsUsed *bool `mapstructure:"exported-is-used"` +} + +type VarnamelenSettings struct { + MaxDistance *int `mapstructure:"max-distance"` + MinNameLength *int `mapstructure:"min-name-length"` + CheckReceiver *bool `mapstructure:"check-receiver"` + CheckReturn *bool `mapstructure:"check-return"` + CheckTypeParam *bool `mapstructure:"check-type-param"` + IgnoreNames []string `mapstructure:"ignore-names"` + IgnoreTypeAssertOk *bool `mapstructure:"ignore-type-assert-ok"` + IgnoreMapIndexOk *bool `mapstructure:"ignore-map-index-ok"` + IgnoreChanRecvOk *bool `mapstructure:"ignore-chan-recv-ok"` + IgnoreDecls []string `mapstructure:"ignore-decls"` +} + +type WhitespaceSettings struct { + MultiIf *bool `mapstructure:"multi-if"` + MultiFunc *bool `mapstructure:"multi-func"` +} + +type WrapcheckSettings struct { + ExtraIgnoreSigs []string `mapstructure:"extra-ignore-sigs"` + // TODO(ldez): v2 the options must be renamed to use hyphen. + IgnoreSigs []string `mapstructure:"ignoreSigs"` + IgnoreSigRegexps []string `mapstructure:"ignoreSigRegexps"` + IgnorePackageGlobs []string `mapstructure:"ignorePackageGlobs"` + IgnoreInterfaceRegexps []string `mapstructure:"ignoreInterfaceRegexps"` +} + +type WSLSettings struct { + StrictAppend *bool `mapstructure:"strict-append"` + AllowAssignAndCallCuddle *bool `mapstructure:"allow-assign-and-call"` + AllowAssignAndAnythingCuddle *bool `mapstructure:"allow-assign-and-anything"` + AllowMultiLineAssignCuddle *bool `mapstructure:"allow-multiline-assign"` + ForceCaseTrailingWhitespaceLimit *int `mapstructure:"force-case-trailing-whitespace"` + AllowTrailingComment *bool `mapstructure:"allow-trailing-comment"` + AllowSeparatedLeadingComment *bool `mapstructure:"allow-separated-leading-comment"` + AllowCuddleDeclaration *bool `mapstructure:"allow-cuddle-declarations"` + AllowCuddleWithCalls []string `mapstructure:"allow-cuddle-with-calls"` + AllowCuddleWithRHS []string `mapstructure:"allow-cuddle-with-rhs"` + ForceCuddleErrCheckAndAssign *bool `mapstructure:"force-err-cuddling"` + ErrorVariableNames []string `mapstructure:"error-variable-names"` + ForceExclusiveShortDeclarations *bool `mapstructure:"force-short-decl-cuddling"` +} + +// CustomLinterSettings encapsulates the meta-data of a private linter. +type CustomLinterSettings struct { + // Type plugin type. + // It can be `goplugin` or `module`. + Type *string `mapstructure:"type"` + + // Path to a plugin *.so file that implements the private linter. + // Only for Go plugin system. + Path *string `mapstructure:"path"` + + // Description describes the purpose of the private linter. + Description *string `mapstructure:"description"` + // OriginalURL The URL containing the source code for the private linter. + OriginalURL *string `mapstructure:"original-url"` + + // Settings plugin settings only work with linterdb.PluginConstructor symbol. + Settings any `mapstructure:"settings"` +} + +type GciSettings struct { + Sections []string `mapstructure:"sections"` + NoInlineComments *bool `mapstructure:"no-inline-comments"` + NoPrefixComments *bool `mapstructure:"no-prefix-comments"` + SkipGenerated *bool `mapstructure:"skip-generated"` + CustomOrder *bool `mapstructure:"custom-order"` + NoLexOrder *bool `mapstructure:"no-lex-order"` + + // Deprecated: use Sections instead. + LocalPrefixes *string `mapstructure:"local-prefixes"` +} + +type GoFmtSettings struct { + Simplify *bool `mapstructure:"simplify"` + RewriteRules []GoFmtRewriteRule `mapstructure:"rewrite-rules"` +} + +type GoFmtRewriteRule struct { + Pattern *string `mapstructure:"pattern"` + Replacement *string `mapstructure:"replacement"` +} + +type GoFumptSettings struct { + ModulePath *string `mapstructure:"module-path"` + ExtraRules *bool `mapstructure:"extra-rules"` + + // Deprecated: use the global `run.go` instead. + LangVersion *string `mapstructure:"lang-version"` +} + +type GoImportsSettings struct { + LocalPrefixes *string `mapstructure:"local-prefixes"` +} diff --git a/pkg/commands/internal/migrate/versionone/output.go b/pkg/commands/internal/migrate/versionone/output.go new file mode 100644 index 000000000000..07a5671d1a71 --- /dev/null +++ b/pkg/commands/internal/migrate/versionone/output.go @@ -0,0 +1,39 @@ +package versionone + +import ( + "strings" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/ptr" +) + +type Output struct { + Formats OutputFormats `mapstructure:"formats"` + PrintIssuedLine *bool `mapstructure:"print-issued-lines"` + PrintLinterName *bool `mapstructure:"print-linter-name"` + SortResults *bool `mapstructure:"sort-results"` + SortOrder []string `mapstructure:"sort-order"` + PathPrefix *string `mapstructure:"path-prefix"` + ShowStats *bool `mapstructure:"show-stats"` +} + +type OutputFormat struct { + Format *string `mapstructure:"format"` + Path *string `mapstructure:"path"` +} + +type OutputFormats []OutputFormat + +func (p *OutputFormats) UnmarshalText(text []byte) error { + formats := strings.Split(string(text), ",") + + for _, item := range formats { + format, path, _ := strings.Cut(item, ":") + + *p = append(*p, OutputFormat{ + Path: ptr.Pointer(path), + Format: ptr.Pointer(format), + }) + } + + return nil +} diff --git a/pkg/commands/internal/migrate/versionone/run.go b/pkg/commands/internal/migrate/versionone/run.go new file mode 100644 index 000000000000..db3e0edc9379 --- /dev/null +++ b/pkg/commands/internal/migrate/versionone/run.go @@ -0,0 +1,25 @@ +package versionone + +import ( + "time" +) + +// Run encapsulates the config options for running the linter analysis. +type Run struct { + Timeout time.Duration `mapstructure:"timeout"` + + Concurrency *int `mapstructure:"concurrency"` + + Go *string `mapstructure:"go"` + + RelativePathMode *string `mapstructure:"relative-path-mode"` + + BuildTags []string `mapstructure:"build-tags"` + ModulesDownloadMode *string `mapstructure:"modules-download-mode"` + + ExitCodeIfIssuesFound *int `mapstructure:"issues-exit-code"` + AnalyzeTests *bool `mapstructure:"tests"` + + AllowParallelRunners *bool `mapstructure:"allow-parallel-runners"` + AllowSerialRunners *bool `mapstructure:"allow-serial-runners"` +} diff --git a/pkg/commands/internal/migrate/versionone/severity.go b/pkg/commands/internal/migrate/versionone/severity.go new file mode 100644 index 000000000000..b9d52e692d6f --- /dev/null +++ b/pkg/commands/internal/migrate/versionone/severity.go @@ -0,0 +1,12 @@ +package versionone + +type Severity struct { + Default *string `mapstructure:"default-severity"` + CaseSensitive *bool `mapstructure:"case-sensitive"` + Rules []SeverityRule `mapstructure:"rules"` +} + +type SeverityRule struct { + BaseRule `mapstructure:",squash"` + Severity *string `mapstructure:"severity"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/base_rule.go b/pkg/commands/internal/migrate/versiontwo/base_rule.go new file mode 100644 index 000000000000..469592dcc14d --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/base_rule.go @@ -0,0 +1,13 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type BaseRule struct { + Linters []string `yaml:"linters,omitempty" toml:"linters,multiline,omitempty"` + Path *string `yaml:"path,omitempty" toml:"path,multiline,omitempty"` + PathExcept *string `yaml:"path-except,omitempty" toml:"path-except,multiline,omitempty"` + Text *string `yaml:"text,omitempty" toml:"text,multiline,omitempty"` + Source *string `yaml:"source,omitempty" toml:"source,multiline,omitempty"` + + InternalReference *string `yaml:"-,omitempty" toml:"-,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/config.go b/pkg/commands/internal/migrate/versiontwo/config.go new file mode 100644 index 000000000000..341b47b6c79a --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/config.go @@ -0,0 +1,18 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type Config struct { + Version *string `yaml:"version,omitempty" toml:"version,multiline,omitempty"` + + Run Run `yaml:"run,omitempty" toml:"run,multiline,omitempty"` + + Output Output `yaml:"output,omitempty" toml:"output,multiline,omitempty"` + + Linters Linters `yaml:"linters,omitempty" toml:"linters,multiline,omitempty"` + + Issues Issues `yaml:"issues,omitempty" toml:"issues,multiline,omitempty"` + Severity Severity `yaml:"severity,omitempty" toml:"severity,multiline,omitempty"` + + Formatters Formatters `yaml:"formatters,omitempty" toml:"formatters,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/formatters.go b/pkg/commands/internal/migrate/versiontwo/formatters.go new file mode 100644 index 000000000000..bd1b6f931155 --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/formatters.go @@ -0,0 +1,14 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type Formatters struct { + Enable []string `yaml:"enable,omitempty" toml:"enable,multiline,omitempty"` + Settings FormatterSettings `yaml:"settings,omitempty" toml:"settings,multiline,omitempty"` + Exclusions FormatterExclusions `yaml:"exclusions,omitempty" toml:"exclusions,multiline,omitempty"` +} + +type FormatterExclusions struct { + Generated *string `yaml:"generated,omitempty" toml:"generated,multiline,omitempty"` + Paths []string `yaml:"paths,omitempty" toml:"paths,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/formatters_settings.go b/pkg/commands/internal/migrate/versiontwo/formatters_settings.go new file mode 100644 index 000000000000..878b2c4171e0 --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/formatters_settings.go @@ -0,0 +1,48 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type FormatterSettings struct { + Gci GciSettings `yaml:"gci,omitempty" toml:"gci,multiline,omitempty"` + GoFmt GoFmtSettings `yaml:"gofmt,omitempty" toml:"gofmt,multiline,omitempty"` + GoFumpt GoFumptSettings `yaml:"gofumpt,omitempty" toml:"gofumpt,multiline,omitempty"` + GoImports GoImportsSettings `yaml:"goimports,omitempty" toml:"goimports,multiline,omitempty"` + GoLines GoLinesSettings `yaml:"golines,omitempty" toml:"golines,multiline,omitempty"` +} + +type GciSettings struct { + Sections []string `yaml:"sections,omitempty" toml:"sections,multiline,omitempty"` + NoInlineComments *bool `yaml:"no-inline-comments,omitempty" toml:"no-inline-comments,multiline,omitempty"` + NoPrefixComments *bool `yaml:"no-prefix-comments,omitempty" toml:"no-prefix-comments,multiline,omitempty"` + CustomOrder *bool `yaml:"custom-order,omitempty" toml:"custom-order,multiline,omitempty"` + NoLexOrder *bool `yaml:"no-lex-order,omitempty" toml:"no-lex-order,multiline,omitempty"` +} + +type GoFmtSettings struct { + Simplify *bool `yaml:"simplify,omitempty" toml:"simplify,multiline,omitempty"` + RewriteRules []GoFmtRewriteRule `yaml:"rewrite-rules,omitempty" toml:"rewrite-rules,multiline,omitempty"` +} + +type GoFmtRewriteRule struct { + Pattern *string `yaml:"pattern,omitempty" toml:"pattern,multiline,omitempty"` + Replacement *string `yaml:"replacement,omitempty" toml:"replacement,multiline,omitempty"` +} + +type GoFumptSettings struct { + ModulePath *string `yaml:"module-path,omitempty" toml:"module-path,multiline,omitempty"` + ExtraRules *bool `yaml:"extra-rules,omitempty" toml:"extra-rules,multiline,omitempty"` + + LangVersion *string `yaml:"-,omitempty" toml:"-,multiline,omitempty"` +} + +type GoImportsSettings struct { + LocalPrefixes []string `yaml:"local-prefixes,omitempty" toml:"local-prefixes,multiline,omitempty"` +} + +type GoLinesSettings struct { + MaxLen *int `yaml:"max-len,omitempty" toml:"max-len,multiline,omitempty"` + TabLen *int `yaml:"tab-len,omitempty" toml:"tab-len,multiline,omitempty"` + ShortenComments *bool `yaml:"shorten-comments,omitempty" toml:"shorten-comments,multiline,omitempty"` + ReformatTags *bool `yaml:"reformat-tags,omitempty" toml:"reformat-tags,multiline,omitempty"` + ChainSplitDots *bool `yaml:"chain-split-dots,omitempty" toml:"chain-split-dots,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/issues.go b/pkg/commands/internal/migrate/versiontwo/issues.go new file mode 100644 index 000000000000..fa3b06ac5de8 --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/issues.go @@ -0,0 +1,17 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type Issues struct { + MaxIssuesPerLinter *int `yaml:"max-issues-per-linter,omitempty" toml:"max-issues-per-linter,multiline,omitempty"` + MaxSameIssues *int `yaml:"max-same-issues,omitempty" toml:"max-same-issues,multiline,omitempty"` + UniqByLine *bool `yaml:"uniq-by-line,omitempty" toml:"uniq-by-line,multiline,omitempty"` + + DiffFromRevision *string `yaml:"new-from-rev,omitempty" toml:"new-from-rev,multiline,omitempty"` + DiffFromMergeBase *string `yaml:"new-from-merge-base,omitempty" toml:"new-from-merge-base,multiline,omitempty"` + DiffPatchFilePath *string `yaml:"new-from-patch,omitempty" toml:"new-from-patch,multiline,omitempty"` + WholeFiles *bool `yaml:"whole-files,omitempty" toml:"whole-files,multiline,omitempty"` + Diff *bool `yaml:"new,omitempty" toml:"new,multiline,omitempty"` + + NeedFix *bool `yaml:"fix,omitempty" toml:"fix,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/linters.go b/pkg/commands/internal/migrate/versiontwo/linters.go new file mode 100644 index 000000000000..797313111d61 --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/linters.go @@ -0,0 +1,14 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type Linters struct { + Default *string `yaml:"default,omitempty" toml:"default,multiline,omitempty"` + Enable []string `yaml:"enable,omitempty" toml:"enable,multiline,omitempty"` + Disable []string `yaml:"disable,omitempty" toml:"disable,multiline,omitempty"` + FastOnly *bool `yaml:"fast-only,omitempty" toml:"fast-only,multiline,omitempty"` + + Settings LintersSettings `yaml:"settings,omitempty" toml:"settings,multiline,omitempty"` + + Exclusions LinterExclusions `yaml:"exclusions,omitempty" toml:"exclusions,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/linters_exclusions.go b/pkg/commands/internal/migrate/versiontwo/linters_exclusions.go new file mode 100644 index 000000000000..d4ecb9720474 --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/linters_exclusions.go @@ -0,0 +1,16 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type LinterExclusions struct { + Generated *string `yaml:"generated,omitempty" toml:"generated,multiline,omitempty"` + WarnUnused *bool `yaml:"warn-unused,omitempty" toml:"warn-unused,multiline,omitempty"` + Presets []string `yaml:"presets,omitempty" toml:"presets,multiline,omitempty"` + Rules []ExcludeRule `yaml:"rules,omitempty" toml:"rules,multiline,omitempty"` + Paths []string `yaml:"paths,omitempty" toml:"paths,multiline,omitempty"` + PathsExcept []string `yaml:"paths-except,omitempty" toml:"paths-except,multiline,omitempty"` +} + +type ExcludeRule struct { + BaseRule `yaml:",inline"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/linters_settings.go b/pkg/commands/internal/migrate/versiontwo/linters_settings.go new file mode 100644 index 000000000000..2fe5051699bb --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/linters_settings.go @@ -0,0 +1,767 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type LintersSettings struct { + FormatterSettings `yaml:"-,omitempty" toml:"-,multiline,omitempty"` + + Asasalint AsasalintSettings `yaml:"asasalint,omitempty" toml:"asasalint,multiline,omitempty"` + BiDiChk BiDiChkSettings `yaml:"bidichk,omitempty" toml:"bidichk,multiline,omitempty"` + CopyLoopVar CopyLoopVarSettings `yaml:"copyloopvar,omitempty" toml:"copyloopvar,multiline,omitempty"` + Cyclop CyclopSettings `yaml:"cyclop,omitempty" toml:"cyclop,multiline,omitempty"` + Decorder DecorderSettings `yaml:"decorder,omitempty" toml:"decorder,multiline,omitempty"` + Depguard DepGuardSettings `yaml:"depguard,omitempty" toml:"depguard,multiline,omitempty"` + Dogsled DogsledSettings `yaml:"dogsled,omitempty" toml:"dogsled,multiline,omitempty"` + Dupl DuplSettings `yaml:"dupl,omitempty" toml:"dupl,multiline,omitempty"` + DupWord DupWordSettings `yaml:"dupword,omitempty" toml:"dupword,multiline,omitempty"` + Errcheck ErrcheckSettings `yaml:"errcheck,omitempty" toml:"errcheck,multiline,omitempty"` + ErrChkJSON ErrChkJSONSettings `yaml:"errchkjson,omitempty" toml:"errchkjson,multiline,omitempty"` + ErrorLint ErrorLintSettings `yaml:"errorlint,omitempty" toml:"errorlint,multiline,omitempty"` + Exhaustive ExhaustiveSettings `yaml:"exhaustive,omitempty" toml:"exhaustive,multiline,omitempty"` + Exhaustruct ExhaustructSettings `yaml:"exhaustruct,omitempty" toml:"exhaustruct,multiline,omitempty"` + Fatcontext FatcontextSettings `yaml:"fatcontext,omitempty" toml:"fatcontext,multiline,omitempty"` + Forbidigo ForbidigoSettings `yaml:"forbidigo,omitempty" toml:"forbidigo,multiline,omitempty"` + Funlen FunlenSettings `yaml:"funlen,omitempty" toml:"funlen,multiline,omitempty"` + GinkgoLinter GinkgoLinterSettings `yaml:"ginkgolinter,omitempty" toml:"ginkgolinter,multiline,omitempty"` + Gocognit GocognitSettings `yaml:"gocognit,omitempty" toml:"gocognit,multiline,omitempty"` + GoChecksumType GoChecksumTypeSettings `yaml:"gochecksumtype,omitempty" toml:"gochecksumtype,multiline,omitempty"` + Goconst GoConstSettings `yaml:"goconst,omitempty" toml:"goconst,multiline,omitempty"` + Gocritic GoCriticSettings `yaml:"gocritic,omitempty" toml:"gocritic,multiline,omitempty"` + Gocyclo GoCycloSettings `yaml:"gocyclo,omitempty" toml:"gocyclo,multiline,omitempty"` + Godot GodotSettings `yaml:"godot,omitempty" toml:"godot,multiline,omitempty"` + Godox GodoxSettings `yaml:"godox,omitempty" toml:"godox,multiline,omitempty"` + Goheader GoHeaderSettings `yaml:"goheader,omitempty" toml:"goheader,multiline,omitempty"` + GoModDirectives GoModDirectivesSettings `yaml:"gomoddirectives,omitempty" toml:"gomoddirectives,multiline,omitempty"` + Gomodguard GoModGuardSettings `yaml:"gomodguard,omitempty" toml:"gomodguard,multiline,omitempty"` + Gosec GoSecSettings `yaml:"gosec,omitempty" toml:"gosec,multiline,omitempty"` + Gosmopolitan GosmopolitanSettings `yaml:"gosmopolitan,omitempty" toml:"gosmopolitan,multiline,omitempty"` + Govet GovetSettings `yaml:"govet,omitempty" toml:"govet,multiline,omitempty"` + Grouper GrouperSettings `yaml:"grouper,omitempty" toml:"grouper,multiline,omitempty"` + Iface IfaceSettings `yaml:"iface,omitempty" toml:"iface,multiline,omitempty"` + ImportAs ImportAsSettings `yaml:"importas,omitempty" toml:"importas,multiline,omitempty"` + Inamedparam INamedParamSettings `yaml:"inamedparam,omitempty" toml:"inamedparam,multiline,omitempty"` + InterfaceBloat InterfaceBloatSettings `yaml:"interfacebloat,omitempty" toml:"interfacebloat,multiline,omitempty"` + Ireturn IreturnSettings `yaml:"ireturn,omitempty" toml:"ireturn,multiline,omitempty"` + Lll LllSettings `yaml:"lll,omitempty" toml:"lll,multiline,omitempty"` + LoggerCheck LoggerCheckSettings `yaml:"loggercheck,omitempty" toml:"loggercheck,multiline,omitempty"` + MaintIdx MaintIdxSettings `yaml:"maintidx,omitempty" toml:"maintidx,multiline,omitempty"` + Makezero MakezeroSettings `yaml:"makezero,omitempty" toml:"makezero,multiline,omitempty"` + Misspell MisspellSettings `yaml:"misspell,omitempty" toml:"misspell,multiline,omitempty"` + Mnd MndSettings `yaml:"mnd,omitempty" toml:"mnd,multiline,omitempty"` + MustTag MustTagSettings `yaml:"musttag,omitempty" toml:"musttag,multiline,omitempty"` + Nakedret NakedretSettings `yaml:"nakedret,omitempty" toml:"nakedret,multiline,omitempty"` + Nestif NestifSettings `yaml:"nestif,omitempty" toml:"nestif,multiline,omitempty"` + NilNil NilNilSettings `yaml:"nilnil,omitempty" toml:"nilnil,multiline,omitempty"` + Nlreturn NlreturnSettings `yaml:"nlreturn,omitempty" toml:"nlreturn,multiline,omitempty"` + NoLintLint NoLintLintSettings `yaml:"nolintlint,omitempty" toml:"nolintlint,multiline,omitempty"` + NoNamedReturns NoNamedReturnsSettings `yaml:"nonamedreturns,omitempty" toml:"nonamedreturns,multiline,omitempty"` + ParallelTest ParallelTestSettings `yaml:"paralleltest,omitempty" toml:"paralleltest,multiline,omitempty"` + PerfSprint PerfSprintSettings `yaml:"perfsprint,omitempty" toml:"perfsprint,multiline,omitempty"` + Prealloc PreallocSettings `yaml:"prealloc,omitempty" toml:"prealloc,multiline,omitempty"` + Predeclared PredeclaredSettings `yaml:"predeclared,omitempty" toml:"predeclared,multiline,omitempty"` + Promlinter PromlinterSettings `yaml:"promlinter,omitempty" toml:"promlinter,multiline,omitempty"` + ProtoGetter ProtoGetterSettings `yaml:"protogetter,omitempty" toml:"protogetter,multiline,omitempty"` + Reassign ReassignSettings `yaml:"reassign,omitempty" toml:"reassign,multiline,omitempty"` + Recvcheck RecvcheckSettings `yaml:"recvcheck,omitempty" toml:"recvcheck,multiline,omitempty"` + Revive ReviveSettings `yaml:"revive,omitempty" toml:"revive,multiline,omitempty"` + RowsErrCheck RowsErrCheckSettings `yaml:"rowserrcheck,omitempty" toml:"rowserrcheck,multiline,omitempty"` + SlogLint SlogLintSettings `yaml:"sloglint,omitempty" toml:"sloglint,multiline,omitempty"` + Spancheck SpancheckSettings `yaml:"spancheck,omitempty" toml:"spancheck,multiline,omitempty"` + Staticcheck StaticCheckSettings `yaml:"staticcheck,omitempty" toml:"staticcheck,multiline,omitempty"` + TagAlign TagAlignSettings `yaml:"tagalign,omitempty" toml:"tagalign,multiline,omitempty"` + Tagliatelle TagliatelleSettings `yaml:"tagliatelle,omitempty" toml:"tagliatelle,multiline,omitempty"` + Testifylint TestifylintSettings `yaml:"testifylint,omitempty" toml:"testifylint,multiline,omitempty"` + Testpackage TestpackageSettings `yaml:"testpackage,omitempty" toml:"testpackage,multiline,omitempty"` + Thelper ThelperSettings `yaml:"thelper,omitempty" toml:"thelper,multiline,omitempty"` + Unconvert UnconvertSettings `yaml:"unconvert,omitempty" toml:"unconvert,multiline,omitempty"` + Unparam UnparamSettings `yaml:"unparam,omitempty" toml:"unparam,multiline,omitempty"` + Unused UnusedSettings `yaml:"unused,omitempty" toml:"unused,multiline,omitempty"` + UseStdlibVars UseStdlibVarsSettings `yaml:"usestdlibvars,omitempty" toml:"usestdlibvars,multiline,omitempty"` + UseTesting UseTestingSettings `yaml:"usetesting,omitempty" toml:"usetesting,multiline,omitempty"` + Varnamelen VarnamelenSettings `yaml:"varnamelen,omitempty" toml:"varnamelen,multiline,omitempty"` + Whitespace WhitespaceSettings `yaml:"whitespace,omitempty" toml:"whitespace,multiline,omitempty"` + Wrapcheck WrapcheckSettings `yaml:"wrapcheck,omitempty" toml:"wrapcheck,multiline,omitempty"` + WSL WSLSettings `yaml:"wsl,omitempty" toml:"wsl,multiline,omitempty"` + + Custom map[string]CustomLinterSettings `yaml:"custom,omitempty" toml:"custom,multiline,omitempty"` +} + +type AsasalintSettings struct { + Exclude []string `yaml:"exclude,omitempty" toml:"exclude,multiline,omitempty"` + UseBuiltinExclusions *bool `yaml:"use-builtin-exclusions,omitempty" toml:"use-builtin-exclusions,multiline,omitempty"` +} + +type BiDiChkSettings struct { + LeftToRightEmbedding *bool `yaml:"left-to-right-embedding,omitempty" toml:"left-to-right-embedding,multiline,omitempty"` + RightToLeftEmbedding *bool `yaml:"right-to-left-embedding,omitempty" toml:"right-to-left-embedding,multiline,omitempty"` + PopDirectionalFormatting *bool `yaml:"pop-directional-formatting,omitempty" toml:"pop-directional-formatting,multiline,omitempty"` + LeftToRightOverride *bool `yaml:"left-to-right-override,omitempty" toml:"left-to-right-override,multiline,omitempty"` + RightToLeftOverride *bool `yaml:"right-to-left-override,omitempty" toml:"right-to-left-override,multiline,omitempty"` + LeftToRightIsolate *bool `yaml:"left-to-right-isolate,omitempty" toml:"left-to-right-isolate,multiline,omitempty"` + RightToLeftIsolate *bool `yaml:"right-to-left-isolate,omitempty" toml:"right-to-left-isolate,multiline,omitempty"` + FirstStrongIsolate *bool `yaml:"first-strong-isolate,omitempty" toml:"first-strong-isolate,multiline,omitempty"` + PopDirectionalIsolate *bool `yaml:"pop-directional-isolate,omitempty" toml:"pop-directional-isolate,multiline,omitempty"` +} + +type CopyLoopVarSettings struct { + CheckAlias *bool `yaml:"check-alias,omitempty" toml:"check-alias,multiline,omitempty"` +} + +type CyclopSettings struct { + MaxComplexity *int `yaml:"max-complexity,omitempty" toml:"max-complexity,multiline,omitempty"` + PackageAverage *float64 `yaml:"package-average,omitempty" toml:"package-average,multiline,omitempty"` +} + +type DepGuardSettings struct { + Rules map[string]*DepGuardList `yaml:"rules,omitempty" toml:"rules,multiline,omitempty"` +} + +type DepGuardList struct { + ListMode *string `yaml:"list-mode,omitempty" toml:"list-mode,multiline,omitempty"` + Files []string `yaml:"files,omitempty" toml:"files,multiline,omitempty"` + Allow []string `yaml:"allow,omitempty" toml:"allow,multiline,omitempty"` + Deny []DepGuardDeny `yaml:"deny,omitempty" toml:"deny,multiline,omitempty"` +} + +type DepGuardDeny struct { + Pkg *string `yaml:"pkg,omitempty" toml:"pkg,multiline,omitempty"` + Desc *string `yaml:"desc,omitempty" toml:"desc,multiline,omitempty"` +} + +type DecorderSettings struct { + DecOrder []string `yaml:"dec-order,omitempty" toml:"dec-order,multiline,omitempty"` + IgnoreUnderscoreVars *bool `yaml:"ignore-underscore-vars,omitempty" toml:"ignore-underscore-vars,multiline,omitempty"` + DisableDecNumCheck *bool `yaml:"disable-dec-num-check,omitempty" toml:"disable-dec-num-check,multiline,omitempty"` + DisableTypeDecNumCheck *bool `yaml:"disable-type-dec-num-check,omitempty" toml:"disable-type-dec-num-check,multiline,omitempty"` + DisableConstDecNumCheck *bool `yaml:"disable-const-dec-num-check,omitempty" toml:"disable-const-dec-num-check,multiline,omitempty"` + DisableVarDecNumCheck *bool `yaml:"disable-var-dec-num-check,omitempty" toml:"disable-var-dec-num-check,multiline,omitempty"` + DisableDecOrderCheck *bool `yaml:"disable-dec-order-check,omitempty" toml:"disable-dec-order-check,multiline,omitempty"` + DisableInitFuncFirstCheck *bool `yaml:"disable-init-func-first-check,omitempty" toml:"disable-init-func-first-check,multiline,omitempty"` +} + +type DogsledSettings struct { + MaxBlankIdentifiers *int `yaml:"max-blank-identifiers,omitempty" toml:"max-blank-identifiers,multiline,omitempty"` +} + +type DuplSettings struct { + Threshold *int `yaml:"threshold,omitempty" toml:"threshold,multiline,omitempty"` +} + +type DupWordSettings struct { + Keywords []string `yaml:"keywords,omitempty" toml:"keywords,multiline,omitempty"` + Ignore []string `yaml:"ignore,omitempty" toml:"ignore,multiline,omitempty"` +} + +type ErrcheckSettings struct { + DisableDefaultExclusions *bool `yaml:"disable-default-exclusions,omitempty" toml:"disable-default-exclusions,multiline,omitempty"` + CheckTypeAssertions *bool `yaml:"check-type-assertions,omitempty" toml:"check-type-assertions,multiline,omitempty"` + CheckAssignToBlank *bool `yaml:"check-blank,omitempty" toml:"check-blank,multiline,omitempty"` + ExcludeFunctions []string `yaml:"exclude-functions,omitempty" toml:"exclude-functions,multiline,omitempty"` +} + +type ErrChkJSONSettings struct { + CheckErrorFreeEncoding *bool `yaml:"check-error-free-encoding,omitempty" toml:"check-error-free-encoding,multiline,omitempty"` + ReportNoExported *bool `yaml:"report-no-exported,omitempty" toml:"report-no-exported,multiline,omitempty"` +} + +type ErrorLintSettings struct { + Errorf *bool `yaml:"errorf,omitempty" toml:"errorf,multiline,omitempty"` + ErrorfMulti *bool `yaml:"errorf-multi,omitempty" toml:"errorf-multi,multiline,omitempty"` + Asserts *bool `yaml:"asserts,omitempty" toml:"asserts,multiline,omitempty"` + Comparison *bool `yaml:"comparison,omitempty" toml:"comparison,multiline,omitempty"` + AllowedErrors []ErrorLintAllowPair `yaml:"allowed-errors,omitempty" toml:"allowed-errors,multiline,omitempty"` + AllowedErrorsWildcard []ErrorLintAllowPair `yaml:"allowed-errors-wildcard,omitempty" toml:"allowed-errors-wildcard,multiline,omitempty"` +} + +type ErrorLintAllowPair struct { + Err *string `yaml:"err,omitempty" toml:"err,multiline,omitempty"` + Fun *string `yaml:"fun,omitempty" toml:"fun,multiline,omitempty"` +} + +type ExhaustiveSettings struct { + Check []string `yaml:"check,omitempty" toml:"check,multiline,omitempty"` + DefaultSignifiesExhaustive *bool `yaml:"default-signifies-exhaustive,omitempty" toml:"default-signifies-exhaustive,multiline,omitempty"` + IgnoreEnumMembers *string `yaml:"ignore-enum-members,omitempty" toml:"ignore-enum-members,multiline,omitempty"` + IgnoreEnumTypes *string `yaml:"ignore-enum-types,omitempty" toml:"ignore-enum-types,multiline,omitempty"` + PackageScopeOnly *bool `yaml:"package-scope-only,omitempty" toml:"package-scope-only,multiline,omitempty"` + ExplicitExhaustiveMap *bool `yaml:"explicit-exhaustive-map,omitempty" toml:"explicit-exhaustive-map,multiline,omitempty"` + ExplicitExhaustiveSwitch *bool `yaml:"explicit-exhaustive-switch,omitempty" toml:"explicit-exhaustive-switch,multiline,omitempty"` + DefaultCaseRequired *bool `yaml:"default-case-required,omitempty" toml:"default-case-required,multiline,omitempty"` +} + +type ExhaustructSettings struct { + Include []string `yaml:"include,omitempty" toml:"include,multiline,omitempty"` + Exclude []string `yaml:"exclude,omitempty" toml:"exclude,multiline,omitempty"` +} + +type FatcontextSettings struct { + CheckStructPointers *bool `yaml:"check-struct-pointers,omitempty" toml:"check-struct-pointers,multiline,omitempty"` +} + +type ForbidigoSettings struct { + Forbid []ForbidigoPattern `yaml:"forbid,omitempty" toml:"forbid,multiline,omitempty"` + ExcludeGodocExamples *bool `yaml:"exclude-godoc-examples,omitempty" toml:"exclude-godoc-examples,multiline,omitempty"` + AnalyzeTypes *bool `yaml:"analyze-types,omitempty" toml:"analyze-types,multiline,omitempty"` +} + +type ForbidigoPattern struct { + Pattern *string `yaml:"pattern,omitempty" toml:"pattern,multiline,omitempty"` + Package *string `yaml:"pkg,omitempty,omitempty" toml:"pkg,omitempty,multiline,omitempty"` + Msg *string `yaml:"msg,omitempty,omitempty" toml:"msg,omitempty,multiline,omitempty"` +} + +type FunlenSettings struct { + Lines *int `yaml:"lines,omitempty" toml:"lines,multiline,omitempty"` + Statements *int `yaml:"statements,omitempty" toml:"statements,multiline,omitempty"` + IgnoreComments *bool `yaml:"ignore-comments,omitempty" toml:"ignore-comments,multiline,omitempty"` +} + +type GinkgoLinterSettings struct { + SuppressLenAssertion *bool `yaml:"suppress-len-assertion,omitempty" toml:"suppress-len-assertion,multiline,omitempty"` + SuppressNilAssertion *bool `yaml:"suppress-nil-assertion,omitempty" toml:"suppress-nil-assertion,multiline,omitempty"` + SuppressErrAssertion *bool `yaml:"suppress-err-assertion,omitempty" toml:"suppress-err-assertion,multiline,omitempty"` + SuppressCompareAssertion *bool `yaml:"suppress-compare-assertion,omitempty" toml:"suppress-compare-assertion,multiline,omitempty"` + SuppressAsyncAssertion *bool `yaml:"suppress-async-assertion,omitempty" toml:"suppress-async-assertion,multiline,omitempty"` + SuppressTypeCompareWarning *bool `yaml:"suppress-type-compare-assertion,omitempty" toml:"suppress-type-compare-assertion,multiline,omitempty"` + ForbidFocusContainer *bool `yaml:"forbid-focus-container,omitempty" toml:"forbid-focus-container,multiline,omitempty"` + AllowHaveLenZero *bool `yaml:"allow-havelen-zero,omitempty" toml:"allow-havelen-zero,multiline,omitempty"` + ForceExpectTo *bool `yaml:"force-expect-to,omitempty" toml:"force-expect-to,multiline,omitempty"` + ValidateAsyncIntervals *bool `yaml:"validate-async-intervals,omitempty" toml:"validate-async-intervals,multiline,omitempty"` + ForbidSpecPollution *bool `yaml:"forbid-spec-pollution,omitempty" toml:"forbid-spec-pollution,multiline,omitempty"` + ForceSucceedForFuncs *bool `yaml:"force-succeed,omitempty" toml:"force-succeed,multiline,omitempty"` +} + +type GoChecksumTypeSettings struct { + DefaultSignifiesExhaustive *bool `yaml:"default-signifies-exhaustive,omitempty" toml:"default-signifies-exhaustive,multiline,omitempty"` + IncludeSharedInterfaces *bool `yaml:"include-shared-interfaces,omitempty" toml:"include-shared-interfaces,multiline,omitempty"` +} + +type GocognitSettings struct { + MinComplexity *int `yaml:"min-complexity,omitempty" toml:"min-complexity,multiline,omitempty"` +} + +type GoConstSettings struct { + IgnoreStrings *string `yaml:"ignore-strings,omitempty" toml:"ignore-strings,multiline,omitempty"` + MatchWithConstants *bool `yaml:"match-constant,omitempty" toml:"match-constant,multiline,omitempty"` + MinStringLen *int `yaml:"min-len,omitempty" toml:"min-len,multiline,omitempty"` + MinOccurrencesCount *int `yaml:"min-occurrences,omitempty" toml:"min-occurrences,multiline,omitempty"` + ParseNumbers *bool `yaml:"numbers,omitempty" toml:"numbers,multiline,omitempty"` + NumberMin *int `yaml:"min,omitempty" toml:"min,multiline,omitempty"` + NumberMax *int `yaml:"max,omitempty" toml:"max,multiline,omitempty"` + IgnoreCalls *bool `yaml:"ignore-calls,omitempty" toml:"ignore-calls,multiline,omitempty"` +} + +type GoCriticSettings struct { + Go *string `yaml:"-,omitempty" toml:"-,multiline,omitempty"` + DisableAll *bool `yaml:"disable-all,omitempty" toml:"disable-all,multiline,omitempty"` + EnabledChecks []string `yaml:"enabled-checks,omitempty" toml:"enabled-checks,multiline,omitempty"` + EnableAll *bool `yaml:"enable-all,omitempty" toml:"enable-all,multiline,omitempty"` + DisabledChecks []string `yaml:"disabled-checks,omitempty" toml:"disabled-checks,multiline,omitempty"` + EnabledTags []string `yaml:"enabled-tags,omitempty" toml:"enabled-tags,multiline,omitempty"` + DisabledTags []string `yaml:"disabled-tags,omitempty" toml:"disabled-tags,multiline,omitempty"` + SettingsPerCheck map[string]GoCriticCheckSettings `yaml:"settings,omitempty" toml:"settings,multiline,omitempty"` +} + +type GoCriticCheckSettings map[string]any + +type GoCycloSettings struct { + MinComplexity *int `yaml:"min-complexity,omitempty" toml:"min-complexity,multiline,omitempty"` +} + +type GodotSettings struct { + Scope *string `yaml:"scope,omitempty" toml:"scope,multiline,omitempty"` + Exclude []string `yaml:"exclude,omitempty" toml:"exclude,multiline,omitempty"` + Capital *bool `yaml:"capital,omitempty" toml:"capital,multiline,omitempty"` + Period *bool `yaml:"period,omitempty" toml:"period,multiline,omitempty"` +} + +type GodoxSettings struct { + Keywords []string `yaml:"keywords,omitempty" toml:"keywords,multiline,omitempty"` +} + +type GoHeaderSettings struct { + Values map[string]map[string]string `yaml:"values,omitempty" toml:"values,multiline,omitempty"` + Template *string `yaml:"template,omitempty" toml:"template,multiline,omitempty"` + TemplatePath *string `yaml:"template-path,omitempty" toml:"template-path,multiline,omitempty"` +} + +type GoModDirectivesSettings struct { + ReplaceAllowList []string `yaml:"replace-allow-list,omitempty" toml:"replace-allow-list,multiline,omitempty"` + ReplaceLocal *bool `yaml:"replace-local,omitempty" toml:"replace-local,multiline,omitempty"` + ExcludeForbidden *bool `yaml:"exclude-forbidden,omitempty" toml:"exclude-forbidden,multiline,omitempty"` + RetractAllowNoExplanation *bool `yaml:"retract-allow-no-explanation,omitempty" toml:"retract-allow-no-explanation,multiline,omitempty"` + ToolchainForbidden *bool `yaml:"toolchain-forbidden,omitempty" toml:"toolchain-forbidden,multiline,omitempty"` + ToolchainPattern *string `yaml:"toolchain-pattern,omitempty" toml:"toolchain-pattern,multiline,omitempty"` + ToolForbidden *bool `yaml:"tool-forbidden,omitempty" toml:"tool-forbidden,multiline,omitempty"` + GoDebugForbidden *bool `yaml:"go-debug-forbidden,omitempty" toml:"go-debug-forbidden,multiline,omitempty"` + GoVersionPattern *string `yaml:"go-version-pattern,omitempty" toml:"go-version-pattern,multiline,omitempty"` +} + +type GoModGuardSettings struct { + Allowed GoModGuardAllowed `yaml:"allowed,omitempty" toml:"allowed,multiline,omitempty"` + Blocked GoModGuardBlocked `yaml:"blocked,omitempty" toml:"blocked,multiline,omitempty"` +} + +type GoModGuardAllowed struct { + Modules []string `yaml:"modules,omitempty" toml:"modules,multiline,omitempty"` + Domains []string `yaml:"domains,omitempty" toml:"domains,multiline,omitempty"` +} + +type GoModGuardBlocked struct { + Modules []map[string]GoModGuardModule `yaml:"modules,omitempty" toml:"modules,multiline,omitempty"` + Versions []map[string]GoModGuardVersion `yaml:"versions,omitempty" toml:"versions,multiline,omitempty"` + LocalReplaceDirectives *bool `yaml:"local-replace-directives,omitempty" toml:"local-replace-directives,multiline,omitempty"` +} + +type GoModGuardModule struct { + Recommendations []string `yaml:"recommendations,omitempty" toml:"recommendations,multiline,omitempty"` + Reason *string `yaml:"reason,omitempty" toml:"reason,multiline,omitempty"` +} + +type GoModGuardVersion struct { + Version *string `yaml:"version,omitempty" toml:"version,multiline,omitempty"` + Reason *string `yaml:"reason,omitempty" toml:"reason,multiline,omitempty"` +} + +type GoSecSettings struct { + Includes []string `yaml:"includes,omitempty" toml:"includes,multiline,omitempty"` + Excludes []string `yaml:"excludes,omitempty" toml:"excludes,multiline,omitempty"` + Severity *string `yaml:"severity,omitempty" toml:"severity,multiline,omitempty"` + Confidence *string `yaml:"confidence,omitempty" toml:"confidence,multiline,omitempty"` + Config map[string]any `yaml:"config,omitempty" toml:"config,multiline,omitempty"` + Concurrency *int `yaml:"concurrency,omitempty" toml:"concurrency,multiline,omitempty"` +} + +type GosmopolitanSettings struct { + AllowTimeLocal *bool `yaml:"allow-time-local,omitempty" toml:"allow-time-local,multiline,omitempty"` + EscapeHatches []string `yaml:"escape-hatches,omitempty" toml:"escape-hatches,multiline,omitempty"` + WatchForScripts []string `yaml:"watch-for-scripts,omitempty" toml:"watch-for-scripts,multiline,omitempty"` +} + +type GovetSettings struct { + Go *string `yaml:"-,omitempty" toml:"-,multiline,omitempty"` + + Enable []string `yaml:"enable,omitempty" toml:"enable,multiline,omitempty"` + Disable []string `yaml:"disable,omitempty" toml:"disable,multiline,omitempty"` + EnableAll *bool `yaml:"enable-all,omitempty" toml:"enable-all,multiline,omitempty"` + DisableAll *bool `yaml:"disable-all,omitempty" toml:"disable-all,multiline,omitempty"` + + Settings map[string]map[string]any `yaml:"settings,omitempty" toml:"settings,multiline,omitempty"` +} + +type GrouperSettings struct { + ConstRequireSingleConst *bool `yaml:"const-require-single-const,omitempty" toml:"const-require-single-const,multiline,omitempty"` + ConstRequireGrouping *bool `yaml:"const-require-grouping,omitempty" toml:"const-require-grouping,multiline,omitempty"` + ImportRequireSingleImport *bool `yaml:"import-require-single-import,omitempty" toml:"import-require-single-import,multiline,omitempty"` + ImportRequireGrouping *bool `yaml:"import-require-grouping,omitempty" toml:"import-require-grouping,multiline,omitempty"` + TypeRequireSingleType *bool `yaml:"type-require-single-type,omitempty" toml:"type-require-single-type,multiline,omitempty"` + TypeRequireGrouping *bool `yaml:"type-require-grouping,omitempty" toml:"type-require-grouping,multiline,omitempty"` + VarRequireSingleVar *bool `yaml:"var-require-single-var,omitempty" toml:"var-require-single-var,multiline,omitempty"` + VarRequireGrouping *bool `yaml:"var-require-grouping,omitempty" toml:"var-require-grouping,multiline,omitempty"` +} + +type IfaceSettings struct { + Enable []string `yaml:"enable,omitempty" toml:"enable,multiline,omitempty"` + Settings map[string]map[string]any `yaml:"settings,omitempty" toml:"settings,multiline,omitempty"` +} + +type ImportAsSettings struct { + Alias []ImportAsAlias `yaml:"alias,omitempty" toml:"alias,multiline,omitempty"` + NoUnaliased *bool `yaml:"no-unaliased,omitempty" toml:"no-unaliased,multiline,omitempty"` + NoExtraAliases *bool `yaml:"no-extra-aliases,omitempty" toml:"no-extra-aliases,multiline,omitempty"` +} + +type ImportAsAlias struct { + Pkg *string `yaml:"pkg,omitempty" toml:"pkg,multiline,omitempty"` + Alias *string `yaml:"alias,omitempty" toml:"alias,multiline,omitempty"` +} + +type INamedParamSettings struct { + SkipSingleParam *bool `yaml:"skip-single-param,omitempty" toml:"skip-single-param,multiline,omitempty"` +} + +type InterfaceBloatSettings struct { + Max *int `yaml:"max,omitempty" toml:"max,multiline,omitempty"` +} + +type IreturnSettings struct { + Allow []string `yaml:"allow,omitempty" toml:"allow,multiline,omitempty"` + Reject []string `yaml:"reject,omitempty" toml:"reject,multiline,omitempty"` +} + +type LllSettings struct { + LineLength *int `yaml:"line-length,omitempty" toml:"line-length,multiline,omitempty"` + TabWidth *int `yaml:"tab-width,omitempty" toml:"tab-width,multiline,omitempty"` +} + +type LoggerCheckSettings struct { + Kitlog *bool `yaml:"kitlog,omitempty" toml:"kitlog,multiline,omitempty"` + Klog *bool `yaml:"klog,omitempty" toml:"klog,multiline,omitempty"` + Logr *bool `yaml:"logr,omitempty" toml:"logr,multiline,omitempty"` + Slog *bool `yaml:"slog,omitempty" toml:"slog,multiline,omitempty"` + Zap *bool `yaml:"zap,omitempty" toml:"zap,multiline,omitempty"` + RequireStringKey *bool `yaml:"require-string-key,omitempty" toml:"require-string-key,multiline,omitempty"` + NoPrintfLike *bool `yaml:"no-printf-like,omitempty" toml:"no-printf-like,multiline,omitempty"` + Rules []string `yaml:"rules,omitempty" toml:"rules,multiline,omitempty"` +} + +type MaintIdxSettings struct { + Under *int `yaml:"under,omitempty" toml:"under,multiline,omitempty"` +} + +type MakezeroSettings struct { + Always *bool `yaml:"always,omitempty" toml:"always,multiline,omitempty"` +} + +type MisspellSettings struct { + Mode *string `yaml:"mode,omitempty" toml:"mode,multiline,omitempty"` + Locale *string `yaml:"locale,omitempty" toml:"locale,multiline,omitempty"` + ExtraWords []MisspellExtraWords `yaml:"extra-words,omitempty" toml:"extra-words,multiline,omitempty"` + IgnoreRules []string `yaml:"ignore-rules,omitempty" toml:"ignore-rules,multiline,omitempty"` +} + +type MisspellExtraWords struct { + Typo *string `yaml:"typo,omitempty" toml:"typo,multiline,omitempty"` + Correction *string `yaml:"correction,omitempty" toml:"correction,multiline,omitempty"` +} + +type MustTagSettings struct { + Functions []MustTagFunction `yaml:"functions,omitempty" toml:"functions,multiline,omitempty"` +} + +type MustTagFunction struct { + Name *string `yaml:"name,omitempty" toml:"name,multiline,omitempty"` + Tag *string `yaml:"tag,omitempty" toml:"tag,multiline,omitempty"` + ArgPos *int `yaml:"arg-pos,omitempty" toml:"arg-pos,multiline,omitempty"` +} + +type NakedretSettings struct { + MaxFuncLines uint `yaml:"max-func-lines,omitempty" toml:"max-func-lines,multiline,omitempty"` +} + +type NestifSettings struct { + MinComplexity *int `yaml:"min-complexity,omitempty" toml:"min-complexity,multiline,omitempty"` +} + +type NilNilSettings struct { + DetectOpposite *bool `yaml:"detect-opposite,omitempty" toml:"detect-opposite,multiline,omitempty"` + CheckedTypes []string `yaml:"checked-types,omitempty" toml:"checked-types,multiline,omitempty"` +} + +type NlreturnSettings struct { + BlockSize *int `yaml:"block-size,omitempty" toml:"block-size,multiline,omitempty"` +} + +type MndSettings struct { + Checks []string `yaml:"checks,omitempty" toml:"checks,multiline,omitempty"` + IgnoredNumbers []string `yaml:"ignored-numbers,omitempty" toml:"ignored-numbers,multiline,omitempty"` + IgnoredFiles []string `yaml:"ignored-files,omitempty" toml:"ignored-files,multiline,omitempty"` + IgnoredFunctions []string `yaml:"ignored-functions,omitempty" toml:"ignored-functions,multiline,omitempty"` +} + +type NoLintLintSettings struct { + RequireExplanation *bool `yaml:"require-explanation,omitempty" toml:"require-explanation,multiline,omitempty"` + RequireSpecific *bool `yaml:"require-specific,omitempty" toml:"require-specific,multiline,omitempty"` + AllowNoExplanation []string `yaml:"allow-no-explanation,omitempty" toml:"allow-no-explanation,multiline,omitempty"` + AllowUnused *bool `yaml:"allow-unused,omitempty" toml:"allow-unused,multiline,omitempty"` +} + +type NoNamedReturnsSettings struct { + ReportErrorInDefer *bool `yaml:"report-error-in-defer,omitempty" toml:"report-error-in-defer,multiline,omitempty"` +} + +type ParallelTestSettings struct { + Go *string `yaml:"-,omitempty" toml:"-,multiline,omitempty"` + IgnoreMissing *bool `yaml:"ignore-missing,omitempty" toml:"ignore-missing,multiline,omitempty"` + IgnoreMissingSubtests *bool `yaml:"ignore-missing-subtests,omitempty" toml:"ignore-missing-subtests,multiline,omitempty"` +} + +type PerfSprintSettings struct { + IntegerFormat *bool `yaml:"integer-format,omitempty" toml:"integer-format,multiline,omitempty"` + IntConversion *bool `yaml:"int-conversion,omitempty" toml:"int-conversion,multiline,omitempty"` + + ErrorFormat *bool `yaml:"error-format,omitempty" toml:"error-format,multiline,omitempty"` + ErrError *bool `yaml:"err-error,omitempty" toml:"err-error,multiline,omitempty"` + ErrorF *bool `yaml:"errorf,omitempty" toml:"errorf,multiline,omitempty"` + + StringFormat *bool `yaml:"string-format,omitempty" toml:"string-format,multiline,omitempty"` + SprintF1 *bool `yaml:"sprintf1,omitempty" toml:"sprintf1,multiline,omitempty"` + StrConcat *bool `yaml:"strconcat,omitempty" toml:"strconcat,multiline,omitempty"` + + BoolFormat *bool `yaml:"bool-format,omitempty" toml:"bool-format,multiline,omitempty"` + HexFormat *bool `yaml:"hex-format,omitempty" toml:"hex-format,multiline,omitempty"` +} + +type PreallocSettings struct { + Simple *bool `yaml:"simple,omitempty" toml:"simple,multiline,omitempty"` + RangeLoops *bool `yaml:"range-loops,omitempty" toml:"range-loops,multiline,omitempty"` + ForLoops *bool `yaml:"for-loops,omitempty" toml:"for-loops,multiline,omitempty"` +} + +type PredeclaredSettings struct { + Ignore []string `yaml:"ignore,omitempty" toml:"ignore,multiline,omitempty"` + Qualified *bool `yaml:"qualified-name,omitempty" toml:"qualified-name,multiline,omitempty"` +} + +type PromlinterSettings struct { + Strict *bool `yaml:"strict,omitempty" toml:"strict,multiline,omitempty"` + DisabledLinters []string `yaml:"disabled-linters,omitempty" toml:"disabled-linters,multiline,omitempty"` +} + +type ProtoGetterSettings struct { + SkipGeneratedBy []string `yaml:"skip-generated-by,omitempty" toml:"skip-generated-by,multiline,omitempty"` + SkipFiles []string `yaml:"skip-files,omitempty" toml:"skip-files,multiline,omitempty"` + SkipAnyGenerated *bool `yaml:"skip-any-generated,omitempty" toml:"skip-any-generated,multiline,omitempty"` + ReplaceFirstArgInAppend *bool `yaml:"replace-first-arg-in-append,omitempty" toml:"replace-first-arg-in-append,multiline,omitempty"` +} + +type ReassignSettings struct { + Patterns []string `yaml:"patterns,omitempty" toml:"patterns,multiline,omitempty"` +} + +type RecvcheckSettings struct { + DisableBuiltin *bool `yaml:"disable-builtin,omitempty" toml:"disable-builtin,multiline,omitempty"` + Exclusions []string `yaml:"exclusions,omitempty" toml:"exclusions,multiline,omitempty"` +} + +type ReviveSettings struct { + Go *string `yaml:"-,omitempty" toml:"-,multiline,omitempty"` + MaxOpenFiles *int `yaml:"max-open-files,omitempty" toml:"max-open-files,multiline,omitempty"` + Confidence *float64 `yaml:"confidence,omitempty" toml:"confidence,multiline,omitempty"` + Severity *string `yaml:"severity,omitempty" toml:"severity,multiline,omitempty"` + EnableAllRules *bool `yaml:"enable-all-rules,omitempty" toml:"enable-all-rules,multiline,omitempty"` + Rules []ReviveRule `yaml:"rules,omitempty" toml:"rules,multiline,omitempty"` + ErrorCode *int `yaml:"error-code,omitempty" toml:"error-code,multiline,omitempty"` + WarningCode *int `yaml:"warning-code,omitempty" toml:"warning-code,multiline,omitempty"` + Directives []ReviveDirective `yaml:"directives,omitempty" toml:"directives,multiline,omitempty"` +} + +type ReviveRule struct { + Name *string `yaml:"name,omitempty" toml:"name,multiline,omitempty"` + Arguments []any `yaml:"arguments,omitempty" toml:"arguments,multiline,omitempty"` + Severity *string `yaml:"severity,omitempty" toml:"severity,multiline,omitempty"` + Disabled *bool `yaml:"disabled,omitempty" toml:"disabled,multiline,omitempty"` + Exclude []string `yaml:"exclude,omitempty" toml:"exclude,multiline,omitempty"` +} + +type ReviveDirective struct { + Name *string `yaml:"name,omitempty" toml:"name,multiline,omitempty"` + Severity *string `yaml:"severity,omitempty" toml:"severity,multiline,omitempty"` +} + +type RowsErrCheckSettings struct { + Packages []string `yaml:"packages,omitempty" toml:"packages,multiline,omitempty"` +} + +type SlogLintSettings struct { + NoMixedArgs *bool `yaml:"no-mixed-args,omitempty" toml:"no-mixed-args,multiline,omitempty"` + KVOnly *bool `yaml:"kv-only,omitempty" toml:"kv-only,multiline,omitempty"` + AttrOnly *bool `yaml:"attr-only,omitempty" toml:"attr-only,multiline,omitempty"` + NoGlobal *string `yaml:"no-global,omitempty" toml:"no-global,multiline,omitempty"` + Context *string `yaml:"context,omitempty" toml:"context,multiline,omitempty"` + StaticMsg *bool `yaml:"static-msg,omitempty" toml:"static-msg,multiline,omitempty"` + NoRawKeys *bool `yaml:"no-raw-keys,omitempty" toml:"no-raw-keys,multiline,omitempty"` + KeyNamingCase *string `yaml:"key-naming-case,omitempty" toml:"key-naming-case,multiline,omitempty"` + ForbiddenKeys []string `yaml:"forbidden-keys,omitempty" toml:"forbidden-keys,multiline,omitempty"` + ArgsOnSepLines *bool `yaml:"args-on-sep-lines,omitempty" toml:"args-on-sep-lines,multiline,omitempty"` +} + +type SpancheckSettings struct { + Checks []string `yaml:"checks,omitempty" toml:"checks,multiline,omitempty"` + IgnoreCheckSignatures []string `yaml:"ignore-check-signatures,omitempty" toml:"ignore-check-signatures,multiline,omitempty"` + ExtraStartSpanSignatures []string `yaml:"extra-start-span-signatures,omitempty" toml:"extra-start-span-signatures,multiline,omitempty"` +} + +type StaticCheckSettings struct { + Checks []string `yaml:"checks,omitempty" toml:"checks,multiline,omitempty"` + Initialisms []string `yaml:"initialisms,omitempty" toml:"initialisms,multiline,omitempty"` + DotImportWhitelist []string `yaml:"dot-import-whitelist,omitempty" toml:"dot-import-whitelist,multiline,omitempty"` + HTTPStatusCodeWhitelist []string `yaml:"http-status-code-whitelist,omitempty" toml:"http-status-code-whitelist,multiline,omitempty"` +} + +type TagAlignSettings struct { + Align *bool `yaml:"align,omitempty" toml:"align,multiline,omitempty"` + Sort *bool `yaml:"sort,omitempty" toml:"sort,multiline,omitempty"` + Order []string `yaml:"order,omitempty" toml:"order,multiline,omitempty"` + Strict *bool `yaml:"strict,omitempty" toml:"strict,multiline,omitempty"` +} + +type TagliatelleSettings struct { + Case TagliatelleCase `yaml:"case,omitempty" toml:"case,multiline,omitempty"` +} + +type TagliatelleCase struct { + TagliatelleBase `yaml:",inline"` + Overrides []TagliatelleOverrides `yaml:"overrides,omitempty" toml:"overrides,multiline,omitempty"` +} + +type TagliatelleOverrides struct { + TagliatelleBase `yaml:",inline"` + Package *string `yaml:"pkg,omitempty" toml:"pkg,multiline,omitempty"` + Ignore *bool `yaml:"ignore,omitempty" toml:"ignore,multiline,omitempty"` +} + +type TagliatelleBase struct { + Rules map[string]string `yaml:"rules,omitempty" toml:"rules,multiline,omitempty"` + ExtendedRules map[string]TagliatelleExtendedRule `yaml:"extended-rules,omitempty" toml:"extended-rules,multiline,omitempty"` + UseFieldName *bool `yaml:"use-field-name,omitempty" toml:"use-field-name,multiline,omitempty"` + IgnoredFields []string `yaml:"ignored-fields,omitempty" toml:"ignored-fields,multiline,omitempty"` +} + +type TagliatelleExtendedRule struct { + Case *string `yaml:"case,omitempty" toml:"case,multiline,omitempty"` + ExtraInitialisms *bool `yaml:"extra-initialisms,omitempty" toml:"extra-initialisms,multiline,omitempty"` + InitialismOverrides map[string]bool `yaml:"initialism-overrides,omitempty" toml:"initialism-overrides,multiline,omitempty"` +} + +type TestifylintSettings struct { + EnableAll *bool `yaml:"enable-all,omitempty" toml:"enable-all,multiline,omitempty"` + DisableAll *bool `yaml:"disable-all,omitempty" toml:"disable-all,multiline,omitempty"` + EnabledCheckers []string `yaml:"enable,omitempty" toml:"enable,multiline,omitempty"` + DisabledCheckers []string `yaml:"disable,omitempty" toml:"disable,multiline,omitempty"` + + BoolCompare TestifylintBoolCompare `yaml:"bool-compare,omitempty" toml:"bool-compare,multiline,omitempty"` + ExpectedActual TestifylintExpectedActual `yaml:"expected-actual,omitempty" toml:"expected-actual,multiline,omitempty"` + Formatter TestifylintFormatter `yaml:"formatter,omitempty" toml:"formatter,multiline,omitempty"` + GoRequire TestifylintGoRequire `yaml:"go-require,omitempty" toml:"go-require,multiline,omitempty"` + RequireError TestifylintRequireError `yaml:"require-error,omitempty" toml:"require-error,multiline,omitempty"` + SuiteExtraAssertCall TestifylintSuiteExtraAssertCall `yaml:"suite-extra-assert-call,omitempty" toml:"suite-extra-assert-call,multiline,omitempty"` +} + +type TestifylintBoolCompare struct { + IgnoreCustomTypes *bool `yaml:"ignore-custom-types,omitempty" toml:"ignore-custom-types,multiline,omitempty"` +} + +type TestifylintExpectedActual struct { + ExpVarPattern *string `yaml:"pattern,omitempty" toml:"pattern,multiline,omitempty"` +} + +type TestifylintFormatter struct { + CheckFormatString *bool `yaml:"check-format-string,omitempty" toml:"check-format-string,multiline,omitempty"` + RequireFFuncs *bool `yaml:"require-f-funcs,omitempty" toml:"require-f-funcs,multiline,omitempty"` +} + +type TestifylintGoRequire struct { + IgnoreHTTPHandlers *bool `yaml:"ignore-http-handlers,omitempty" toml:"ignore-http-handlers,multiline,omitempty"` +} + +type TestifylintRequireError struct { + FnPattern *string `yaml:"fn-pattern,omitempty" toml:"fn-pattern,multiline,omitempty"` +} + +type TestifylintSuiteExtraAssertCall struct { + Mode *string `yaml:"mode,omitempty" toml:"mode,multiline,omitempty"` +} + +type TestpackageSettings struct { + SkipRegexp *string `yaml:"skip-regexp,omitempty" toml:"skip-regexp,multiline,omitempty"` + AllowPackages []string `yaml:"allow-packages,omitempty" toml:"allow-packages,multiline,omitempty"` +} + +type ThelperSettings struct { + Test ThelperOptions `yaml:"test,omitempty" toml:"test,multiline,omitempty"` + Fuzz ThelperOptions `yaml:"fuzz,omitempty" toml:"fuzz,multiline,omitempty"` + Benchmark ThelperOptions `yaml:"benchmark,omitempty" toml:"benchmark,multiline,omitempty"` + TB ThelperOptions `yaml:"tb,omitempty" toml:"tb,multiline,omitempty"` +} + +type ThelperOptions struct { + First *bool `yaml:"first,omitempty" toml:"first,multiline,omitempty"` + Name *bool `yaml:"name,omitempty" toml:"name,multiline,omitempty"` + Begin *bool `yaml:"begin,omitempty" toml:"begin,multiline,omitempty"` +} + +type UseStdlibVarsSettings struct { + HTTPMethod *bool `yaml:"http-method,omitempty" toml:"http-method,multiline,omitempty"` + HTTPStatusCode *bool `yaml:"http-status-code,omitempty" toml:"http-status-code,multiline,omitempty"` + TimeWeekday *bool `yaml:"time-weekday,omitempty" toml:"time-weekday,multiline,omitempty"` + TimeMonth *bool `yaml:"time-month,omitempty" toml:"time-month,multiline,omitempty"` + TimeLayout *bool `yaml:"time-layout,omitempty" toml:"time-layout,multiline,omitempty"` + CryptoHash *bool `yaml:"crypto-hash,omitempty" toml:"crypto-hash,multiline,omitempty"` + DefaultRPCPath *bool `yaml:"default-rpc-path,omitempty" toml:"default-rpc-path,multiline,omitempty"` + SQLIsolationLevel *bool `yaml:"sql-isolation-level,omitempty" toml:"sql-isolation-level,multiline,omitempty"` + TLSSignatureScheme *bool `yaml:"tls-signature-scheme,omitempty" toml:"tls-signature-scheme,multiline,omitempty"` + ConstantKind *bool `yaml:"constant-kind,omitempty" toml:"constant-kind,multiline,omitempty"` +} + +type UseTestingSettings struct { + ContextBackground *bool `yaml:"context-background,omitempty" toml:"context-background,multiline,omitempty"` + ContextTodo *bool `yaml:"context-todo,omitempty" toml:"context-todo,multiline,omitempty"` + OSChdir *bool `yaml:"os-chdir,omitempty" toml:"os-chdir,multiline,omitempty"` + OSMkdirTemp *bool `yaml:"os-mkdir-temp,omitempty" toml:"os-mkdir-temp,multiline,omitempty"` + OSSetenv *bool `yaml:"os-setenv,omitempty" toml:"os-setenv,multiline,omitempty"` + OSTempDir *bool `yaml:"os-temp-dir,omitempty" toml:"os-temp-dir,multiline,omitempty"` + OSCreateTemp *bool `yaml:"os-create-temp,omitempty" toml:"os-create-temp,multiline,omitempty"` +} + +type UnconvertSettings struct { + FastMath *bool `yaml:"fast-math,omitempty" toml:"fast-math,multiline,omitempty"` + Safe *bool `yaml:"safe,omitempty" toml:"safe,multiline,omitempty"` +} + +type UnparamSettings struct { + CheckExported *bool `yaml:"check-exported,omitempty" toml:"check-exported,multiline,omitempty"` +} + +type UnusedSettings struct { + FieldWritesAreUses *bool `yaml:"field-writes-are-uses,omitempty" toml:"field-writes-are-uses,multiline,omitempty"` + PostStatementsAreReads *bool `yaml:"post-statements-are-reads,omitempty" toml:"post-statements-are-reads,multiline,omitempty"` + ExportedFieldsAreUsed *bool `yaml:"exported-fields-are-used,omitempty" toml:"exported-fields-are-used,multiline,omitempty"` + ParametersAreUsed *bool `yaml:"parameters-are-used,omitempty" toml:"parameters-are-used,multiline,omitempty"` + LocalVariablesAreUsed *bool `yaml:"local-variables-are-used,omitempty" toml:"local-variables-are-used,multiline,omitempty"` + GeneratedIsUsed *bool `yaml:"generated-is-used,omitempty" toml:"generated-is-used,multiline,omitempty"` +} + +type VarnamelenSettings struct { + MaxDistance *int `yaml:"max-distance,omitempty" toml:"max-distance,multiline,omitempty"` + MinNameLength *int `yaml:"min-name-length,omitempty" toml:"min-name-length,multiline,omitempty"` + CheckReceiver *bool `yaml:"check-receiver,omitempty" toml:"check-receiver,multiline,omitempty"` + CheckReturn *bool `yaml:"check-return,omitempty" toml:"check-return,multiline,omitempty"` + CheckTypeParam *bool `yaml:"check-type-param,omitempty" toml:"check-type-param,multiline,omitempty"` + IgnoreNames []string `yaml:"ignore-names,omitempty" toml:"ignore-names,multiline,omitempty"` + IgnoreTypeAssertOk *bool `yaml:"ignore-type-assert-ok,omitempty" toml:"ignore-type-assert-ok,multiline,omitempty"` + IgnoreMapIndexOk *bool `yaml:"ignore-map-index-ok,omitempty" toml:"ignore-map-index-ok,multiline,omitempty"` + IgnoreChanRecvOk *bool `yaml:"ignore-chan-recv-ok,omitempty" toml:"ignore-chan-recv-ok,multiline,omitempty"` + IgnoreDecls []string `yaml:"ignore-decls,omitempty" toml:"ignore-decls,multiline,omitempty"` +} + +type WhitespaceSettings struct { + MultiIf *bool `yaml:"multi-if,omitempty" toml:"multi-if,multiline,omitempty"` + MultiFunc *bool `yaml:"multi-func,omitempty" toml:"multi-func,multiline,omitempty"` +} + +type WrapcheckSettings struct { + ExtraIgnoreSigs []string `yaml:"extra-ignore-sigs,omitempty" toml:"extra-ignore-sigs,multiline,omitempty"` + IgnoreSigs []string `yaml:"ignore-sigs,omitempty" toml:"ignore-sigs,multiline,omitempty"` + IgnoreSigRegexps []string `yaml:"ignore-sig-regexps,omitempty" toml:"ignore-sig-regexps,multiline,omitempty"` + IgnorePackageGlobs []string `yaml:"ignore-package-globs,omitempty" toml:"ignore-package-globs,multiline,omitempty"` + IgnoreInterfaceRegexps []string `yaml:"ignore-interface-regexps,omitempty" toml:"ignore-interface-regexps,multiline,omitempty"` +} + +type WSLSettings struct { + StrictAppend *bool `yaml:"strict-append,omitempty" toml:"strict-append,multiline,omitempty"` + AllowAssignAndCallCuddle *bool `yaml:"allow-assign-and-call,omitempty" toml:"allow-assign-and-call,multiline,omitempty"` + AllowAssignAndAnythingCuddle *bool `yaml:"allow-assign-and-anything,omitempty" toml:"allow-assign-and-anything,multiline,omitempty"` + AllowMultiLineAssignCuddle *bool `yaml:"allow-multiline-assign,omitempty" toml:"allow-multiline-assign,multiline,omitempty"` + ForceCaseTrailingWhitespaceLimit *int `yaml:"force-case-trailing-whitespace,omitempty" toml:"force-case-trailing-whitespace,multiline,omitempty"` + AllowTrailingComment *bool `yaml:"allow-trailing-comment,omitempty" toml:"allow-trailing-comment,multiline,omitempty"` + AllowSeparatedLeadingComment *bool `yaml:"allow-separated-leading-comment,omitempty" toml:"allow-separated-leading-comment,multiline,omitempty"` + AllowCuddleDeclaration *bool `yaml:"allow-cuddle-declarations,omitempty" toml:"allow-cuddle-declarations,multiline,omitempty"` + AllowCuddleWithCalls []string `yaml:"allow-cuddle-with-calls,omitempty" toml:"allow-cuddle-with-calls,multiline,omitempty"` + AllowCuddleWithRHS []string `yaml:"allow-cuddle-with-rhs,omitempty" toml:"allow-cuddle-with-rhs,multiline,omitempty"` + ForceCuddleErrCheckAndAssign *bool `yaml:"force-err-cuddling,omitempty" toml:"force-err-cuddling,multiline,omitempty"` + ErrorVariableNames []string `yaml:"error-variable-names,omitempty" toml:"error-variable-names,multiline,omitempty"` + ForceExclusiveShortDeclarations *bool `yaml:"force-short-decl-cuddling,omitempty" toml:"force-short-decl-cuddling,multiline,omitempty"` +} + +type CustomLinterSettings struct { + Type *string `yaml:"type,omitempty" toml:"type,multiline,omitempty"` + + Path *string `yaml:"path,omitempty" toml:"path,multiline,omitempty"` + + Description *string `yaml:"description,omitempty" toml:"description,multiline,omitempty"` + + OriginalURL *string `yaml:"original-url,omitempty" toml:"original-url,multiline,omitempty"` + + Settings any `yaml:"settings,omitempty" toml:"settings,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/output.go b/pkg/commands/internal/migrate/versiontwo/output.go new file mode 100644 index 000000000000..ed6bab7e375d --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/output.go @@ -0,0 +1,10 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type Output struct { + Formats Formats `yaml:"formats,omitempty" toml:"formats,multiline,omitempty"` + SortOrder []string `yaml:"sort-order,omitempty" toml:"sort-order,multiline,omitempty"` + PathPrefix *string `yaml:"path-prefix,omitempty" toml:"path-prefix,multiline,omitempty"` + ShowStats *bool `yaml:"show-stats,omitempty" toml:"show-stats,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/output_formats.go b/pkg/commands/internal/migrate/versiontwo/output_formats.go new file mode 100644 index 000000000000..dbc5665f78ab --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/output_formats.go @@ -0,0 +1,37 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type Formats struct { + Text Text `yaml:"text,omitempty" toml:"text,multiline,omitempty"` + JSON SimpleFormat `yaml:"json,omitempty" toml:"json,multiline,omitempty"` + Tab Tab `yaml:"tab,omitempty" toml:"tab,multiline,omitempty"` + HTML SimpleFormat `yaml:"html,omitempty" toml:"html,multiline,omitempty"` + Checkstyle SimpleFormat `yaml:"checkstyle,omitempty" toml:"checkstyle,multiline,omitempty"` + CodeClimate SimpleFormat `yaml:"code-climate,omitempty" toml:"code-climate,multiline,omitempty"` + JUnitXML JUnitXML `yaml:"junit-xml,omitempty" toml:"junit-xml,multiline,omitempty"` + TeamCity SimpleFormat `yaml:"teamcity,omitempty" toml:"teamcity,multiline,omitempty"` + Sarif SimpleFormat `yaml:"sarif,omitempty" toml:"sarif,multiline,omitempty"` +} + +type SimpleFormat struct { + Path *string `yaml:"path,omitempty" toml:"path,multiline,omitempty"` +} + +type Text struct { + SimpleFormat `yaml:",inline"` + PrintLinterName *bool `yaml:"print-linter-name,omitempty" toml:"print-linter-name,multiline,omitempty"` + PrintIssuedLine *bool `yaml:"print-issued-lines,omitempty" toml:"print-issued-lines,multiline,omitempty"` + Colors *bool `yaml:"colors,omitempty" toml:"colors,multiline,omitempty"` +} + +type Tab struct { + SimpleFormat `yaml:",inline"` + PrintLinterName *bool `yaml:"print-linter-name,omitempty" toml:"print-linter-name,multiline,omitempty"` + Colors *bool `yaml:"colors,omitempty" toml:"colors,multiline,omitempty"` +} + +type JUnitXML struct { + SimpleFormat `yaml:",inline"` + Extended *bool `yaml:"extended,omitempty" toml:"extended,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/run.go b/pkg/commands/internal/migrate/versiontwo/run.go new file mode 100644 index 000000000000..501d3e9fca23 --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/run.go @@ -0,0 +1,26 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +import ( + "time" +) + +type Run struct { + Timeout time.Duration `yaml:"timeout,omitempty" toml:"timeout,multiline,omitempty"` + + Concurrency *int `yaml:"concurrency,omitempty" toml:"concurrency,multiline,omitempty"` + + Go *string `yaml:"go,omitempty" toml:"go,multiline,omitempty"` + + RelativePathMode *string `yaml:"relative-path-mode,omitempty" toml:"relative-path-mode,multiline,omitempty"` + + BuildTags []string `yaml:"build-tags,omitempty" toml:"build-tags,multiline,omitempty"` + ModulesDownloadMode *string `yaml:"modules-download-mode,omitempty" toml:"modules-download-mode,multiline,omitempty"` + + ExitCodeIfIssuesFound *int `yaml:"issues-exit-code,omitempty" toml:"issues-exit-code,multiline,omitempty"` + AnalyzeTests *bool `yaml:"tests,omitempty" toml:"tests,multiline,omitempty"` + + AllowParallelRunners *bool `yaml:"allow-parallel-runners,omitempty" toml:"allow-parallel-runners,multiline,omitempty"` + AllowSerialRunners *bool `yaml:"allow-serial-runners,omitempty" toml:"allow-serial-runners,multiline,omitempty"` +} diff --git a/pkg/commands/internal/migrate/versiontwo/severity.go b/pkg/commands/internal/migrate/versiontwo/severity.go new file mode 100644 index 000000000000..248ddf1f1825 --- /dev/null +++ b/pkg/commands/internal/migrate/versiontwo/severity.go @@ -0,0 +1,13 @@ +// Code generated by pkg/commands/internal/migrate/cloner/cloner.go. DO NOT EDIT. + +package versiontwo + +type Severity struct { + Default *string `yaml:"default,omitempty" toml:"default,multiline,omitempty"` + Rules []SeverityRule `yaml:"rules,omitempty" toml:"rules,multiline,omitempty"` +} + +type SeverityRule struct { + BaseRule `yaml:",inline"` + Severity *string `yaml:"severity,omitempty" toml:"severity,multiline,omitempty"` +} diff --git a/pkg/commands/migrate.go b/pkg/commands/migrate.go new file mode 100644 index 000000000000..4ccad17acf79 --- /dev/null +++ b/pkg/commands/migrate.go @@ -0,0 +1,220 @@ +package commands + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "strings" + + "github.com/fatih/color" + "github.com/santhosh-tekuri/jsonschema/v6" + "github.com/spf13/cobra" + "github.com/spf13/viper" + + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/fakeloader" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/parser" + "github.com/golangci/golangci-lint/pkg/commands/internal/migrate/versionone" + "github.com/golangci/golangci-lint/pkg/config" + "github.com/golangci/golangci-lint/pkg/exitcodes" + "github.com/golangci/golangci-lint/pkg/logutils" +) + +type migrateOptions struct { + config.LoaderOptions + + format string // Flag only. + skipValidation bool // Flag only. +} +type migrateCommand struct { + viper *viper.Viper + cmd *cobra.Command + + opts migrateOptions + + cfg *versionone.Config + + buildInfo BuildInfo + + log logutils.Log +} + +func newMigrateCommand(log logutils.Log, info BuildInfo) *migrateCommand { + c := &migrateCommand{ + viper: viper.New(), + cfg: versionone.NewConfig(), + buildInfo: info, + log: log, + } + + migrateCmd := &cobra.Command{ + Use: "migrate", + Short: "Migrate configuration file from v1 to v2", + SilenceUsage: true, + SilenceErrors: true, + Args: cobra.NoArgs, + RunE: c.execute, + PreRunE: c.preRunE, + PersistentPreRunE: c.persistentPreRunE, + } + + migrateCmd.SetOut(logutils.StdOut) // use custom output to properly color it in Windows terminals + migrateCmd.SetErr(logutils.StdErr) + + fs := migrateCmd.Flags() + fs.SortFlags = false // sort them as they are defined here + + setupConfigFileFlagSet(fs, &c.opts.LoaderOptions) + + fs.StringVar(&c.opts.format, "format", "", + color.GreenString("Output file format.\nBy default, the format of the input configuration file is used.\n"+ + "It can be 'yml', 'yaml', 'toml', or 'json'.")) + + fs.BoolVar(&c.opts.skipValidation, "skip-validation", false, + color.GreenString("Skip validation of the configuration file against the JSON Schema for v1.")) + + c.cmd = migrateCmd + + return c +} + +func (c *migrateCommand) execute(_ *cobra.Command, _ []string) error { + if c.cfg.Version != "" { + return fmt.Errorf("configuration version is already set: %s", c.cfg.Version) + } + + srcPath := c.viper.ConfigFileUsed() + if srcPath == "" { + c.log.Warnf("No config file detected") + os.Exit(exitcodes.NoConfigFileDetected) + } + + err := c.backupConfigurationFile(srcPath) + if err != nil { + return err + } + + c.log.Warnf("The configuration comments are not migrated.") + + c.log.Infof("Migrating v1 configuration file: %s", srcPath) + + ext := filepath.Ext(srcPath) + + if c.opts.format != "" { + ext = "." + c.opts.format + } + + if !strings.EqualFold(filepath.Ext(srcPath), ext) { + defer func() { + _ = os.RemoveAll(srcPath) + }() + } + + if c.cfg.Run.Timeout != 0 { + c.log.Warnf("The configuration `run.timeout` is ignored. By default, in v2, the timeout is disabled.") + } + + newCfg := migrate.ToConfig(c.cfg) + + dstPath := strings.TrimSuffix(srcPath, filepath.Ext(srcPath)) + ext + + err = saveNewConfiguration(newCfg, dstPath) + if err != nil { + return fmt.Errorf("saving configuration file: %w", err) + } + + c.log.Infof("Migration done: %s", dstPath) + + return nil +} + +func (c *migrateCommand) preRunE(cmd *cobra.Command, _ []string) error { + switch strings.ToLower(c.opts.format) { + case "", "yml", "yaml", "toml", "json": //nolint:goconst // Constants are useless in this context. + // Valid format. + default: + return fmt.Errorf("unsupported format: %s", c.opts.format) + } + + if c.opts.skipValidation { + return nil + } + + usedConfigFile := c.viper.ConfigFileUsed() + if usedConfigFile == "" { + c.log.Warnf("No config file detected") + os.Exit(exitcodes.NoConfigFileDetected) + } + + c.log.Infof("Validating v1 configuration file: %s", usedConfigFile) + + err := validateConfiguration("https://golangci-lint.run/jsonschema/golangci.v1.jsonschema.json", usedConfigFile) + if err != nil { + var v *jsonschema.ValidationError + if !errors.As(err, &v) { + return fmt.Errorf("[%s] validate: %w", usedConfigFile, err) + } + + printValidationDetail(cmd, v.DetailedOutput()) + + return errors.New("the configuration contains invalid elements") + } + + return nil +} + +func (c *migrateCommand) persistentPreRunE(_ *cobra.Command, args []string) error { + c.log.Infof("%s", c.buildInfo.String()) + + loader := config.NewBaseLoader(c.log.Child(logutils.DebugKeyConfigReader), c.viper, c.opts.LoaderOptions, fakeloader.NewConfig(), args) + + // Loads the configuration just to get the effective path of the configuration. + err := loader.Load() + if err != nil { + return fmt.Errorf("can't load config: %w", err) + } + + srcPath := c.viper.ConfigFileUsed() + if srcPath == "" { + c.log.Warnf("No config file detected") + os.Exit(exitcodes.NoConfigFileDetected) + } + + return fakeloader.Load(srcPath, c.cfg) +} + +func (c *migrateCommand) backupConfigurationFile(srcPath string) error { + filename := strings.TrimSuffix(filepath.Base(srcPath), filepath.Ext(srcPath)) + ".bck" + filepath.Ext(srcPath) + dstPath := filepath.Join(filepath.Dir(srcPath), filename) + + c.log.Infof("Saving the v1 configuration to: %s", dstPath) + + stat, err := os.Stat(srcPath) + if err != nil { + return err + } + + data, err := os.ReadFile(srcPath) + if err != nil { + return err + } + + err = os.WriteFile(dstPath, data, stat.Mode()) + if err != nil { + return err + } + + return nil +} + +func saveNewConfiguration(cfg any, dstPath string) error { + dstFile, err := os.Create(dstPath) + if err != nil { + return err + } + + defer func() { _ = dstFile.Close() }() + + return parser.Encode(cfg, dstFile) +} diff --git a/pkg/commands/root.go b/pkg/commands/root.go index 82b224446163..2544738ffea5 100644 --- a/pkg/commands/root.go +++ b/pkg/commands/root.go @@ -61,6 +61,7 @@ func newRootCommand(info BuildInfo) *rootCommand { newLintersCommand(log).cmd, newRunCommand(log, info).cmd, newFmtCommand(log, info).cmd, + newMigrateCommand(log, info).cmd, newCacheCommand().cmd, newConfigCommand(log, info).cmd, newVersionCommand(info).cmd, diff --git a/pkg/config/base_loader.go b/pkg/config/base_loader.go new file mode 100644 index 000000000000..61e07be0019d --- /dev/null +++ b/pkg/config/base_loader.go @@ -0,0 +1,232 @@ +package config + +import ( + "errors" + "fmt" + "os" + "path/filepath" + "slices" + + "github.com/go-viper/mapstructure/v2" + "github.com/mitchellh/go-homedir" + "github.com/spf13/viper" + + "github.com/golangci/golangci-lint/pkg/exitcodes" + "github.com/golangci/golangci-lint/pkg/fsutils" + "github.com/golangci/golangci-lint/pkg/logutils" +) + +type BaseConfig interface { + IsInternalTest() bool + SetConfigDir(dir string) +} + +type BaseLoader struct { + opts LoaderOptions + + viper *viper.Viper + + log logutils.Log + + cfg BaseConfig + args []string +} + +func NewBaseLoader(log logutils.Log, v *viper.Viper, opts LoaderOptions, cfg BaseConfig, args []string) *BaseLoader { + return &BaseLoader{ + opts: opts, + viper: v, + log: log, + cfg: cfg, + args: args, + } +} + +func (l *BaseLoader) Load() error { + err := l.setConfigFile() + if err != nil { + return err + } + + err = l.parseConfig() + if err != nil { + return err + } + + return nil +} + +func (l *BaseLoader) setConfigFile() error { + configFile, err := l.evaluateOptions() + if err != nil { + if errors.Is(err, errConfigDisabled) { + return nil + } + + return fmt.Errorf("can't parse --config option: %w", err) + } + + if configFile != "" { + l.viper.SetConfigFile(configFile) + + // Assume YAML if the file has no extension. + if filepath.Ext(configFile) == "" { + l.viper.SetConfigType("yaml") + } + } else { + l.setupConfigFileSearch() + } + + return nil +} + +func (l *BaseLoader) evaluateOptions() (string, error) { + if l.opts.NoConfig && l.opts.Config != "" { + return "", errors.New("can't combine option --config and --no-config") + } + + if l.opts.NoConfig { + return "", errConfigDisabled + } + + configFile, err := homedir.Expand(l.opts.Config) + if err != nil { + return "", errors.New("failed to expand configuration path") + } + + return configFile, nil +} + +func (l *BaseLoader) setupConfigFileSearch() { + l.viper.SetConfigName(".golangci") + + configSearchPaths := l.getConfigSearchPaths() + + l.log.Infof("Config search paths: %s", configSearchPaths) + + for _, p := range configSearchPaths { + l.viper.AddConfigPath(p) + } +} + +func (l *BaseLoader) getConfigSearchPaths() []string { + firstArg := "./..." + if len(l.args) > 0 { + firstArg = l.args[0] + } + + absPath, err := filepath.Abs(firstArg) + if err != nil { + l.log.Warnf("Can't make abs path for %q: %s", firstArg, err) + absPath = filepath.Clean(firstArg) + } + + // start from it + var currentDir string + if fsutils.IsDir(absPath) { + currentDir = absPath + } else { + currentDir = filepath.Dir(absPath) + } + + // find all dirs from it up to the root + searchPaths := []string{"./"} + + for { + searchPaths = append(searchPaths, currentDir) + + parent := filepath.Dir(currentDir) + if currentDir == parent || parent == "" { + break + } + + currentDir = parent + } + + // find home directory for global config + if home, err := homedir.Dir(); err != nil { + l.log.Warnf("Can't get user's home directory: %v", err) + } else if !slices.Contains(searchPaths, home) { + searchPaths = append(searchPaths, home) + } + + return searchPaths +} + +func (l *BaseLoader) parseConfig() error { + if err := l.viper.ReadInConfig(); err != nil { + var configFileNotFoundError viper.ConfigFileNotFoundError + if errors.As(err, &configFileNotFoundError) { + // Load configuration from flags only. + err = l.viper.Unmarshal(l.cfg, customDecoderHook()) + if err != nil { + return fmt.Errorf("can't unmarshal config by viper (flags): %w", err) + } + + return nil + } + + return fmt.Errorf("can't read viper config: %w", err) + } + + err := l.setConfigDir() + if err != nil { + return err + } + + // Load configuration from all sources (flags, file). + if err := l.viper.Unmarshal(l.cfg, customDecoderHook()); err != nil { + return fmt.Errorf("can't unmarshal config by viper (flags, file): %w", err) + } + + if l.cfg.IsInternalTest() { // just for testing purposes: to detect config file usage + _, _ = fmt.Fprintln(logutils.StdOut, "test") + os.Exit(exitcodes.Success) + } + + return nil +} + +func (l *BaseLoader) setConfigDir() error { + usedConfigFile := l.viper.ConfigFileUsed() + if usedConfigFile == "" { + return nil + } + + if usedConfigFile == os.Stdin.Name() { + usedConfigFile = "" + l.log.Infof("Reading config file stdin") + } else { + var err error + usedConfigFile, err = fsutils.ShortestRelPath(usedConfigFile, "") + if err != nil { + l.log.Warnf("Can't pretty print config file path: %v", err) + } + + l.log.Infof("Used config file %s", usedConfigFile) + } + + usedConfigDir, err := filepath.Abs(filepath.Dir(usedConfigFile)) + if err != nil { + return errors.New("can't get config directory") + } + + l.cfg.SetConfigDir(usedConfigDir) + + return nil +} + +func customDecoderHook() viper.DecoderConfigOption { + return viper.DecodeHook(DecodeHookFunc()) +} + +func DecodeHookFunc() mapstructure.DecodeHookFunc { + return mapstructure.ComposeDecodeHookFunc( + // Default hooks (https://github.com/spf13/viper/blob/518241257478c557633ab36e474dfcaeb9a3c623/viper.go#L135-L138). + mapstructure.StringToTimeDurationHookFunc(), + mapstructure.StringToSliceHookFunc(","), + + // Needed for forbidigo, and output.formats. + mapstructure.TextUnmarshallerHookFunc(), + ) +} diff --git a/pkg/config/config.go b/pkg/config/config.go index 759f9223b4b5..d77dca07fd92 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -46,10 +46,19 @@ func (c *Config) GetConfigDir() string { return c.cfgDir } +// SetConfigDir sets the path to directory that contains golangci-lint config file. +func (c *Config) SetConfigDir(dir string) { + c.cfgDir = dir +} + func (c *Config) GetBasePath() string { return c.basePath } +func (c *Config) IsInternalTest() bool { + return c.InternalTest +} + func (c *Config) Validate() error { validators := []func() error{ c.Run.Validate, @@ -78,11 +87,6 @@ func NewDefault() *Config { } } -type Version struct { - Format string `mapstructure:"format"` - Debug bool `mapstructure:"debug"` -} - func IsGoGreaterThanOrEqual(current, limit string) bool { v1, err := hcversion.NewVersion(strings.TrimPrefix(current, "go")) if err != nil { diff --git a/pkg/config/formatters_settings.go b/pkg/config/formatters_settings.go index 40f0f1dbbdfc..d99354ba3f1e 100644 --- a/pkg/config/formatters_settings.go +++ b/pkg/config/formatters_settings.go @@ -5,8 +5,7 @@ var defaultFormatterSettings = FormatterSettings{ Simplify: true, }, Gci: GciSettings{ - Sections: []string{"standard", "default"}, - SkipGenerated: true, + Sections: []string{"standard", "default"}, }, GoLines: GoLinesSettings{ MaxLen: 100, @@ -28,7 +27,6 @@ type GciSettings struct { Sections []string `mapstructure:"sections"` NoInlineComments bool `mapstructure:"no-inline-comments"` NoPrefixComments bool `mapstructure:"no-prefix-comments"` - SkipGenerated bool `mapstructure:"skip-generated"` CustomOrder bool `mapstructure:"custom-order"` NoLexOrder bool `mapstructure:"no-lex-order"` } diff --git a/pkg/config/linters_settings.go b/pkg/config/linters_settings.go index 7391e4a25dbd..27b67d66da26 100644 --- a/pkg/config/linters_settings.go +++ b/pkg/config/linters_settings.go @@ -200,7 +200,7 @@ type LintersSettings struct { Asasalint AsasalintSettings `mapstructure:"asasalint"` BiDiChk BiDiChkSettings `mapstructure:"bidichk"` CopyLoopVar CopyLoopVarSettings `mapstructure:"copyloopvar"` - Cyclop Cyclop `mapstructure:"cyclop"` + Cyclop CyclopSettings `mapstructure:"cyclop"` Decorder DecorderSettings `mapstructure:"decorder"` Depguard DepGuardSettings `mapstructure:"depguard"` Dogsled DogsledSettings `mapstructure:"dogsled"` @@ -262,7 +262,6 @@ type LintersSettings struct { Staticcheck StaticCheckSettings `mapstructure:"staticcheck"` TagAlign TagAlignSettings `mapstructure:"tagalign"` Tagliatelle TagliatelleSettings `mapstructure:"tagliatelle"` - Tenv TenvSettings `mapstructure:"tenv"` Testifylint TestifylintSettings `mapstructure:"testifylint"` Testpackage TestpackageSettings `mapstructure:"testpackage"` Thelper ThelperSettings `mapstructure:"thelper"` @@ -314,7 +313,7 @@ type CopyLoopVarSettings struct { CheckAlias bool `mapstructure:"check-alias"` } -type Cyclop struct { +type CyclopSettings struct { MaxComplexity int `mapstructure:"max-complexity"` PackageAverage float64 `mapstructure:"package-average"` } @@ -505,21 +504,29 @@ type GoModDirectivesSettings struct { } type GoModGuardSettings struct { - Allowed struct { - Modules []string `mapstructure:"modules"` - Domains []string `mapstructure:"domains"` - } `mapstructure:"allowed"` - Blocked struct { - Modules []map[string]struct { - Recommendations []string `mapstructure:"recommendations"` - Reason string `mapstructure:"reason"` - } `mapstructure:"modules"` - Versions []map[string]struct { - Version string `mapstructure:"version"` - Reason string `mapstructure:"reason"` - } `mapstructure:"versions"` - LocalReplaceDirectives bool `mapstructure:"local-replace-directives"` - } `mapstructure:"blocked"` + Allowed GoModGuardAllowed `mapstructure:"allowed"` + Blocked GoModGuardBlocked `mapstructure:"blocked"` +} + +type GoModGuardAllowed struct { + Modules []string `mapstructure:"modules"` + Domains []string `mapstructure:"domains"` +} + +type GoModGuardBlocked struct { + Modules []map[string]GoModGuardModule `mapstructure:"modules"` + Versions []map[string]GoModGuardVersion `mapstructure:"versions"` + LocalReplaceDirectives bool `mapstructure:"local-replace-directives"` +} + +type GoModGuardModule struct { + Recommendations []string `mapstructure:"recommendations"` + Reason string `mapstructure:"reason"` +} + +type GoModGuardVersion struct { + Version string `mapstructure:"version"` + Reason string `mapstructure:"reason"` } type GoSecSettings struct { @@ -545,7 +552,7 @@ type GovetSettings struct { EnableAll bool `mapstructure:"enable-all"` DisableAll bool `mapstructure:"disable-all"` - Settings map[string]map[string]any + Settings map[string]map[string]any `mapstructure:"settings"` } func (cfg *GovetSettings) Validate() error { @@ -638,11 +645,13 @@ type MisspellExtraWords struct { } type MustTagSettings struct { - Functions []struct { - Name string `mapstructure:"name"` - Tag string `mapstructure:"tag"` - ArgPos int `mapstructure:"arg-pos"` - } `mapstructure:"functions"` + Functions []MustTagFunction `mapstructure:"functions"` +} + +type MustTagFunction struct { + Name string `mapstructure:"name"` + Tag string `mapstructure:"tag"` + ArgPos int `mapstructure:"arg-pos"` } type NakedretSettings struct { @@ -703,7 +712,7 @@ type PerfSprintSettings struct { } type PreallocSettings struct { - Simple bool + Simple bool `mapstructure:"simple"` RangeLoops bool `mapstructure:"range-loops"` ForLoops bool `mapstructure:"for-loops"` } @@ -735,24 +744,28 @@ type RecvcheckSettings struct { } type ReviveSettings struct { - Go string `mapstructure:"-"` - MaxOpenFiles int `mapstructure:"max-open-files"` - Confidence float64 `mapstructure:"confidence"` - Severity string `mapstructure:"severity"` - EnableAllRules bool `mapstructure:"enable-all-rules"` - Rules []struct { - Name string `mapstructure:"name"` - Arguments []any `mapstructure:"arguments"` - Severity string `mapstructure:"severity"` - Disabled bool `mapstructure:"disabled"` - Exclude []string `mapstructure:"exclude"` - } `mapstructure:"rules"` - ErrorCode int `mapstructure:"error-code"` - WarningCode int `mapstructure:"warning-code"` - Directives []struct { - Name string `mapstructure:"name"` - Severity string `mapstructure:"severity"` - } `mapstructure:"directives"` + Go string `mapstructure:"-"` + MaxOpenFiles int `mapstructure:"max-open-files"` + Confidence float64 `mapstructure:"confidence"` + Severity string `mapstructure:"severity"` + EnableAllRules bool `mapstructure:"enable-all-rules"` + Rules []ReviveRule `mapstructure:"rules"` + ErrorCode int `mapstructure:"error-code"` + WarningCode int `mapstructure:"warning-code"` + Directives []ReviveDirective `mapstructure:"directives"` +} + +type ReviveRule struct { + Name string `mapstructure:"name"` + Arguments []any `mapstructure:"arguments"` + Severity string `mapstructure:"severity"` + Disabled bool `mapstructure:"disabled"` + Exclude []string `mapstructure:"exclude"` +} + +type ReviveDirective struct { + Name string `mapstructure:"name"` + Severity string `mapstructure:"severity"` } type RowsErrCheckSettings struct { @@ -830,30 +843,37 @@ type TestifylintSettings struct { EnabledCheckers []string `mapstructure:"enable"` DisabledCheckers []string `mapstructure:"disable"` - BoolCompare struct { - IgnoreCustomTypes bool `mapstructure:"ignore-custom-types"` - } `mapstructure:"bool-compare"` + BoolCompare TestifylintBoolCompare `mapstructure:"bool-compare"` + ExpectedActual TestifylintExpectedActual `mapstructure:"expected-actual"` + Formatter TestifylintFormatter `mapstructure:"formatter"` + GoRequire TestifylintGoRequire `mapstructure:"go-require"` + RequireError TestifylintRequireError `mapstructure:"require-error"` + SuiteExtraAssertCall TestifylintSuiteExtraAssertCall `mapstructure:"suite-extra-assert-call"` +} + +type TestifylintBoolCompare struct { + IgnoreCustomTypes bool `mapstructure:"ignore-custom-types"` +} - ExpectedActual struct { - ExpVarPattern string `mapstructure:"pattern"` - } `mapstructure:"expected-actual"` +type TestifylintExpectedActual struct { + ExpVarPattern string `mapstructure:"pattern"` +} - Formatter struct { - CheckFormatString *bool `mapstructure:"check-format-string"` - RequireFFuncs bool `mapstructure:"require-f-funcs"` - } `mapstructure:"formatter"` +type TestifylintFormatter struct { + CheckFormatString *bool `mapstructure:"check-format-string"` + RequireFFuncs bool `mapstructure:"require-f-funcs"` +} - GoRequire struct { - IgnoreHTTPHandlers bool `mapstructure:"ignore-http-handlers"` - } `mapstructure:"go-require"` +type TestifylintGoRequire struct { + IgnoreHTTPHandlers bool `mapstructure:"ignore-http-handlers"` +} - RequireError struct { - FnPattern string `mapstructure:"fn-pattern"` - } `mapstructure:"require-error"` +type TestifylintRequireError struct { + FnPattern string `mapstructure:"fn-pattern"` +} - SuiteExtraAssertCall struct { - Mode string `mapstructure:"mode"` - } `mapstructure:"suite-extra-assert-call"` +type TestifylintSuiteExtraAssertCall struct { + Mode string `mapstructure:"mode"` } type TestpackageSettings struct { @@ -874,10 +894,6 @@ type ThelperOptions struct { Begin *bool `mapstructure:"begin"` } -type TenvSettings struct { - All bool `mapstructure:"all"` -} - type UseStdlibVarsSettings struct { HTTPMethod bool `mapstructure:"http-method"` HTTPStatusCode bool `mapstructure:"http-status-code"` diff --git a/pkg/config/loader.go b/pkg/config/loader.go index da64a3af36a3..be2549802be1 100644 --- a/pkg/config/loader.go +++ b/pkg/config/loader.go @@ -5,15 +5,11 @@ import ( "errors" "fmt" "os" - "path/filepath" "slices" - "github.com/go-viper/mapstructure/v2" - "github.com/mitchellh/go-homedir" "github.com/spf13/pflag" "github.com/spf13/viper" - "github.com/golangci/golangci-lint/pkg/exitcodes" "github.com/golangci/golangci-lint/pkg/fsutils" "github.com/golangci/golangci-lint/pkg/goutil" "github.com/golangci/golangci-lint/pkg/logutils" @@ -32,25 +28,18 @@ type LoadOptions struct { } type Loader struct { - opts LoaderOptions + *BaseLoader - viper *viper.Viper - fs *pflag.FlagSet + fs *pflag.FlagSet - log logutils.Log - - cfg *Config - args []string + cfg *Config } func NewLoader(log logutils.Log, v *viper.Viper, fs *pflag.FlagSet, opts LoaderOptions, cfg *Config, args []string) *Loader { return &Loader{ - opts: opts, - viper: v, - fs: fs, - log: log, - cfg: cfg, - args: args, + BaseLoader: NewBaseLoader(log, v, opts, cfg, args), + fs: fs, + cfg: cfg, } } @@ -109,166 +98,6 @@ func (l *Loader) Load(opts LoadOptions) error { return nil } -func (l *Loader) setConfigFile() error { - configFile, err := l.evaluateOptions() - if err != nil { - if errors.Is(err, errConfigDisabled) { - return nil - } - - return fmt.Errorf("can't parse --config option: %w", err) - } - - if configFile != "" { - l.viper.SetConfigFile(configFile) - - // Assume YAML if the file has no extension. - if filepath.Ext(configFile) == "" { - l.viper.SetConfigType("yaml") - } - } else { - l.setupConfigFileSearch() - } - - return nil -} - -func (l *Loader) evaluateOptions() (string, error) { - if l.opts.NoConfig && l.opts.Config != "" { - return "", errors.New("can't combine option --config and --no-config") - } - - if l.opts.NoConfig { - return "", errConfigDisabled - } - - configFile, err := homedir.Expand(l.opts.Config) - if err != nil { - return "", errors.New("failed to expand configuration path") - } - - return configFile, nil -} - -func (l *Loader) setupConfigFileSearch() { - l.viper.SetConfigName(".golangci") - - configSearchPaths := l.getConfigSearchPaths() - - l.log.Infof("Config search paths: %s", configSearchPaths) - - for _, p := range configSearchPaths { - l.viper.AddConfigPath(p) - } -} - -func (l *Loader) getConfigSearchPaths() []string { - firstArg := "./..." - if len(l.args) > 0 { - firstArg = l.args[0] - } - - absPath, err := filepath.Abs(firstArg) - if err != nil { - l.log.Warnf("Can't make abs path for %q: %s", firstArg, err) - absPath = filepath.Clean(firstArg) - } - - // start from it - var currentDir string - if fsutils.IsDir(absPath) { - currentDir = absPath - } else { - currentDir = filepath.Dir(absPath) - } - - // find all dirs from it up to the root - searchPaths := []string{"./"} - - for { - searchPaths = append(searchPaths, currentDir) - - parent := filepath.Dir(currentDir) - if currentDir == parent || parent == "" { - break - } - - currentDir = parent - } - - // find home directory for global config - if home, err := homedir.Dir(); err != nil { - l.log.Warnf("Can't get user's home directory: %v", err) - } else if !slices.Contains(searchPaths, home) { - searchPaths = append(searchPaths, home) - } - - return searchPaths -} - -func (l *Loader) parseConfig() error { - if err := l.viper.ReadInConfig(); err != nil { - var configFileNotFoundError viper.ConfigFileNotFoundError - if errors.As(err, &configFileNotFoundError) { - // Load configuration from flags only. - err = l.viper.Unmarshal(l.cfg, customDecoderHook()) - if err != nil { - return fmt.Errorf("can't unmarshal config by viper (flags): %w", err) - } - - return nil - } - - return fmt.Errorf("can't read viper config: %w", err) - } - - err := l.setConfigDir() - if err != nil { - return err - } - - // Load configuration from all sources (flags, file). - if err := l.viper.Unmarshal(l.cfg, customDecoderHook()); err != nil { - return fmt.Errorf("can't unmarshal config by viper (flags, file): %w", err) - } - - if l.cfg.InternalTest { // just for testing purposes: to detect config file usage - _, _ = fmt.Fprintln(logutils.StdOut, "test") - os.Exit(exitcodes.Success) - } - - return nil -} - -func (l *Loader) setConfigDir() error { - usedConfigFile := l.viper.ConfigFileUsed() - if usedConfigFile == "" { - return nil - } - - if usedConfigFile == os.Stdin.Name() { - usedConfigFile = "" - l.log.Infof("Reading config file stdin") - } else { - var err error - usedConfigFile, err = fsutils.ShortestRelPath(usedConfigFile, "") - if err != nil { - l.log.Warnf("Can't pretty print config file path: %v", err) - } - - l.log.Infof("Used config file %s", usedConfigFile) - } - - usedConfigDir, err := filepath.Abs(filepath.Dir(usedConfigFile)) - if err != nil { - return errors.New("can't get config directory") - } - - l.cfg.cfgDir = usedConfigDir - - return nil -} - // Hack to append values from StringSlice flags. // Viper always overrides StringSlice values. // https://github.com/spf13/viper/issues/1448 @@ -389,14 +218,3 @@ func (l *Loader) handleFormatterExclusions() { func (*Loader) handleFormatterDeprecations() { // The function is empty but deprecations will happen in the future. } - -func customDecoderHook() viper.DecoderConfigOption { - return viper.DecodeHook(mapstructure.ComposeDecodeHookFunc( - // Default hooks (https://github.com/spf13/viper/blob/518241257478c557633ab36e474dfcaeb9a3c623/viper.go#L135-L138). - mapstructure.StringToTimeDurationHookFunc(), - mapstructure.StringToSliceHookFunc(","), - - // Needed for forbidigo, and output.formats. - mapstructure.TextUnmarshallerHookFunc(), - )) -} diff --git a/pkg/goformatters/gci/internal/config/config.go b/pkg/goformatters/gci/internal/config/config.go index 8140d96bf8c1..9acbce3a006b 100644 --- a/pkg/goformatters/gci/internal/config/config.go +++ b/pkg/goformatters/gci/internal/config/config.go @@ -8,6 +8,7 @@ import ( "github.com/daixiang0/gci/pkg/config" "github.com/daixiang0/gci/pkg/section" + sectioni "github.com/golangci/golangci-lint/pkg/goformatters/gci/internal/section" ) diff --git a/pkg/golinters/cyclop/cyclop.go b/pkg/golinters/cyclop/cyclop.go index 3f46860c30cd..d405cb7b8760 100644 --- a/pkg/golinters/cyclop/cyclop.go +++ b/pkg/golinters/cyclop/cyclop.go @@ -8,7 +8,7 @@ import ( "github.com/golangci/golangci-lint/pkg/goanalysis" ) -func New(settings *config.Cyclop) *goanalysis.Linter { +func New(settings *config.CyclopSettings) *goanalysis.Linter { a := analyzer.NewAnalyzer() var cfg map[string]map[string]any