# https://golangci-lint.run/usage/configuration/ # https://github.com/golangci/golangci-lint/blob/master/pkg/config/linters_settings.go --- run: timeout: 1m issues-exit-code: 1 tests: true skip-dirs: [] skip-dirs-use-default: true skip-files: [] allow-parallel-runners: true output: format: colored-line-number print-issued-lines: true print-linter-name: true uniq-by-line: true sort-results: true linters-settings: depguard: list-type: blacklist include-go-root: false dupl: threshold: 150 errcheck: check-type-assertions: true check-blank: true # exclude: .errcheckignore errorlint: errorf: true asserts: true comparison: true funlen: lines: 100 statements: 60 gocognit: min-complexity: 30 goconst: min-len: 3 min-occurrences: 3 gocritic: enabled-tags: - diagnostic - experimental - opinionated - performance - style disabled-checks: - commentedOutCode - redundantSprint - whyNoLint settings: hugeParam: sizeThreshold: 80 rangeExprCopy: sizeThreshold: 512 rangeValCopy: sizeThreshold: 128 gocyclo: min-complexity: 30 godot: scope: declarations capital: false gofmt: simplify: true gofumpt: extra-rules: true goheader: values: const: AUTHOR: Go Language Server regexp: YEAR: '20\d\d' template: |- SPDX-FileCopyrightText: {{ YEAR }} The {{ AUTHOR }} Authors SPDX-License-Identifier: BSD-3-Clause goimports: local-prefixes: go.lsp.dev/protocol gosimple: go: 1.16 govet: enable-all: true check-shadowing: true disable: - fieldalignment importas: alias: [] no-unaliased: true lll: line-length: 120 tab-width: 1 misspell: locale: US ignore-words: - cancelled - cancelling nakedret: max-func-lines: 30 nestif: min-complexity: 4 prealloc: simple: true range-loops: true for-loops: true staticcheck: go: 1.16 testpackage: skip-regexp: '.*(export)_test\.go' unparam: check-exported: true algo: cha unused: go: 1.16 whitespace: multi-if: true multi-func: true linters: fast: false disabled: - exhaustivestruct # Checks if all struct's fields are initialized - forbidigo # Forbids identifiers - forcetypeassert # finds forced type assertions - gci # Gci control golang package import order and make it always deterministic. - gochecknoglobals # check that no global variables exist - gochecknoinits # Checks that no init functions are present in Go code - goconst # Finds repeated strings that could be replaced by a constant - godox # Tool for detection of FIXME, TODO and other comment keywords - goerr113 # Golang linter to check the errors handling expressions - golint # Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes - gomnd # An analyzer to detect magic numbers. - gomoddirectives # Manage the use of 'replace', 'retract', and 'excludes' directives in go.mod. - gomodguard # Allow and block list linter for direct Go module dependencies. - interfacer # Linter that suggests narrower interface types - lll # Reports long lines - maligned # Tool to detect Go structs that would take less memory if their fields were sorted - promlinter # Check Prometheus metrics naming via promlint - scopelint # Scopelint checks for unpinned variables in go programs - sqlclosecheck # Checks that sql.Rows and sql.Stmt are closed. - testpackage # TODO(zchee): enable: # linter that makes you use a separate _test package - tparallel # tparallel detects inappropriate usage of t.Parallel() method in your Go test codes - wrapcheck # TODO(zchee): enable: # Checks that errors returned from external packages are wrapped - wsl # Whitespace Linter enable: - asciicheck # Simple linter to check that your code does not contain non-ASCII identifiers - bodyclose # checks whether HTTP response body is closed successfully - cyclop # checks function and package cyclomatic complexity - deadcode # Finds unused code - depguard # Go linter that checks if package imports are in a list of acceptable packages - dogsled # Checks assignments with too many blank identifiers (e.g. x, _, _, _, := f()) - dupl # Tool for code clone detection - durationcheck # check for two durations multiplied together - errcheck # Errcheck is a program for checking for unchecked errors in go programs. These unchecked errors can be critical bugs in some cases - 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. - exhaustive # check exhaustiveness of enum switch statements - exportloopref # checks for pointers to enclosing loop variables - funlen # Tool for detection of long functions - gocognit # Computes and checks the cognitive complexity of functions - gocritic # Provides many diagnostics that check for bugs, performance and style issues. - gocyclo # Computes and checks the cyclomatic complexity of functions - godot # Check if comments end in a period - gofmt # Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification - gofumpt # Gofumpt checks whether code was gofumpt-ed. - goheader # Checks is file header matches to pattern - goimports # Goimports does everything that gofmt does. Additionally it checks unused imports - goprintffuncname # Checks that printf-like functions are named with `f` at the end - gosec # Inspects source code for security problems - gosimple # Linter for Go source code that specializes in simplifying a code - govet # Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string - ifshort # Checks that your code uses short syntax for if-statements whenever possible - importas # Enforces consistent import aliases - ineffassign # Detects when assignments to existing variables are not used - makezero # Finds slice declarations with non-zero initial length - misspell # Finds commonly misspelled English words in comments - nakedret # Finds naked returns in functions greater than a specified function length - nestif # Reports deeply nested if statements - nilerr # Finds the code that returns nil even if it checks that the error is not nil. - nlreturn # nlreturn checks for a new line before return and branch statements to increase code clarity - noctx # noctx finds sending http request without context.Context - nolintlint # Reports ill-formed or insufficient nolint directives - paralleltest # paralleltest detects missing usage of t.Parallel() method in your Go test - prealloc # Finds slice declarations that could potentially be preallocated - predeclared # find code that shadows one of Go's predeclared identifiers - revive # Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint. - rowserrcheck # checks whether Err of rows is checked successfully - staticcheck # Staticcheck is a go vet on steroids, applying a ton of static analysis checks - structcheck # Finds unused struct fields - stylecheck # Stylecheck is a replacement for golint - tagliatelle # Checks the struct tags. - thelper # thelper detects golang test helpers without t.Helper() call and checks the consistency of test helpers - typecheck # Like the front-end of a Go compiler, parses and type-checks Go code - unconvert # Remove unnecessary type conversions - unparam # Reports unused function parameters - unused # Checks Go code for unused constants, variables, functions and types - varcheck # Finds unused global variables and constants - wastedassign # wastedassign finds wasted assignment statements. - whitespace # Tool for detection of leading and trailing whitespace issues: max-issues-per-linter: 0 max-same-issues: 0 exclude-use-default: true exclude-rules: - path: _test\.go linters: - cyclop - dupl - errcheck - funlen - gocognit - goconst - gocritic - gocyclo - gosec - thelper - wrapcheck - path: "(.*)?_example_test.go" linters: - gocritic # Exclude shadow checking on the variable named err - text: "shadow: declaration of \"(err|ok)\"" linters: - govet # false positive - path: language.go text: "deprecatedComment: the proper format is `Deprecated: <text>`" # async - path: handler.go text: "Error return value of `conn.Notify` is not checked" linters: - errcheck - path: log.go text: "Error return value of `s.log.Write` is not checked" linters: - errcheck - path: deprecated.go linters: - lll - path: "(client|server)_json.go" linters: - nlreturn