version: "2"

run:
  go: "1.24"
  tests: false

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
    - gochecknoglobals # Check that no global variables exist

    # Default/existing linters that are commonly useful
    - govet
    - errcheck
    - staticcheck
    - unused
    - ineffassign
    - 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

  nestif:
    min-complexity: 4

  nlreturn:
    block-size: 2

  revive:
    rules:
      - name: var-naming
        arguments:
          - []
          - []
          - "upperCaseConst=true"

  testifylint:
    enable-all: true

  usetesting: {}

issues:
  max-issues-per-linter: 0
  max-same-issues: 0
  exclude-rules:
    - path: ".*_gen\\.go"
      linters:
        - lll

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

    # Allow ALL_CAPS constant names
    - text: "don't use ALL_CAPS in Go names"
      linters:
        - revive
