# Docs:
# https://golangci-lint.run/usage/linters/

linters:
  enable-all: true
  disable:
    - containedctx
    - contextcheck
    - cyclop
    - depguard
    - exhaustivestruct
    - exhaustruct
    - forbidigo
    - funlen
    - gochecknoglobals
    - gochecknoinits
    - gocognit
    - gocyclo
    - goerr113 
    - gomnd
    - gomoddirectives
    - ifshort
    - interfacebloat
    - interfacer
    - ireturn
    - lll
    - mnd
    - musttag
    - nestif
    - nilnil
    - nlreturn
    - noctx
    - nolintlint
    - nonamedreturns
    - nosnakecase
    - perfsprint # TODO(ppacher): we should re-enanble this one to avoid costly fmt.* calls in the hot-path
    - revive
    - tagliatelle
    - testifylint
    - testpackage
    - varnamelen
    - whitespace
    - wrapcheck
    - wsl

linters-settings:
  revive:
    # See https://github.com/mgechev/revive#available-rules for details.
    enable-all-rules: true
  gci:
    # put imports beginning with prefix after 3rd-party packages;
    # only support one prefix
    # if not set, use goimports.local-prefixes
    local-prefixes: github.com/safing
  godox:
    # report any comments starting with keywords, this is useful for TODO or FIXME comments that
    # might be left in the code accidentally and should be resolved before merging
    keywords:
      - FIXME
  gosec:
    # To specify a set of rules to explicitly exclude.
    # Available rules: https://github.com/securego/gosec#available-rules
    excludes:
      - G204 # Variables in commands.
      - G304 # Variables in file paths.
      - G505 # We need crypto/sha1 for non-security stuff. Using `nolint:` triggers another linter.

issues:
  exclude-use-default: false
  exclude-rules:
    - text: "a blank import .*"
      linters:
        - golint
    - text: "ST1000: at least one file in a package should have a package comment.*"
      linters:
        - stylecheck
