run:
  deadline: 5m
  skip-files:
    # Skip autogenerated files.
    - ^.*\.(pb|y)\.go$

output:
  sort-results: true

linters:
  enable:
    - depguard
    - gofumpt
    - goimports
    - revive
    - misspell

issues:
  max-same-issues: 0
  exclude-rules:
    - path: _test.go
      linters:
        - errcheck

linters-settings:
  depguard:
    list-type: blacklist
    include-go-root: true
    packages-with-error-message:
      - sync/atomic: "Use go.uber.org/atomic instead of sync/atomic"
      - github.com/stretchr/testify/assert: "Use github.com/stretchr/testify/require instead of github.com/stretchr/testify/assert"
      - github.com/go-kit/kit/log: "Use github.com/go-kit/log instead of github.com/go-kit/kit/log"
      - io/ioutil: "Use corresponding 'os' or 'io' functions instead."
      - regexp: "Use github.com/grafana/regexp instead of regexp"
  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 logger errors.
      - (github.com/go-kit/log.Logger).Log
      # Never check for rollback errors as Rollback() is called when a previous error was detected.
      - (github.com/prometheus/prometheus/storage.Appender).Rollback
  goimports:
    local-prefixes: github.com/prometheus/prometheus
  gofumpt:
    extra-rules: true