-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Expand file tree
/
Copy pathpyproject.toml
More file actions
56 lines (52 loc) · 2.86 KB
/
pyproject.toml
File metadata and controls
56 lines (52 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# Hermes WebUI — Python tooling config.
#
# This project is NOT a packaged distribution. The app is a plain Python + vanilla
# JavaScript server with no build step and no bundler (see AGENTS.md / README). This
# file exists only to configure dev tooling — currently ruff, used as a curated,
# forward-looking lint gate over the Python codebase. There is intentionally no
# [build-system] section: nothing pip-installs this directory.
#
# The ruff gate is the Python twin of the ESLint runtime guard (package.json
# `lint:runtime` + eslint.runtime-guard.config.mjs + tests/test_static_js_runtime_lint.py).
# It is enforced on NEW/CHANGED code only — see scripts/ruff_lint.py and TESTING.md
# > "Python lint gate (ruff)". The existing tree carries a cosmetic backlog (mostly
# unused-import F401) that is deliberately NOT reformatted here; cleaning it is a
# separate, maintainer-run, safe-fixes-only decision (tracked in #3273).
[tool.ruff]
# Match the Python versions exercised in CI (tests.yml matrix: 3.11–3.13).
target-version = "py311"
# Keep the linter scoped to the application + tests; never crawl vendored or
# generated trees. (These are belt-and-suspenders; the gate passes explicit files.)
extend-exclude = [
"node_modules",
"static",
".git",
"scripts/windows",
"scripts/wsl",
]
[tool.ruff.lint]
# Curated, correctness-leaning ruleset — high signal, low noise. We deliberately do
# NOT enable the pure-style families (E1/E2/E5/E7 line-length & whitespace) so the
# gate never demands a whitespace reformat of existing code.
#
# E9 — syntax / IO / runtime errors (E999 etc). The whole tree is already clean
# of these and the in-suite test (tests/test_ruff_forward_lint.py) keeps it
# that way across every shard.
# F — pyflakes: unused imports (F401), unused/undefined names (F841/F821),
# redefinitions (F811), f-strings with no placeholders (F541). The most
# valuable family for keeping NEW code clean.
# B — flake8-bugbear: genuine latent-bug shapes — mutable default args (B006),
# raise-without-from (B904), loop-variable capture in closures (B023),
# zip-without-strict (B905). This is where the real future-regression-
# prevention value lives.
select = ["E9", "F", "B"]
# No global `ignore` of F401/F841/etc. The existing-tree backlog is handled by
# line-scoping the gate to changed lines (scripts/ruff_lint.py), NOT by globally
# disabling the rules — disabling them would blind the gate to the single most
# common new-code defect (a stray unused import). Forward enforcement of the full
# curated set is the whole point.
[tool.ruff.lint.per-file-ignores]
# Tests legitimately use `assert False` as an explicit failure marker (B011) and
# occasionally shadow loop vars in table-driven cases (B007); that's idiomatic in a
# test suite and not a production-code risk.
"tests/**" = ["B011", "B007"]