run:
  timeout: 10m
  issues-exit-code: 1
  tests: true
  skip-dirs:
    - vendor
    - web/
    - testdata
    - database/models/

linters:
  disable-all: true
  enable:
# defaults
    - errcheck
    - gosimple
    - govet
    - ineffassign
    - staticcheck
    - typecheck
#   - unused

# disabled by default linters
#   - asasalint
    - asciicheck
    - bidichk
    - bodyclose
    - containedctx
#   - contextcheck
#   - cyclop
#   - deadcode // abandoned by its owner, replaced by unused
    - decorder
#   - depguard
    - dogsled
#   - dupl
    - dupword
    - durationcheck
    - errchkjson
    - errname
#   - errorlint
    - execinquery
#   - exhaustive
#   - exhaustivestruct // abandoned by its owner, replaced by exhaustruct
#   - exhaustruct
    - exportloopref
#   - forbidigo
    - forcetypeassert
#   - funlen
    - gci
#   - ginkgolinter
    - gocheckcompilerdirectives
#   - gochecknoglobals
#   - gochecknoinits
#   - gocognit
    - goconst
    - gocritic
#   - gocyclo
#   - godot
#   - godox
#   - goerr113
    - gofmt
#   - gofumpt
#   - goheader
    - goimports
#   - golint // deprecated since 1.41.0, replaced by revive
#   - gomnd
    - gomoddirectives
    - gomodguard
    - goprintffuncname
    - gosec
#   - gosmopolitan
    - grouper
#   - ifshort // deprecated by its owner
#   - importas
#   - interfacebloat
#   - interfacer // deprecated by its owner
#   - ireturn
#   - lll 
#   - loggercheck
#   - maintidx
    - makezero
#   - maligned // deprecated by its owner, replaced by govet 'fieldalignment'
    - mirror
    - misspell
#   - musttag
#   - nakedret
#   - nestif
    - nilerr
#   - nilnil
#   - nlreturn
    - noctx
    - nolintlint
#   - nonamedreturns
#   - nosnakecase // deprecated by its owner, replaced by revive 'var-naming'
    - nosprintfhostport
#   - paralleltest
    - prealloc
    - predeclared
#   - promlinter
    - reassign
    - revive
    - rowserrcheck
#   - scopelint // deprecated since v1.39.0, replaced by exportloopref
    - sqlclosecheck
#   - structcheck // abandoned by its owner, replaced by unused
    - stylecheck
#   - tagliatelle
    - tenv
    - testableexamples
#   - testpackage
    - thelper
    - tparallel
    - unconvert
    - unparam
    - usestdlibvars
#   - varcheck // abandoned by its owner, replaced by unused
#   - varnamelen
    - wastedassign
    - whitespace
#   - wrapcheck
#   - wsl
#   - zerologlint

linters-settings:
  govet:
    check-shadowing: true
  goconst:
    min-occurrences: 6
  gocritic:
    enabled-tags:
      - performance
      - style
      - experimental
    disabled-checks:
      - wrapperFunc
      - importShadow
      - methodExprCall
      - evalOrder

issues:
  max-issues-per-linter: 0
  max-same-issues: 0

  exclude-rules:
    - text: "Expect WriteFile permissions to be 0600 or less"
      linters:
        - gosec

  # List of regexps of issue texts to exclude, empty list by default.
  # But independently from this option we use default exclude patterns,
  # it can be disabled by `exclude-use-default: false`. To list all
  # excluded by default patterns execute `golangci-lint run --help`
  exclude:
    # The following silences false positives in table tests
    #   https://github.com/kyoh86/scopelint/issues/4
     - Using the variable on range scope `ti` in function literal
  include: 
    - EXC0012 # revive: Comment exported (.+) should have comment( \(or a comment on this block\))? or be unexported
    - EXC0014 # revive: Comment on exported (.+) should be of the form "(.+)..."
