Aller au contenu

Activer l'autocomplétion Castor sur l'hôte

Cette recette installe l'autocomplétion de la commande castor dans votre shell sur votre machine hôte, en dehors du devcontainer. À l'issue, taper castor suivi de Tab proposera la liste des cibles définies dans castor.php, et castor cs: proposera les sous-cibles.

Dans le devcontainer, rien à faire

L'image du devcontainer active déjà l'autocomplétion castor pour toutes les sessions bash interactives via /etc/bash.bashrc. Voir Autocomplétion Castor pour le détail. Cette page ne concerne que l'hôte.

Prérequis

  • Castor installé sur votre hôte (castor --version doit répondre).
  • L'un des shells supportés : bash, zsh ou fish.
  • Pour bash uniquement : le paquet bash-completion doit être installé. Sans lui, castor <Tab> échoue sur _get_comp_words_by_ref: command not found car le script généré par castor completion bash (basé sur Symfony Console) s'appuie sur cette fonction helper fournie par /usr/share/bash-completion/bash_completion.

    sudo apt-get install bash-completion
    
    brew install bash-completion@2
    
    sudo dnf install bash-completion
    

    Sur la plupart des distributions Linux desktop modernes, bash-completion est installé par défaut — vérifiez avec dpkg -l bash-completion (Debian/Ubuntu) ou type _get_comp_words_by_ref dans un shell. zsh et fish n'ont pas ce prérequis (leur framework de complétion est intégré au shell).

castor completion est une commande native de Castor (Symfony Console). Elle imprime sur la sortie standard un script de complétion statique : pas besoin d'être dans un dossier contenant castor.php pour le générer ou l'évaluer.

Méthode dynamique — eval dans le fichier de configuration du shell

C'est la méthode recommandée : le script est régénéré à chaque ouverture de shell, donc toujours à jour avec la version de castor installée.

echo 'eval "$(castor completion bash)"' >> ~/.bashrc
exec "$SHELL"
echo 'eval "$(castor completion zsh)"' >> ~/.zshrc
exec "$SHELL"
castor completion fish > ~/.config/fish/completions/castor.fish
exec fish

Sous fish, le fichier est chargé automatiquement par la convention ~/.config/fish/completions/ — pas besoin d'eval dans config.fish.

Pour vérifier, ouvrez un nouveau terminal et tapez :

castor <Tab><Tab>

Vous devez voir la liste des cibles disponibles. Si castor.php est présent dans le CWD, les cibles du projet s'affichent en plus des cibles globales ; sinon, seules les cibles globales (--help, --version, etc.) sont proposées — c'est attendu.

Méthode statique — fichier dans bash_completion.d

Si vous préférez un fichier de complétion installé une fois pour toutes (et ne plus dépendre d'un eval au démarrage du shell), générez-le et déposez-le dans le dossier standard de complétion bash :

# Système avec /etc/bash_completion.d (requiert sudo)
castor completion bash | sudo tee /etc/bash_completion.d/castor > /dev/null

# Variante par utilisateur (pas de sudo)
mkdir -p ~/.local/share/bash-completion/completions
castor completion bash > ~/.local/share/bash-completion/completions/castor

Ouvrez un nouveau terminal pour que bash-completion recharge ses définitions.

À régénérer après une mise à jour de Castor

Avec la méthode statique, le script est figé à la version de Castor au moment de la génération. Si vous mettez Castor à jour et qu'une nouvelle option ou cible globale apparaît, regénérez le fichier. La méthode dynamique (eval) n'a pas ce souci.

Désinstaller

Retirez la ligne eval "$(castor completion …)" de ~/.bashrc, ~/.zshrc ou supprimez ~/.config/fish/completions/castor.fish. Puis exec "$SHELL".

Supprimez /etc/bash_completion.d/castor (ou ~/.local/share/bash-completion/completions/castor). Puis ouvrez un nouveau terminal.

Et ensuite ?