version: "2"
linters:
  default: all
  disable:
    # - bodyclose
    - containedctx
    # - contextcheck
    - cyclop
    - depguard
    # - dupl
    - err113
    - exhaustive
    - exhaustruct
    - funcorder
    - forcetypeassert
    - gochecknoglobals
    - gochecknoinits
    - gocognit
    - goconst
    - gocyclo
    - gomoddirectives
    - gosmopolitan
    - ireturn
    - lll
    - maintidx
    - makezero
    - mnd
    - nakedret
    - nestif
    - nlreturn
    - nonamedreturns
    - paralleltest
    - revive
    - rowserrcheck
    - sqlclosecheck
    - tagliatelle
    - testpackage
    - tparallel
    - varnamelen
    - wrapcheck
    - wsl
  settings:
    errcheck:
      exclude-functions:
        - fmt.Fprintln
    forbidigo:
      forbid:
        - pattern: ^print(ln)?$
    funlen:
      lines: -1
      statements: 120
    gocyclo:
      min-complexity: 14
    godox:
      keywords:
        - FIXME
    gomoddirectives:
      replace-allow-list:
        - github.com/abbot/go-http-auth
        - github.com/gorilla/mux
        - github.com/mailgun/minheap
        - github.com/mailgun/multibuf
        - github.com/jaguilar/vt100
        - github.com/cucumber/godog
        - github.com/http-wasm/http-wasm-host-go
    govet:
      disable:
        - shadow
        - fieldalignment
      enable-all: true
    misspell:
      locale: US
    revive:
      rules:
        - name: struct-tag
        - name: blank-imports
        - name: context-as-argument
        - name: context-keys-type
        - name: error-return
        - name: error-strings
        - name: error-naming
        - name: exported
          disabled: true
        - name: if-return
        - name: increment-decrement
        - name: var-naming
        - name: var-declaration
        - name: package-comments
          disabled: true
        - name: range
        - name: receiver-naming
        - name: time-naming
        - name: unexported-return
        - name: indent-error-flow
        - name: errorf
        - name: empty-block
        - name: superfluous-else
        - name: unused-parameter
          disabled: true
        - name: unreachable-code
        - name: redefines-builtin-id
    staticcheck:
      checks:
        - all
        - -SA1019
      dot-import-whitelist:
        - github.com/yusing/go-proxy/internal/utils/testing
        - github.com/yusing/go-proxy/internal/api/v1/utils
    tagalign:
      align: false
      sort: true
      order:
        - description
        - json
        - toml
        - yaml
        - yml
        - label
        - label-slice-as-struct
        - file
        - kv
        - export
    testifylint:
      disable:
        - suite-dont-use-pkg
        - require-error
        - go-require
  exclusions:
    generated: lax
    presets:
      - comments
      - common-false-positives
      - legacy
      - std-error-handling
    paths:
      - third_party$
      - builtin$
      - examples$
formatters:
  enable:
    - gofmt
    - gofumpt
    - goimports
  exclusions:
    generated: lax
    paths:
      - third_party$
      - builtin$
      - examples$
