| 📦 Turbo Golo d710c1b k33g 13h ago | 1 | # Activer la complétion Golo |
| 2 | |
| 3 | Ce guide montre comment obtenir la complétion, les survols, l'aller-à-la-définition et les marques d'erreur. Il suppose que Turbo Golo est déjà installé. |
| 4 | |
| 5 | La complétion vient de **`golo lsp`** — l'interpréteur GoloScript lui-même, démarré en mode serveur de langage. Il n'y a pas de serveur séparé à installer : une machine qui peut exécuter un script Golo peut en compléter un. Turbo Golo n'embarque pas l'interpréteur pour autant : l'édition et la coloration marchent sans lui, et seules la complétion et les marques d'erreur manquent. |
| 6 | |
| 7 | ## 1. Installer golo |
| 8 | |
| 9 | Soit un binaire depuis la [page des releases](https://codeberg.org/TypeUnsafe/golo-script/releases) : |
| 10 | |
| 11 | ```bash |
| 12 | chmod +x golo-<version>-<plateforme> |
| 13 | sudo mv golo-<version>-<plateforme> /usr/local/bin/golo |
| 14 | golo --version |
| 15 | ``` |
| 16 | |
| 17 | soit une construction depuis les sources, qui donne aussi les deux compilateurs : |
| 18 | |
| 19 | ```bash |
| 20 | git clone https://codeberg.org/TypeUnsafe/golo-script.git && cd golo-script |
| 21 | ./install.sh |
| 22 | ``` |
| 23 | |
| 24 | L'installeur de Turbo Golo fera la seconde pour vous : `scripts/install.sh --with-server`. [Installer GoloScript](install-goloscript.md) donne le détail. |
| 25 | |
| 26 | ## 2. S'assurer que Turbo Golo le trouve |
| 27 | |
| 28 | Turbo Golo regarde d'abord sur le `PATH`, puis dans `/usr/local/bin`, où écrit l'installeur de GoloScript. Vérifiez : |
| 29 | |
| 30 | ```bash |
| 31 | golo --version |
| 32 | ``` |
| 33 | |
| 34 | ``` |
| 35 | v0.1.1 | dev.20260802.🤓 |
| 36 | ``` |
| 37 | |
| 38 | Si cela dit « command not found » mais que Turbo Golo le trouve quand même, c'est attendu et sans conséquence : l'éditeur a cherché dans `/usr/local/bin` lui-même. |
| 39 | |
| 40 | ## 3. Ouvrir un script |
| 41 | |
| 42 | ```bash |
| 43 | cd /chemin/vers/vos/scripts |
| 44 | turbo-golo main.golo |
| 45 | ``` |
| 46 | |
| 47 | Golo n'a pas de manifeste de projet, il n'y a donc rien à chercher : `golo lsp` est démarré dans le répertoire du fichier que vous avez ouvert, et il répond à propos de ce fichier. L'endroit d'où vous lancez l'éditeur ne change rien à la complétion — il décide où s'exécutent les commandes du menu Golo, ce qui est une autre affaire. |
| 48 | |
| 49 | ## 4. Demander une complétion |
| 50 | |
| 51 | Tapez les premières lettres d'un nom et appuyez sur **Ctrl-Espace** : |
| 52 | |
| 53 | ```golo |
| 54 | prin |
| 55 | ``` |
| 56 | |
| 57 | Une liste se déroule sous le curseur — `print`, `println`, avec leurs signatures. Continuez à taper pour la réduire, **↑ ↓** pour la parcourir, **Entrée** ou **Tab** pour accepter, **Échap** pour l'écarter. |
| 58 | |
| 59 | ## Ce que contient la liste |
| 60 | |
| 61 | `golo lsp` propose quatre sortes de choses : |
| 62 | |
| 63 | | Proposé | Exemple | |
| 64 | | --- | --- | |
| 65 | | Les mots-clés | `function`, `foreach`, `augment` | |
| 66 | | Les builtins de l'interpréteur, avec leurs signatures et leur documentation | `println`, `readFile`, `httpGet`, `DynamicObject` | |
| 67 | | Les fonctions et unions déclarées **au premier niveau** du fichier | votre propre `function helper = …` | |
| 68 | | Les symboles apportés par `import` depuis les modules embarqués dans le binaire | `Some`, `None`, `isSome`, `either` après `import gololang.Errors` | |
| 69 | |
| 70 | Deux choses n'y sont délibérément **pas**, et toutes deux ressemblent à un serveur cassé quand on ne le sait pas : |
| 71 | |
| 72 | - **Une fonction déclarée dans une autre fonction.** Seules les déclarations de premier niveau sont collectées. Sortez-la, ou acceptez qu'elle ne soit pas proposée. |
| 73 | - **Tout ce qui vient d'un fichier `.golo` à vous.** `import` résout les modules intégrés à l'interpréteur — `gololang.Errors`, `gololang.Types`, `gololang.Ui`, `gololang.Testing`, … — et rien sur le disque. Une fonction dans `lib/util.golo` n'est pas vue depuis `main.golo`. |
| 74 | |
| 75 | ## Vérifier ce que fait le serveur |
| 76 | |
| 77 | L'extrémité droite de la barre d'état montre l'état du serveur de langage : `LSP: starting…`, `LSP: ready`, ou la raison pour laquelle il n'y en a pas : |
| 78 | |
| 79 | ``` |
| 80 | LSP: no golo — see https://codeberg.org/TypeUnsafe/golo-script/releases |
| 81 | ``` |
| 82 | |
| 83 | `Run ▸ Language server status` montre la même chose dans une boîte, avec le chemin où le binaire a été trouvé et le répertoire où il a été démarré. |
| 84 | |
| 85 | ## Variantes |
| 86 | |
| 87 | **Vous ne voulez aucun serveur de langage :** |
| 88 | |
| 89 | ```bash |
| 90 | turbo-golo -no-lsp main.golo |
| 91 | ``` |
| 92 | |
| 93 | **La complétion est morte dans une fenêtre née sans nom.** Une fenêtre « Untitled » n'a aucun fichier à annoncer à `golo lsp` tant qu'elle n'est pas enregistrée — appuyez sur **F2** et donnez-lui un nom en `.golo`. 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. |
| 94 | |
| 95 | **La liste est vide.** `golo lsp` répond pour n'importe quel fichier, y compris un qui ne parse pas — il liste les mots-clés et les builtins quoi qu'il arrive — une liste vide signifie donc presque toujours que le serveur ne tourne pas. Lisez la barre d'état. |
| 96 | |
| 97 | **Ctrl-Espace ne fait rien.** tmux, screen et les terminaux des IDE s'approprient fréquemment `Ctrl-Espace` avant que l'éditeur le voie. Utilisez `Run ▸ Completion` à la place. |
| 98 | |
| 99 | **Une requête prend trop longtemps.** Chaque requête abandonne après quelques secondes, un serveur bloqué ralentit donc l'éditeur mais ne le fige jamais. La barre d'état signale l'échec. |
| 100 | |
| 101 | **Vous avez installé golo à un endroit inhabituel.** L'éditeur cherche sur le `PATH` et dans `/usr/local/bin`, et nulle part ailleurs — aucune variable d'environnement ne nomme un autre répertoire. Mettez le répertoire sur le `PATH`, ou un lien symbolique dans `/usr/local/bin`. |
| 102 | |
| 103 | ## Ce que le serveur donne d'autre |
| 104 | |
| 105 | La complétion est la chose la plus bruyante qu'il fait et la moindre de ce qu'il sait. La même connexion répond à quatre autres questions, toutes dans le menu **Code** — trois à propos du symbole sous le curseur, aucune sélection nécessaire, et une à propos d'un nom que vous tapez. |
| 106 | |
| 107 | | Touche | Ce qu'elle fait | Avec `golo lsp` | |
| 108 | | --- | --- | --- | |
| 109 | | **Ctrl-Espace** | La liste de complétion | oui | |
| 110 | | **F1** | Décrire le symbole sous le curseur | oui — pour une fonction que vous avez déclarée, les commentaires `#` écrits juste au-dessus ; pour un builtin, sa signature et un exemple | |
| 111 | | **F12** | Aller là où il est déclaré | oui, dans le fichier | |
| 112 | | **Shift-F12** | Lister tous ses usages | oui, dans le fichier : sa déclaration et chaque appel | |
| 113 | | **Ctrl-T** | Trouver un symbole par son nom dans tout le projet | oui : les fonctions, unions et noms de module de premier niveau de chaque fichier `.golo` sous la racine du projet, ouvert ou non | |
| 114 | |
| 115 | Et, sans touche : *Symbol in file…* liste les fonctions et unions de premier niveau du fichier, les variantes de chaque union imbriquées sous elle ; *Problems…* liste tous les diagnostics ; *Find implementations…* répond par la déclaration de la fonction, là où va **F12** — Golo n'a pas d'interfaces, une fonction est sa propre implémentation ; *Go to type definition* répond « rien trouvé ». |
| 116 | |
| 117 | La seule qui ne répond rien est la frontière du serveur, pas celle de l'éditeur : `golo lsp` annonce `completion`, `hover`, `definition`, `documentSymbol`, `references`, `implementation` et `workspaceSymbol`, et pas `typeDefinition`. Jusqu'à GoloScript v0.2.0 il n'annonçait que les quatre premiers et ce tableau le disait ; un test de ce dépôt a échoué le jour où le serveur s'est mis à répondre aux trois autres, et c'est ainsi que le tableau a été revu. L'entrée de menu reste parce que la griser selon ce qu'un serveur a dit au démarrage donnerait au menu une forme différente selon la machine, et le même genre de test échoue encore le jour où un futur golo répond aussi à la définition de type. |
| 118 | |
| 119 | ## Les marques d'erreur |
| 120 | |
| 121 | Les problèmes que le serveur trouve arrivent sans qu'on les demande, à l'ouverture et à chaque modification. 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 un `×` dans la gouttière ; et **Code ▸ Problems…** les liste toutes. |
| 122 | |
| 123 | `golo lsp` en signale trois sortes : |
| 124 | |
| 125 | - **Les erreurs de syntaxe** du lexer et du parseur — une accolade manquante, un token que le parseur n'accepte pas. Les messages du parseur portent une ligne et pas de colonne, la marque tombe donc sur la ligne entière ; un message sans ligne du tout tombe sur la ligne 1. |
| 126 | - **Une confusion `:`/`.`** — `obj.method()` là où Golo veut `obj: method()`. |
| 127 | - **Un commentaire à la C** — `//` ou `/* */`, que Golo n'a pas. Les commentaires Golo sont `#` et `----`. |
| 128 | |
| 129 | Un script qui parse puis échoue à l'exécution ne reçoit aucune marque : le serveur parse, il n'exécute jamais rien. |
| 130 | |
| 131 | [Interroger le code](ask-about-code.md) parcourt le menu Code. |
| 132 | |
| 133 | ## Voir aussi |
| 134 | |
| 135 | - Pourquoi le serveur est optionnel, et pourquoi l'interpréteur est le serveur : [Coloration et complétion](../explanation/colouring-and-completion.md) |
| 136 | - Installer l'interpréteur : [Installer GoloScript](install-goloscript.md) |
| 137 | - Toutes les touches : [référence du clavier](../reference/keyboard.md) |