mirror of
https://github.com/nesquena/hermes-webui.git
synced 2026-07-04 06:30:29 +00:00
e58fb6a201
Co-authored-by: nesquena-hermes <nesquena-hermes@users.noreply.github.com>
57 lines
2.9 KiB
TOML
57 lines
2.9 KiB
TOML
# 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"]
|