| 📦 Turbo Rust 713ea5c k33g 14h ago | 1 | # Activer la complétion Rust |
| 2 | |
| 3 | Ce guide montre comment faire fonctionner la complétion, les descriptions de symboles et le saut à la définition. Il suppose que Turbo Rust est déjà installé et que vous savez ce qu'est une caisse Cargo. |
| 4 | |
| 5 | La complétion vient de **rust-analyzer**, le serveur de langage officiel de Rust. Turbo Rust ne l'embarque pas : l'édition et la coloration fonctionnent sans lui, et seule la complétion est perdue. |
| 6 | |
| 7 | ## 1. Installer rust-analyzer |
| 8 | |
| 9 | ```bash |
| 10 | rustup component add rust-analyzer |
| 11 | ``` |
| 12 | |
| 13 | ## 2. S'assurer que Turbo Rust le trouve |
| 14 | |
| 15 | Turbo Rust cherche d'abord dans le `PATH`, puis dans `$GOBIN`, puis dans `$GOPATH/bin`. `go install` écrit dans le dernier, qui n'est très souvent pas dans le `PATH` — c'est pourquoi cela marche en général sans rien faire de plus. Pour vérifier : |
| 16 | |
| 17 | ```bash |
| 18 | rust-analyzer version |
| 19 | ``` |
| 20 | |
| 21 | Si cette commande répond « introuvable » alors que Turbo Rust le trouve quand même, c'est normal et sans conséquence. |
| 22 | |
| 23 | ## 3. Ouvrir un fichier à l'intérieur d'un module |
| 24 | |
| 25 | ```bash |
| 26 | cd /chemin/vers/votre/module # le répertoire qui contient Cargo.toml |
| 27 | turbo-rust main.rs |
| 28 | ``` |
| 29 | |
| 30 | Turbo Rust remonte l'arborescence depuis le fichier à la recherche d'un `Cargo.toml` et démarre rust-analyzer dans le répertoire trouvé. **Hors d'un module, rust-analyzer n'a presque rien à dire** — c'est la raison la plus fréquente pour laquelle la complétion semble ne pas fonctionner. |
| 31 | |
| 32 | ## 4. Demander une complétion |
| 33 | |
| 34 | Placez le curseur après un point et appuyez sur **Ctrl-Espace** : |
| 35 | |
| 36 | ```go |
| 37 | fmt. |
| 38 | ``` |
| 39 | |
| 40 | Une liste se déroule sous le curseur. Continuez à taper pour la restreindre, **↑ ↓** pour la parcourir, **Entrée** ou **Tab** pour accepter, **Échap** pour l'abandonner. |
| 41 | |
| 42 | Taper un `.` demande une complétion tout seul : la plupart du temps, vous n'appuyez sur rien. |
| 43 | |
| 44 | ## Savoir ce que fait le serveur |
| 45 | |
| 46 | L'extrémité droite de la barre d'état indique l'état du serveur de langage : `LSP: starting…`, `LSP: ready`, ou la raison pour laquelle il n'y en a pas. `Run ▸ Language server status` affiche la même chose dans une boîte. |
| 47 | |
| 48 | ## Variantes |
| 49 | |
| 50 | **Vous ne voulez pas de serveur de langage du tout :** |
| 51 | |
| 52 | ```bash |
| 53 | turbo-rust -no-lsp main.rs |
| 54 | ``` |
| 55 | |
| 56 | **La complétion est morte dans une fenêtre née sans nom.** Une fenêtre « Untitled » n'a aucun fichier à annoncer à rust-analyzer tant qu'elle n'est pas enregistrée — appuyez sur **F2** et donnez-lui un nom en `.rs`, quelque part sous le crate. Dès cette sauvegarde, la complétion, le survol et les marques d'erreur fonctionnent dans cette fenêtre ; inutile de quitter et relancer l'éditeur. |
| 57 | |
| 58 | **La complétion est vide dans un fichier qui compile.** rust-analyzer a besoin que le paquet du fichier se construise. Vérifiez d'abord `cargo build` — un paquet qui ne compile pas ne donne souvent rien d'utile. |
| 59 | |
| 60 | **La première complétion sur un gros module est lente.** rust-analyzer charge le graphe du module. La barre d'état affiche `LSP: starting…` jusqu'à ce qu'il soit prêt ; les requêtes faites avant sont refusées plutôt que mises en file. |
| 61 | |
| 62 | **Une requête met trop de temps.** Chaque requête abandonne au bout de trois secondes : un serveur bloqué ralentit l'éditeur mais ne le fige jamais. La barre d'état signale l'échec. |
| 63 | |
| 64 | **La liste est vide dans un fichier qui ne compile pas.** rust-analyzer ne répond *rien du tout* — pas d'erreur, une liste vide — pour un paquet qu'il ne peut pas charger. Une déclaration en double ou un import non résolu suffit. L'éditeur indique désormais quel problème fait obstacle : |
| 65 | |
| 66 | ``` |
| 67 | No completions — this file does not compile: main redeclared in this block |
| 68 | ``` |
| 69 | |
| 70 | `Run ▸ Language server status` affiche la même chose, avec le chemin du serveur, la racine du projet et l'information de savoir si ce fichier lui a été annoncé. Corrigez d'abord le paquet — `cargo build` est la vérification la plus rapide. |
| 71 | |
| 72 | **Ctrl-Espace ne fait rien.** tmux, screen et les terminaux intégrés d'IDE interceptent très souvent `Ctrl-Espace` avant l'éditeur. Tapez plutôt un `.`, qui demande une complétion tout seul, ou passez par `Run ▸ Completion`. |
| 73 | |
| 74 | ## Ce que le serveur apporte d'autre |
| 75 | |
| 76 | La complétion est ce qu'il fait de plus bruyant et le moindre de ce qu'il sait. La même connexion répond à huit autres questions, toutes dans le menu **Code** et toutes à propos du symbole sous le curseur — aucune sélection n'est nécessaire. |
| 77 | |
| 78 | | Touche | Effet | |
| 79 | | --- | --- | |
| 80 | | **Ctrl-Espace** | Liste de complétion | |
| 81 | | **F1** | Décrire le symbole sous le curseur | |
| 82 | | **F12** | Sauter là où il est déclaré | |
| 83 | | **Shift-F12** | Lister partout où il est utilisé | |
| 84 | | **Ctrl-T** | Trouver un symbole par son nom dans tout le projet | |
| 85 | |
| 86 | Et, sans touche : *Go to type definition*, *Find implementations…*, *Symbol in file…* et *Problems…*. |
| 87 | |
| 88 | Les problèmes qu'il trouve arrivent sans qu'on demande. La première erreur du fichier que vous éditez apparaît à droite de la barre d'état, précédée de `⚠` ; chaque ligne à problème reçoit une marque dans la gouttière (`×` pour une erreur, `!` pour un avertissement) ; et **Code ▸ Problems…** les liste tous, pour tous les fichiers que le serveur a chargés. |
| 89 | |
| 90 | [Comment interroger le code](ask-about-code.md) parcourt l'ensemble. |
| 91 | |
| 92 | ## Voir aussi |
| 93 | |
| 94 | - Pourquoi le serveur est optionnel : [Coloration et complétion](../explanation/colouring-and-completion.md) |
| 95 | - Toutes les touches : [référence du clavier](../reference/keyboard.md) |