# This file configures github.com/golangci/golangci-lint.

run:
  timeout: 20m
  tests: true
  # default is true. Enables skipping of directories:
  #   vendor$, third_party$, testdata$, examples$, Godeps$, builtin$
  skip-dirs-use-default: true
  skip-files:
    - core/genesis_alloc.go

linters:
  disable-all: true
  enable:
    - deadcode
    - goconst
    - goimports
    - gosimple
    - govet
    - ineffassign
    - misspell
    - unconvert
    - varcheck
    - typecheck
    - unused
    - staticcheck
    - bidichk
    - durationcheck
    - exportloopref
    - gosec
    - whitespace

    # - structcheck # lots of false positives
    # - errcheck #lot of false positives
    # - contextcheck
    # - errchkjson # lots of false positives
    # - errorlint # this check crashes
    # - exhaustive # silly check
    # - makezero # false positives
    # - nilerr # several intentional

linters-settings:
  gofmt:
    simplify: true
  goconst:
    min-len: 3 # minimum length of string constant
    min-occurrences: 6 # minimum number of occurrences
  gosec:
    excludes:
      - G404 # Use of weak random number generator - lots of FP
      - G107 # Potential http request -- those are intentional
      - G306 # G306: Expect WriteFile permissions to be 0600 or less

issues:
  exclude-rules:
    - path: crypto/bn256/cloudflare/optate.go
      linters:
        - deadcode
        - staticcheck
    - path: internal/build/pgp.go
      text: 'SA1019: package golang.org/x/crypto/openpgp is deprecated'
    - path: core/vm/contracts.go
      text: 'SA1019: package golang.org/x/crypto/ripemd160 is deprecated'
    - path: accounts/usbwallet/trezor.go
      text: 'SA1019: package github.com/golang/protobuf/proto is deprecated'
    - path: accounts/usbwallet/trezor/
      text: 'SA1019: package github.com/golang/protobuf/proto is deprecated'
  exclude:
    - 'SA1019: event.TypeMux is deprecated: use Feed'
    - 'SA1019: strings.Title is deprecated'
    - 'SA1019: strings.Title has been deprecated since Go 1.18 and an alternative has been available since Go 1.0: The rule Title uses for word boundaries does not handle Unicode punctuation properly. Use golang.org/x/text/cases instead.'
    - 'SA1029: should not use built-in type string as key for value'
    - 'G306: Expect WriteFile permissions to be 0600 or less'