diff --git a/.claude/rules/04-code-conventions.md b/.claude/rules/04-code-conventions.md index a5943ba..071cc63 100644 --- a/.claude/rules/04-code-conventions.md +++ b/.claude/rules/04-code-conventions.md @@ -60,7 +60,12 @@ python3 script/analyse/check_comment_hygiene.py --staged 🔴 `identifiant` est une trouvaille, à retirer. 🟡 `récit` est un signal à relire : l'outil ne sait pas si la phrase énonce un fait durable ou raconte -une journée, et ne tranche pas à votre place. +une journée, et ne tranche pas à votre place. 🟡 `nom` en est un autre, et sa +limite est plus dure : un nom d'hôte NU ne se distingue mécaniquement ni d'un +mot ordinaire ni du nom d'un logiciel, donc l'outil ne voit que la forme +pleinement qualifiée. Un miroir de paquets nommé dans un commentaire y +répond, et se confirme d'un coup d'œil ; l'absence de signal ne prouve rien +sur les noms. Trois exemples pris dans ce dépôt, leurs noms propres masqués — une règle qui interdit de nommer ne se cite pas elle-même en clair. diff --git a/script/analyse/check_comment_hygiene.py b/script/analyse/check_comment_hygiene.py index 65b449a..a2e8f8d 100755 --- a/script/analyse/check_comment_hygiene.py +++ b/script/analyse/check_comment_hygiene.py @@ -8,7 +8,7 @@ La convention est dans `.claude/rules/04-code-conventions.md` : un commentaire dit COMMENT le code marche, il ne porte aucune donnée identifiante et il ne raconte pas l'enquête. Cet outil en vérifie la part mécanique. -Deux familles, de sûreté très différente : +Trois familles, de sûreté très différente : - `identifiant` — adresse IP, courriel, chemin de compte. Une correspondance est une trouvaille : ces formes n'ont aucune raison d'être @@ -17,6 +17,12 @@ Deux familles, de sûreté très différente : absolue, première personne. Une correspondance est un SIGNAL À RELIRE : la même phrase peut énoncer un fait durable. L'outil ne trie pas à la place du lecteur. +- `nom` — un nom de machine pleinement qualifié. Aussi un signal à relire, + et pour une raison plus dure : un nom d'hôte NU ne se distingue + mécaniquement ni d'un mot ordinaire ni du nom d'un logiciel, donc cette + famille ne voit que la forme qualifiée. Les miroirs de paquets nommés dans + un commentaire y répondent, et c'est le prix d'un signal mécanique — le + lecteur confirme en deux secondes, là où la classe entière était invisible. Il lit les commentaires `#` et, en Python, les docstrings de module, de classe et de fonction. Le reste du code ne l'intéresse pas. @@ -116,6 +122,64 @@ MOTIFS_RECIT = ( ("personne", PERSONNE), ) +# Le nom de machine est la SEULE classe interdite qu'aucun motif ne tranche : +# un nom d'hôte ne se distingue mécaniquement ni d'un mot pointé ordinaire, ni +# du nom d'un logiciel. Seule sa forme pleinement qualifiée se reconnaît, et +# encore : « chemin.home » et « logging.info » ont la même forme. D'où un +# signal à relire et non une trouvaille. +# +# Le suffixe est comparé à une liste FERMÉE. Sans elle, tout attribut pointé +# du code correspondrait. Les suffixes de service — local, lan, internal — +# y sont exprès : c'est sous eux qu'une machine du parc se nomme. +SUFFIXES_DHOTE = ( + "com", + "ca", + "net", + "org", + "io", + "dev", + "fr", + "be", + "ch", + "eu", + "us", + "uk", + "biz", + "cloud", + "app", + "tech", + "quebec", + "local", + "lan", + "internal", + "intra", + "corp", +) + +# Le point qui SUIT décide de deux choses opposées : suivi d'un caractère de +# nom, il prolonge l'adresse et la correspondance n'est qu'un préfixe ; seul, +# c'est le point d'une phrase, et l'adresse s'arrête là. Les confondre rendait +# invisible toute adresse en fin de phrase. +NOM_DHOTE = re.compile( + r"(?