version: "2"

run:
  timeout: 5m
  tests: true

linters:
  # Start from the standard set (errcheck, govet, ineffassign, staticcheck,
  # unused) and add a few low-noise, high-value linters on top.
  default: standard
  enable:
    - bodyclose
    - misspell
    - unconvert
    - usestdlibvars
  settings:
    errcheck:
      exclude-functions:
        - (*encoding/json.Encoder).Encode
        - (net/http.ResponseWriter).Write
        - fmt.Fprintf
        - fmt.Fprint
        - fmt.Fprintln
    misspell:
      locale: US
    staticcheck:
      checks:
        - all
        # Deprecations are tracked separately; some (e.g. gRPC dial options)
        # are kept intentionally for compatibility. Migrate them on their own.
        - -SA1019
        # Initialism/naming convention (Id->ID, Http->HTTP, ...). The remaining
        # offenders are exported identifiers (e.g. web.Id, web.DefaultId) whose
        # rename is a breaking API change; not worth it in a lint-bootstrap pass.
        - -ST1003
  exclusions:
    # Use golangci-lint's built-in sensible exclusions and skip generated code.
    generated: lax
    presets:
      - comments
      - common-false-positives
      - legacy
      - std-error-handling
    rules:
      # The protobuf code generator is a port of upstream protoc-gen-go and
      # keeps its structure; don't flag its unused legacy helpers.
      - path: cmd/protoc-gen-micro/generator/
        linters:
          - unused
      # Tests are held to a looser standard.
      - path: _test\.go
        linters:
          - bodyclose
          - errcheck
      # Demo/harness code: fire-and-forget calls are fine and `_ =` noise hurts
      # readability of examples.
      - path: (^|/)(examples|internal/harness)/
        linters:
          - errcheck

formatters:
  enable:
    - gofmt
