Skip to content

Commit cadcef2

Browse files
authored
doc: update front guidelines for imports (#184)
1 parent b9922e2 commit cadcef2

File tree

2 files changed

+61
-7
lines changed

2 files changed

+61
-7
lines changed

content/docs/guides/contribute/contribute-code/frontend-conventions.en.md

+30-3
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,19 @@ A `.scss` file buried in the tree structure doesn't guarantee that the classes i
277277
278278
Prefer a judicious choice of root class name for a given module, and use the tree structure available in the SCSS file.
279279
280+
#### Imports must follow a specific order
281+
282+
ESLint is setup to automatically sort imports in four import groups, each of them sorted in alphabetical order :
283+
284+
- React
285+
- External libraries
286+
- Internal absolute path files
287+
- Internal relative path files
288+
289+
Each of these groups will be separated by an empty line.
290+
291+
ESLint will trigger a warning if you don't follow these guidelines.
292+
280293
#### Import links must be absolute
281294
282295
You must use the <u>full path</u> for all your imports.
@@ -287,7 +300,12 @@ You must use the <u>full path</u> for all your imports.
287300
288301
### import & export
289302
290-
We recommend using typed imports and exports.
303+
ESLint and Typescript are setup to enforce typed imports for an exported type.
304+
305+
This current setup allows to :
306+
307+
- Auto typing the import when using a type in a file with autocompletion.
308+
- Getting 2 errors from each package asking to use type import if you didn't.
291309
292310
When an `import` or `export` contains only types, indicate it with the `type` keyword.
293311
@@ -299,16 +317,25 @@ export type { Direction, DirectionalTrackRange as TrackRange };
299317
import type { typedEntries, ValueOf } from "utils/types";
300318
```
301319
320+
When an `import` contains not only types, it will be structured like below, in alphabetical order.
321+
322+
```typescript
323+
import {
324+
osrdEditoastApi,
325+
type ScenarioCreateForm,
326+
} from "common/api/osrdEditoastApi";
327+
```
328+
302329
This allows to:
303330
304331
- Improve the performance and analysis process of the compiler and the linter.
305332
- Make these declarations more readable; we can clearly see what we are importing.
306333
- Avoid dependency cycles:
307334
308-
![dependency cyle](/images/docs/contribute/dependency-cycle.png)
335+
![dependency cycle](/images/docs/contribute/dependency-cycle.png)
309336
310337
The error disappears with the `type` keyword
311338
312-
![dependency cyle](/images/docs/contribute/dependency-cycle-gone.png)
339+
![dependency cycle](/images/docs/contribute/dependency-cycle-gone.png)
313340
314341
- Make final bundle lighter (all types disappear at compilation)

content/docs/guides/contribute/contribute-code/frontend-conventions.fr.md

+31-4
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,19 @@ Un fichier `.scss` enfoui dans l'arborescence ne vous garantit pas que les class
277277
278278
Préférez un choix judicieux de nom de classe racine pour un module donné et utilisez l'arborescence possible dans le fichier SCSS.
279279
280+
#### Les imports doivent être triés d'une certaine manière
281+
282+
ESLint est configuré pour trier automatiquement les imports en 4 groupes, chacun trié alphabétiquement :
283+
284+
- React
285+
- Librairies externes
286+
- Fichiers internes en chemin absolu
287+
- Fichiers internes en chemin relatif
288+
289+
Chacun de ces groupes est séparé par une ligne vide.
290+
291+
ESLint déclenchera un avertissement si ces recommandations ne sont pas respectées.
292+
280293
#### Les liens des imports doivent être absolus
281294
282295
Vous devez utiliser le <u>chemin complet</u> pour tous vos imports.
@@ -287,9 +300,14 @@ Vous devez utiliser le <u>chemin complet</u> pour tous vos imports.
287300
288301
### import & export
289302
290-
Nous recommendons d’utiliser les imports et export typés.
303+
ESLint et Typescript sont configurés pour imposer l'`import type` pour un import de type.
304+
305+
Ceci permet de :
291306
292-
Lorsque qu’un `import` ou un `export` ne comporte que des types, l’indiquer par le mot clé `type`.
307+
- Automatiquement ajouter `type` devant l'import quand on ajoute un type avec l'autocomplétion dans un fichier.
308+
- Afficher 2 erreurs de chacun de ces packages demandant d'ajouter `type` devant l'import si vous ne l'avez pas fait.
309+
310+
Lorsque qu’un `import` ou un `export` ne comporte que des types, il faut l’indiquer par le mot clé `type`.
293311
294312
```typescript
295313
export type { Direction, DirectionalTrackRange as TrackRange };
@@ -299,16 +317,25 @@ export type { Direction, DirectionalTrackRange as TrackRange };
299317
import type { typedEntries, ValueOf } from "utils/types";
300318
```
301319
320+
Quand un import ne contient pas que des types, il sera agencé de cette manière, par ordre alphabétique.
321+
322+
```typescript
323+
import {
324+
osrdEditoastApi,
325+
type ScenarioCreateForm,
326+
} from "common/api/osrdEditoastApi";
327+
```
328+
302329
Cette pratique permet de&nbsp;:
303330
304331
- Améliorer les performances et le travail d’analyse du compilateur et du linter.
305332
- Rendre ces déclarations plus lisibles, on voit clairement ce qu’on est en train d’importer.
306333
- Éviter des cycles de dépendances&nbsp;:
307334
308-
![dependency cyle](/images/docs/contribute/dependency-cycle.png)
335+
![dependency cycle](/images/docs/contribute/dependency-cycle.png)
309336
310337
L’erreur disparaît avec le mot clé `type`
311338
312-
![dependency cyle](/images/docs/contribute/dependency-cycle-gone.png)
339+
![dependency cycle](/images/docs/contribute/dependency-cycle-gone.png)
313340
314341
- Alléger le bundle final (tous les types disparaissent à la compilation).

0 commit comments

Comments
 (0)