run:
  timeout: 5m
  issues-exit-code: 1
  tests: true

output:
  print-issued-lines: true
  print-linter-name: true

linters:
  enable-all: true
  disable:
    # 合理禁用 - 项目有中文注释/标识符
    - asciicheck
    - gosmopolitan

    # 风格限制 - 可接受的灵活性
    - funlen
    - gocyclo
    - cyclop
    - lll
    - varnamelen
    - tagalign
    - nlreturn
    - wsl
    - nestif

    # 重复/噪音
    - dupl
    - dupword
    - misspell

    # 注释风格
    - godot
    - godox
    - goheader

    # 测试相关 - 不强制
    - paralleltest
    - tparallel
    - testpackage
    - testifylint
    - testableexamples
    - thelper

    # 框架/工具特定 - 项目不使用
    - ginkgolinter
    - promlinter
    - protogetter
    - spancheck
    - zerologlint

    # 声明/结构风格
    - decorder
    - exhaustruct
    - iface

    # 命名风格
    - errname
    - inamedparam
    - nonamedreturns

    # 不适用的检查
    - bidichk
    - rowserrcheck
    - sqlclosecheck
    - tenv  # 已弃用，被 usetesting 替代

    # 可配置而非禁用
    - forbidigo
    - depguard
    - gomodguard
    - gomoddirectives
    - importas

    # 复杂度度量
    - gocognit
    - maintidx

    # 噪音/风格 - 已有惯例
    - dogsled
    - nosprintfhostport
    - goprintffuncname
    - tagliatelle
    - usestdlibvars
    - usetesting
    - unparam
    - mnd
    - ireturn
    - nakedret
    - interfacebloat
    - gocritic
    - gosec

    # 项目特定豁免
    - asasalint
    - containedctx
    - err113
    - forcetypeassert
    - gochecknoglobals
    - gochecknoinits
    - nilerr
    - nilnil
    - musttag
    - noctx
    - intrange
    - reassign
    - perfsprint
    - wastedassign
    - wrapcheck
    - errchkjson

    # 额外禁用
    - bodyclose
    - contextcheck
    - errorlint
    - canonicalheader
    - copyloopvar
    - durationcheck
    - exptostd
    - fatcontext
    - gochecksumtype
    - grouper
    - loggercheck
    - makezero
    - mirror
    - nilnesserr
    - predeclared
    - recvcheck
    - sloglint
    - unconvert
    - whitespace

issues:
  exclude-rules:
    - path: '_test\.go'
      linters:
        - dupl
        - goconst
        - errcheck
        - govet
        - revive
        - staticcheck
        - unused
    - path: 'internal/ssl/ocsp_test\.go'
      linters:
        - unparam
    - path: 'internal/lua/'
      text: "stutters"
      linters:
        - revive

linters-settings:
  errcheck:
    check-type-assertions: true
    check-blank: false

  govet:
    enable-all: true
    disable:
      - fieldalignment

  staticcheck:
    checks: ["all", "-ST1000", "-ST1003"]

  revive:
    severity: warning
    rules:
      - name: unused-parameter
        severity: warning
      - name: unreachable-code
        severity: error
      - name: context-as-argument
        severity: warning
      - name: error-naming
        severity: warning
      - name: error-return
        severity: error
      - name: exported
        severity: warning
        arguments:
          - "disableStutteringCheck"

  gofmt:
    simplify: true