Prettier 3.4 : De nombreux correctifs de bogues
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Cette version inclut de nombreux correctifs de bogues et autres améliorations.
Si vous appréciez Prettier et souhaitez soutenir notre travail, envisagez de nous sponsoriser directement via notre OpenCollective ou en soutenant les projets dont nous dépendons, comme typescript-eslint, remark et Babel. Merci pour votre soutien continu !
Autres changements
JavaScript
Correction de l'impression des littéraux de modèle avec des tableaux (#13315 par @fisker, @syi0808)
// Input
const string = `${[[1, 2], [3, 4]]}`
// Prettier 3.3
const string = `${[
[2],
[4],
]}`;
// Prettier 3.4
const string = `${[
[1, 2],
[3, 4],
]}`;
Ajout des parenthèses manquantes dans les littéraux de modèle étiquetés (#16500 par @syi0808)
// Input
(String?.raw)``;
(getTag?.())``;
// Prettier 3.3
String?.raw``;
getTag?.()``;
// Prettier 3.4
(String?.raw)``;
(getTag?.())``;
Ne pas supprimer les \ inutiles dans les littéraux de chaîne (#16563 par @sosukesuzuki, #16763 par @fisker)
Auparavant, Prettier supprimait les caractères d'échappement inutiles (\) des littéraux de chaîne. Cependant, ce comportement était incohérent car il ne s'appliquait pas aux littéraux de modèle, comme signalé dans l'issue #16542.
Cette issue est une demande de fonctionnalité pour étendre ce comportement aux littéraux de modèle également.
Après discussion interne, l'équipe Prettier a conclu que la suppression des caractères d'échappement inutiles, que ce soit dans les littéraux de chaîne ou de modèle, relève d'un linter, pas d'un formateur.
Ce changement désactive la suppression des caractères d'échappement inutiles dans les littéraux de chaîne pour tous les langages supportés par Prettier. Pour conserver le comportement précédent, nous recommandons d'utiliser des règles ESLint comme no-useless-escape.
Les guillemets échappés (par ex. "\"\'") peuvent être déséchappés lors du changement entre différents types de guillemets. Ceci est expliqué dans la page Rationale de la documentation officielle.
// Input
const str = "\a";
// Prettier 3.3
const str = "a";
// Prettier 3.4
const str = "\a";
Amélioration du formatage des commentaires pour les expressions logiques dans les expressions unaires (#16593 par @sosukesuzuki)
// Input
!(
cond1 || // foo
cond2 || // bar
cond3 // baz
);
// Prettier 3.3
!(
(
cond1 || // foo
cond2 || // bar
cond3
) // baz
);
// Prettier 3.4
!(
cond1 || // foo
cond2 || // bar
cond3 // baz
);
Suppression du support pour la syntaxe expérimentale (#16643, #16705 par @fisker)
-
DecimalLiteral- La proposition Decimal a décidé de ne pas introduire de nouvelle syntaxe. Le plugindecimalsera retiré de Babel 8. -
importReflection- La proposition "Import Reflection" a été renommée en "Source Phase Imports"
TypeScript
Ajout des parenthèses manquantes dans les littéraux de modèle étiquetés (#16500 par @syi0808)
// Input
(String?.raw!)``;
(String?.raw)!``;
// Prettier 3.3
String?.raw!``;
String?.raw!``;
// Prettier 3.4
(String?.raw)!``;
(String?.raw)!``;
Conserver un commentaire entre un décorateur et une propriété de paramètre modifiée (#16574 by @sosukesuzuki)
La version actuelle de Prettier déplace de manière inattendue un commentaire en ligne entre une propriété de paramètre modifiée par readonly, private, public, etc. et un décorateur. Ce résultat produit un code TypeScript invalide.
Ce changement garantit que le format original est conservé.
// Input
class Foo {
constructor(
@decorator
// comment
readonly foo,
) {}
}
// Prettier 3.3
class Foo {
constructor(
@decorator
readonly // comment
foo,
) {}
}
// Prettier 3.4
class Foo {
constructor(
@decorator
// comment
readonly foo,
) {}
}
Conserver un commentaire entre le modificateur et le nom de la propriété décorée (#16578 by @sosukesuzuki)
Il existait un bogue où les commentaires de bloc entre le modificateur et le nom d'une propriété décorée étaient traités comme des commentaires de fin de décorateur. Ce comportement était non seulement inattendu mais aussi non idempotent.
Avec ce changement, la position du commentaire de bloc entre le modificateur et le nom de la propriété est conservée.
// Input
class Foo {
@decorator
readonly /* comment */ propertyName;
}
// Prettier 3.3
class Foo {
@decorator /* comment */
readonly propertyName;
}
// Prettier 3.3 (second output)
class Foo {
@decorator /* comment */ readonly propertyName;
}
// Prettier 3.4
class Foo {
@decorator
readonly /* comment */ propertyName;
}
Ne pas ajouter de saut de ligne supplémentaire pour les fonctions fléchées avec paramètre de type dans une assignation (#16586 by @sosukesuzuki)
Il existait un bogue où une ligne supplémentaire était insérée lors de l'assignation d'une fonction fléchée chaînée avec paramètres de type à une variable lorsqu'un commentaire en ligne la précédait.
Ce changement garantit que cette ligne supplémentaire n'est plus insérée.
// Input
const foo1 =
// comment
<T,>() => () => 1;
// Prettier 3.3
const foo1 =
// comment
<T,>() =>
() =>
1;
// Prettier 3.4
const foo1 =
// comment
<T,>() =>
() =>
1;
Prise en charge des "instructions await de haut niveau" (#16729 by @fisker)
// Input
(await (await fetch()).json()).foo
// Prettier 3.3
await(await fetch()).json().foo;
// Prettier 3.4
(await (await fetch()).json()).foo;
Corriger les sauts de ligne dans l'héritage de classe même s'il reste dans la largeur de ligne (#16730 by @fisker)
// Input
export class JiraCreatePixFraudDetectionGateway
implements Pick<IssuePixFraudDetectionGateway, "createPixFraudDetectionIssue">
{
constructor(private readonly logger: Logger) {
this.logger = logger.child({
context: JiraCreatePixFraudDetectionGateway.name,
});
}
}
// Prettier 3.3
export class JiraCreatePixFraudDetectionGateway
implements
Pick<IssuePixFraudDetectionGateway, "createPixFraudDetectionIssue">
{
constructor(private readonly logger: Logger) {
this.logger = logger.child({
context: JiraCreatePixFraudDetectionGateway.name,
});
}
}
// Prettier 3.4
export class JiraCreatePixFraudDetectionGateway
implements Pick<IssuePixFraudDetectionGateway, "createPixFraudDetectionIssue">
{
constructor(private readonly logger: Logger) {
this.logger = logger.child({
context: JiraCreatePixFraudDetectionGateway.name,
});
}
}
Placer declare avant la visibilité dans les propriétés de classe (#16731 by @fisker)
// Input
class A {
declare private readonly name: string;
}
// Prettier 3.3
class A {
private declare readonly name: string;
}
// Prettier 3.4
class A {
declare private readonly name: string;
}
CSS
Résoudre certains types de débordements en CSS (#16570 by @seiyab)
/* Input */
@media (prefers-reduced-data: no-preference) {
@font-face {
unicode-range: U+0000-00FF, U+0131,
U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
}
/* Prettier 3.3 */
@media (prefers-reduced-data: no-preference) {
@font-face {
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212,
U+2215, U+FEFF, U+FFFD;
}
}
/* Prettier 3.4 */
@media (prefers-reduced-data: no-preference) {
@font-face {
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193,
U+2212, U+2215, U+FEFF, U+FFFD;
}
}
Supprimer l'indentation supplémentaire dans les fonctions de pseudo-classe (#16572 by @sosukesuzuki)
Ce changement corrige un bogue où une indentation supplémentaire était ajoutée lorsque des sauts de ligne étaient inclus dans la liste d'arguments des fonctions de pseudo-classe comme :where(), :is(), et :not.
/* Input */
:where(input:not([type="button"], [type="reset"], [type="submit"]), textarea, select) {
/* CSS here */
}
/* Prettier 3.3 */
:where(
input:not([type="button"], [type="reset"], [type="submit"]),
textarea,
select
) {
/* CSS here */
}
/* Prettier 3.4 */
:where(
input:not([type="button"], [type="reset"], [type="submit"]),
textarea,
select
) {
/* CSS here */
}
Corriger le formatage des commentaires de valeur CSS incomplets (#16583 by @sosukesuzuki, @fisker)
Lors du formatage des commentaires de valeur CSS, le / final pouvait être perdu, ce qui rendait le commentaire invalide.
Ce changement garantit que les commentaires de valeur ne sont pas tronqués.
/* Input */
h1 {
--OFF: /* OFF */;
}
/* Prettier 3.3 */
h1 {
--OFF: /* OFF *;
}
/* Prettier 3.4 */
h1 {
--OFF: /* OFF */;
}
SCSS
Corriger l'erreur levée lors du formatage d'un fichier SCSS (#16607 by @fisker)
// Input
@if true {
$newKey: ($key: ( $theme-name: $value ))
}
// Prettier 3.3
Error
// Prettier 3.4
@if true {
$newKey: (
$key:
(
$theme-name: $value,
),
);
}
Correction de la position incorrecte de la virgule finale après un commentaire en SCSS (#16617 par @Ma-hawaj, @fisker)
/* Input */
$z-indexes: (
header: 1035,
overlay: 1202 // TODO: change to 1050 after bootstrap modals will be removed
);
/* Prettier 3.3 */
$z-indexes: (
header: 1035,
overlay: 1202 // TODO: change to 1050 after bootstrap modals will be removed,
);
/* Prettier 3.4 */
$z-indexes: (
header: 1035,
overlay: 1202, // TODO: change to 1050 after bootstrap modals will be removed
);
HTML
Conserver le doctype inchangé dans les fichiers non HTML (#16765 par @fisker)
Dans Prettier v3, nous imprimons le doctype HTML5 en minuscules. Ce comportement est sans risque pour les fichiers HTML, mais certains utilisateurs peuvent utiliser le parseur html pour formater d'autres fichiers (ex. XHTML), où la mise en minuscule du doctype corromprait les documents XHTML.
À partir de Prettier 3.4, nous ne mettrons en minuscules que le doctype HTML5 (<!doctype html>) lorsque l'extension du fichier est .html ou .htm. Dans les autres cas, il restera inchangé.
<!-- Input -->
<!-- foo.xhtml -->
<!DOCTYPE html>
<!-- Prettier 3.3 -->
<!doctype html>
<!-- Prettier 3.4 -->
<!DOCTYPE html>
Vue
Correction du point-virgule supplémentaire inséré dans les liaisons d'événements Vue avec des caractères non ASCII (#16733 par @fisker)
<!-- Input -->
<template>
<button @click="点击事件">点击!</button>
<button @click="onClick">Click!</button>
</template>
<!-- Prettier 3.3 -->
<template>
<button @click="点击事件;">点击!</button>
<button @click="onClick">Click!</button>
</template>
<!-- Prettier 3.4 -->
<template>
<button @click="点击事件">点击!</button>
<button @click="onClick">Click!</button>
</template>
Angular
Prise en charge d'Angular 19 (#16862 par @fisker)
Angular 19 a ajouté la prise en charge du mot-clé typeof dans les expressions de template.
<!-- Input -->
<div>{{ typeof
x ===
'object' ? 'Y' : 'N'}}</div>
<!-- Prettier 3.3 -->
<div>
{{ typeof
x ===
'object' ? 'Y' : 'N'}}
</div>
// Prettier 3.4
<div>{{ typeof x === "object" ? "Y" : "N" }}</div>
Markdown
Suppression des espaces excessifs après les préfixes de ligne pour les listes non ordonnées en Markdown (#15526 par @TomasLudvik)
<!-- Input -->
- first line
- second line indented
- third line
- fourth line
- fifth line
<!-- Prettier 3.3 -->
- first line
- second line indented
- third line
- fourth line
- fifth line
<!-- Prettier 3.4 -->
- first line
- second line indented
- third line
- fourth line
- fifth line
Correction du retour à la ligne incorrect dans une phrase avec linkReference (#16546 par @seiyab)
<!-- Input (--prose-wrap=always) -->
This folder has [VHS] tape files to create gifs for the [Widget Showcase]. To run them, install VHS from main (the theme and screenshot commands are not yet released).
<!-- Prettier 3.3 -->
This folder has [VHS] tape files to create gifs for the [Widget Showcase]. To run
them, install VHS from main (the theme and screenshot commands are not yet released).
<!-- Prettier 3.4 -->
This folder has [VHS] tape files to create gifs for the [Widget Showcase]. To
run them, install VHS from main (the theme and screenshot commands are not yet
released).
Préserver les espaces non ASCII en fin de ligne et en début de ligne suivante (#16619 par @tats-u)
Prettier supprimait les espaces non ASCII en fin de ligne et en début de ligne suivante. Cependant, ce comportement n'est pas conforme à la spécification CommonMark.
https://spec.commonmark.org/0.31.2/#soft-line-breaks
Les espaces en fin de ligne et en début de ligne suivante sont supprimés :
https://spec.commonmark.org/0.31.2/#unicode-whitespace-character
Un caractère d'espacement Unicode est un caractère de la catégorie générale Unicode Zs, ou une tabulation (U+0009), un saut de ligne (U+000A), un saut de page (U+000C) ou un retour chariot (U+000D).
Un espace Unicode est une séquence d'un ou plusieurs caractères d'espacement Unicode.
Un espace est U+0020.
La spécification CommonMark ne mentionne pas ici les espaces non ASCII, donc les supprimer modifie le contenu du document Markdown.
<!-- Input -->
EM Space (U+2003) EM Space
全角スペース (U+3000) 全形空白
<!-- Prettier 3.3 -->
EM Space (U+2003) EM Space
全角スペース (U+3000) 全形空白
<!-- Prettier 3.4 -->
EM Space (U+2003) EM Space
全角スペース (U+3000) 全形空白
Ne pas couper une ligne entre du chinois ou japonais et d'autres caractères (#16691 par @tats-u)
Les documents Markdown sont principalement convertis en HTML ou en composants de frameworks JavaScript. Cela signifie que les paragraphes en Markdown sont finalement traités par le navigateur selon les règles CSS. En effet, de nombreux convertisseurs Markdown conservent les sauts de ligne dans les paragraphes du Markdown source, et le HTML lui-même ne spécifie pas comment les navigateurs doivent gérer les sauts de ligne dans le texte HTML.
Selon les règles CSS (CSS Text Module Level 3 ou ultérieur), les navigateurs devraient supprimer les sauts de ligne entre les caractères chinois/japonais au lieu de les remplacer par des espaces. Cependant, cette règle a longtemps été ignorée par les navigateurs basés sur WebKit ou dérivés de WebKit (Chrome, Safari, etc.).
Par exemple, le paragraphe HTML suivant :
<p>
日本語
汉语
漢語
<p>
généré à partir du Markdown suivant :
日本語
汉语
漢語
devrait être affiché comme suit selon les règles CSS, et l'est effectivement par Firefox :
日本語汉语漢語
Cependant, Chrome et Safari l'affichent ainsi :
日本語 汉语 漢語
C'est pourquoi nous devons empêcher Prettier de forcer des sauts de ligne entre les caractères chinois/japonais. Nous avons décidé de ne plus obliger les utilisateurs à utiliser un plugin pour convertisseur Markdown concaténant les lignes commençant ou finissant par des caractères chinois/japonais (comme remark-join-cjk-lines).
De plus, un saut de ligne entre caractères chinois/japonais et autres équivaut à un espace selon les spécifications antérieures à la validation suspendue de cette règle dans CSS Text Module Level 3 corrigeant un problème des brouillons éditoriaux du CSS Working Group. Firefox respecte cette règle. Ainsi, tous les navigateurs affichent le paragraphe suivant :
<!-- prettier-ignore -->
```html
<p>日本語 English 汉语 한국어 漢語</p>
<p></p>
comme ceci :
日本語 English 汉语 한국어 漢語
Cependant, Prettier a longtemps forcé des sauts de ligne entre caractères chinois/japonais en Markdown, et entre caractères chinois/japonais et latins dans certains cas depuis la version 3.0.0. Par exemple, le paragraphe Markdown suivant :
日本語English汉语
English
漢語
est formaté ainsi si --prose-wrap est défini sur une valeur autre que preserve dans Prettier 3.x :
日本語English汉语English漢語
Cependant, le HTML suivant, généré par un convertisseur Markdown-vers-HTML à partir de ce Markdown :
<p>
日本語English汉语
English
漢語
</p>
est affiché ainsi par tous les navigateurs :
日本語English汉语 English 漢語
C'est pourquoi nous devons empêcher Prettier de forcer des sauts de ligne autour des caractères chinois/japonais en Markdown. Nous alignerons le comportement de Prettier sur cette règle dans une future version. Après cela, les sauts de ligne entre caractères chinois/japonais et autres seront à nouveau autorisés sous certaines conditions.
Une des rares exceptions concerne les espaces et sauts de ligne entre caractères chinois/japonais et coréens. Les paragraphes Markdown suivants sont équivalents même dans la version actuelle de Prettier :
현재 韓國의 大統領은 尹錫悅이다.
현재
韓國의
大統領은
尹錫悅이다.
Vous obtiendrez le premier si vous formatez le second avec --prose-wrap=always et une valeur --print-width suffisamment longue, ou avec --prose-wrap=never. Vous obtiendrez le second si vous formatez le premier avec --prose-wrap=always et une valeur --print-width extrêmement courte. Ainsi, nous n'avons pas à modifier ces espaces et sauts de ligne.
Une autre exception concerne ceux situés entre un caractère chinois/japonais et un symbole significatif en Markdown comme *, `, [ ou ]. Par exemple, le paragraphe Markdown suivant reste équivalent dans la version actuelle de Prettier :
**Yarn** のCLI経由でフォーマットするには `yarn prettier -w ` を実行してください。
**Yarn**
のCLI経由でフォーマットするには
`yarn prettier -w .`
を実行してください。
<!-- Input (--prose-wrap=always --print-width=20) -->
日本語 汉语 漢語 English 한국어 日本語 汉语 漢語 English 한국어 日本語 汉语 漢語 English 한국어 日本語 汉语 漢語 English 한국어
日本語汉语漢語English한국어日本語汉语漢語English한국어日本語汉语漢語English한국어日本語汉语漢語English한국어
<!-- Prettier 3.3 -->
日本語 汉语 漢語
English 한국어 日本
語 汉语 漢語 English
한국어 日本語 汉语
漢語 English 한국어
日本語 汉语 漢語
English 한국어
日本語汉语漢語
English한국어日本語
汉语漢語
English한국어日本語
汉语漢語
English한국어日本語
汉语漢語
English한국어
<!-- Prettier 3.4 -->
日本語 汉语 漢語 English
한국어
日本語 汉语 漢語 English
한국어
日本語 汉语 漢語 English
한국어
日本語 汉语 漢語 English
한국어
日本語汉语漢語English한국어日本語汉语漢語English한국어日本語汉语漢語English한국어日本語汉语漢語English한국어
Demander à regexp-util de générer des regex compatibles avec le flag u (#16816 par @tats-u)
Les caractères CJK hors du BMP (Basic Multilingual Plane) et les séquences de variations idéographiques (IVS ; sélecteurs de variation dédiés aux han/kanji), qui occupent 2 caractères dans les chaînes JavaScript, n'étaient pas traités comme CJK. Cela est dû au fait que Prettier ne transmettait pas le flag "u" approprié au package regexp-util.
Dans l'exemple suivant, « 𠮷 » (U+20BB7) est hors BMP, et « 葛󠄀 » combine un han « 葛 » (U+845B) dans le BMP avec un IVS U+E0100. Ce dernier nécessite une police prenant en charge Adobe Japan-1 (par ex. Yu Gothic UI ou Source Han Sans) pour s'afficher sous une forme différente du caractère sans IVS (葛).
<!-- Input (--prose-wrap=never) -->
a 字 a 字 a 字
𠮷
𠮷
葛󠄀
葛󠄀
終
<!-- Prettier 3.3 -->
a 字 a 字 a 字 𠮷 𠮷 葛󠄀 葛󠄀 終
<!-- Prettier 3.4 -->
a 字 a 字 a 字𠮷𠮷葛󠄀葛󠄀終
YAML
Correction de l'absence d'espace avant # dans les commentaires YAML sur éléments multilignes (#16489 par @fyc09)
# Input
123: # hello
# comment
# Prettier 3.3
123:# hello
# comment
# Prettier 3.4
123: # hello
# comment
API
Arrêt de la mutation du document dans prettier.doc.printDocToString (#13315 par @fisker)
Pour des raisons de performance, prettier.doc.printDocToString mutait auparavant .parts de la commande fill lors de l'impression. Elle a été convertie en fonction pure pour garantir l'exactitude du résultat.
Rendre getPreferredQuote publique (#16567 par @sosukesuzuki)
Cette modification intègre la fonction interne getPreferredQuote à l'API publique.
Dans des langages comme JavaScript, les guillemets simples et doubles peuvent tous deux être utilisés pour les littéraux de chaîne. Prettier détermine le guillemet à utiliser en fonction du nombre de guillemets dans la chaîne et de l'option singleQuote. Pour plus de détails, consultez la page Rationale.
La fonction getPreferredQuote détermine le guillemet approprié pour encadrer un littéral de chaîne et présente l'interface suivante :
type Quote = '"' | "'";
function getPreferredQuote(
text: string,
preferredQuoteOrPreferSingleQuote: Quote | boolean,
): Quote;
Voici quelques exemples d'utilisation :
import * as prettier from "prettier";
const SINGLE_QUOTE = `'`;
const DOUBLE_QUOTE = `"`;
console.log(prettier.util.getPreferredQuote(`Hello World Test`, SINGLE_QUOTE)); // '
console.log(prettier.util.getPreferredQuote(`Hello World Test`, DOUBLE_QUOTE)); // "
console.log(prettier.util.getPreferredQuote(`'Hello' "World" 'Test'`, SINGLE_QUOTE)); // "
console.log(prettier.util.getPreferredQuote(`"Hello" 'World' "Test"`, DOUBLE_QUOTE)); // '
console.log(prettier.util.getPreferredQuote(`"Hello" "World" "Test"`, SINGLE_QUOTE)); // '
console.log(prettier.util.getPreferredQuote(`'Hello' 'World' 'Test'`, DOUBLE_QUOTE)); // "
Rendre cette fonction publique bénéficiera aux développeurs de plugins. Comme la fonction est relativement courte, vous trouverez plus de détails dans son implémentation.
Correction du chargement des fichiers de config partagés au format ESM dans Node.js 23 (#16857 par @sosukesuzuki)
Dans Prettier 3.3, tenter de charger un fichier de configuration partagé au format ESM sous Node.js 23 générait les avertissements suivants, empêchant le chargement des options :
[warn] Ignored unknown option { __esModule: true }.
[warn] Ignored unknown option { default: { trailingComma: "es5", tabWidth: 4, singleQuote: true } }.
Ce problème était causé par une nouvelle fonctionnalité de module dans Node.js 23, appelée require(ESM). Prettier 3.4 résout ce problème, permettant un chargement correct des options.
Pour plus de détails, consultez https://github.com/prettier/prettier/issues/16812.
CLI
Ignorer les fichiers du répertoire Jujutsu (#16684 par @marcusirgens)
Le système de contrôle de version Jujutsu utilise le répertoire .jj, à l'instar de Git qui utilise .git.
Cette modification ajoute .jj à la liste des répertoires ignorés silencieusement par Prettier.
Divers
Correction de la lenteur catastrophique occasionnelle de la fonctionnalité cursorOffset (#15709 par @ExplodingCabbage)
Auparavant, la fonctionnalité cursorOffset de Prettier pouvait devenir extrêmement lente dans certaines situations défavorables (notamment lorsque le curseur de l'utilisateur ne se trouvait pas dans un nœud feuille de l'AST, et que le nœud parent le contenant était très volumineux et subissait un reformatage important par Prettier). En conséquence, si vous utilisiez Prettier via une intégration d'éditeur exploitant cursorOffset en arrière-plan, votre éditeur pouvait parfois se bloquer inexplicablement lors du formatage d'un fichier.
Tous les exemples connus de ce phénomène devraient désormais être corrigés, mais les signalements de nouveaux cas pathologiques restent les bienvenus.
