Le pre-commit du gabarit refuse tout commit sur un dépôt rétrofitté (suppressions ESLint + lint partiel) #37
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ce qui se passe
D-048 prescrit, pour un rétrofit, de figer la dette dans des suppressions ESLint natives (
eslint-suppressions.json). Le pre-commit du gabarit, lui, lint les seuls fichiers indexés :Les deux ensemble ne marchent pas. ESLint tient pour périmée toute suppression portant sur un fichier qu'on ne lui a pas donné à lire, et sort en erreur :
Sur nuage, 61 fichiers portent des suppressions. Un commit qui touche un fichier en passe un à ESLint, les 60 autres paraissent morts, et le commit est refusé. Tous. Le seul recours est
--no-verify, c'est-à-dire la désactivation de la porte que le hook existe pour tenir.Le gabarit ne le voit pas parce qu'il n'a pas de suppressions : il est neuf. Tout satellite rétrofitté le verra au premier commit.
Pourquoi ce n'est pas un contournement d'y céder
--pass-on-unpruned-suppressionsest interdit par D-024, et à raison : dans la porte, une suppression qui ne couvre plus rien doit partir, sinon la dette se fige.Mais la porte lit TOUT l'arbre. Un lint partiel, lui, n'a pas l'information pour juger : il ne sait pas si la suppression est morte ou si le fichier n'était simplement pas du lot. Lui poser la question quand même ne détecte pas de la dette, ça refuse une question sans réponse.
Ce que nuage a fait, en attendant
Le drapeau est posé dans le hook seulement, avec sa raison écrite (
.lintstagedrc.mjs) ;pnpm checklint l'arbre entier sans le drapeau et reste strict. L'élagage a d'ailleurs trouvé une suppression réellement morte au passage.Proposition
--pass-on-unpruned-suppressionsau lint partiel du pre-commit du gabarit, avec un commentaire disant pourquoi il est là et pourquoi il n'est pas danscheck.eslint-suppressions.jsonau.prettierignoredu gabarit : voir le ticket jumeau.Trouvé en rétrofittant nuage (profil
nest), socle 0.14.0, ESLint 9.39.5.