Prettier 3.9.0, publié le 27 juin 2026 dans un billet de 37 minutes de Fisker Cheung, est inhabituel pour une release Prettier : le point fort n'est pas une nouvelle option de config ou un CLI plus rapide, ce sont cinq mises à niveau de parseurs qui atterrissent d'un coup. Markdown, YAML, GraphQL, Flow et Angular passent tous à des parseurs upstream plus récents, et le formateur JavaScript et TypeScript reçoit un retravail qui se manifestera par un diff dans la plupart des repos. Si vous traitez la sortie de Prettier comme stable, 3.9 est une release à déployer délibérément et en épinglant la version exacte.
Cinq parseurs, une release
Le changement Markdown est celui que la plupart des utilisateurs vont sentir. Le parseur Markdown de Prettier passe de l'obsolète remark-parse v8 à micromark v4, le parseur CommonMark moderne. Les notes de version présentent cela comme une « conformité CommonMark et GFM significativement améliorée » plus de « nombreux bugs de parsing de longue date » résolus, et ça pose des fondations plus propres pour le travail futur. Une réserve : la migration du parseur MDX n'est pas encore terminée, et l'équipe demande aux contributeurs familiers de l'écosystème unified et de micromark de l'achever.
YAML passe à yaml v2, qui corrige de nombreux problèmes de parsing de longue date, avec mention du travail de ota-meshi sur yaml-unist-parser. GraphQL passe à GraphQL.js v17, qui ajoute le support de syntaxes plus récentes : les arguments de fragment (...dynamicProfilePic(size: $size)) et les directives sur les définitions de directive et extend directive, qui produisaient tous deux une erreur ou un mauvais parsing sur 3.8.
La mise à niveau de Flow est le point fort en performance. Prettier utilise maintenant le nouveau parseur Flow (oxidized) basé sur Rust publié par l'équipe Flow. Dans les benchmarks parser-only locaux de Prettier, le nouveau parseur a formaté les fixtures Flow valides de Prettier en une médiane de 266,4 ms contre 422,6 ms pour l'ancien parseur, et a parsé flow_parser.js en 1298,0 ms contre 2269,6 ms. Soit environ 37 % et 43 % plus rapide, et c'est la même direction de frontends natifs en Rust que le projet a explorée via ses plugins OXC et Hermes et que l'écosystème au sens large prend avec Oxc et SWC.
Le formateur JavaScript et TypeScript a changé
Les mises à niveau de parseurs font la moitié de la release ; l'autre moitié est un lot de changements du formateur qui vont produire un diff. Le plus notable est un vieux bug d'idempotence en --no-semi. Sur 3.8, un break ou continue suivi d'un commentaire de ligne produisait une sortie différente au premier et au deuxième passage, donc lancer Prettier deux fois pouvait continuer à modifier le fichier. Sur 3.9, la gestion des commentaires autour de break et continue est stable entre les passages.
Une courte liste des autres changements du formateur :
- Parenthèses redondantes supprimées dans les
return, doncreturn (a, b)n'est plus réécrit enreturn ((a, b)). - Interpolations de template réalignées dans les tagged templates, en évitant les sauts de ligne inattendus et en corrigeant l'alignement dans les blocs CSS-in-template-literal.
- Inlining des négations logiques :
!(...)dans les conditionsif/while/do..whileest inliné pour réduire le diff quand une condition bascule vers sa valeur niée, corrigeant un cas réel de double parenthèse dans le codebase de Prettier lui-même. - Doubles espaces de fin préservés dans le JSDoc, parce que certains outils les traitent comme significatifs.
- Placement des commentaires autour des listes d'arguments d'appel vides et des callees entre parenthèses corrigé.
Rien de tout ça n'est un changement de config, mais ensemble ils signifient qu'un prettier --write . après l'upgrade va reformater des fichiers.
Le vrai breaking change : les import assertions
La release retire le support de la syntaxe legacy import ... assert {} :
- import foo from "./foo.json" assert { type: "json" };
+ import foo from "./foo.json" with { type: "json" };
La raison est en amont : Babel 8 a complètement supprimé le support du mot-clé legacy assert (le vieux plugin de parseur a disparu), et sans le support du parseur Babel, Prettier ne peut plus analyser ni formater cette syntaxe de façon fiable. Le standard actuel est le mot-clé with de la proposition import attributes. Si votre codebase utilise encore assert, migrez avant l'upgrade ; Prettier renvoie à sa clause de non-responsabilité sur la syntaxe non standard pour le contexte.
Des correctifs CLI à connaître
Quelques correctifs CLI complètent la release. --cache-strategy content était silencieusement cassé : file-entry-cache v11 a renommé l'option useChecksum en useCheckSum (S majuscule), et Prettier passait encore l'ancienne casse, donc la comparaison de cache basée sur le contenu était désactivée et seule la taille du fichier était comparée. C'est maintenant corrigé, donc le cache basé sur le contenu fonctionne à nouveau.
Prettier arrête aussi de chercher les fichiers EditorConfig au-dessus des worktrees Git : un fichier .git (utilisé dans les worktrees et les submodules) est maintenant traité comme un marqueur de racine de projet au même titre qu'un répertoire .git, donc un EditorConfig d'un répertoire parent n'influence plus le formatage d'un worktree. Deux corrections de crash gèrent les noms de répertoires et de fichiers avec des caractères spéciaux (noms entre crochets comme username[repo-name], et guillemets en tête), et le CLI expérimental reçoit des mises à jour.
Ce qu'il faut surveiller
Le conseil pratique est simple : épinglez la version exacte. Les notes de version répètent la recommandation habituelle d'utiliser "prettier": "3.9.0" plutôt que ^3.9.0, parce que les changements Markdown, YAML, GraphQL et JS/TS produisent tous des diffs de sortie, et qu'un range en caret peut tirer un nouveau minor qui reformate tout un projet sur une install fraîche. Si vous utilisez @prettier/plugin-oxc ou @prettier/plugin-hermes, mettez-les à niveau en même temps pour que les nouvelles règles de formatage s'appliquent.
Deux choses à tester avant de valider l'upgrade : toute documentation Markdown ou MDX (le passage à micromark est le changement le plus large), et tout code lourd en Flow ou en GraphQL. La migration MDX est toujours ouverte, donc la sortie MDX en particulier mérite un diff attentif. Le changelog complet est sur la vue compare, et 3.9.1 a suivi le même jour avec des correctifs de suivi.



