turbo-editors/turbo-jspublic Fork 0
5db4bb259f0dad5a8ecfe2179c6ded64548e2e4d
Commits
Clone
git clone https://git.rickub.com/turbo-editors/turbo-js.git
git clone ssh://git@rickub.com/turbo-editors/turbo-js.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

getting-started.md · 225 lines · 9.7 KBmarkdown Blame HistoryRaw
📦 Turbo JS 91999d1 k33g yesterday1# Tutoriel : votre premier programme Node dans Turbo JS
2
3À la fin de ce tutoriel, vous aurez écrit, lancé et cassé un petit programme Node sans quitter l'éditeur — et vu l'éditeur vous dire où était l'erreur.
4
5Aucune connaissance préalable de Turbo JS n'est nécessaire. Il vous faut Go 1.26 ou plus récent pour compiler l'éditeur, et Node pour exécuter le programme.
6
7## Prérequis
8
9Vérifiez Go :
10
11```bash
12go version
13```
14
15Vous devriez voir quelque chose comme :
16
17```
18go version go1.26.5 linux/arm64
19```
20
21Vérifiez Node et npm :
22
23```bash
24node --version && npm --version
25```
26
27```
28v24.19.0
2911.17.0
30```
31
32Si `node` est introuvable, installez-le d'abord — [un gestionnaire de versions ou un installeur suffit](../how-to/install-node.md).
33
34## Étape 1 — Installer l'éditeur et le serveur de langage
35
36```bash
37git clone https://rickub.com/turbo-editors/turbo-js.git
38cd turbo-js
39make install
40npm install -g typescript-language-server typescript@6
41```
42
43L'installeur compile, installe, puis vérifie ce qu'il a installé. Après le `npm install`, les dernières lignes d'un second `make install` sont :
44
45```
46==> Checking the language server
47 ✓ typescript-language-server at /usr/local/bin/typescript-language-server
48
49==> Ready
50```
51
52Nous avons maintenant une commande `turbo-js`. Le `@6` de la dernière ligne compte : TypeScript 7 ne fournit pas de `tsserver.js`, et le serveur refuse de démarrer à côté de lui.
53
54## Étape 2 — Créer un projet
55
56```bash
57mkdir /tmp/greeter
58cd /tmp/greeter
59npm init -y
60```
61
62Vous devriez voir le `package.json` que npm a écrit, qui se termine par :
63
64```
65 "type": "commonjs"
66}
67```
68
69C'est ce fichier qui fait de ce dossier un projet Node. **Le dossier dans lequel vous démarrez l'éditeur** est celui où les commandes du menu JavaScript s'exécuteront, et le `package.json` le plus proche au-dessus du fichier que vous ouvrez est celui où le serveur de langage est démarré — démarrez-le donc ici.
70
71## Étape 3 — Ouvrir un fichier qui n'existe pas encore
72
73```bash
74turbo-js main.js
75```
76
77L'écran se remplit. En haut :
78
79```
80 File Edit Search Run Code Options Window Snippets Agent JavaScript Help
81```
82
83Onze menus, et le dixième porte le nom du langage. Au milieu, une fenêtre vide intitulée `main.js`. En bas, à droite, vous devriez voir :
84
85```
861:1 LSP: ready
87```
88
89`LSP: ready` signifie que `typescript-language-server` a démarré dans ce dossier. Nous nous en servirons à l'étape 8.
90
91## Étape 4 — Écrire le programme
92
93Tapez ceci. Tapez-le exactement ; nous allons regarder les couleurs juste après.
94
95```javascript
96// A greeting, several times over.
97const { argv } = require("node:process");
98
99/** Greets one person. */
100class Greeter {
101 #name;
102
103 constructor(name) {
104 this.#name = name;
105 }
106
107 greet(times = 1) {
108 const pattern = /^[A-Z]/;
109 for (let i = 1; i <= times; i++) {
110 console.log(`Hello, ${this.#name}! (${i})`);
111 }
112 return pattern.test(this.#name);
113 }
114}
115
116const who = argv[2] ?? "JavaScript";
117new Greeter(who).greet(3);
118```
119
120Deux choses sur la saisie. **L'éditeur reprend l'indentation de la ligne précédente quand vous appuyez sur `Entrée`**, ne tapez donc que la différence : deux espaces de plus après une ligne qui se termine par `{`, et deux fois `Retour arrière` avant une `}` fermante. Et si une liste de complétion s'ouvre pendant que vous tapez — un `.` en demande une de lui-même, et `this.` en est un — continuez à taper ou appuyez sur `Échap` ; `Entrée` accepterait la première entrée.
121
122Appuyez sur `F2` pour enregistrer. La barre d'état affiche `Saved main.js`.
123
124## Étape 5 — Lire les couleurs
125
126Regardez ce que vous venez de taper. Dans le thème par défaut `turbo-classic` :
127
128| Quoi | Couleur |
129| --- | --- |
130| `const`, `class`, `for`, `let`, `return`, `new` | blanc vif, gras — mots-clés |
131| `Greeter`, là où il est déclaré comme là où il est appelé | cyan vif — une classe |
132| `constructor`, `greet`, `log`, `test` | jaune vif, gras — fonctions et méthodes |
133| `console`, `require` | cyan vif, gras — les globales que Node fournit |
134| `argv`, `name`, `times`, `who`, `#name` | jaune vif — noms ordinaires |
135| `"node:process"`, `` `Hello, ${this.#name}! (${i})` `` | vert — chaînes |
136| `/^[A-Z]/` | vert — une expression régulière, dessinée avec la couleur des chaînes dans ce thème |
137| `1`, `3`, `this` | magenta — nombres et constantes |
138| `// A greeting…`, `/** Greets one person. */` | gris — commentaires |
139| `=`, `<=`, `++`, `??`, `{`, `}`, `.` | blanc — opérateurs et ponctuation |
140
141Trois de ces lignes méritent un second regard.
142
143**`Greeter` est cyan et `greet` est jaune**, et personne n'a dit à l'éditeur lequel des deux est une classe. C'est la convention de JavaScript qui tranche : les classes sont les noms que l'on écrit avec une majuscule, une majuscule est donc colorée comme une classe — même dans `new Greeter(who)`, où une parenthèse suit.
144
145**`/^[A-Z]/` est une expression régulière, pas deux divisions.** Le scanner lit le `=` qui la précède et sait qu'une barre oblique à cet endroit ouvre un littéral. Remplacez la ligne par `const half = times / 2;` et la barre oblique redevient blanche.
146
147**`#name` est un seul nom**, `#` compris, et il est jaune là où un commentaire serait gris — [une règle délibérée](../explanation/colouring-and-completion.md), parce que `#` ouvre un commentaire dans la moitié des autres langages que cet éditeur colore.
148
149## Étape 6 — Donner ses outils au projet
150
151Appuyez sur `F10` pour ouvrir la barre de menus, puis sur `` **neuf fois** pour atteindre **JavaScript** — après Edit, Search, Run, Code, Options, Window, Snippets et Agent. Plus rapide : `Alt-J`.
152
153Le menu contient deux entrées, et une seule est disponible :
154
155```
156┌───────────────────┐
157│ Create tools file │
158│ Open tools file │ ← grisée ; il n'y a pas encore de fichier à ouvrir
159└───────────────────┘
160```
161
162Choisissez **Create tools file**.
163
164Une seconde fenêtre s'ouvre sur le fichier qui vient d'être écrit, `.turbo-js/tools.toml`. Lisez-le si vous voulez — il explique chacune de ses clés — puis fermez-le avec `Ctrl-W`.
165
166Regardez la barre de menus : un menu **Tools** est apparu entre JavaScript et Help. La dernière entrée du fichier de départ nomme un menu à elle, et cette seule ligne est tout le mécanisme.
167
168Rouvrez le menu JavaScript. Il contient maintenant six commandes, et les deux entrées ont échangé leurs rôles : `Create tools file` est grisée, et c'est `Open tools file` qui est choisissable.
169
170## Étape 7 — Le lancer
171
172Appuyez sur `Alt-J` et choisissez **Run**. Une boîte demande une valeur avant de lancer la commande, parce qu'un projet Node n'a pas de point d'entrée unique que l'éditeur pourrait connaître :
173
174```
175┌──────────────── Run ────────────────┐
176│ script, e.g. main.js │
177│ [ ] │
178└─────────────────────────────────────┘
179```
180
181Tapez `main.js` et appuyez sur `Entrée`. Une fenêtre de terminal s'ouvre et le programme s'y exécute :
182
183```
184Hello, JavaScript! (1)
185Hello, JavaScript! (2)
186Hello, JavaScript! (3)
187```
188
189Un terminal plutôt qu'une boîte de dialogue, parce qu'un programme qui lit le clavier doit pouvoir recevoir une réponse. Le programme est terminé, la fenêtre a donc cessé de se comporter comme un terminal et toutes les touches reviennent à l'éditeur : appuyez sur `Ctrl-W` pour la fermer.
190
191## Étape 8 — Le casser, et voir où
192
193Allez à la dernière ligne, `new Greeter(who).greet(3);`, et supprimez sa parenthèse fermante, pour qu'elle devienne :
194
195```javascript
196new Greeter(who).greet(3;
197```
198
199Appuyez sur `F2` pour enregistrer.
200
201En moins d'une seconde, deux choses se produisent. Un `×` apparaît dans la gouttière, juste à gauche du numéro de cette ligne. Et la barre d'état affiche :
202
203```
204⚠ ')' expected.
205```
206
207Personne ne l'a demandé. `typescript-language-server` le publie de lui-même chaque fois que le fichier change — c'est ce que le serveur fait pour un simple fichier `.js` : il trouve les erreurs de syntaxe. Remettez la parenthèse et enregistrez de nouveau ; la marque et le message disparaissent tous les deux.
208
209Placez maintenant le curseur sur `greet` dans cette dernière ligne et appuyez sur `F1`. Une boîte intitulée **Symbol** s'ouvre avec la signature de la méthode, qui commence par `(method) Greeter.greet(times?: number)` — le serveur a déduit le type du paramètre de sa valeur par défaut et le type de retour de la ligne `return pattern.test(…)`, dans un langage qui n'a jamais déclaré ni l'un ni l'autre. Appuyez sur `Échap` pour la fermer, puis sur `F12` sur le même mot : le curseur saute à la ligne où `greet` est déclarée.
210
211## Étape 9 — Changer de thème
212
213`F10`, puis `` **cinq fois** pour atteindre **Options** — après Edit, Search, Run et Code. Choisissez **Theme…**.
214
215Une liste s'ouvre sur le thème dans lequel vous êtes, `turbo-classic`. Appuyez sur `` jusqu'à ce que `cobalt` soit sélectionné — cinq fois — puis `Entrée`. Tout l'écran change, en gardant la même forme.
216
217Appuyez sur `Alt-X` pour quitter. L'éditeur pose d'abord la question des fichiers non enregistrés, s'il y en a.
218
219## Et maintenant ?
220
221Vous avez écrit un programme Node dans l'éditeur, l'avez lancé, cassé, et vu l'éditeur dire où. Pour aller plus loin :
222
223- Pour faire des choses précises → les [guides pratiques](../how-to/)
224- Pour savoir exactement ce qui est coloré et comment → [langages colorés](../reference/languages.md)
225- Pour comprendre pourquoi l'éditeur est bâti ainsi → les [explications](../explanation/)