run:
  tests: true
  timeout: 15m
  sort-results: true
  allow-parallel-runners: true
  exclude-dir: testutil/testdata
  skip-files:
    - server/grpc/gogoreflection/fix_registration.go
    - ".*\\.pb\\.go$"
    - ".*\\.pb\\.gw\\.\\.go$"
    - ".*\\.pulsar\\.go$"

linters:
  disable-all: true
  enable:
    - errcheck
    - dogsled
    - exportloopref
    - goconst
    - gocritic
    - gci
    - gofumpt
    - gosec
    - gosimple
    - govet
    - ineffassign
    - misspell
    - nakedret
    - nolintlint
    - staticcheck
    - revive
    - stylecheck
    - typecheck
#    - thelper # too many positives with table tests that have custom setup(*testing.T)
    - unconvert
    - unused

issues:
  exclude-rules:
    - text: 'Use of weak random number generator'
      linters:
        - gosec
    - text: 'ST1003:'
      linters:
        - stylecheck
    # FIXME: Disabled until golangci-lint updates stylecheck with this fix:
    # https://github.com/dominikh/go-tools/issues/389
    - text: 'ST1016:'
      linters:
        - stylecheck
    - path: 'migrations'
      text: 'SA1019:'
      linters:
        - staticcheck
    - text: 'SA1019: codec.NewAminoCodec is deprecated' # TODO remove once migration path is set out
      linters:
        - staticcheck
    - text: 'SA1019: legacybech32.MustMarshalPubKey' # TODO remove once ready to remove from the sdk
      linters:
        - staticcheck
    - text: 'SA1019: legacybech32.MarshalPubKey' # TODO remove once ready to remove from the sdk
      linters:
        - staticcheck
    - text: 'SA1019: legacybech32.UnmarshalPubKey' # TODO remove once ready to remove from the sdk
      linters:
        - staticcheck
    - text: 'SA1019: params.SendEnabled is deprecated' # TODO remove once ready to remove from the sdk
      linters:
        - staticcheck
    - text: 'leading space'
      linters:
        - nolintlint
  max-issues-per-linter: 10000
  max-same-issues: 10000

linters-settings:
  gci:
    custom-order: true
    sections:
      - standard # Standard section: captures all standard packages.
      - default # Default section: contains all imports that could not be matched to another section type.
      - prefix(cosmossdk.io)
      - prefix(github.com/cosmos/cosmos-sdk)
      - prefix(github.com/CosmWasm/wasmd)
  revive:
    rules:
      - name: redefines-builtin-id
        disabled: true

  gosec:
    # To select a subset of rules to run.
    # Available rules: https://github.com/securego/gosec#available-rules
    # Default: [] - means include all rules
    includes:
      #  - G101 # Look for hard coded credentials
      - G102 # Bind to all interfaces
      - G103 # Audit the use of unsafe block
      - G104 # Audit errors not checked
      - G106 # Audit the use of ssh.InsecureIgnoreHostKey
      - G107 # Url provided to HTTP request as taint input
      - G108 # Profiling endpoint automatically exposed on /debug/pprof
      - G109 # Potential Integer overflow made by strconv.Atoi result conversion to int16/32
      - G110 # Potential DoS vulnerability via decompression bomb
      - G111 # Potential directory traversal
      - G112 # Potential slowloris attack
      - G113 # Usage of Rat.SetString in math/big with an overflow (CVE-2022-23772)
      - G114 # Use of net/http serve function that has no support for setting timeouts
      - G201 # SQL query construction using format string
      - G202 # SQL query construction using string concatenation
      - G203 # Use of unescaped data in HTML templates
      - G204 # Audit use of command execution
      - G301 # Poor file permissions used when creating a directory
      - G302 # Poor file permissions used with chmod
      - G303 # Creating tempfile using a predictable path
      - G304 # File path provided as taint input
      - G305 # File traversal when extracting zip/tar archive
      - G306 # Poor file permissions used when writing to a new file
      - G307 # Deferring a method which returns an error
      - G401 # Detect the usage of DES, RC4, MD5 or SHA1
      - G402 # Look for bad TLS connection settings
      - G403 # Ensure minimum RSA key length of 2048 bits
      - G404 # Insecure random number source (rand)
      - G501 # Import blocklist: crypto/md5
      - G502 # Import blocklist: crypto/des
      - G503 # Import blocklist: crypto/rc4
      - G504 # Import blocklist: net/http/cgi
      - G505 # Import blocklist: crypto/sha1
      - G601 # Implicit memory aliasing of items from a range statement
  misspell:
    locale: US
  gofumpt:
    extra-rules: true
  dogsled:
    max-blank-identifiers: 6
  maligned:
    suggest-new: true
  nolintlint:
    allow-unused: false
    allow-leading-space: true
    require-explanation: false
    require-specific: false
  gosimple:
    checks: ['all']
  gocritic:
    disabled-checks:
      - regexpMust
      - appendAssign
      - ifElseChain
