Ce que fait .editorconfig
Trois ingénieurs sur le même repo, trois éditeurs différents : VS Code sur Windows qui ajoute des CRLF, vim sur Linux avec tabulations de 4 espaces, JetBrains sur macOS avec un override personnel de largeur de tabulation. Trois semaines plus tard, le diff est plein de changements d'espaces blancs invisibles, chaque PR a du bruit, le blame devient inutile.
Un fichier `.editorconfig` est le correctif simple. C'est une config unique à la racine du repo que chaque éditeur moderne lit automatiquement (VS Code, JetBrains, vim, emacs, Sublime, Atom) : quel style d'indentation, combien d'espaces, quelle fin de ligne, quel charset, faut-il supprimer les espaces en fin de ligne, faut-il ajouter une nouvelle ligne finale. Pas de plugin à installer pour les éditeurs populaires, pas de config par développeur.
Ce générateur écrit ce fichier pour vous. Choisissez un preset pour votre stack (JavaScript / TypeScript, Python, Go, Polyglot, Windows-friendly, Strict Linux), ajustez les défauts si vous voulez, ajoutez des overrides par pattern pour les fichiers qui ont besoin de règles différentes (`Makefile` veut toujours des tabulations, `*.md` devrait garder les espaces en fin de ligne parce que c'est comme ça que les sauts de ligne sont encodés), copiez ou téléchargez comme `.editorconfig`, committez. Fait en deux minutes.
Comment l'utiliser
- Choisissez un preset en haut : JavaScript / TypeScript, Python, Go, Polyglot, Windows-friendly, Strict Linux. Chaque preset remplit des défauts sensés que vous pouvez changer.
- Laissez root = true activé. Cela dit aux éditeurs "arrête de chercher en remontant l'arborescence". Sans, un `.editorconfig` plus haut dans la hiérarchie (par ex. dans votre répertoire home) peut écraser le vôtre.
- Éditez la **section par défaut [*] : quel charset, end_of_line, insert_final_newline, trim_trailing_whitespace, indent_style, indent_size, max_line_length**.
- Ajoutez des overrides par pattern pour les fichiers qui ont besoin de règles différentes. `Makefile` doit utiliser de vraies tabulations (Make refuse les tabulations converties en espaces). **`*.md` devrait garder les espaces en fin de ligne (markdown encode les sauts de ligne comme deux espaces de fin). `*.go`** utilise typiquement des tabulations de largeur 4.
- Pour les repos Windows-only avec des scripts shell, vous pouvez mélanger les fins : **`*.{ps1,bat,cmd}` = crlf, `*.sh` = lf**. Des fins de ligne incompatibles sur les fichiers `.sh` cassent l'exécution sur Linux.
- Videz un champ en cliquant sur "keep" dans la barre segmentée. La clé sera omise de la sortie pour cette section, donc la valeur d'une section parente (ou le défaut de l'éditeur) gagne.
- Cliquez sur Copy ou Download pour enregistrer comme `.editorconfig`, puis committez à la racine de votre repo. Chaque IDE le prend à l'ouverture suivante, pas besoin d'installation pour les populaires.
Quand c'est utile
Six situations concrètes où ajouter un .editorconfig fait gagner du vrai temps à votre équipe :
- Premier commit dans un nouveau repo. Choisissez le bon preset pour votre stack, déposez `.editorconfig` à la racine, committez. Chaque éditeur ouvrant ce repo désormais utilise la même indentation et fins de ligne sans que personne ait à configurer.
- Équipe multi-OS (Windows + macOS + Linux). La source la plus courante de PRs "diff spurieux" est les fins de ligne. Définir `end_of_line = lf` une fois tue toute la catégorie, peu importe la magie autocrlf de git.
- Onboarder un nouveau développeur. Ils clonent le repo, ouvrent dans leur éditeur de choix, et l'indentation marche. Pas de surprises "attends, pourquoi mon IDE indente avec 4 espaces ici ?".
- Projet open-source qui accepte des PRs externes. Les contributeurs externes utilisent des éditeurs aléatoires. Sans `.editorconfig`, la moitié des PRs ont besoin d'un suivi "fix whitespace". Avec, le diff de la PR est juste le vrai changement.
- Repo avec plusieurs langages. Python veut 4 espaces, JS veut 2, Go veut des tabulations de 4, YAML veut 2 espaces, les Makefiles veulent des tabulations littérales. Un `.editorconfig` avec quelques blocs par pattern couvre tous en vingt lignes.
- Hook pre-commit pour les espaces blancs. Combiné à un hook pre-commit (le framework `pre-commit` a une intégration `editorconfig-checker`), les règles deviennent exécutoires au lieu de juste suggérées.