Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

mdBook : Numérotation automatique des codes Rust

Paramétrage mdBook

Pour permettre l’affichage des numérotations automatiques des lignes des blocs de code, nous devons ajouter la ligne :

line-numbers=true

dans l’espace

[output.html.playground]

dans le fichier book.toml.

Ce qui donne par exemple :

[output.html.playground]
editable = true
line-numbers=true

Nota bene : la ligne editable = true est également nécessaire.

Astuce paramétrage sans prise de tête…

Un détail qui peut avoir son importance : si nous avons utilisé la clef playground.editable = true dans la section [output.html], et que nous tentons d’ajouter

[output.html.playground]
line-numbers = true

le compilateur signale un conflit.

Pour nous simplifier la tâche, nous pouvons tout écrire à plat dans le fichier sans section aucune.

C’est moins structuré, mais le compilateur ne nous prend plus la tête pour rien…

book.title = "Apprendre et maîtriser mdBook"
book.authors = ["Marc JESTIN"]
book.language = "fr"
output.html.additional-css = ["custom.css"]
output.html.sidebar-header-nav = false
output.html.mathjax-support = true
output.html.playground.line-numbers = true
output.html.playground. editable = true
rust.edition = "2024"

Activation de la numérotation automatique dans un bloc de codes

Pour que la numérotation puisse se faire, le code doit être marqué editable.

```rust,editable
use std::any::type_name;

fn type_of<T>(_: T) -> &'static str {
	type_name::<T>()
}

fn main() {
	let x = 11;
	let y = 11.;
	let z = "Merci";
    
	println!("Type de x définie par let x = 11 : {}", type_of(x));
	println!("Type de y définie par let y = 11. : {}", type_of(y));
	println!("Type de z définie par let z = \"Merci\" : {}", type_of(z));
}
```

produit par exemple :

use std::any::type_name;

fn type_of<T>(_: T) -> &'static str {
	type_name::<T>()
}

fn main() {
	let x = 11;
	let y = 11.;
	let z = "Merci";
    
	println!("Type de x définie par let x = 11 : {}", type_of(x));
	println!("Type de y définie par let y = 11. : {}", type_of(y));
	println!("Type de z définie par let z = \"Merci\" : {}", type_of(z));
}

Masquage de parties du code

Grâce à cette colonne de numérotation des lignes du code Rust dans le bloc de code, nous disposons de la fonction de masquage de certains blocs dans le code Rust affiché comme dans un EDI.

Par exemple ici, nous pouvons masquer ou afficher les parties de code entre accolades des fonctions en cliquant sur les petits triangles.

Plus besoin de `numbered` dans le code source

Si j’ai bonne mémoire (je me base sur la version 2023 de ce livre), fut un temps, il convenait d’ajouter le mot clef option numbered (lignes numérotées) à l’option editable également obligatoire pour afficher la colonne de numérotation automatique des codes dans le bloc de codes, comme ceci :

```rust,editable,numbered
(...)
```
Comment ne pas numéroter des blocs `editable` ?

C’était mieux avant…

Dorénavant, pour que mdBook ne numérote pas les lignes d’un bloc de code que nous souhaitons rendre editable, et bien, comment dire…

On l’a dans l’cul !

Il existe des solutions :

  1. Nous pouvons installer un pré-processeur indépendant pour gérer les numérotations de lignes, mais mes expériences personnelles avec les outils greffés à mdBook n’est pas de nature à me mettre en confiance pour travailler de la sorte.
  2. Nous pouvons ajouter nos propres scripts JavaScript pour modifier le comportement par défaut.

Sauf que : mdBook devrait être un fer de lance de la communauté Rust, pas un boulet à la traîne qu’il faut patcher de toutes parts pour obtenir un résultat convenable.

À noter que :

  • d’un côté nous ne pouvons pas décider que tous les blocs de codes sont editable dans avoir besoin de l’ajouter pour chaque bloc de code qui doit l’être (ce qui est, en soi, parfaitement débile et pénible, soit dit en passant) ;
  • de l’autre ils·elles ont décidé qu’à l’inverse, nous n’avons plus besoin de préciser les blocs de codes pour lesquels nous souhaitons ajouter une numérotation des lignes.
  • Deux positions RADICALEMENT OPPOSÉES !

La communauté Rust n’est pas immunisée contre les dissonances cognitives ni contre la débilité, je le crains…