De la lisibilité du code
J'ai repris un de mes anciens codes (en Rust, mais le langage importe peu en fait) et j'ai eu du mal à le relire.
Un des gros problème est qu'il est mal organisé et, de facto, manque de lisibilité.
Un peu par hasard, je suis tombé sur les règles imposés pour la rédaction du Noyau Linux. Elles sont adaptées au C, mais peuvent facilement être adaptées à d'autres langages.
Indentation
Pour plus de lisibilité, il est conseillé d'utiliser une indentation à 8 espaces. Ce qui est la valeur par défaut dans Neovim. On peut arguer qu'avec 8, on va vite arriver au bout de l'écran, mais si c'est le cas on a plus de trois niveaux d'indentation ce qui est un problème en soit.
Rust de son côté préconise 4sans réel argumentaire.
Dans Vim
vim.opt.expandtab = true -- remplace les tabulations par des espaces
vim.opt.tabstop = 8 -- nombre d'espaces pour une tabulation
vim.opt.shiftwidth = 8 -- nombre d'espaces utilisé par l'indentation
vim.opt.smartindent = true -- indentation automatique à la création d'une nouvelle ligne
vim.opt.smarttab = true -- sur un backspace, supprime l'équivalent d'une tabulation plutôt qu'un espace
Limiter la longueur des lignes
Pour Linux il est conseillé 80 caractères, Rust propose 100. Les deux cas se valent, l'intérêt est d'avoir au seuil indiquant quand cela devient trop long (et donc moins lisible) et qu'il faut réorganiser.
Dans Vim, on peut avoir cet indicateur avec cette option :
vim.opt.colorcolumn = "80,100"
Formatage automatique pour les fichiers Rust
Pour aider, on peut utiliser une outil pour formater automatiquement le code après une sauvegarde.
Dans mon cas, j'utilise rustfmt.
Dans Neovim, le plugin rustaceanvim inclue lui-même rust.vim. Grâce à ça, en rajoutant la ligne suivante dans le fichier de configuration de Neovim, rustfmt est appelé à chaque sauvegarde du fichier
vim.g.rustfmt_autosave = 1
Il est possible de paramétrer rustfmt en créant un fichier rustfmt.toml à la racine du projet.
Voici le mien (les configurations instables ne sont pas encore utilisables chez moi) :
# https://rust-lang.github.io/rustfmt/?version=v1.8.0&search=
reorder_imports = true # Trier les imports
fn_params_layout = "vertical" # Affiche les paramètres des fonctions en colonne
max_width = 80 # Limite la taille des lignes à 80 caractères
## Unstable
# comment_width= 80 # Limite la taille des commentaires à 80 caractères
# imports_layout = "Vertical" # Organise les imports en colonne
# error_on_line_overflow = true # Renvoie une erreur en cas de ligne trop longue
# force_multiline_blocks = true # Force à décomposer les blocks en plusieurs lignes