run:
  tests: true

output:
  print-issued-lines: false

linters:
  enable-all: true
  disable:
    - lll
    - gochecknoglobals
    - wsl
    - funlen
    - gocognit
    - goprintffuncname
    - paralleltest
    - nlreturn
    - testpackage
    - wrapcheck
    - forbidigo
    - gci
    - godot
    - gofumpt
    - cyclop
    - errorlint
    - nestif
    - tagliatelle
    - thelper
    - godox
    - goconst
    - varnamelen
    - ireturn
    - exhaustruct
    - nonamedreturns
    - nilnil
    - depguard    # nothing to guard against yet
    - tagalign    # hurts readability of kong tags
    - tenv        # deprecated since v1.64, but not removed yet
    - mnd
    - perfsprint
    - err113
    - copyloopvar
    - intrange
    - nakedret
    - recvcheck   # value receivers are intentionally used for copies

linters-settings:
  govet:
    # These govet checks are disabled by default, but they're useful.
    enable:
      - niliness
      - sortslice
      - unusedwrite
  dupl:
    threshold: 100
  gocyclo:
    min-complexity: 20
  exhaustive:
    default-signifies-exhaustive: true

issues:
  max-per-linter: 0
  max-same: 0
  exclude-use-default: false
  exclude:
    - '^(G104|G204):'
    # Very commonly not checked.
    - 'Error return value of .(.*\.Help|.*\.MarkFlagRequired|(os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*printf?|os\.(Un)?Setenv). is not checked'
    - 'exported method (.*\.MarshalJSON|.*\.UnmarshalJSON) should have comment or be unexported'
    - 'composite literal uses unkeyed fields'
    - 'bad syntax for struct tag key'
    - 'bad syntax for struct tag pair'
    - 'result .* \(error\) is always nil'
    - 'Error return value of `fmt.Fprintln` is not checked'

  exclude-rules:
    # Don't warn on unused parameters.
    # Parameter names are useful for documentation.
    # Replacing them with '_' hides useful information.
    - linters: [revive]
      text: 'unused-parameter: parameter \S+ seems to be unused, consider removing or renaming it as _'

    # Duplicate words are okay in tests.
    - linters: [dupword]
      path: _test\.go
