[ { "name": "asasalint", "desc": "check for pass []any as any in variadic func(...any)", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/alingse/asasalint", "internal": false, "isSlow": true, "since": "1.47.0" }, { "name": "asciicheck", "desc": "checks that all code identifiers does not have non-ASCII symbols in the name", "loadMode": 7, "inPresets": [ "bugs", "style" ], "originalURL": "https://github.com/tdakkota/asciicheck", "internal": false, "isSlow": false, "since": "v1.26.0" }, { "name": "bidichk", "desc": "Checks for dangerous unicode character sequences", "loadMode": 7, "inPresets": [ "bugs" ], "originalURL": "https://github.com/breml/bidichk", "internal": false, "isSlow": false, "since": "1.43.0" }, { "name": "bodyclose", "desc": "checks whether HTTP response body is closed successfully", "loadMode": 575, "inPresets": [ "performance", "bugs" ], "originalURL": "https://github.com/timakin/bodyclose", "internal": false, "isSlow": true, "since": "v1.18.0" }, { "name": "containedctx", "desc": "containedctx is a linter that detects struct contained context.Context field", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/sivchari/containedctx", "internal": false, "isSlow": true, "since": "1.44.0" }, { "name": "contextcheck", "desc": "check whether the function uses a non-inherited context", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/kkHAIKE/contextcheck", "internal": false, "isSlow": true, "since": "v1.43.0" }, { "name": "copyloopvar", "desc": "copyloopvar is a linter detects places where loop variables are copied", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/karamaru-alpha/copyloopvar", "internal": false, "isSlow": false, "since": "v1.57.0" }, { "name": "cyclop", "desc": "checks function and package cyclomatic complexity", "loadMode": 575, "inPresets": [ "complexity" ], "originalURL": "https://github.com/bkielbasa/cyclop", "internal": false, "isSlow": true, "since": "v1.37.0" }, { "name": "decorder", "desc": "check declaration order and count of types, constants, variables and functions", "loadMode": 7, "inPresets": [ "format", "style" ], "originalURL": "https://gitlab.com/bosi/decorder", "internal": false, "isSlow": false, "since": "v1.44.0" }, { "name": "deadcode", "desc": "Deprecated", "loadMode": 575, "inPresets": [ "unused" ], "originalURL": "https://github.com/remyoudompheng/go-misc/tree/master/deadcode", "internal": false, "isSlow": true, "since": "v1.0.0", "deprecation": { "since": "v1.49.0", "message": "The owner seems to have abandoned the linter.", "replacement": "unused" } }, { "name": "depguard", "desc": "Go linter that checks if package imports are in a list of acceptable packages", "loadMode": 7, "inPresets": [ "style", "import", "module" ], "originalURL": "https://github.com/OpenPeeDeeP/depguard", "internal": false, "isSlow": false, "since": "v1.4.0" }, { "name": "dogsled", "desc": "Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f())", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/alexkohler/dogsled", "internal": false, "isSlow": false, "since": "v1.19.0" }, { "name": "dupl", "desc": "Tool for code clone detection", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/mibk/dupl", "internal": false, "isSlow": false, "since": "v1.0.0" }, { "name": "dupword", "desc": "checks for duplicate words in the source code", "loadMode": 7, "inPresets": [ "comment" ], "originalURL": "https://github.com/Abirdcfly/dupword", "internal": false, "isSlow": false, "since": "1.50.0" }, { "name": "durationcheck", "desc": "check for two durations multiplied together", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/charithe/durationcheck", "internal": false, "isSlow": true, "since": "v1.37.0" }, { "name": "errcheck", "desc": "errcheck is a program for checking for unchecked errors in Go code. These unchecked errors can be critical bugs in some cases", "enabledByDefault": true, "loadMode": 575, "inPresets": [ "bugs", "error" ], "originalURL": "https://github.com/kisielk/errcheck", "internal": false, "isSlow": true, "since": "v1.0.0" }, { "name": "errchkjson", "desc": "Checks types passed to the json encoding functions. Reports unsupported types and reports occations, where the check for the returned error can be omitted.", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/breml/errchkjson", "internal": false, "isSlow": true, "since": "1.44.0" }, { "name": "errname", "desc": "Checks that sentinel errors are prefixed with the `Err` and error types are suffixed with the `Error`.", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/Antonboom/errname", "internal": false, "isSlow": true, "since": "v1.42.0" }, { "name": "errorlint", "desc": "errorlint is a linter for that can be used to find code that will cause problems with the error wrapping scheme introduced in Go 1.13.", "loadMode": 575, "inPresets": [ "bugs", "error" ], "originalURL": "https://github.com/polyfloyd/go-errorlint", "internal": false, "isSlow": true, "since": "v1.32.0" }, { "name": "execinquery", "desc": "execinquery is a linter about query string checker in Query function which reads your Go src files and warning it finds", "loadMode": 575, "inPresets": [ "sql" ], "originalURL": "https://github.com/lufeee/execinquery", "internal": false, "isSlow": true, "since": "v1.46.0" }, { "name": "exhaustive", "desc": "check exhaustiveness of enum switch statements", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/nishanths/exhaustive", "internal": false, "isSlow": true, "since": " v1.28.0" }, { "name": "exhaustivestruct", "desc": "Deprecated", "loadMode": 575, "inPresets": [ "style", "test" ], "originalURL": "https://github.com/mbilski/exhaustivestruct", "internal": false, "isSlow": true, "since": "v1.32.0", "deprecation": { "since": "v1.46.0", "message": "The repository of the linter has been deprecated by the owner.", "replacement": "exhaustruct" } }, { "name": "exhaustruct", "desc": "Checks if all structure fields are initialized", "loadMode": 575, "inPresets": [ "style", "test" ], "originalURL": "https://github.com/GaijinEntertainment/go-exhaustruct", "internal": false, "isSlow": true, "since": "v1.46.0" }, { "name": "exportloopref", "desc": "checks for pointers to enclosing loop variables", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/kyoh86/exportloopref", "internal": false, "isSlow": true, "since": "v1.28.0" }, { "name": "forbidigo", "desc": "Forbids identifiers", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/ashanbrown/forbidigo", "internal": false, "isSlow": true, "since": "v1.34.0" }, { "name": "forcetypeassert", "desc": "finds forced type assertions", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/gostaticanalysis/forcetypeassert", "internal": false, "isSlow": false, "since": "v1.38.0" }, { "name": "funlen", "desc": "Tool for detection of long functions", "loadMode": 7, "inPresets": [ "complexity" ], "originalURL": "https://github.com/ultraware/funlen", "internal": false, "isSlow": false, "since": "v1.18.0" }, { "name": "gci", "desc": "Gci controls Go package import order and makes it always deterministic.", "loadMode": 7, "inPresets": [ "format", "import" ], "originalURL": "https://github.com/daixiang0/gci", "internal": false, "isSlow": false, "since": "v1.30.0" }, { "name": "ginkgolinter", "desc": "enforces standards of using ginkgo and gomega", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/nunnatsa/ginkgolinter", "internal": false, "isSlow": true, "since": "v1.51.0" }, { "name": "gocheckcompilerdirectives", "desc": "Checks that go compiler directive comments (//go:) are valid.", "loadMode": 7, "inPresets": [ "bugs" ], "originalURL": "https://github.com/leighmcculloch/gocheckcompilerdirectives", "internal": false, "isSlow": false, "since": "v1.51.0" }, { "name": "gochecknoglobals", "desc": "Check that no global variables exist.", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/leighmcculloch/gochecknoglobals", "internal": false, "isSlow": true, "since": "v1.12.0" }, { "name": "gochecknoinits", "desc": "Checks that no init functions are present in Go code", "loadMode": 7, "inPresets": [ "style" ], "internal": false, "isSlow": false, "since": "v1.12.0" }, { "name": "gochecksumtype", "desc": "Run exhaustiveness checks on Go \"sum types\"", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/alecthomas/go-check-sumtype", "internal": false, "isSlow": true, "since": "v1.55.0" }, { "name": "gocognit", "desc": "Computes and checks the cognitive complexity of functions", "loadMode": 7, "inPresets": [ "complexity" ], "originalURL": "https://github.com/uudashr/gocognit", "internal": false, "isSlow": false, "since": "v1.20.0" }, { "name": "goconst", "desc": "Finds repeated strings that could be replaced by a constant", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/jgautheron/goconst", "internal": false, "isSlow": false, "since": "v1.0.0" }, { "name": "gocritic", "desc": "Provides diagnostics that check for bugs, performance and style issues.\nExtensible without recompilation through dynamic rules.\nDynamic rules are written declaratively with AST patterns, filters, report message and optional suggestion.", "loadMode": 575, "inPresets": [ "style", "metalinter" ], "originalURL": "https://github.com/go-critic/go-critic", "internal": false, "isSlow": true, "since": "v1.12.0" }, { "name": "gocyclo", "desc": "Computes and checks the cyclomatic complexity of functions", "loadMode": 7, "inPresets": [ "complexity" ], "originalURL": "https://github.com/fzipp/gocyclo", "internal": false, "isSlow": false, "since": "v1.0.0" }, { "name": "godot", "desc": "Check if comments end in a period", "loadMode": 7, "inPresets": [ "style", "comment" ], "originalURL": "https://github.com/tetafro/godot", "internal": false, "canAutoFix": true, "isSlow": false, "since": "v1.25.0" }, { "name": "godox", "desc": "Tool for detection of FIXME, TODO and other comment keywords", "loadMode": 7, "inPresets": [ "style", "comment" ], "originalURL": "https://github.com/matoous/godox", "internal": false, "isSlow": false, "since": "v1.19.0" }, { "name": "goerr113", "desc": "Go linter to check the errors handling expressions", "loadMode": 575, "inPresets": [ "style", "error" ], "originalURL": "https://github.com/Djarvur/go-err113", "internal": false, "isSlow": true, "since": "v1.26.0" }, { "name": "gofmt", "desc": "Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification", "loadMode": 7, "inPresets": [ "format" ], "originalURL": "https://pkg.go.dev/cmd/gofmt", "internal": false, "canAutoFix": true, "isSlow": false, "since": "v1.0.0" }, { "name": "gofumpt", "desc": "Gofumpt checks whether code was gofumpt-ed.", "loadMode": 7, "inPresets": [ "format" ], "originalURL": "https://github.com/mvdan/gofumpt", "internal": false, "canAutoFix": true, "isSlow": false, "since": "v1.28.0" }, { "name": "goheader", "desc": "Checks is file header matches to pattern", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/denis-tingaikin/go-header", "internal": false, "isSlow": false, "since": "v1.28.0" }, { "name": "goimports", "desc": "Check import statements are formatted according to the 'goimport' command. Reformat imports in autofix mode.", "loadMode": 7, "inPresets": [ "format", "import" ], "originalURL": "https://pkg.go.dev/golang.org/x/tools/cmd/goimports", "internal": false, "canAutoFix": true, "isSlow": false, "since": "v1.20.0" }, { "name": "golint", "desc": "Deprecated", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/golang/lint", "internal": false, "isSlow": true, "since": "v1.0.0", "deprecation": { "since": "v1.41.0", "message": "The repository of the linter has been archived by the owner.", "replacement": "revive" } }, { "name": "gomnd", "desc": "An analyzer to detect magic numbers.", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/tommy-muehle/go-mnd", "internal": false, "isSlow": false, "since": "v1.22.0" }, { "name": "gomoddirectives", "desc": "Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod.", "loadMode": 7, "inPresets": [ "style", "module" ], "originalURL": "https://github.com/ldez/gomoddirectives", "internal": false, "isSlow": false, "since": "v1.39.0" }, { "name": "gomodguard", "desc": "Allow and block list linter for direct Go module dependencies. This is different from depguard where there are different block types for example version constraints and module recommendations.", "loadMode": 7, "inPresets": [ "style", "import", "module" ], "originalURL": "https://github.com/ryancurrah/gomodguard", "internal": false, "isSlow": false, "since": "v1.25.0" }, { "name": "goprintffuncname", "desc": "Checks that printf-like functions are named with `f` at the end.", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/jirfag/go-printf-func-name", "internal": false, "isSlow": false, "since": "v1.23.0" }, { "name": "gosec", "desc": "Inspects source code for security problems", "loadMode": 575, "inPresets": [ "bugs" ], "alternativeNames": [ "gas" ], "originalURL": "https://github.com/securego/gosec", "internal": false, "isSlow": true, "since": "v1.0.0" }, { "name": "gosimple", "desc": "Linter for Go source code that specializes in simplifying code", "enabledByDefault": true, "loadMode": 575, "inPresets": [ "style" ], "alternativeNames": [ "megacheck" ], "originalURL": "https://github.com/dominikh/go-tools/tree/master/simple", "internal": false, "isSlow": true, "since": "v1.20.0" }, { "name": "gosmopolitan", "desc": "Report certain i18n/l10n anti-patterns in your Go codebase", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/xen0n/gosmopolitan", "internal": false, "isSlow": true, "since": "v1.53.0" }, { "name": "govet", "desc": "Vet examines Go source code and reports suspicious constructs. It is roughly the same as 'go vet' and uses its passes.", "enabledByDefault": true, "loadMode": 575, "inPresets": [ "bugs", "metalinter" ], "alternativeNames": [ "vet", "vetshadow" ], "originalURL": "https://pkg.go.dev/cmd/vet", "internal": false, "isSlow": true, "since": "v1.0.0" }, { "name": "grouper", "desc": "Analyze expression groups.", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/leonklingele/grouper", "internal": false, "isSlow": false, "since": "v1.44.0" }, { "name": "ifshort", "desc": "Deprecated", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/esimonov/ifshort", "internal": false, "isSlow": false, "since": "v1.36.0", "deprecation": { "since": "v1.48.0", "message": "The repository of the linter has been deprecated by the owner." } }, { "name": "importas", "desc": "Enforces consistent import aliases", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/julz/importas", "internal": false, "isSlow": true, "since": "v1.38.0" }, { "name": "inamedparam", "desc": "reports interfaces with unnamed method parameters", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/macabu/inamedparam", "internal": false, "isSlow": false, "since": "v1.55.0" }, { "name": "ineffassign", "desc": "Detects when assignments to existing variables are not used", "enabledByDefault": true, "loadMode": 7, "inPresets": [ "unused" ], "originalURL": "https://github.com/gordonklaus/ineffassign", "internal": false, "isSlow": false, "since": "v1.0.0" }, { "name": "interfacebloat", "desc": "A linter that checks the number of methods inside an interface.", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/sashamelentyev/interfacebloat", "internal": false, "isSlow": false, "since": "v1.49.0" }, { "name": "interfacer", "desc": "Deprecated", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/mvdan/interfacer", "internal": false, "isSlow": true, "since": "v1.0.0", "deprecation": { "since": "v1.38.0", "message": "The repository of the linter has been archived by the owner." } }, { "name": "intrange", "desc": "intrange is a linter to find places where for loops could make use of an integer range.", "loadMode": 7, "originalURL": "https://github.com/ckaznocha/intrange", "internal": false, "isSlow": false, "since": "v1.57.0" }, { "name": "ireturn", "desc": "Accept Interfaces, Return Concrete Types", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/butuzov/ireturn", "internal": false, "isSlow": true, "since": "v1.43.0" }, { "name": "lll", "desc": "Reports long lines", "loadMode": 7, "inPresets": [ "style" ], "internal": false, "isSlow": false, "since": "v1.8.0" }, { "name": "loggercheck", "desc": "Checks key value pairs for common logger libraries (kitlog,klog,logr,zap).", "loadMode": 575, "inPresets": [ "style", "bugs" ], "alternativeNames": [ "logrlint" ], "originalURL": "https://github.com/timonwong/loggercheck", "internal": false, "isSlow": true, "since": "v1.49.0" }, { "name": "maintidx", "desc": "maintidx measures the maintainability index of each function.", "loadMode": 7, "inPresets": [ "complexity" ], "originalURL": "https://github.com/yagipy/maintidx", "internal": false, "isSlow": false, "since": "v1.44.0" }, { "name": "makezero", "desc": "Finds slice declarations with non-zero initial length", "loadMode": 575, "inPresets": [ "style", "bugs" ], "originalURL": "https://github.com/ashanbrown/makezero", "internal": false, "isSlow": true, "since": "v1.34.0" }, { "name": "maligned", "desc": "Deprecated", "loadMode": 575, "inPresets": [ "performance" ], "originalURL": "https://github.com/mdempsky/maligned", "internal": false, "isSlow": true, "since": "v1.0.0", "deprecation": { "since": "v1.38.0", "message": "The repository of the linter has been archived by the owner.", "replacement": "govet 'fieldalignment'" } }, { "name": "mirror", "desc": "reports wrong mirror patterns of bytes/strings usage", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/butuzov/mirror", "internal": false, "isSlow": true, "since": "v1.53.0" }, { "name": "misspell", "desc": "Finds commonly misspelled English words", "loadMode": 7, "inPresets": [ "style", "comment" ], "originalURL": "https://github.com/client9/misspell", "internal": false, "canAutoFix": true, "isSlow": false, "since": "v1.8.0" }, { "name": "musttag", "desc": "enforce field tags in (un)marshaled structs", "loadMode": 575, "inPresets": [ "style", "bugs" ], "originalURL": "https://github.com/go-simpler/musttag", "internal": false, "isSlow": true, "since": "v1.51.0" }, { "name": "nakedret", "desc": "Checks that functions with naked returns are not longer than a maximum size (can be zero).", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/alexkohler/nakedret", "internal": false, "isSlow": false, "since": "v1.19.0" }, { "name": "nestif", "desc": "Reports deeply nested if statements", "loadMode": 7, "inPresets": [ "complexity" ], "originalURL": "https://github.com/nakabonne/nestif", "internal": false, "isSlow": false, "since": "v1.25.0" }, { "name": "nilerr", "desc": "Finds the code that returns nil even if it checks that the error is not nil.", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/gostaticanalysis/nilerr", "internal": false, "isSlow": true, "since": "v1.38.0" }, { "name": "nilnil", "desc": "Checks that there is no simultaneous return of `nil` error and an invalid value.", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/Antonboom/nilnil", "internal": false, "isSlow": true, "since": "v1.43.0" }, { "name": "nlreturn", "desc": "nlreturn checks for a new line before return and branch statements to increase code clarity", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/ssgreg/nlreturn", "internal": false, "isSlow": false, "since": "v1.30.0" }, { "name": "noctx", "desc": "Finds sending http request without context.Context", "loadMode": 575, "inPresets": [ "performance", "bugs" ], "originalURL": "https://github.com/sonatard/noctx", "internal": false, "isSlow": true, "since": "v1.28.0" }, { "name": "nonamedreturns", "desc": "Reports all named returns", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/firefart/nonamedreturns", "internal": false, "isSlow": true, "since": "v1.46.0" }, { "name": "nosnakecase", "desc": "Deprecated", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/sivchari/nosnakecase", "internal": false, "isSlow": false, "since": "v1.47.0", "deprecation": { "since": "v1.48.1", "message": "The repository of the linter has been deprecated by the owner.", "replacement": "revive 'var-naming'" } }, { "name": "nosprintfhostport", "desc": "Checks for misuse of Sprintf to construct a host with port in a URL.", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/stbenjam/no-sprintf-host-port", "internal": false, "isSlow": false, "since": "v1.46.0" }, { "name": "paralleltest", "desc": "Detects missing usage of t.Parallel() method in your Go test", "loadMode": 575, "inPresets": [ "style", "test" ], "originalURL": "https://github.com/kunwardeep/paralleltest", "internal": false, "isSlow": true, "since": "v1.33.0" }, { "name": "perfsprint", "desc": "Checks that fmt.Sprintf can be replaced with a faster alternative.", "loadMode": 575, "inPresets": [ "performance" ], "originalURL": "https://github.com/catenacyber/perfsprint", "internal": false, "isSlow": true, "since": "v1.55.0" }, { "name": "prealloc", "desc": "Finds slice declarations that could potentially be pre-allocated", "loadMode": 7, "inPresets": [ "performance" ], "originalURL": "https://github.com/alexkohler/prealloc", "internal": false, "isSlow": false, "since": "v1.19.0" }, { "name": "predeclared", "desc": "find code that shadows one of Go's predeclared identifiers", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/nishanths/predeclared", "internal": false, "isSlow": false, "since": "v1.35.0" }, { "name": "promlinter", "desc": "Check Prometheus metrics naming via promlint", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/yeya24/promlinter", "internal": false, "isSlow": false, "since": "v1.40.0" }, { "name": "protogetter", "desc": "Reports direct reads from proto message fields when getters should be used", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/ghostiam/protogetter", "internal": false, "canAutoFix": true, "isSlow": true, "since": "v1.55.0" }, { "name": "reassign", "desc": "Checks that package variables are not reassigned", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/curioswitch/go-reassign", "internal": false, "isSlow": true, "since": "1.49.0" }, { "name": "revive", "desc": "Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint.", "loadMode": 7, "inPresets": [ "style", "metalinter" ], "originalURL": "https://github.com/mgechev/revive", "internal": false, "isSlow": true, "since": "v1.37.0" }, { "name": "rowserrcheck", "desc": "checks whether Rows.Err of rows is checked successfully", "loadMode": 575, "inPresets": [ "bugs", "sql" ], "originalURL": "https://github.com/jingyugao/rowserrcheck", "internal": false, "isSlow": true, "since": "v1.23.0" }, { "name": "sloglint", "desc": "ensure consistent code style when using log/slog", "loadMode": 575, "inPresets": [ "style", "format" ], "originalURL": "https://github.com/go-simpler/sloglint", "internal": false, "isSlow": true, "since": "v1.55.0" }, { "name": "scopelint", "desc": "Deprecated", "loadMode": 7, "inPresets": [ "bugs" ], "originalURL": "https://github.com/kyoh86/scopelint", "internal": false, "isSlow": false, "since": "v1.12.0", "deprecation": { "since": "v1.39.0", "message": "The repository of the linter has been deprecated by the owner.", "replacement": "exportloopref" } }, { "name": "sqlclosecheck", "desc": "Checks that sql.Rows, sql.Stmt, sqlx.NamedStmt, pgx.Query are closed.", "loadMode": 575, "inPresets": [ "bugs", "sql" ], "originalURL": "https://github.com/ryanrolds/sqlclosecheck", "internal": false, "isSlow": true, "since": "v1.28.0" }, { "name": "spancheck", "desc": "Checks for mistakes with OpenTelemetry/Census spans.", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/jjti/go-spancheck", "internal": false, "isSlow": true, "since": "v1.56.0" }, { "name": "staticcheck", "desc": "It's a set of rules from staticcheck. It's not the same thing as the staticcheck binary. The author of staticcheck doesn't support or approve the use of staticcheck as a library inside golangci-lint.", "enabledByDefault": true, "loadMode": 575, "inPresets": [ "bugs", "metalinter" ], "alternativeNames": [ "megacheck" ], "originalURL": "https://staticcheck.io/", "internal": false, "isSlow": true, "since": "v1.0.0" }, { "name": "structcheck", "desc": "Deprecated", "loadMode": 575, "inPresets": [ "unused" ], "originalURL": "https://github.com/opennota/check", "internal": false, "isSlow": true, "since": "v1.0.0", "deprecation": { "since": "v1.49.0", "message": "The owner seems to have abandoned the linter.", "replacement": "unused" } }, { "name": "stylecheck", "desc": "Stylecheck is a replacement for golint", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/dominikh/go-tools/tree/master/stylecheck", "internal": false, "isSlow": true, "since": "v1.20.0" }, { "name": "tagalign", "desc": "check that struct tags are well aligned", "loadMode": 7, "inPresets": [ "style", "format" ], "originalURL": "https://github.com/4meepo/tagalign", "internal": false, "canAutoFix": true, "isSlow": false, "since": "v1.53.0" }, { "name": "tagliatelle", "desc": "Checks the struct tags.", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/ldez/tagliatelle", "internal": false, "isSlow": false, "since": "v1.40.0" }, { "name": "tenv", "desc": "tenv is analyzer that detects using os.Setenv instead of t.Setenv since Go1.17", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/sivchari/tenv", "internal": false, "isSlow": true, "since": "v1.43.0" }, { "name": "testableexamples", "desc": "linter checks if examples are testable (have an expected output)", "loadMode": 7, "inPresets": [ "test" ], "originalURL": "https://github.com/maratori/testableexamples", "internal": false, "isSlow": false, "since": "v1.50.0" }, { "name": "testifylint", "desc": "Checks usage of github.com/stretchr/testify.", "loadMode": 575, "inPresets": [ "test", "bugs" ], "originalURL": "https://github.com/Antonboom/testifylint", "internal": false, "isSlow": true, "since": "v1.55.0" }, { "name": "testpackage", "desc": "linter that makes you use a separate _test package", "loadMode": 7, "inPresets": [ "style", "test" ], "originalURL": "https://github.com/maratori/testpackage", "internal": false, "isSlow": false, "since": "v1.25.0" }, { "name": "thelper", "desc": "thelper detects tests helpers which is not start with t.Helper() method.", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/kulti/thelper", "internal": false, "isSlow": true, "since": "v1.34.0" }, { "name": "tparallel", "desc": "tparallel detects inappropriate usage of t.Parallel() method in your Go test codes.", "loadMode": 575, "inPresets": [ "style", "test" ], "originalURL": "https://github.com/moricho/tparallel", "internal": false, "isSlow": true, "since": "v1.32.0" }, { "name": "typecheck", "desc": "Like the front-end of a Go compiler, parses and type-checks Go code", "enabledByDefault": true, "loadMode": 575, "inPresets": [ "bugs" ], "internal": true, "isSlow": true, "since": "v1.3.0" }, { "name": "unconvert", "desc": "Remove unnecessary type conversions", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/mdempsky/unconvert", "internal": false, "isSlow": true, "since": "v1.0.0" }, { "name": "unparam", "desc": "Reports unused function parameters", "loadMode": 575, "inPresets": [ "unused" ], "originalURL": "https://github.com/mvdan/unparam", "internal": false, "isSlow": true, "since": "v1.9.0" }, { "name": "unused", "desc": "Checks Go code for unused constants, variables, functions and types", "enabledByDefault": true, "loadMode": 575, "inPresets": [ "unused" ], "alternativeNames": [ "megacheck" ], "originalURL": "https://github.com/dominikh/go-tools/tree/master/unused", "internal": false, "isSlow": true, "doesChangeTypes": true, "since": "v1.20.0" }, { "name": "usestdlibvars", "desc": "A linter that detect the possibility to use variables/constants from the Go standard library.", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/sashamelentyev/usestdlibvars", "internal": false, "isSlow": false, "since": "v1.48.0" }, { "name": "varcheck", "desc": "Deprecated", "loadMode": 575, "inPresets": [ "unused" ], "originalURL": "https://github.com/opennota/check", "internal": false, "isSlow": true, "since": "v1.0.0", "deprecation": { "since": "v1.49.0", "message": "The owner seems to have abandoned the linter.", "replacement": "unused" } }, { "name": "varnamelen", "desc": "checks that the length of a variable's name matches its scope", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/blizzy78/varnamelen", "internal": false, "isSlow": true, "since": "v1.43.0" }, { "name": "wastedassign", "desc": "Finds wasted assignment statements", "loadMode": 575, "inPresets": [ "style" ], "originalURL": "https://github.com/sanposhiho/wastedassign", "internal": false, "isSlow": true, "since": "v1.38.0" }, { "name": "whitespace", "desc": "Whitespace is a linter that checks for unnecessary newlines at the start and end of functions, if, for, etc.", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/ultraware/whitespace", "internal": false, "canAutoFix": true, "isSlow": false, "since": "v1.19.0" }, { "name": "wrapcheck", "desc": "Checks that errors returned from external packages are wrapped", "loadMode": 575, "inPresets": [ "style", "error" ], "originalURL": "https://github.com/tomarrell/wrapcheck", "internal": false, "isSlow": true, "since": "v1.32.0" }, { "name": "wsl", "desc": "add or remove empty lines", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/bombsimon/wsl", "internal": false, "isSlow": false, "since": "v1.20.0" }, { "name": "zerologlint", "desc": "Detects the wrong usage of `zerolog` that a user forgets to dispatch with `Send` or `Msg`", "loadMode": 575, "inPresets": [ "bugs" ], "originalURL": "https://github.com/ykadowak/zerologlint", "internal": false, "isSlow": true, "since": "v1.53.0" }, { "name": "nolintlint", "desc": "Reports ill-formed or insufficient nolint directives", "loadMode": 7, "inPresets": [ "style" ], "originalURL": "https://github.com/golangci/golangci-lint/blob/master/pkg/golinters/nolintlint/README.md", "internal": false, "isSlow": false, "since": "v1.26.0" } ]