Un seul formateur pour les gouverner tous : HTML, CSS, SCSS, Less, JavaScript, JSON/JSONC, Smarty, Twig, Liquid et YAML.
Extension VS Code basée sur Prettier 3, avec des règles en dur : aucun .prettierrc, .editorconfig ou .stylelintrc du projet n'est lu. Tout le monde formate de la même façon, quel que soit le projet.
src/rules.js contient les options Prettier de chaque langage (largeur, indentation, quotes…).
src/format.js choisit le formateur selon le langage du document et charge Prettier à la demande.
- En cas d'erreur de syntaxe, le document n'est pas modifié : le message s'affiche dans la barre d'état et le détail dans Output → One Format.
Règles CSS / SCSS / Less
src/prettier-plugin.js remplace les parseurs CSS de Prettier pour appliquer d'abord les règles de src/css-rules.js (reprises du .stylelintrc Antadis). Elles s'appliquent aussi aux <style> dans le HTML et les templates.
| Règle |
Exemple |
Propriétés triées par ordre alphabétique (par groupe, sans traverser un @include ou un bloc imbriqué) |
color; background → background; color |
| Pas d'unité après 0 |
0px → 0 |
| Couleur hexadécimale courte |
#ffffff → #fff |
| Transparence en pourcentage |
rgba(0,0,0,.5) → rgba(0,0,0,50%) |
| Opacité en nombre |
opacity: 80% → opacity: 0.8 |
| Valeurs redondantes supprimées |
margin: 0 1px 0 1px → margin: 0 1px |
Pseudo-éléments avec :: |
:before → ::before |
@include sans parenthèses vides |
@include foo() → @include foo |
| Doublons supprimés |
même propriété, même valeur |
| Lignes vides |
jamais entre déclarations ; avant les blocs, @-règles, $variables et --custom-properties |
Pour exclure un nœud : /* prettier-ignore */ (ou // prettier-ignore en SCSS/Less) juste avant. Son bloc n'est alors pas trié.
Templates (Smarty, Twig, Liquid)
src/template.js masque les balises du moteur, formate le résultat comme du HTML, puis restaure les balises et indente les blocs :
- une balise seule sur sa ligne devient un commentaire HTML le temps du formatage et garde sa ligne ;
- une balise dans le texte ou dans un attribut devient un jeton de même longueur ;
<script>, <style>, <textarea> et <pre> contenant une balise, ainsi que les blocs littéraux ({literal}, {% verbatim %}, {% raw %}, {% comment %}, {% schema %}…), sont conservés tels quels ;
- un tag est considéré comme un bloc (et indente son contenu) seulement si sa fermeture existe dans le fichier (
{/if}, {% endif %}…).
Spécificités :
- Twig / Liquid : un espace à l'intérieur des délimiteurs (
{{x}} → {{ x }}), modificateurs - / ~ conservés.
- Liquid : le contenu de
{% stylesheet %} et {% javascript %} est formaté avec les règles CSS / JS ; un {% liquid %} multi-ligne est indenté selon ses blocs.
Diagnostics en direct
Pendant la frappe (après oneFormat.liveDiagnosticsDelay ms sans frappe), l'extension analyse les documents ouverts :
- CSS / SCSS / Less : avertissement (souligné jaune) sur chaque règle non respectée, avec le nom de la règle stylelint correspondante ;
- tous les langages : erreur (souligné rouge) en cas de syntaxe invalide.
Une correction rapide (Ctrl+.) Formater le document (One Format) est proposée sur les avertissements.
Configuration du settings.json
L'extension se déclare déjà formateur par défaut pour ses langages, mais un réglage utilisateur ou une autre extension (Prettier, Twig Language…) peut prendre le dessus. À ajouter dans le settings.json utilisateur (Ctrl+Maj+P → Preferences: Open User Settings (JSON)) :
{
// Formater à l'enregistrement
"editor.formatOnSave": true,
// One Format comme formateur de ses langages
"[html][css][scss][less][javascript][json][jsonc][smarty][twig][liquid][yaml]": {
"editor.defaultFormatter": "antadis.one-format"
},
// Options de l'extension (valeurs par défaut)
"oneFormat.liveDiagnostics": true,
"oneFormat.liveDiagnosticsDelay": 300
}
| Réglage |
Défaut |
Description |
oneFormat.liveDiagnostics |
true |
Souligne en direct les erreurs de syntaxe et les règles CSS/SCSS/Less non respectées. |
oneFormat.liveDiagnosticsDelay |
300 |
Délai (ms) sans frappe avant l'analyse. |
Remarques :
Commande
- One Format : formater le document (
Ctrl+Maj+P), équivalent de Maj+Alt+F.
Ligne de commande
bin/one-format.js applique les mêmes règles hors VS Code (PhpStorm, CI, hooks git) :
node bin/one-format.js fichier.scss templates/*.twig # formate sur place
node bin/one-format.js --check templates/**/*.twig # liste les fichiers non formatés (code 1)
node bin/one-format.js --stdin fichier.yaml < in > out # stdin → stdout, l'extension donne le langage