version: "2"
linters:
  enable:
    - depguard
    - errorlint
    - godot
    - misspell
    - modernize
    - revive
    - sloglint
    - testifylint
  settings:
    depguard:
      rules:
        main:
          deny:
            - pkg: github.com/stretchr/testify/assert
              desc: "Use github.com/stretchr/testify/require instead of github.com/stretchr/testify/assert"
            - pkg: github.com/go-kit/kit/log
              desc: "Use github.com/go-kit/log instead of github.com/go-kit/kit/log"
            - pkg: github.com/pkg/errors
              desc: "Use errors or fmt instead of github.com/pkg/errors"
    errcheck:
      exclude-functions:
        # Don't flag lines such as "io.Copy(io.Discard, resp.Body)".
        - io.Copy
        # The next two are used in HTTP handlers, any error is handled by the server itself.
        - io.WriteString
        - (net/http.ResponseWriter).Write
        # No need to check for errors on server's shutdown.
        - (*net/http.Server).Shutdown
        # Never check for rollback errors as Rollback() is called when a previous error was detected.
        - (github.com/prometheus/prometheus/storage.Appender).Rollback
    godot:
      scope: toplevel
      exclude:
        - "^ ?This file is safe to edit"
        - "^ ?scheme value"
      period: true
      capital: true
    revive:
      rules:
        - name: blank-imports
        - name: context-as-argument
        - name: error-naming
        - name: error-return
        - name: error-strings
        - name: errorf
        - name: exported
          arguments:
            - disableStutteringCheck
        - name: if-return
        - name: increment-decrement
        - name: indent-error-flow
        - name: package-comments
        - name: range
        - name: receiver-naming
        - name: time-naming
        - name: unexported-return
        - name: var-declaration
        - name: var-naming
          disabled: true
    testifylint:
      disable:
        - float-compare
        - go-require
      enable-all: true
  exclusions:
    presets:
      - comments
      - common-false-positives
      - legacy
      - std-error-handling
    paths:
      # Skip autogenerated files.
      - ^.*\.(pb|y)\.go$
    rules:
      - linters:
          - errcheck
        path: _test.go
      - linters:
          - modernize
        text: "omitzero: Omitempty has no effect on nested struct fields"
    warn-unused: true
issues:
  max-issues-per-linter: 0
  max-same-issues: 0
run:
  timeout: 5m
formatters:
  enable:
    - gofumpt
    - goimports
  settings:
    gofumpt:
      extra-rules: true
    goimports:
      local-prefixes:
        - github.com/prometheus/alertmanager
