@@ -8,8 +8,7 @@ Les concepts abordés dans cet exemple sont:
...
@@ -8,8 +8,7 @@ Les concepts abordés dans cet exemple sont:
1.[La documentation.](#la-documentation)
1.[La documentation.](#la-documentation)
2.[Les tests.](#les-tests)
2.[Les tests.](#les-tests)
3.[Les tests de documentation.](#les-tests-de-documentation)
3.[Les outils en plus du compilateur](#les-outils-en-plus-du-compilateur)
4.[Les outils en plus du compilateur](#les-outils-en-plus-du-compilateur)
## Discussion
## Discussion
...
@@ -89,18 +88,130 @@ ligne de documentation (on peut également utiliser la syntaxe `/*! ... */`), co
...
@@ -89,18 +88,130 @@ ligne de documentation (on peut également utiliser la syntaxe `/*! ... */`), co
#### Markdown
#### Markdown
La documentation supporte la syntaxe du [Common Markdown](https://commonmark.org/)
La documentation supporte la syntaxe du [Common Markdown](https://commonmark.org/) comme on peut le voir dans le code ci-dessus. On a en particulier
la possibilité de mettre des titres avec des `#` ou du code avec des code fences. Il est également possible de mettre des liens vers
d'autres parties de la documentation (avec les annotations tu type `[MyStruct]`) ce qui fait de la syntaxe un outil très puissant et intégré fortement au processus de développement.
#### Génération de la documentation
#### Génération de la documentation
Tout ce travail
Tout ce travail d'annotation du code source permet d'utiliser `rustdoc` qui est un outil puissant de génération de documentation
sous la forme principal d'un site web. Dans le répertoire où se trouve le fichier `Cargo.toml`, on peut exécuter la commande
```bash
cargo doc
```
et cela va générer la documentation dans un sous répertoire du projet. On peut également automatiquement ouvrir la
documentation dans un navigateur à l'aide de la commande
```bash
cargo doc --open
```
### Les tests
### Les tests
### Les tests de documentation
La documentation aide grandement à la (ré-)utilisation d'une librairie et à son développement (collaboratif ou non).
Durant le processus de développement, il est également très utile (et important) d'écrire des tests pour le code.
Rust propose un framework de tests totalement intégré au langage. On peut ainsi très facilement écrire
des fonctions de test en ajoutant l'annotation #[test] directement au dessus de n'importe quelle fonction
On constate que dans notre implémentation, il est nécessaire que `T` implémente également
le trait `PartialEq`. Ainsi, deux `Nothing` sont égales, un `Nothing` et un `Something` sont différentes, et seulement quand les deux valeurs encapsuleés dans deux `Something` sont égales
alors nous avons égalité.
On peut également vouloir construire des tests qui échouent comme dans l'exemple ci-dessous
Pour ce faire, il faut créer un module, `mod test` et l'annoter avec une configuration spéciale `#[cfg(test)]`. Cela permet de séparer les tests totalement du reste du code et devoir
importer les différentes implémentations.
#### Rapport sur l'exécution des tests
Lors de l'appel à `cargo test` tous les tests sont exécutés et un rapport est généré. Sur
test result: ok. 5 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
```
### Les outils en plus du compilateur
### Les outils en plus du compilateur
La chaîne de compilation Rust vient avec deux autres outils très pratiques (en plus de `cargo` et `rustdoc`): `rustfmt` un formatteur de code, et `clippy` un linter.
#### `rustfmt`
Rust a fait le choix fasciste de définir des tas de conventions pour le nommage
des variables, des types, etc. L'outil `rustfmt` permet de formatter automatiquement
le code pour avoir un style uniforme au travers de tout votre code et ainsi améliorer
sa lisibilité.
#### `clippy`
L'outil `clippy` est un détecteur automatique de mauvaise pratiques de codage, telles que définies
par la communauté du Rust. Il permet d'écrire du code le plus idiomatique possible
et en général d'éviter des mauvaises pratiques et/ou de simplifier