# golangci-lint configuration options

linters:
  enable:
    - errcheck
    - goimports
    - revive
    - ineffassign
    - govet
    - unconvert
    - staticcheck
    - gosimple
    - stylecheck
    - unused
    - misspell
    - gocritic
    #- prealloc
    #- maligned
  disable-all: true

issues:
  # Enable some lints excluded by default
  exclude-use-default: false

  # Maximum issues count per one linter. Set to 0 to disable. Default is 50.
  max-issues-per-linter: 0

  # Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
  max-same-issues: 0

  exclude-rules:

    - linters:
      - staticcheck
      text: 'SA1019: "github.com/rclone/rclone/cmd/serve/httplib" is deprecated'

  # don't disable the revive messages about comments on exported functions
  include:
    - EXC0012
    - EXC0013
    - EXC0014
    - EXC0015

run:
  # timeout for analysis, e.g. 30s, 5m, default is 1m
  timeout: 10m

linters-settings:
  revive:
    # setting rules seems to disable all the rules, so re-enable them here
    rules:
      - name: blank-imports
        disabled: false
      - name: context-as-argument
        disabled: false
      - name: context-keys-type
        disabled: false
      - name: dot-imports
        disabled: false
      - name: empty-block
        disabled: true
      - name: error-naming
        disabled: false
      - name: error-return
        disabled: false
      - name: error-strings
        disabled: false
      - name: errorf
        disabled: false
      - name: exported
        disabled: false
      - name: increment-decrement
        disabled: true
      - name: indent-error-flow
        disabled: false
      - name: package-comments
        disabled: false
      - name: range
        disabled: false
      - name: receiver-naming
        disabled: false
      - name: redefines-builtin-id
        disabled: true
      - name: superfluous-else
        disabled: true
      - name: time-naming
        disabled: false
      - name: unexported-return
        disabled: false
      - name: unreachable-code
        disabled: true
      - name: unused-parameter
        disabled: true
      - name: var-declaration
        disabled: false
      - name: var-naming
        disabled: false
  stylecheck:
    # Only enable the checks performed by the staticcheck stand-alone tool,
    # as documented here: https://staticcheck.io/docs/configuration/options/#checks
    checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022", "-ST1023"]
  gocritic:
    # Enable all default checks with some exceptions and some additions (commented).
    # Cannot use both enabled-checks and disabled-checks, so must specify all to be used.
    disable-all: true
    enabled-checks:
      #- appendAssign # Enabled by default
      - argOrder
      - assignOp
      - badCall
      - badCond
      #- captLocal # Enabled by default
      - caseOrder
      - codegenComment
      #- commentFormatting # Enabled by default
      - defaultCaseOrder
      - deprecatedComment
      - dupArg
      - dupBranchBody
      - dupCase
      - dupSubExpr
      - elseif
      #- exitAfterDefer # Enabled by default
      - flagDeref
      - flagName
      #- ifElseChain # Enabled by default
      - mapKey
      - newDeref
      - offBy1
      - regexpMust
      - ruleguard # Not enabled by default
      #- singleCaseSwitch # Enabled by default
      - sloppyLen
      - sloppyTypeAssert
      - switchTrue
      - typeSwitchVar
      - underef
      - unlambda
      - unslice
      - valSwap
      - wrapperFunc
    settings:
      ruleguard:
        rules: "${configDir}/bin/rules.go"
