run:
  timeout: 15m
  skip-files:
    # Skip autogenerated files.
    - ^.*\.(pb|y)\.go$
  skip-dirs:
    # Copied it from a different source
    - storage/remote/otlptranslator/prometheusremotewrite

output:
  sort-results: true

linters:
  enable:
    - depguard
    - errorlint
    - gocritic
    - godot
    - gofumpt
    - goimports
    - misspell
    - nolintlint
    - predeclared
    - revive
    - unconvert
    - unused

issues:
  max-same-issues: 0
  exclude-rules:
    - linters:
        - gocritic
      text: "appendAssign"
    - path: _test.go
      linters:
        - errcheck
    - path: tsdb/
      linters:
        - errorlint
    - path: tsdb/
      text: "import 'github.com/pkg/errors' is not allowed"
      linters:
        - depguard
    - linters:
        - godot
      source: "^// ==="

linters-settings:
  depguard:
    rules:
      main:
        deny:
        - pkg: "sync/atomic"
          desc: "Use go.uber.org/atomic instead of sync/atomic"
        - 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: "io/ioutil"
          desc: "Use corresponding 'os' or 'io' functions instead."
        - pkg: "regexp"
          desc: "Use github.com/grafana/regexp instead of regexp"
        - 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 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
  revive:
    rules:
      # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unused-parameter
      - name: unused-parameter
        severity: warning
        disabled: true
