Chaque guide décrit une tâche, du début à la fin. Pour savoir ce qu’est chaque partie, voir la Référence technique ; pour le pourquoi, voir Comprendre l’architecture.
Une modification est terminée quand le code est écrit, que ses tests couvrent les cas d’échec autant que le cas qui fonctionne, que son coût est mesuré là où un budget s’applique, et que la documentation en parle — en anglais et en français.
Ajouter un réglage
- Ajoutez le champ à
Settingsdanscrates/kve-config/src/settings.rs, avec un commentaire de documentation qui explique à quoi il sert. - Donnez-lui sa valeur dans
resources/settings/defaults.toml, avec un commentaire au-dessus : c’est ce fichier que lit l’utilisateur. Sans valeur, les tests échouent. - Donnez-lui une valeur fixe dans
resources/settings/for-tests.toml; un test vérifie que les deux fichiers ont les mêmes clés. - Écrivez-le dans
Settings::annotated— une lignesetting(&mut out, "nom", …), dans l’ordre du fichier. - Expliquez-le dans les deux catalogues,
settings.<nom>danscrates/kve-config/locales/en-US.ymletfr-FR.yml. Un test refuse un réglage sans explication. - Lisez-le là où il sert. Dans
kve-ui, une vue qui n’est pas la fenêtre le demande à la fenêtre via un accesseur, plutôt que d’en garder une copie. - Mentionnez-le dans l’exemple de réglages du README et sur la page utilisateur
qui décrit la fonction. La page de référence des réglages est générée :
make sitel’écrit.
Ajouter une commande
- Déclarez son action avec les autres, en haut de
crates/kve-ui/src/window.rs. - Ajoutez-la au registre dans
crates/kve-config/src/command.rs: unid(file.ma_commande), une portée,label_key: "command.file.ma_commande", un raccourci par défaut ouNone, et un groupe si elle va dans un sous-menu. - Nommez-la dans les deux catalogues, sous
command.<id>. - Associez l’identifiant à l’action dans
crates/kve-ui/src/menu.rset, si elle a un raccourci, dansbindings()dewindow.rs. - Traitez-la : une méthode d’
EditorWindow, branchée avec.on_action(cx.listener(Self::ma_commande))dans le rendu de la fenêtre. - Testez la méthode, et le raccourci avec
cx.simulate_keystrokes(…)s’il en a un. La page de référence des raccourcis est générée à partir du registre.
Ajouter un texte visible par l’utilisateur
- Ajoutez une clé dans
en-US.ymlet la même dansfr-FR.yml, chacune rédigée dans sa langue plutôt que traduite mot à mot. - Utilisez-la avec
kve_config::tr("clé"), ou ajoutez une fonction danscrates/kve-config/src/lib.rssi le texte prend des paramètres (rust_i18n::t!("clé", nom = nom)). - N’écrivez jamais une phrase en Rust. Un test échoue si les clés des catalogues diffèrent.
Mesurer quelque chose de nouveau
- Ajoutez un
Measurement::of(nom, pourquoi, budget, itérations, préparation)danscrates/kve-bench/src/main.rs.pourquoidit d’où vient le budget : une image (16 ms), le traitement d’une saisie (4 ms), ou une action demandée une seule fois. - Construisez ce qui est mesuré à la taille qui compte — 2 000 cartes, 10 000 fichiers, un document de 480 Ko — dans la préparation, et ne mesurez que l’opération elle-même.
- Lancez
cargo run --release --locked -p kve-bench. Un budget dépassé est un résultat, pas une gêne : trouvez pourquoi avant de toucher au budget. - Consignez les chiffres dans
docs/perf/, avec ce qui les a fait changer. - Pour un coût à l’intérieur d’une fenêtre, ajoutez une ligne avec
crate::timing::timed(…): elle ne s’affiche que siKVE_TIMINGS=1est défini.
Tester une fenêtre
- Dans
kve-ui, écrivez un#[gpui::test]qui ouvre une fenêtre aveca_window_with(chemin, réglages, cx)— surediting_alone()ou un autre jeu de réglages fixe, jamais sur les vraies valeurs par défaut. - Agissez par les méthodes de la fenêtre dans
handle.update(cx, …), ou aveccx.simulate_keystrokes(handle.into(), "ctrl-s")etsimulate_input. - Attendez :
cx.run_until_parked(), précédé decx.executor().advance_clock(…)pour tout ce qui est différé. - Pour vérifier où un élément est dessiné, donnez-lui un
.debug_selector(|| "nom".into()), dessinez avecVisualTestContext::from_window, et lisezdebug_bounds("nom"). - Faites échouer le test une fois, correction retirée, avant de le garder.
Regarder la vraie fenêtre
-
make build, puiscargo build -p kve-drive. -
tools/drive.sh start chemin/vers/fichier— souscage, invisible ; ajoutez--nestedpour la voir sur votre bureau. Faites pointerXDG_CONFIG_HOMEetXDG_DATA_HOMEvers un dossier jetable pour ne pas toucher à vos propres réglages. -
Pilotez-la avec un script sur l’entrée standard —
move,click,drag,key,type,scroll,sleep:tools/drive.sh run <<'EOF' move 640 400 sleep 200 click key ctrl+s EOFDéplacez d’abord le pointeur et marquez une pause avant un
clickseul : un clic à un endroit où le pointeur n’est pas encore allé est perdu. -
tools/drive.sh shot capture.png, puistools/drive.sh stop.
Refaire une capture d’écran du site
python3 tools/doc-shots.py fr whiteboard refait une scène dans une langue ;
sans argument, toutes les scènes dans les deux langues. Chacune s’exécute sur un
projet de démonstration construit par le script : pour changer une scène, on
modifie le script, jamais l’image.
Changer une dépendance
- Modifiez la version dans le
Cargo.tomlde l’espace de travail, puis mettez à jour cette crate seulement :cargo update -p nom. Jamais decargo updatesans argument. - Lancez
make check, etkve-benchà part si la crate est sur un chemin mesuré. - Consignez les chiffres dans
docs/perf/et commitezCargo.lockavec la modification. La chaîne de compilation derust-toolchain.tomlse change de la même façon.
Changer une adresse, un nom ou le responsable du paquet
- Modifiez
project.toml, à la racine — le seul endroit où chacun est écrit. make sync, pourCargo.tomlet le fichier metainfo ; le site, le script de publication et le paquet lisent le fichier au moment où ils tournent.cargo test -p kve-config --test projectconfirme que toutes les copies concordent.
Publier une version
tools/release.sh check 1.0.0— ne modifie rien, indique ce qui n’est pas prêt.tools/release.sh prepare 1.0.0— inscrit la version partout et laisse un squelette de notes de version ; rédigez-les.tools/release.sh finish 1.0.0— les vérifications, le commit, l’étiquette, l’archive, le.debet le site, dansdist/. Poussez, téléversez et déployez ensuite vous-même : le script affiche les commandes et n’en lance aucune.