--- # Reference: https://golangci-lint.run/usage/configuration/ run: timeout: 5m # modules-download-mode: vendor # Include test files. tests: true skip-dirs: [] skip-files: [] output: # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number". format: colored-line-number print-issued-lines: true print-linter-name: true # Linter specific settings. See below in the `linter.enable` section for details on what each linter is doing. linters-settings: dogsled: # Checks assignments with too many blank identifiers. Default is 2. max-blank-identifiers: 2 dupl: # Tokens count to trigger issue. threshold: 150 errcheck: # Report about not checking of errors in type assertions: `a := b.(MyStruct)`. # Enabled as this is often overlooked by developers. check-type-assertions: true # Report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`. # Disabled as we consider that if the developer did type `_`, it was on purpose. # Note that while this isn't enforced by the linter, each and every case of ignored error should # be accompanied with a comment explaining why that error is being discarded. check-blank: false exhaustive: # Indicates that switch statements are to be considered exhaustive if a # 'default' case is present, even if all enum members aren't listed in the # switch. default-signifies-exhaustive: false funlen: # funlen checks the number of lines/statements in a function. # While is is always best to keep functions short for readability, maintainability and testing, # the default are a bit too strict (60 lines / 40 statements), increase it to be more flexible. lines: 160 statements: 70 # NOTE: We don't set `gci` for import order as it supports only one prefix. Use `goimports.local-prefixes` instead. gocognit: # Minimal code complexity to report, defaults to 30 in gocognit, defaults 10 in golangci. # Use 15 as it allows for some flexibility while preventing too much complexity. # NOTE: Similar to gocyclo. min-complexity: 35 nestif: # Minimal complexity of if statements to report. min-complexity: 8 goconst: # Minimal length of string constant. min-len: 4 # Minimal occurrences count to trigger. # Increase the default from 3 to 5 as small number of const usage can reduce readability instead of improving it. min-occurrences: 5 gocritic: # Which checks should be disabled; can't be combined with 'enabled-checks'. # See https://go-critic.github.io/overview#checks-overview # To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run` disabled-checks: - hugeParam # Very strict check on the size of variables being copied. Too strict for most developer. # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks. # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags". enabled-tags: - diagnostic - style - opinionated - performance settings: rangeValCopy: sizeThreshold: 1024 # Increase the allowed copied bytes in range. cyclop: max-complexity: 35 gocyclo: # Similar check as gocognit. # NOTE: We might be able to remove this linter as it is redundant with gocyclo. It is in golangci-lint, so we keep it for now. min-complexity: 35 godot: # Check all top-level comments, not only declarations. check-all: true gofmt: # simplify code: gofmt with `-s` option. simplify: true # NOTE: the goheader settings are set per-project. goimports: # Put imports beginning with prefix after 3rd-party packages. # It's a comma-separated list of prefixes. local-prefixes: "github.com/creack/pty" golint: # Minimal confidence for issues, default is 0.8. min-confidence: 0.8 gosimple: # Select the Go version to target. The default is '1.13'. go: "1.18" # https://staticcheck.io/docs/options#checks checks: ["all"] gosec: govet: # Enable all available checks from go vet. enable-all: false # Report about shadowed variables. check-shadowing: true # NOTE: depguard is disabled as it is very slow and made redundant by gomodguard. lll: # Make sure everyone is on the same level, fix the tab width to go's default. tab-width: 8 # Increase the default max line length to give more flexibility. Forcing newlines can reduce readability instead of improving it. line-length: 180 misspell: locale: US ignore-words: nakedret: # Make an issue if func has more lines of code than this setting and it has naked returns; default is 30. # NOTE: Consider setting this to 1 to prevent naked returns. max-func-lines: 30 nolintlint: # Prevent ununsed directive to avoid stale comments. allow-unused: false # Require an explanation of nonzero length after each nolint directive. require-explanation: true # Exclude following linters from requiring an explanation. # NOTE: It is strongly discouraged to put anything in there. allow-no-explanation: [] # Enable to require nolint directives to mention the specific linter being suppressed. This ensurce the developer understand the reason being the error. require-specific: true prealloc: # NOTE: For most programs usage of prealloc will be a premature optimization. # Keep thing simple, pre-alloc what is obvious and profile the program for more complex scenarios. # simple: true # Checkonly on simple loops that have no returns/breaks/continues/gotos in them. range-loops: true # Check range loops, true by default for-loops: false # Check suggestions on for loops, false by default rowserrcheck: packages: [] staticcheck: # Select the Go version to target. The default is '1.13'. go: "1.18" # https://staticcheck.io/docs/options#checks checks: ["all"] stylecheck: # Select the Go version to target. The default is '1.13'. go: "1.18" # https://staticcheck.io/docs/options#checks checks: ["all"] # "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022"] tagliatelle: # Check the struck tag name case. case: # Use the struct field name to check the name of the struct tag. use-field-name: false rules: # Any struct tag type can be used. # support string case: `camel`, `pascal`, `kebab`, `snake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower` json: snake firestore: camel yaml: camel xml: camel bson: camel avro: snake mapstructure: kebab envconfig: upper unparam: # Don't create an error if an exported code have static params being used. It is often expected in libraries. # NOTE: It would be nice if this linter would differentiate between a main package and a lib. check-exported: true unused: {} whitespace: multi-if: false # Enforces newlines (or comments) after every multi-line if statement multi-func: false # Enforces newlines (or comments) after every multi-line function signature # Run `golangci-lint help linters` to get the full list of linter with their description. linters: disable-all: true # NOTE: enable-all is deprecated because too many people don't pin versions... # We still require explicit documentation on why some linters are disabled. # disable: # - depguard # Go linter that checks if package imports are in a list of acceptable packages [fast: true, auto-fix: false] # - exhaustivestruct # Checks if all struct's fields are initialized [fast: true, auto-fix: false] # - forbidigo # Forbids identifiers [fast: true, auto-fix: false] # - gci # Gci control golang package import order and make it always deterministic. [fast: true, auto-fix: true] # - godox # Tool for detection of FIXME, TODO and other comment keywords [fast: true, auto-fix: false] # - goerr113 # Golang linter to check the errors handling expressions [fast: true, auto-fix: false] # - golint # Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes [fast: false, auto-fix: false] # - gomnd # An analyzer to detect magic numbers. [fast: true, auto-fix: false] # - gomoddirectives # Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod. [fast: true, auto-fix: false] # - interfacer # Linter that suggests narrower interface types [fast: false, auto-fix: false] # - maligned # Tool to detect Go structs that would take less memory if their fields were sorted [fast: false, auto-fix: false] # - nlreturn # nlreturn checks for a new line before return and branch statements to increase code clarity [fast: true, auto-fix: false] # - scopelint # Scopelint checks for unpinned variables in go programs [fast: true, auto-fix: false] # - wrapcheck # Checks that errors returned from external packages are wrapped [fast: false, auto-fix: false] # - wsl # Whitespace Linter - Forces you to use empty lines! [fast: true, auto-fix: false] # disable-reasons: # - depguard # Checks whitelisted/blacklisted import path, but runs way too slow. Not that useful. # - exhaustivestruct # Good concept, but not mature enough (errors on not assignable fields like locks) and too noisy when using AWS SDK as most fields are unused. # - forbidigo # Great idea, but too strict out of the box. Probably will re-enable soon. # - gci # Conflicts with goimports/gofumpt. # - godox # Don't fail when finding TODO, FIXME, etc. # - goerr113 # Too many false positives. # - golint # Deprecated (since v1.41.0) due to: The repository of the linter has been archived by the owner. Replaced by revive. # - gomnd # Checks for magic numbers. Disabled due to too many false positives not configurable (03/01/2020 v1.23.7). # - gomoddirectives # Doesn't support //nolint to whitelist. # - interfacer # Deprecated (since v1.38.0) due to: The repository of the linter has been archived by the owner. # - maligned # Deprecated (since v1.38.0) due to: The repository of the linter has been archived by the owner. Replaced by govet 'fieldalignment'. # - nlreturn # Actually reduces readability in most cases. # - scopelint # Deprecated (since v1.39.0) due to: The repository of the linter has been deprecated by the owner. Replaced by exportloopref. # - wrapcheck # Good concept, but always warns for http coded errors. Need to re-enable and whitelist our error package. # - wsl # Forces to add newlines around blocks. Lots of false positives, not that useful. enable: - asciicheck # Simple linter to check that your code does not contain non-ASCII identifiers [fast: true, auto-fix: false] - bodyclose # checks whether HTTP response body is closed successfully [fast: false, auto-fix: false] - cyclop # checks function and package cyclomatic complexity [fast: false, auto-fix: false] - dogsled # Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f()) [fast: true, auto-fix: false] - dupl # Tool for code clone detection [fast: true, auto-fix: false] - durationcheck # check for two durations multiplied together [fast: false, auto-fix: false] - errcheck # Errcheck is a program for checking for unchecked errors in go programs. These unchecked errors can be critical bugs in some cases [fast: false, auto-fix: false] - errname # Checks that sentinel errors are prefixed with the `Err` and error types are suffixed with the `Error`. [fast: false, auto-fix: false] - errorlint # go-errorlint is a source code linter for Go software that can be used to find code that will cause problems with the error wrapping scheme introduced in Go 1.13. [fast: false, auto-fix: false] - exhaustive # check exhaustiveness of enum switch statements [fast: false, auto-fix: false] - exportloopref # checks for pointers to enclosing loop variables [fast: false, auto-fix: false] - forcetypeassert # finds forced type assertions [fast: true, auto-fix: false] - funlen # Tool for detection of long functions [fast: true, auto-fix: false] - gochecknoglobals # check that no global variables exist [fast: true, auto-fix: false] - gochecknoinits # Checks that no init functions are present in Go code [fast: true, auto-fix: false] - gocognit # Computes and checks the cognitive complexity of functions [fast: true, auto-fix: false] - goconst # Finds repeated strings that could be replaced by a constant [fast: true, auto-fix: false] - gocritic # Provides many diagnostics that check for bugs, performance and style issues. [fast: false, auto-fix: false] - gocyclo # Computes and checks the cyclomatic complexity of functions [fast: true, auto-fix: false] - godot # Check if comments end in a period [fast: true, auto-fix: true] - gofmt # Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification [fast: true, auto-fix: true] - gofumpt # Gofumpt checks whether code was gofumpt-ed. [fast: true, auto-fix: true] - goheader # Checks is file header matches to pattern [fast: true, auto-fix: false] - goimports # Goimports does everything that gofmt does. Additionally it checks unused imports [fast: true, auto-fix: true] - gomodguard # 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. [fast: true, auto-fix: false] - goprintffuncname # Checks that printf-like functions are named with `f` at the end [fast: true, auto-fix: false] - gosec # (gas): Inspects source code for security problems [fast: false, auto-fix: false] - gosimple # (megacheck): Linter for Go source code that specializes in simplifying a code [fast: false, auto-fix: false] - govet # (vet, vetshadow): Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string [fast: false, auto-fix: false] - importas # Enforces consistent import aliases [fast: false, auto-fix: false] - ineffassign # Detects when assignments to existing variables are not used [fast: true, auto-fix: false] - lll # Reports long lines [fast: true, auto-fix: false] - makezero # Finds slice declarations with non-zero initial length [fast: false, auto-fix: false] - misspell # Finds commonly misspelled English words in comments [fast: true, auto-fix: true] - nakedret # Finds naked returns in functions greater than a specified function length [fast: true, auto-fix: false] - nestif # Reports deeply nested if statements [fast: true, auto-fix: false] - nilerr # Finds the code that returns nil even if it checks that the error is not nil. [fast: false, auto-fix: false] - noctx # noctx finds sending http request without context.Context [fast: false, auto-fix: false] - nolintlint # Reports ill-formed or insufficient nolint directives [fast: true, auto-fix: false] - paralleltest # paralleltest detects missing usage of t.Parallel() method in your Go test [fast: true, auto-fix: false] - prealloc # Finds slice declarations that could potentially be preallocated [fast: true, auto-fix: false] - predeclared # find code that shadows one of Go's predeclared identifiers [fast: true, auto-fix: false] - promlinter # Check Prometheus metrics naming via promlint [fast: true, auto-fix: false] - revive # Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint. [fast: false, auto-fix: false] # Disabled due to generic. Work in progress upstream. # - rowserrcheck # checks whether Err of rows is checked successfully [fast: false, auto-fix: false] # Disabled due to generic. Work in progress upstream. # - sqlclosecheck # Checks that sql.Rows and sql.Stmt are closed. [fast: false, auto-fix: false] - staticcheck # (megacheck): Staticcheck is a go vet on steroids, applying a ton of static analysis checks [fast: false, auto-fix: false] - stylecheck # Stylecheck is a replacement for golint [fast: false, auto-fix: false] # Disabled due to generic. Work in progress upstream. # - tagliatelle # Checks the struct tags. [fast: true, auto-fix: false] # - testpackage # linter that makes you use a separate _test package [fast: true, auto-fix: false] - thelper # thelper detects golang test helpers without t.Helper() call and checks the consistency of test helpers [fast: false, auto-fix: false] - tparallel # tparallel detects inappropriate usage of t.Parallel() method in your Go test codes [fast: false, auto-fix: false] - typecheck # Like the front-end of a Go compiler, parses and type-checks Go code [fast: false, auto-fix: false] - unconvert # Remove unnecessary type conversions [fast: false, auto-fix: false] - unparam # Reports unused function parameters [fast: false, auto-fix: false] # Disabled due to way too many false positive in go1.20. # - unused # (megacheck): Checks Go code for unused constants, variables, functions and types [fast: false, auto-fix: false] # Disabled due to generic. Work in progress upstream. # - wastedassign # wastedassign finds wasted assignment statements. [fast: false, auto-fix: false] - whitespace # Tool for detection of leading and trailing whitespace [fast: true, auto-fix: true] issues: exclude: # Allow shadowing of 'err'. - 'shadow: declaration of "err" shadows declaration' # Allow shadowing of `ctx`. - 'shadow: declaration of "ctx" shadows declaration' # Maximum issues count per one linter. Set to 0 to disable. Default is 50. max-per-linter: 10 # Disable default excludes. Always be explicit on what we exclude. exclude-use-default: false # Exclude some linters from running on tests files. exclude-rules: []