chore(lint): interdire d avaler une exception sans laisser de trace
Regle BLE de ruff activee. Ce qu'elle enforce n'est pas "ne jamais attraper large" : elle se satisfait d'un logger.exception. C'est exactement la discipline visee — une frontiere peut tout avaler, a condition de laisser de quoi distinguer un defaut d'une panne. Les cinq noqa que j'avais prepares d'avance etaient donc inertes ; la raison reste en commentaire simple. Ce que la regle a trouve, une fois activee : app.py, demarrage du bot — les deux facons d'echouer, jeton invalide et import casse, se lisaient a l'identique sur une seule ligne et aucune n'etait diagnosticable. Passe en error avec exc_info : un club qui ne recoit plus aucun rappel a perdu une fonctionnalite, et warning mettait ca a cote des avis de depreciation. services/notifications.py — le bloc webhook attrapait large autour d'un requests.post. RequestException couvre toutes les facons dont un appel HTTP echoue ; le reste est un defaut. La branche DM et la branche webhook etaient en plus imbriquees dans un seul try alors qu'elles s'excluent. logging_config.py et les deux scripts CLI gardent leur largeur, avec la raison sur la ligne. Le filtre de journalisation est le cas ou la trace que BLE001 reclame est precisement ce qu'il ne faut pas produire : journaliser depuis un filtre rentre dans le meme filtre. RUF100 (noqa inutile) n'est volontairement pas active : il ferait remonter des directives preexistantes sans rapport avec ce chantier. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
+8
-1
@@ -45,7 +45,14 @@ exclude = [".venv", "venv", "migrations", "docs"]
|
||||
# I isort; enabled in its own commit, for the same reason the
|
||||
# formatting got one — the diff is churn and must not hide
|
||||
# behind a behavioural change
|
||||
select = ["E4", "E7", "E9", "F", "B", "C4", "RET", "SIM", "UP", "I"]
|
||||
# BLE blind `except Exception`. Added with QUA-004/ARCH-008, and
|
||||
# the point of it is what happens next: the rule cannot be
|
||||
# satisfied by narrowing every catch, because a handful of
|
||||
# boundaries genuinely need the breadth. It can only be
|
||||
# satisfied by writing down which ones and why, in a
|
||||
# `# noqa: BLE001 — reason` on the line. That turns a count
|
||||
# that drifts back up into a decision someone has to defend.
|
||||
select = ["E4", "E7", "E9", "F", "B", "C4", "RET", "SIM", "UP", "I", "BLE"]
|
||||
|
||||
# Forcing a ternary reads worse than the if/else it replaces in the one place
|
||||
# it fires (evaluations.py, choosing a sort direction).
|
||||
|
||||
Reference in New Issue
Block a user