46 lines
2.5 KiB
Markdown
46 lines
2.5 KiB
Markdown
<!-- file: docs/rules/RULES_RUST.md -->
|
|
<!-- version: 1 -->
|
|
|
|
# Règles Rust générales
|
|
|
|
## Base
|
|
|
|
- **RUST-BASE-001** — L'édition Rust est Rust 2024.
|
|
- **RUST-BASE-002** — Chaque `lib.rs` et `main.rs` active `missing_docs`, `unreachable_pub` et interdit `unsafe_code`.
|
|
- **RUST-BASE-003** — Les lints communs sont déclarés au workspace et hérités par les crates.
|
|
- **RUST-BASE-004** — Le code `unsafe` est interdit sauf future exception normative extrêmement ciblée et justifiée.
|
|
- **RUST-BASE-005** — Tout fichier Rust possède les en-têtes `// file: ...` et `// version: N`.
|
|
|
|
## Documentation et API
|
|
|
|
- **RUST-DOC-001** — Tout élément `pub` ou `pub(crate)` possède une rustdoc utile au point de déclaration.
|
|
- **RUST-DOC-002** — Toute réexportation visible depuis le crate-root possède une rustdoc adjacente.
|
|
- **RUST-DOC-003** — La façade d'une crate doit permettre de consommer son API sans dépendre des chemins internes de modules.
|
|
|
|
## Imports et façade
|
|
|
|
- **RUST-IMPORT-001** — Les éléments partagés appartenant à la crate sont consommés via `crate::Item` après réexport au crate-root.
|
|
- **RUST-IMPORT-002** — Les autres crates consomment l'API via `owner_crate::Item` et non via des modules internes.
|
|
- **RUST-IMPORT-003** — Aucun `pub mod` n'est utilisé pour exposer indirectement une arborescence interne.
|
|
- **RUST-IMPORT-004** — Les glob imports sont interdits.
|
|
- **RUST-IMPORT-005** — Les alias de réexport destinés à masquer des collisions de noms sont interdits ; les symboles reçoivent un nom canonique non ambigu.
|
|
|
|
## Contrôle de flux et erreurs
|
|
|
|
- **RUST-FLOW-001** — Les retours sont explicites ; le lint Clippy `implicit_return` est refusé.
|
|
- **RUST-FLOW-002** — `unwrap()` et `expect()` sont interdits dans le code de production.
|
|
- **RUST-FLOW-003** — L'opérateur `?` est interdit ; les chemins d'erreur restent explicites.
|
|
- **RUST-FLOW-004** — `panic!` n'est pas utilisé pour une erreur métier récupérable.
|
|
|
|
## Formatage
|
|
|
|
- **RUST-FMT-001** — `rustfmt.toml` racine est canonique.
|
|
- **RUST-FMT-002** — `cargo fmt --all -- --check` fait partie des gates.
|
|
- **RUST-FMT-003** — La largeur maximale canonique est 160 caractères.
|
|
|
|
## Tests
|
|
|
|
- **RUST-TEST-001** — Les tests unitaires restent proches de la crate ou du module testé.
|
|
- **RUST-TEST-002** — Les tests d'intégration résident sous `tests/` de la crate concernée.
|
|
- **RUST-TEST-003** — Les tests ne rendent pas artificiellement publique une API privée.
|