run:
  timeout: 5m
  go: "1.22"

linters:
  enable:
    # Additional linters requested
    - testifylint      # Checks usage of github.com/stretchr/testify
    - usetesting       # usetesting is an analyzer that detects using os.Setenv instead of t.Setenv since Go 1.17
    - tagliatelle      # Checks the struct tags
    - nlreturn         # nlreturn checks for a new line before return and branch statements
    - nilnil           # Checks that there is no simultaneous return of nil error and an invalid value
    - nestif           # Reports deeply nested if statements
    - mnd              # An analyzer to detect magic numbers
    - lll              # Reports long lines
    - intrange         # intrange is a linter to find places where for loops could make use of an integer range
    - gofumpt          # Gofumpt checks whether code was gofumpt-ed
    - gochecknoglobals # Check that no global variables exist

    # Default/existing linters that are commonly useful
    - govet
    - errcheck
    - staticcheck
    - unused
    - gosimple
    - ineffassign
    - typecheck
    - gofmt
    - goimports
    - misspell
    - revive
    - gosec
    - unconvert
    - unparam

linters-settings:
  lll:
    line-length: 120

  mnd:
    # List of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description.
    checks:
      - argument
      - case
      - condition
      - operation
      - return
      - assign
    ignored-numbers:
      - '0'
      - '1'
      - '2'
      - '8'
      - '16'
      - '40'  # GPG fingerprint length
      - '64'
      - '128'
      - '256'
      - '512'
      - '1024'
      - '2048'
      - '4096'

  nestif:
    min-complexity: 4

  nlreturn:
    block-size: 2

  tagliatelle:
    case:
      rules:
        json: snake
        yaml: snake
        xml: snake
        bson: snake

  testifylint:
    enable-all: true

  usetesting:
    strict: true

issues:
  exclude-rules:
    # Exclude some linters from running on tests files
    - path: _test\.go
      linters:
        - gochecknoglobals
        - mnd
        - unparam

    # Allow long lines in generated code or test data
    - path: ".*_gen\\.go"
      linters:
        - lll

    # Exclude unused parameter warnings for cobra command signatures
    - text: "parameter '(args|cmd)' seems to be unused"
      linters:
        - revive

  max-issues-per-linter: 0
  max-same-issues: 0