# 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

linters:
  disable-all: true
  enable:
    - goimports
    - gosimple
    - govet
    - ineffassign
    - misspell
    - unconvert
    - typecheck
    - unused
    - staticcheck
    - bidichk
    - durationcheck
    - copyloopvar
    - whitespace
    - revive # only certain checks enabled
    - durationcheck
    - gocheckcompilerdirectives
    - reassign
    - mirror
    - tenv
    ### linters we tried and will not be using:
    ###
    # - 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
  revive:
    enable-all-rules: false
    # here we enable specific useful rules
    # see https://golangci-lint.run/usage/linters/#revive for supported rules
    rules:
      - name: receiver-naming
        severity: warning
        disabled: false
        exclude: [""]

issues:
  exclude-files:
    - core/genesis_alloc.go
  exclude-rules:
    - path: crypto/bn256/cloudflare/optate.go
      linters:
        - deadcode
        - staticcheck
    - path: crypto/bn256/
      linters:
        - revive
    - path: cmd/utils/flags.go
      text: "SA1019: cfg.TxLookupLimit is deprecated: use 'TransactionHistory' instead."
    - path: cmd/utils/flags.go
      text: "SA1019: ethconfig.Defaults.TxLookupLimit is deprecated: use 'TransactionHistory' instead."
    - path: internal/build/pgp.go
      text: 'SA1019: "golang.org/x/crypto/openpgp" is deprecated: this package is unmaintained except for security fixes.'
    - path: core/vm/contracts.go
      text: 'SA1019: "golang.org/x/crypto/ripemd160" is deprecated: RIPEMD-160 is a legacy hash and should not be used for new applications.'
  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'