| 📦 Turbo JS 91999d1 k33g 13h ago | 1 | # Comment interroger le code |
| 2 | |
| 3 | Ce guide montre comment suivre un nom dans un fichier JavaScript : ce que c'est, où il est déclaré, ce que déclare le fichier, et ce qui ne va pas. Il suppose Turbo JS installé et un serveur de langage en marche — la barre d'état affiche `LSP: ready` quand c'est le cas. |
| 4 | |
| 5 | Pour se déplacer dans un fichier — chercher, aller à une ligne, changer de fenêtre — voir plutôt [Comment se déplacer dans un fichier](navigate-code.md). |
| 6 | |
| 7 | ## Placez le curseur sur un nom |
| 8 | |
| 9 | N'importe lequel de ses caractères suffit. Chaque question ci-dessous porte sur la **position du curseur**, pas sur une sélection : il n'y a rien à surligner d'abord. |
| 10 | |
| 11 | ## Demandez |
| 12 | |
| 13 | | Pour trouver | Faites | Raccourci | |
| 14 | | --- | --- | --- | |
| 15 | | Ce que c'est | **Code ▸ Describe symbol** | `F1` | |
| 16 | | Où c'est déclaré | **Code ▸ Go to definition** | `F12` | |
| 17 | | Où son *type* est déclaré | **Code ▸ Go to type definition** | | |
| 18 | | Ce qui l'implémente | **Code ▸ Find implementations…** | | |
| 19 | | Partout où c'est utilisé | **Code ▸ Find references…** | `Shift-F12` | |
| 20 | |
| 21 | **Les cinq entrées répondent avec `typescript-language-server`.** Le serveur — un programme séparé, `typescript-language-server --stdio`, installé par `npm install -g typescript-language-server typescript@6` — annonce `typeDefinition`, `implementation` et `references` comme le reste : **Go to type definition** sur `const shape = new Circle()` mène à la classe `Circle`, **Find implementations** sur une classe liste ses sous-classes, et **Find references** donne la déclaration et chaque appel. Voir [coloration et complétion](../explanation/colouring-and-completion.md) pour ce que l'éditeur demande, et pourquoi. |
| 22 | |
| 23 | Le serveur est démarré à la **racine du projet** — le dossier du `package.json` le plus proche du fichier ouvert, ou le dossier courant s'il n'y en a aucun — et c'est ce projet qu'il connaît. |
| 24 | |
| 25 | **Describe symbol** sur une fonction que vous avez déclarée montre sa signature et le commentaire JSDoc — `/** … */` — écrit juste au-dessus d'elle : c'est là qu'il faut documenter. |
| 26 | |
| 27 | Une seule réponse vous y emmène directement. Plusieurs ouvrent une liste montrant le fichier, sa ligne, et le texte de cette ligne ; déplacez-vous aux flèches, `Entrée` pour y aller, `Échap` pour rester. |
| 28 | |
| 29 | ## Quand rien ne revient |
| 30 | |
| 31 | Trois choses se ressemblent, et la barre d'état les distingue : |
| 32 | |
| 33 | | Elle affiche | Signification | |
| 34 | | --- | --- | |
| 35 | | `No references found`, ou l'équivalent pour la question posée | Le serveur a répondu, et il n'y en a pas | |
| 36 | | Autre chose, par exemple `LSP: starting…` | Le serveur n'est pas encore prêt. Attendez un instant et redemandez. | |
| 37 | | `LSP: off` dans la barre d'état | Aucun serveur ne tourne. Voir [Comment activer la complétion](enable-completion.md). | |
| 38 | |
| 39 | La deuxième mérite d'être connue : un serveur qui démarre encore répond rien à toutes les questions, et c'est indiscernable d'une vraie réponse si l'éditeur ne le dit pas. |
| 40 | |
| 41 | ## Chercher par le nom |
| 42 | |
| 43 | - **Code ▸ Symbol in file…** liste ce que déclare le fichier devant vous, indenté, avec la sorte de chaque symbole — un plan que l'on parcourt. Pour du JavaScript : les fonctions et les classes du fichier. |
| 44 | - **Code ▸ Symbol in project…** (`Ctrl-T`) demande un nom et cherche partout dans le projet. Ce qui compte comme correspondance appartient au serveur. |
| 45 | |
| 46 | ## Voir ce qui ne va pas |
| 47 | |
| 48 | **Code ▸ Problems…** liste tous les problèmes signalés par le serveur, pour **tous les fichiers qu'il a chargés** — le plus souvent davantage que celui que vous éditez. En choisir un vous mène à la ligne. |
| 49 | |
| 50 | `typescript-language-server` publie ses diagnostics à l'ouverture d'un fichier et à chaque modification, sans qu'on lui demande. Pour un fichier `.js` ordinaire, ce sont les **erreurs de syntaxe** de son analyseur — un `function main( {` reçoit sa marque, et la barre d'état affiche le message derrière un `⚠`. Les erreurs de type demandent `// @ts-check` en tête du fichier, ou `checkJs` dans un `jsconfig.json` ; sans l'un ni l'autre, une faute de type ne reçoit aucune marque. |
| 51 | |
| 52 | Les lignes à problème portent une marque dans la gouttière, à côté du numéro de ligne : |
| 53 | |
| 54 | | Marque | Signification | |
| 55 | | --- | --- | |
| 56 | | `×` | Une erreur | |
| 57 | | `!` | Un avertissement | |
| 58 | | `i` | Une information | |
| 59 | | `·` | Une suggestion | |
| 60 | |
| 61 | Une ligne qui a plusieurs problèmes montre le pire d'entre eux. |
| 62 | |
| 63 | **Les marques ont besoin des numéros de ligne.** Elles occupent la colonne qui sépare les numéros du texte : masquer la gouttière avec **Options ▸ Line numbers** les masque aussi. |
| 64 | |
| 65 | ## Voir aussi |
| 66 | |
| 67 | - Chaque entrée et sa touche : [Menus](../reference/menus.md) |
| 68 | - Faire tourner un serveur : [Comment activer la complétion](enable-completion.md) |
| 69 | - Ce que l'éditeur demande, et pourquoi : [Coloration et complétion](../explanation/colouring-and-completion.md) |
| 70 | - Ce que `typescript-language-server` sait et ne sait pas répondre : [Outils JavaScript](../explanation/javascript-tools.md) |