# https://golangci-lint.run/usage/configuration/
run:
  timeout: 1m

linters:
  disable-all: true
  enable:
    # default linters
    - errcheck
    - gosimple
    - govet
    - ineffassign
    - staticcheck
    - typecheck
    - unused

    # additional linters for this project (we should disable these if they get annoying).
    - asciicheck
    - bodyclose
    # - depguard
    - dogsled
    - exhaustive
    - exportloopref
    - funlen
    - gochecknoglobals
    - gochecknoinits
    - gocritic
    - gocyclo
    - godot
    - goheader
    - goimports
    - revive
    - goprintffuncname
    - gosec
    - misspell
    - nakedret
    - nestif
    - noctx
    - nolintlint
    - prealloc
    - rowserrcheck
    - exportloopref
    - sqlclosecheck
    - unconvert
    - whitespace
    - copyloopvar
    - intrange
    - fatcontext
    # - canonicalheader Can't do this one since it alerts on valid headers such as X-XSS-Protection
    - spancheck

issues:
  exclude-dirs:
    - generated
  exclude-rules:
    # exclude tests from some rules for things that are useful in a testing context.
    - path: _test\.go
      linters:
        - funlen
        - gochecknoglobals
        - revive
    - path: internal/testutil/
      linters:
      - revive

linters-settings:
  funlen:
    lines: 150
    statements: 50
  goheader:
    values:
      regexp:
        # YYYY or YYYY-YYYY
        YEARS: \d\d\d\d(-\d\d\d\d)?
    template: |-
      Copyright {{YEARS}} the Pinniped contributors. All Rights Reserved.
      SPDX-License-Identifier: Apache-2.0
  goimports:
    local-prefixes: go.pinniped.dev
  revive:
    max-open-files: 2048
    rules:
      - name: unused-parameter
        arguments:
          # Allow unused params that start with underscore. It can be nice to keep unused param names when implementing
          # an interface sometimes, to help readers understand why it is unused in that particular implementation.
          - allowRegex: "^_"
  spancheck:
    # https://golangci-lint.run/usage/linters/#spancheck
    checks:
    - end
    - record-error
    - set-status
