Files
games/docs/rules/RULES_RUST.md

3.4 KiB
Raw Blame History

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.
  • RUST-DEP-001 — Une dépendance tierce partagée déclare uniquement sa contrainte de version canonique sous [workspace.dependencies], sauf exception normative explicitement documentée.
  • RUST-DEP-002 — Les features d'une dépendance tierce sont activées dans le Cargo.toml de la crate qui en a réellement besoin, via workspace = true; elles ne sont pas activées globalement au workspace par commodité.
  • RUST-DEP-003 — Une feature plateforme, telle que use-pkg-config, reste portée par la crate d'adaptation plateforme concernée et ne contamine pas les crates qui consomment seulement les abstractions du moteur.

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-002unwrap() 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-004panic! n'est pas utilisé pour une erreur métier récupérable.

Formatage

  • RUST-FMT-001rustfmt.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-003cargo 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.