# options for analysis running
run:
  # default concurrency is a available CPU number
  concurrency: 4

  # timeout for analysis, e.g. 30s, 5m, default is 1m
  timeout: 10m

  # exit code when at least one issue was found, default is 1
  issues-exit-code: 1

  # include test files or not, default is true
  tests: true

  # which dirs to skip: issues from them won't be reported;
  # can use regexp here: generated.*, regexp is applied on full path;
  # default value is empty list, but default dirs are skipped independently
  # from this option's value (see skip-dirs-use-default).
  skip-dirs:
    - third_party

  # default is true. Enables skipping of directories:
  #   vendor$, third_party$, testdata$, examples$, Godeps$, builtin$
  skip-dirs-use-default: false

  # which files to skip: they will be analyzed, but issues from them
  # won't be reported. Default value is empty list, but there is
  # no need to include all autogenerated files, we confidently recognize
  # autogenerated files. If it's not please let us know.
  skip-files:

  # by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules":
  # If invoked with -mod=readonly, the go command is disallowed from the implicit
  # automatic updating of go.mod described above. Instead, it fails when any changes
  # to go.mod are needed. This setting is most useful to check that go.mod does
  # not need updates, such as in a continuous integration and testing system.
  # If invoked with -mod=vendor, the go command assumes that the vendor
  # directory holds the correct copies of dependencies and ignores
  # the dependency descriptions in go.mod.
  modules-download-mode: readonly

  # Allow multiple parallel golangci-lint instances running.
  # If false (default) - golangci-lint acquires file lock on start.
  allow-parallel-runners: true

# output configuration options
output:
  # colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number"
  format: colored-line-number

  # print lines of code with issue, default is true
  print-issued-lines: true

  # print linter name in the end of issue text, default is true
  print-linter-name: true

# all available settings of specific linters
linters-settings:
  govet:
    # report about shadowed variables
    check-shadowing: true

    # settings per analyzer
    settings:
      printf: # analyzer name, run `go tool vet help` to see all analyzers
        funcs: # run `go tool vet help printf` to see available settings for `printf` analyzer
          - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
          - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
          - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
          - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf

    enable-all: true
    disable:
      # We want to order fields according to readability and grouping them by use cases.
      # This linter does not offer a discernible performance improvement as the structs
      # defined in this repository are not in the execution hot path.
      # See https://github.com/open-telemetry/opentelemetry-collector/issues/2789
      - fieldalignment

  revive:
    # minimal confidence for issues, default is 0.8
    min-confidence: 0.8

  gofmt:
    # simplify code: gofmt with `-s` option, true by default
    simplify: true

  goimports:
    # put imports beginning with prefix after 3rd-party packages;
    # it's a comma-separated list of prefixes
    local-prefixes: go.opentelemetry.io/collector

  misspell:
    # Correct spellings using locale preferences for US or UK.
    # Default is to use a neutral variety of English.
    # Setting locale to US will correct the British spelling of 'colour' to 'color'.
    locale: US
    ignore-words:
      - cancelled
      - metre
      - meter
      - metres
      - kilometre
      - kilometres

  depguard:
    rules:
      denied-deps:
        deny:
          - pkg: go.uber.org/atomic
            desc: "Use 'sync/atomic' instead of go.uber.org/atomic"
          - pkg: github.com/pkg/errors
            desc: "Use 'errors' or 'fmt' instead of github.com/pkg/errors"
          - pkg: github.com/hashicorp/go-multierror
            desc: "Use go.uber.org/multierr instead of github.com/hashicorp/go-multierror"
        # Add a different guard rule so that we can ignore tests.
      ignore-in-test:
          deny:
          - pkg: go.opentelemetry.io/proto
            desc: "Use go.opentelemetry.io/collector/pdata instead"
            # Allow in tests for testing pdata or other receivers/exporters that expect OTLP.
          files:
            - "!**/*_test.go"

linters:
  enable:
    - depguard
    - errcheck
    - errorlint
    - exportloopref
    - gocritic
    - gofmt
    - goimports
    - gosec
    - govet
    - misspell
    - revive
    - staticcheck
    - tenv
    - unconvert
    - unused
    - unparam

issues:
  # Excluding configuration per-path, per-linter, per-text and per-source
  exclude-rules:
    - text: "G404:"
      linters:
        - gosec
    - text: "G402:"
      linters:
        - gosec
    # https://github.com/open-telemetry/opentelemetry-collector/issues/5699
    - text: "G112:"
      linters:
        - gosec

  # The list of ids of default excludes to include or disable. By default it's empty.
  # See the list of default excludes here https://golangci-lint.run/usage/configuration.
  include:
    # - EXC0001 - errcheck checks that are not usually checked
    - EXC0002
    - EXC0003
    - EXC0004
    - EXC0005
    - EXC0006
    - EXC0007
    # - EXC0008 - Duplicated errcheck checks
    - EXC0009
    - EXC0010
    - EXC0011
