test(build): échec bruyant si bloc hiddenimports introuvable (revue Task 2)
- _hiddenimport_strings assert désormais si le bloc hiddenimports=[...] est absent (renommage/refonte de spec) au lieu de retourner [] silencieusement, ce qui faisait passer le test à vide. - Docstring corrigée : la regex s'arrête au PREMIER `]` où qu'il soit (pas « ligne seule ») — limitation réelle documentée. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -22,18 +22,21 @@ FORBIDDEN_HIDDEN = ("optimum", "torch", "torchvision", "doctr")
|
||||
REQUIRED_EXCLUDES = ("torch", "torchvision", "optimum", "doctr")
|
||||
|
||||
|
||||
def _hiddenimport_strings(text):
|
||||
def _hiddenimport_strings(text, spec_name):
|
||||
"""Retourne les chaînes littérales présentes dans la section hiddenimports=[...].
|
||||
|
||||
On extrait uniquement la portion du texte entre `hiddenimports = [` et le `]`
|
||||
de fermeture correspondant (premier `]` sur une ligne seule), afin d'éviter
|
||||
les faux positifs générés par le bloc EXCLUDED_TORCH_STACK lui-même qui
|
||||
contient légitimement "torch", "optimum", etc. comme valeurs d'exclusion.
|
||||
On extrait la portion entre `hiddenimports = [` et le PREMIER `]` rencontré
|
||||
où qu'il soit (`[^\\]]*` ne gère pas l'imbrication : un `]` dans un
|
||||
commentaire au sein de la liste tronquerait le bloc — acceptable ici, les
|
||||
specs n'en contiennent pas). Cette restriction évite les faux positifs du
|
||||
bloc EXCLUDED_TORCH_STACK qui contient légitimement "torch", "optimum", etc.
|
||||
|
||||
Garde-fou : si le bloc hiddenimports est introuvable (renommage, refonte de
|
||||
la spec), on échoue BRUYAMMENT au lieu de retourner [] — sinon le test
|
||||
passerait à vide sans plus rien vérifier.
|
||||
"""
|
||||
# Cherche le bloc hiddenimports = [ ... ]
|
||||
match = re.search(r"hiddenimports\s*=\s*\[([^\]]*)\]", text, re.DOTALL)
|
||||
if not match:
|
||||
return []
|
||||
assert match is not None, f"bloc hiddenimports introuvable dans {spec_name}"
|
||||
block = match.group(1)
|
||||
return re.findall(r"[\"']([A-Za-z0-9_.]+)[\"']", block)
|
||||
|
||||
@@ -42,7 +45,7 @@ def _hiddenimport_strings(text):
|
||||
def test_spec_sans_hiddenimport_torch_optimum_doctr(spec_path):
|
||||
text = spec_path.read_text(encoding="utf-8")
|
||||
hits = [
|
||||
s for s in _hiddenimport_strings(text)
|
||||
s for s in _hiddenimport_strings(text, spec_path.name)
|
||||
if s.split(".")[0] in FORBIDDEN_HIDDEN
|
||||
]
|
||||
assert hits == [], f"{spec_path.name} référence encore : {hits}"
|
||||
|
||||
Reference in New Issue
Block a user