blob: f023e0f76a04ddb2bc4fe8a64bf6613081e32850 [file] [log] [blame]
---
# 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: []