run:
  timeout: 10m
  # Enable checking the by default skipped "examples" dirs
  build-tags:
  - all
linters:
  enable-all: false
  enable:
    - errcheck
    - exhaustive
    - prealloc
    - gofumpt
    - revive
    - gosec
    - govet
    - ineffassign
    - lll
    - misspell
    - nolintlint
    - nakedret
    - unconvert
    - unused
    - paralleltest
    - perfsprint
    - depguard
    - importas

linters-settings:
  nakedret:
    # Make an issue if func has more lines of code than this setting, and it has naked returns.
    # Default: 30
    max-func-lines: 60
  nolintlint:
    # Some linter exclusions are added to generated or templated files
    # pre-emptively.
    # Don't complain about these.
    allow-unused: true
  govet:
    enable:
      - nilness
      # Reject comparisons of reflect.Value with DeepEqual or '=='.
      - reflectvaluecompare
      # Reject sort.Slice calls with a non-slice argument.
      - sortslice
      # Detect write to struct/arrays by-value that aren't read again.
      - unusedwrite
  depguard:
    rules:
      protobuf:
        deny:
          - pkg: "github.com/golang/protobuf"
            desc: Use google.golang.org/protobuf instead
  importas:
    alias:
    - pkg: github.com/pulumi/pulumi/sdk/v3/proto/go
      alias: pulumirpc
    - pkg: github.com/pulumi/pulumi/sdk/v3/proto/go/testing
      alias: testingrpc
    - pkg: github.com/deckarep/golang-set/v2
      alias: mapset
    - pkg: github.com/pulumi/pulumi/sdk/v3/go/common/testing
      alias: ptesting

issues:
  exclude-rules:
    # Don't warn on unused parameters.
    # Parameter names are useful; replacing them with '_' is undesirable.
    - linters: [revive]
      text: 'unused-parameter: parameter \S+ seems to be unused, consider removing or renaming it as _'

    # staticcheck already has smarter checks for empty blocks.
    # revive's empty-block linter has false positives.
    # For example, as of writing this, the following is not allowed.
    #   for foo() { }
    - linters: [revive]
      text: 'empty-block: this block is empty, you can remove it'

    # We *frequently* use the term 'new' in the context of properties
    # (new and old properties),
    # and we rarely use the 'new' built-in function.
    # It's fine to ignore these cases.
    - linters: [revive]
      text: 'redefines-builtin-id: redefinition of the built-in function new'

  exclude:
    # https://github.com/pulumi/pulumi/issues/9469
    - 'Name is deprecated: Name returns the variable or declaration name of the resource'

    # https://github.com/pulumi/pulumi/issues/11869
    - '"github.com/golang/protobuf/[\w/]+" is deprecated'

    # https://github.com/pulumi/pulumi/issues/11870
    - 'strings.Title has been deprecated'

    # https://github.com/pulumi/pulumi/issues/12328
    - 'deprecated: Please use types in:? cloud.google.com/go/logging/apiv2/loggingpb'

  exclude-dirs:
    - Godeps$
    - builtin$
    - node_modules
    - testdata$
    - third_party$
    - vendor$
  exclude-dirs-use-default: false