version: "2"

# errcheck stays ENABLED. We exclude only specific method signatures that are
# universally safe to ignore (defer close on read paths, rollback-after-commit,
# test helpers). Real production error paths must still be checked.

linters:
  default: standard
  settings:
    errcheck:
      exclude-functions:
        # defer Close() on read-only or already-errored resources — the open
        # error and read errors are what matter; close errors on these paths
        # are non-actionable.
        - (*database/sql.DB).Close
        - (*database/sql.Rows).Close
        - (*database/sql.Stmt).Close
        # Rollback after a successful Commit is a no-op; rollback on the error
        # path can't meaningfully recover either. Idiomatic pattern:
        # `defer tx.Rollback()` right after `BeginTx`.
        - (*database/sql.Tx).Rollback
        # Our wrapper types around database/sql — same semantics as above.
        - (*skraak/db.LoggedTx).Rollback
        - (*skraak/db.LoggedStmt).Close
        # Test cleanup — failures don't affect test validity.
        - os.Remove
        - os.RemoveAll

  exclusions:
    rules:
      # Test files: binary.Write to in-memory buffers cannot fail; json.Unmarshal
      # in assertions is checked by subsequent field reads; tx/stmt calls whose
      # results are verified by later queries.
      - path: _test\.go
        linters:
          - errcheck