diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index bb1543d5fa..c6a5f26299 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -36,10 +36,10 @@ jobs: - name: golangci-lint env: GOOS: ${{ matrix.GOOS }} - uses: golangci/golangci-lint-action@2226d7cb06a077cd73e56eedd38eecad18e5d837 # v6.5.0 + uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0 with: # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version - version: v1.64.5 + version: v2.0.2 # Give the job more time to execute. # Regarding `--whole-files`, the linter is supposed to support linting of changed a patch only but, diff --git a/.golangci.yml b/.golangci.yml index 04ab7f5809..79a5435c4d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,4 +1,4 @@ -# options for analysis running +version: "2" run: # timeout for analysis, e.g. 30s, 5m, default is 1m timeout: 1m @@ -16,8 +16,9 @@ issues: # Default: 50 max-issues-per-linter: 0 -output: - sort-results: true +formatters: + enable: + - goimports # Uncomment and add a path if needed to exclude # skip-dirs: @@ -28,122 +29,134 @@ output: # Find the whole list here https://golangci-lint.run/usage/linters/ linters: - disable-all: true + default: none enable: - errcheck # checking for unchecked errors in go programs - 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. - goconst # finds repeated strings that could be replaced by a constant - dupl # tool for code clone detection - - forbidigo # forbids identifiers matched by reg exps + - forbidigo # forbids identifiers matched by regexps - gomoddirectives # manage the use of 'replace', 'retract', and 'excludes' directives in go.mod. - - gosimple # linter for Go source code that specializes in simplifying a code - misspell # finds commonly misspelled English words in comments - nakedret # finds naked returns in functions greater than a specified function length - prealloc # finds slice declarations that could potentially be preallocated - nolintlint # reports ill-formed or insufficient nolint directives - staticcheck # Staticcheck is a go vet on steroids, applying a ton of static analysis checks - - stylecheck # a replacement for golint - unparam # reports unused function parameters - unused # checks Go code for unused constants, variables, functions and types - - gomodguard - govet # Vet examines Go source code and reports suspicious constructs, such as Printf calls whose arguments do not align with the format string - ineffassign # detects when assignments to existing variables are not used - - typecheck # Like the front-end of a Go compiler, parses and type-checks Go code - asciicheck # simple linter to check that your code does not contain non-ASCII identifiers - bodyclose # checks whether HTTP response body is closed successfully - durationcheck # check for two durations multiplied together - - goimports # Goimports does everything that gofmt does. Additionally it checks unused imports - gosec # inspects source code for security problems - importas # enforces consistent import aliases - nilerr # finds the code that returns nil even if it checks that the error is not nil. - noctx # noctx finds sending http request without context.Context - unconvert # Remove unnecessary type conversions - #- wastedassign # wastedassign finds wasted assignment statements. # NOTE disabled due to lack of generics support - #- godox # tool for detection of FIXME, TODO and other comment keywords - asasalint - bidichk - gocheckcompilerdirectives - copyloopvar - usetesting - - -# all available settings of specific linters -linters-settings: - errcheck: - # report about not checking of errors in type assertions: `a := b.(MyStruct)`; - # default is false: such cases aren't reported by default. - check-type-assertions: true - - errorlint: - # Check whether fmt.Errorf uses the %w verb for formatting errors. See the readme for caveats - errorf: true - # Check for plain type assertions and type switches - asserts: true - # Check for plain error comparisons - comparison: true - - goconst: - # minimal length of string constant, 3 by default - min-len: 3 - # minimal occurrences count to trigger, 3 by default - min-occurrences: 2 - - dupl: - # tokens count to trigger issue, 150 by default - threshold: 100 - - forbidigo: - # Forbid the following identifiers - forbid: - - fmt.Print.* # too much log noise - # Exclude godoc examples from forbidigo checks. Default is true. - exclude-godoc-examples: true - - gomoddirectives: - # Allow local `replace` directives. Default is false. - replace-local: false - replace-allow-list: - - github.com/deepmap/oapi-codegen - - nakedret: - # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 - max-func-lines: 0 - - prealloc: - # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. - # True by default. - simple: true - range-loops: true # Report preallocation suggestions on range loops, true by default - for-loops: false # Report preallocation suggestions on for loops, false by default - - nolintlint: - # Enable to ensure that nolint directives are all used. Default is true. - allow-unused: false - # Exclude following linters from requiring an explanation. Default is []. - allow-no-explanation: [] - # Enable to require an explanation of nonzero length after each nolint directive. Default is false. - require-explanation: true - # Enable to require nolint directives to mention the specific linter being suppressed. Default is false. - require-specific: true - - stylecheck: - initialisms: ["ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS", "ECS"] - - unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - - gomodguard: - blocked: - # List of blocked modules. - modules: - - github.com/bytedance/sonic: - reason: "Federal restriction on bytedance" - - github.com/elastic/beats/v7: - reason: "There must be no Beats dependency, use elastic-agent-libs instead." - - github.com/elastic/beats/elastic-agent: - reason: "There must be no elastic-agent dependency, use elastic-agent-libs instead." + settings: + dupl: + # tokens count to trigger issue, 150 by default + threshold: 100 + + errcheck: + # report about not checking of errors in type assertions: `a := b.(MyStruct)`; + # default is false: such cases aren't reported by default. + check-type-assertions: true + + errorlint: + # Check whether fmt.Errorf uses the %w verb for formatting errors. See the readme for caveats + errorf: true + # Check for plain type assertions and type switches + asserts: true + # Check for plain error comparisons + comparison: true + + forbidigo: + # Forbid the following identifiers + forbid: + - pattern: fmt.Print.* # too much log noise + # Exclude godoc examples from forbidigo checks. Default is true. + exclude-godoc-examples: true + + goconst: + # minimal length of string constant, 3 by default + min-len: 3 + # minimal occurrences count to trigger, 3 by default + min-occurrences: 2 + + gomoddirectives: + # Allow local `replace` directives. Default is false. + replace-local: false + gomodguard: + blocked: + # List of blocked modules. + modules: + - github.com/bytedance/sonic: + reason: "Federal restriction on bytedance" + - github.com/elastic/beats/v7: + reason: "There must be no Beats dependency, use elastic-agent-libs instead." + - github.com/elastic/beats/elastic-agent: + reason: "There must be no elastic-agent dependency, use elastic-agent-libs instead." + + nakedret: + # make an issue if func has more lines of code than this setting and it has naked returns; default is 30 + max-func-lines: 0 + + nolintlint: + # Enable to require an explanation of nonzero length after each nolint directive. Default is false. + require-explanation: true + # Enable to require nolint directives to mention the specific linter being suppressed. Default is false. + require-specific: true + # Enable to ensure that nolint directives are all used. Default is true. + allow-unused: false + # Exclude following linters from requiring an explanation. Default is []. + allow-no-explanation: [ ] + + prealloc: + # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them. + # True by default. + simple: true + range-loops: true # Report preallocation suggestions on range loops, true by default + for-loops: false # Report preallocation suggestions on for loops, false by default + + staticcheck: + initialisms: [ "ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS", "ECS" ] + + unparam: + # Inspect exported functions, default is false. Set to true if no external program/library imports your code. + # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: + # if it's called for subdir of a project it can't find external interfaces. All text editor integrations + # with golangci-lint call it on a directory with the changed file. + check-exported: false + + exclusions: + # Mode of the generated files analysis. + # + # - `strict`: sources are excluded by strictly following the Go generated file convention. + # Source files that have lines matching only the following regular expression will be excluded: `^// Code generated .* DO NOT EDIT\.$` + # This line must appear before the first non-comment, non-blank text in the file. + # https://go.dev/s/generatedcode + # - `lax`: sources are excluded if they contain lines like `autogenerated file`, `code generated`, `do not edit`, etc. + # - `disable`: disable the generated files exclusion. + # + # Default: lax + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + # Which file paths to exclude: they will be analyzed, but issues from them won't be reported. + # "/" will be replaced by the current OS file path separator to properly work on Windows. + # Default: [] + paths: + - third_party$ + - builtin$ + - examples$