version: "2"
run:
  issues-exit-code: 1
  tests: true
output:
  formats:
    text:
      path: stdout
      print-linter-name: true
      print-issued-lines: true
      colors: false
linters:
  default: none
  enable:
    - bodyclose
    - copyloopvar
    - errcheck
    - funlen
    - gocognit
    - goconst
    - govet
    - ineffassign
    - misspell
    - nakedret
    - reassign
    - revive
    - staticcheck
    - unconvert
    - unparam
    - unused
    - usestdlibvars
    - whitespace
  settings:
    staticcheck:
      checks: ["all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022", "-ST1005", "-QF1001", "-QF1008"]

    dogsled:
      max-blank-identifiers: 2
    dupl:
      threshold: 100
    errcheck:
      check-type-assertions: false
      check-blank: false
    funlen:
      lines: 280
      statements: 140
    gocognit:
      min-complexity: 110
    goconst:
      min-len: 3
      min-occurrences: 8
    gocritic:
      settings:
        captLocal:
          paramsOnly: true
    gocyclo:
      min-complexity: 30
    godox:
      keywords:
        - TODO
        - BUG
        - FIXME
        - NOTE
        - OPTIMIZE
        - HACK
    gosec:
      excludes:
        - G104
    govet:
      disable:
        - shadow
      settings:
        printf:
          funcs:
            - (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
            - (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
            - (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
            - (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf
    lll:
      line-length: 120
      tab-width: 1
    misspell:
      locale: US
      ignore-rules:
        - GitLab
    nakedret:
      max-func-lines: 50
    prealloc:
      simple: true
      range-loops: true
      for-loops: false
    revive:
      confidence: 0.8
      severity: warning
    unparam:
      check-exported: false
    whitespace:
      multi-if: false
      multi-func: false
    wsl:
      strict-append: true
      allow-assign-and-call: true
      allow-multiline-assign: true
      force-case-trailing-whitespace: 0
      allow-trailing-comment: false
      allow-cuddle-declarations: false
  exclusions:
    generated: lax
    rules:
      - linters:
          - dupl
          - errcheck
          - funlen
          - gocyclo
          - gosec
        path: _test\.go
      - linters:
          - lll
        source: '^//go:generate '
    paths:
      - third_party$
      - builtin$
      - examples$
issues:
  max-issues-per-linter: 0
  max-same-issues: 0
  new: false
formatters:
  enable:
    - gci
    - gofmt
    - goimports
  settings:
    gci:
      sections:
        - standard
        - default
        - prefix(github.com/helmfile/helmfile)
    gofmt:
      simplify: true
  exclusions:
    generated: lax
    paths:
      - third_party$
      - builtin$
      - examples$
