feat(completion): un nom qui dit ce qu'il fait, et un premier Tab qui répond (0.1.62) - #153
Merged
Merged
Conversation
… répond (0.1.62) Deux issues, un seul geste : installer la complétion. Le premier Tab d'une session ne proposait rien, le second fonctionnait. zsh charge le fichier #compdef à la première tabulation et attend qu'il produise les propositions de cette invocation-là ; le script que typer génère se contente de définir la fonction puis de l'enregistrer pour la suite. Un Tab muet se lit comme « la complétion ne marche pas », et personne ne rappuie pour vérifier une fonctionnalité qu'il croit absente : le coût est un abandon silencieux. Le script installé appelle donc sa fonction après l'avoir enregistrée, et la raison de cette divergence avec l'amont est écrite dans le fichier posé. Le cas est reproduit et vérifié dans un zsh réel sous pseudo-terminal, avant et après : un appel direct au mécanisme de complétion ne traverse pas la couche en cause. dsoxlab completion install et completion show apparaissent. dsoxlab install reste, prévient qu'il est déprécié, annonce son retrait en 0.3.0 et fait le même travail. Il n'écrit plus de wrapper dans ~/.local/bin. Deux défauts vécus tenaient à ce fichier : un chemin contenant une espace cassait le exec faute de quoting, et write_text() sur un lien symbolique écrit dans la cible, donc le binaire réel d'uv était remplacé par un script pointant sur lui-même. uv tool install et pipx posent déjà leur lanceur exactement là. Les deux tests qui éprouvaient le wrapper sont remplacés par un test de la décision qui le retire : garder un test sur un fichier qui n'existe plus le rendrait vert sans rien mesurer. Closes #90 Closes #134
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Deux issues, un seul geste : installer la complétion.
#134 — le premier
Tabne proposait rienReproduit avant de corriger, dans un zsh réel sous pseudo-terminal, avec un
dsoxlabréellement installé et un catalogue à compléter :zsh charge le fichier
#compdefà la première tabulation et attend qu'ilproduise les propositions de cette invocation-là. Le script que typer génère
se contente de définir la fonction, puis de l'enregistrer pour la suite : la
première tabulation ne rend donc rien.
Une ligne suffit, placée après l'enregistrement pour que les deux chemins
marchent :
C'est une divergence avec l'amont, donc la raison part dans le fichier posé :
La divergence ne vaut que pour zsh, et un test le tient : bash source son
script au démarrage, fish le charge par fichier de complétion, ni l'un ni l'autre
ne passe par l'autoload en cause. Leurs scripts restent identiques à ceux de
typer.
#90 —
dsoxlab installpromettait d'installer l'outil déjà installécompletion installetcompletion showapparaissent.installreste, prévientet fait le même travail :
Le wrapper n'est plus écrit du tout. Deux défauts vécus tenaient à ce
fichier, et le retirer les clôt tous les deux :
exec, faute de quoting ;write_text()sur un lien symbolique écrit dans la cible :on ne remplaçait pas le lien de
uv, on remplaçait son binaire réel par unscript pointant sur lui-même. Il avait fallu une mutation pour le voir ([P0] Le wrapper écrit par
dsoxlab installcasse dès que le chemin contient une espace #68).uv tool installetpipxposent leur lanceur exactement là : le remplacer nefaisait que défaire ce que leur prochaine mise à jour remettrait.
Les deux tests du wrapper, remplacés et non supprimés
Ils éprouvaient un fichier qui n'existe plus : les garder les rendrait verts sans
rien mesurer. Un test tient désormais la décision (
~/.local/binreste vide,et la complétion est bien posée), et son docstring garde ce que les deux
précédents avaient appris, piège du lien symbolique compris.
Type of change
Tabd'une session ne propose rien, et se lit comme « la complétion ne marche pas » #134)dsoxlab installau profit dedsoxlab completion install#90)dsoxlab installau profit dedsoxlab completion install#90)Checklist
Always
uv run ruff check src/dsoxlab tests tests_e2e fuzz scripts— All checks passed!uv run mypy src/dsoxlab— no issues in 60 source filesuv run pytest— 597 passed ;tests_e2e— 16 passedWhen behavior changes
uv.lockrégénéréen 0.3.0, dans le CHANGELOG, dans le message et dans le
fullhelpWhen a command or option is added, removed or changed
fullhelpEN et FR, simultanémentfullhelpne décrit plusinstallcomme la façon d'installer l'outilscripts/generer-doc.pyWhen
.github/workflows/is touched — N/AWhen the declarative contract changes — N/A
Ce que le test unitaire ne prouve pas, et pourquoi il existe quand même
L'issue est explicite : un appel direct au mécanisme de complétion ne traverse
pas la couche en cause. La preuve est donc la vérification sous
pseudo-terminal, ci-dessus. Le test unitaire a un autre rôle, complémentaire :
empêcher que la ligne disparaisse d'un coup d'éditeur, ce qu'aucun test de
complétion ne verrait. Il vérifie aussi qu'elle reste après l'enregistrement,
et que la raison part bien dans le fichier livré.
Un bruit relevé en chemin
tests/test_services.py::test_deux_services_se_joignent_par_leur_nomettest_post_start_execute_vraiment_dans_le_conteneursont instables souscharge : ils ont échoué pendant que d'autres conteneurs tournaient, et repassent
seuls comme en suite complète. Ils dépendent de vrais conteneurs Docker et rien
ici n'y touche. J'ouvre une issue séparée plutôt que de le laisser sous le tapis.
Related issues
Closes #90
Closes #134
Clôt le cycle ouvert par #67 et #68, dont cette PR retire la cause commune.
🤖 Generated with Claude Code