linters:
  disable-all: true
  enable:
    # (TODO) uncomment after fixing the lint issues
    # - gofmt
    - govet
    # - unconvert
    # - staticcheck
    # - ineffassign
    # - unparam
    - forbidigo

issues:
  # Disable the default exclude list so that all excludes are explicitly
  # defined in this file.
  exclude-use-default: false

  exclude-rules:
    # Temp Ignore SA9004: only the first constant in this group has an explicit type
    # https://staticcheck.io/docs/checks#SA9004
    - linters: [staticcheck]
      text: 'SA9004:'

    - linters: [staticcheck]
      text: 'SA1019: Package github.com/golang/protobuf/jsonpb is deprecated'

    - linters: [staticcheck]
      text: 'SA1019: Package github.com/golang/protobuf/proto is deprecated'

    - linters: [staticcheck]
      text: 'SA1019: ptypes.MarshalAny is deprecated'

    - linters: [staticcheck]
      text: 'SA1019: ptypes.UnmarshalAny is deprecated'

    - linters: [staticcheck]
      text: 'SA1019: package github.com/golang/protobuf/ptypes is deprecated'  

    # An argument that always receives the same value is often not a problem.
    - linters: [unparam]
      text: 'always receives'

    # Often functions will implement an interface that returns an error without
    # needing to return an error. Sometimes the error return value is unnecessary
    # but a linter can not tell the difference.
    - linters: [unparam]
      text: 'result \d+ \(error\) is always nil'

    # Allow unused parameters to start with an underscore. Arguments with a name
    # of '_' are already ignored.
    # Ignoring longer names that start with underscore allow for better
    # self-documentation than a single underscore by itself.  Underscore arguments
    # should generally only be used when a function is implementing an interface.
    - linters: [unparam]
      text: '`_[^`]*` is unused'

    # Temp ignore some common unused parameters so that unparam can be added
    # incrementally.
    - linters: [unparam]
      text: '`(t|resp|req|entMeta)` is unused'

linters-settings:
  gofmt:
    simplify: true
  forbidigo:
    # Forbid the following identifiers (list of regexp).
    forbid:
      - '\brequire\.New\b(# Use package-level functions with explicit TestingT)?'
      - '\bassert\.New\b(# Use package-level functions with explicit TestingT)?'
      - '\bmetrics\.IncrCounter\b(# Use labeled metrics)?'
      - '\bmetrics\.AddSample\b(# Use labeled metrics)?'
      - '\bmetrics\.MeasureSince\b(# Use labeled metrics)?'
      - '\bmetrics\.SetGauge\b(# Use labeled metrics)?'
    # Exclude godoc examples from forbidigo checks.
    # Default: true
    exclude_godoc_examples: false

run:
  timeout: 10m
  concurrency: 4
