Skip to content

Instantly share code, notes, and snippets.

@cristaloleg
Last active July 15, 2022 17:03
Show Gist options
  • Save cristaloleg/dc29ca0ef2fb554de28d94c3c6f6dc88 to your computer and use it in GitHub Desktop.
Save cristaloleg/dc29ca0ef2fb554de28d94c3c6f6dc88 to your computer and use it in GitHub Desktop.
An opinionated golangci-lint config (right version™)
# $ golangci-lint run --config=~/.golangci.yml ./... > lint.txt
run:
# default concurrency is a available CPU number
concurrency: 4
# timeout for analysis, e.g. 30s, 5m, default is 1m
timeout: 10m
# exit code when at least one issue was found, default is 1
issues-exit-code: 1
# include test files or not, default is true
tests: true
# list of build tags, all linters use it. Default is empty list.
# build-tags:
# - mytag
# which dirs to skip: issues from them won't be reported;
# can use regexp here: generated.*, regexp is applied on full path;
# default value is empty list, but default dirs are skipped independently
# from this option's value (see skip-dirs-use-default).
# "/" will be replaced by current OS file path separator to properly work
# on Windows.
# skip-dirs:
# - src/external_libs
# - autogenerated_by_my_lib
# default is true. Enables skipping of directories:
# vendor$, third_party$, testdata$, examples$, Godeps$, builtin$
skip-dirs-use-default: true
# which files to skip: they will be analyzed, but issues from them
# won't be reported. Default value is empty list, but there is
# no need to include all autogenerated files, we confidently recognize
# autogenerated files. If it's not please let us know.
# "/" will be replaced by current OS file path separator to properly work
# on Windows.
# skip-files:
# - ".*\\.my\\.go$"
# - lib/bad.go
# by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules":
# If invoked with -mod=readonly, the go command is disallowed from the implicit
# automatic updating of go.mod described above. Instead, it fails when any changes
# to go.mod are needed. This setting is most useful to check that go.mod does
# not need updates, such as in a continuous integration and testing system.
# If invoked with -mod=vendor, the go command assumes that the vendor
# directory holds the correct copies of dependencies and ignores
# the dependency descriptions in go.mod.
# modules-download-mode: readonly|vendor|mod
# Allow multiple parallel golangci-lint instances running.
# If false (default) - golangci-lint acquires file lock on start.
allow-parallel-runners: false
linters:
enable:
# Enabled by default linters:
- deadcode # : Finds unused code [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]
- 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]
- ineffassign # : Detects when assignments to existing variables are not used [fast: true, auto-fix: false]
- staticcheck # (megacheck): Staticcheck is a go vet on steroids, applying a ton of static analysis checks [fast: false, auto-fix: false]
- structcheck # : Finds unused struct fields [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]
- unused # (megacheck): Checks Go code for unused constants, variables, functions and types [fast: false, auto-fix: false]
- varcheck # : Finds unused global variables and constants [fast: false, auto-fix: false]
# Disabled by default linters:
- 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]
- contextcheck #: check the function whether use a non-inherited context [fast: false, auto-fix: false]
- durationcheck # : check for two durations multiplied together [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]
- 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]
- 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]
- goimports # : In addition to fixing imports, goimports also formats your code in the same style as gofmt. [fast: true, auto-fix: true]
- 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]
- gosec # (gas): Inspects source code for security problems [fast: false, auto-fix: false]
- importas # : Enforces consistent import aliases [fast: false, auto-fix: false]
- interfacer # : Linter that suggests narrower interface types [fast: false, 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]
- 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]
- rowserrcheck # : checks whether Err of rows is checked successfully [fast: false, auto-fix: false]
- sqlclosecheck # : Checks that sql.Rows and sql.Stmt are closed. [fast: false, auto-fix: false]
- stylecheck # : Stylecheck is a replacement for golint [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]
- wastedassign # : wastedassign finds wasted assignment statements. [fast: false, auto-fix: false]
disable:
# Disabled by default linters:
- cyclop # : checks function and package cyclomatic complexity [fast: false, auto-fix: false]
- depguard # : Go linter that checks if package imports are in a list of acceptable packages [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]
- errname # : Checks that sentinel errors are prefixed with the `Err` and error types are suffixed with the `Error`. [fast: false, auto-fix: false]
- errorlint # : 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. [fast: false, auto-fix: false]
- exhaustivestruct # : Checks if all struct's fields are initialized [fast: false, auto-fix: false]
- forbidigo # : Forbids identifiers [fast: true, auto-fix: false]
- funlen # : Tool for detection of long functions [fast: true, auto-fix: false]
- gci # : Gci control golang package import order and make it always deterministic. [fast: true, auto-fix: true]
- 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]
- gocyclo # : Computes and checks the cyclomatic complexity of functions [fast: true, auto-fix: false]
- 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: false, auto-fix: false]
- goheader # : Checks is file header matches to pattern [fast: true, auto-fix: false]
- gomoddirectives # : Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod. [fast: true, auto-fix: false]
- 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]
- ifshort # : Checks that your code uses short syntax for if-statements whenever possible [fast: true, auto-fix: false]
- lll # : Reports long lines [fast: true, 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]
- paralleltest # : paralleltest detects missing usage of t.Parallel() method in your Go test [fast: true, auto-fix: false]
- scopelint # : Scopelint checks for unpinned variables in go programs [fast: true, auto-fix: false]
- tagliatelle # : Checks the struct tags. [fast: true, auto-fix: false]
- tenv #: tenv is analyzer that detects using os.Setenv instead of t.Setenv since Go1.17 [fast: false, 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]
- varnamelen #: checks that the length of a variable's name matches its scope [fast: false, auto-fix: false]
- whitespace # : Tool for detection of leading and trailing whitespace [fast: true, auto-fix: true]
- 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]
# output configuration options
output:
# colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions
# default is "colored-line-number"
format: line-number
# print lines of code with issue, default is true
print-issued-lines: false
# print linter name in the end of issue text, default is true
print-linter-name: true
# make issues output unique by line, default is true
# uniq-by-line: true
# add a prefix to the output file references; default is no prefix
# path-prefix: ""
# sorts results by: filepath, line and column
sort-results: false
# all available settings of specific linters
linters-settings:
gocritic:
# 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
- experimental
- opinionated
- performance
- style
@cristaloleg
Copy link
Author

Ah, ok

  • interfacer <...> archived by the owner. - but still works!
  • golint <...> archived by the owner. - but still works!
  • scopelint <...> archived by the owner. Replaced by exportloopref. - still works but can be replaced, thanks.

(Have updated the file)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment