Files
games/docs/rules/RULES_RUST.md
2026-09-16 01:01:09 +02:00

47 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- file: docs/rules/RULES_RUST.md -->
<!-- version: 2 -->
# 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** — Lorsquun delta modifie du code Rust, `cargo fmt --all` est exécuté avant la gate afin dappliquer `rustfmt.toml`; les seules modifications produites par cette commande ne nécessitent pas dincrémenter len-tête `// version: N` des fichiers concernés.
- **RUST-FMT-003** — `cargo fmt --all -- --check` vérifie ensuite que létat livré est conforme au formatage canonique.
- **RUST-FMT-004** — 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.