v0.165.0
 1target-version = "py314"
 2
 3# Ruff's default rules are deliberately in play — when a new ruff version
 4# expands them, we address what it finds rather than freezing the set.
 5# Determinism comes from plain-code's bounded ruff dependency: everyone on
 6# the same plain-code release lints with the same ruff.
 7
 8[lint]
 9extend-select = [
10  "ISC", # flake8-implicit-str-concat
11  "PT", # pytest
12]
13ignore = [
14  "ISC001", # Implicit string concatenation (conflicts with the formatter)
15  # getattr/setattr with a literal name is how dynamic-attribute code stays
16  # honest with the type checker — the "fix" trades a lint for a ty error.
17  "B009", # get-attr-with-constant
18  "B010", # set-attr-with-constant
19  # Broad catches at error boundaries and in best-effort cleanup are design,
20  # not accidents — narrow where the failure set is known, and comment the
21  # rest in place. Flagging every boundary would just breed noqa comments.
22  "BLE001", # blind-except
23  "S110", # try-except-pass
24  "S112", # try-except-continue
25]