Zum Hauptinhalt springen

Prettier 3.4: Zahlreiche Fehlerbehebungen

· 18 Min. Lesezeit
Inoffizielle Beta-Übersetzung

Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →

Dieses Release enthält zahlreiche Fehlerbehebungen und weitere Verbesserungen.

Falls Sie Prettier schätzen und unsere Arbeit unterstützen möchten, erwägen Sie bitte eine direkte Spende über unser OpenCollective oder durch die Förderung der Projekte, von denen wir abhängen, wie typescript-eslint, remark und Babel. Vielen Dank für Ihre fortlaufende Unterstützung!

Weitere Änderungen

JavaScript

Korrektur des Drucks von Template-Literals mit Arrays (#13315 von @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],
]}`;

Fehlende Klammern in getaggten Template-Literals hinzugefügt (#16500 von @syi0808)

// Input
(String?.raw)``;
(getTag?.())``;

// Prettier 3.3
String?.raw``;
getTag?.()``;

// Prettier 3.4
(String?.raw)``;
(getTag?.())``;

Useless \ in String-Literals nicht entfernen (#16563 von @sosukesuzuki, #16763 von @fisker)

Bisher entfernte Prettier nutzlose Escape-Zeichen (\) aus String-Literalen. Dieses Verhalten war jedoch inkonsistent, da es nicht für Template-Literale galt, was in Issue #16542 gemeldet wurde.

Dieses Issue ist ein Feature-Request, um dieses Verhalten auch auf Template-Literale auszuweiten.

Nach interner Diskussion kam das Prettier-Team zum Schluss, dass das Entfernen nutzloser Escape-Zeichen – sowohl in String- als auch Template-Literalen – in den Verantwortungsbereich eines Linters fällt, nicht eines Formatters.

Diese Änderung deaktiviert das Entfernen nutzloser Escape-Zeichen in String-Literalen für alle von Prettier unterstützten Sprachen. Um das bisherige Verhalten beizubehalten, empfehlen wir die Verwendung von ESLint-Regeln wie no-useless-escape.

Escapete Anführungszeichen (z.B. "\"\'") können beim Wechsel zwischen verschiedenen Anführungszeichen de-escaped werden. Dies wird auf der Rationale-Seite der offiziellen Dokumentation erläutert.

// Input
const str = "\a";

// Prettier 3.3
const str = "a";

// Prettier 3.4
const str = "\a";

Verbesserte Kommentarformatierung für logische Ausdrücke in unären Ausdrücken (#16593 von @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
);

Unterstützung für experimentelle Syntax entfernt (#16643, #16705 von @fisker)

TypeScript

Fehlende Klammern in getaggten Template-Literals hinzugefügt (#16500 von @syi0808)

// Input
(String?.raw!)``;
(String?.raw)!``;

// Prettier 3.3
String?.raw!``;
String?.raw!``;

// Prettier 3.4
(String?.raw)!``;
(String?.raw)!``;

Kommentar zwischen Decorator und modifizierter Parameter-Eigenschaft erhalten (#16574 von @sosukesuzuki)

Die aktuelle Prettier-Version verschiebt unerwartet einen Zeilenkommentar zwischen einer mit readonly, private, public etc. modifizierten Parameter-Eigenschaft und einem Decorator. Dies führt zu ungültigem TypeScript-Code.

Diese Änderung stellt sicher, dass das ursprüngliche Format beibehalten wird.

// 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,
) {}
}

Kommentar zwischen Modifizierer und dekorierter Eigenschaftsbezeichnung erhalten (#16578 von @sosukesuzuki)

Ein Fehler führte dazu, dass Blockkommentare zwischen dem Modifizierer und dem Namen einer dekorierte Eigenschaft als nachgestellte Kommentare des Decorators behandelt wurden. Dies war nicht nur unerwartet, sondern auch nicht idempotent.

Mit dieser Änderung bleibt die Position des Blockkommentars zwischen Modifizierer und Eigenschaftsname erhalten.

// 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;
}

Keine zusätzlichen Zeilenumbrüche bei Pfeilfunktionen mit Typparametern in Zuweisungen (#16586 von @sosukesuzuki)

Ein Fehler führte zum Einfügen einer zusätzlichen Zeile, wenn eine verkettete Pfeilfunktion mit Typparametern einer Variable zugewiesen wurde und darüber ein Zeilenkommentar stand.

Diese Änderung verhindert das Einfügen der zusätzlichen Zeile.

// Input
const foo1 =
// comment
<T,>() => () => 1;

// Prettier 3.3
const foo1 =
// comment

<T,>() =>
() =>
1;

// Prettier 3.4
const foo1 =
// comment
<T,>() =>
() =>
1;

Unterstützung für "Top-level await"-Anweisungen (#16729 von @fisker)

// Input
(await (await fetch()).json()).foo

// Prettier 3.3
await(await fetch()).json().foo;

// Prettier 3.4
(await (await fetch()).json()).foo;

Klassenvererbung bricht nicht um, obwohl sie innerhalb der Zeilenbreite bleibt (#16730 von @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,
});
}
}

declare vor Zugriffsmodifizierern in Klasseneigenschaften setzen (#16731 von @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

Behebung bestimmter Überlaufarten in CSS (#16570 von @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;
}
}

Überflüssige Einrückung in Pseudo-Klassen-Funktionen entfernen (#16572 von @sosukesuzuki)

Diese Änderung behebt einen Fehler, bei dem zusätzliche Einrückungen hinzugefügt wurden, wenn Zeilenumbrüche in der Argumentliste von Pseudo-Klassen-Funktionen wie :where(), :is() und :not enthalten waren.

/* 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 */
}

Formatierung unvollständiger CSS-Wertkommentare korrigieren (#16583 von @sosukesuzuki, @fisker)

Bei der Formatierung von CSS-Wertkommentaren konnte das abschließende / verloren gehen, was zu ungültigen Kommentaren führte.

Diese Änderung stellt sicher, dass Wertkommentare nicht abgeschnitten werden.

/* Input */
h1 {
--OFF: /* OFF */;
}

/* Prettier 3.3 */
h1 {
--OFF: /* OFF *;
}

/* Prettier 3.4 */
h1 {
--OFF: /* OFF */;
}

SCSS

Fehler beim Formatieren von SCSS-Dateien beheben (#16607 von @fisker)

// Input
@if true {
$newKey: ($key: ( $theme-name: $value ))
}

// Prettier 3.3
Error

// Prettier 3.4
@if true {
$newKey: (
$key:
(
$theme-name: $value,
),
);
}

Korrektur falscher Position nachgestellter Kommas nach Kommentaren in SCSS (#16617 von @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

Beibehaltung unveränderten Doctypes in Nicht-HTML-Dateien (#16765 von @fisker)

In Prettier v3 wird der HTML5-Doctype in Kleinbuchstaben ausgegeben, was für HTML-Dateien unbedenklich ist. Allerdings kann der html-Parser auch für andere Dateitypen wie XHTML-Dateien verwendet werden, wo die Kleinschreibung des doctype die Dokumente beschädigen würde.

Ab Prettier 3.4 wird der HTML5-Doctype (<!doctype html>) nur bei Dateiendungen .html oder .htm kleingeschrieben, in allen anderen Fällen bleibt er unverändert.

<!-- Input -->
<!-- foo.xhtml -->
<!DOCTYPE html>

<!-- Prettier 3.3 -->
<!doctype html>

<!-- Prettier 3.4 -->
<!DOCTYPE html>

Vue

Korrektur eingefügter überflüssiger Semikolons in Vue-Event-Bindings mit Nicht-ASCII-Zeichen (#16733 von @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

Unterstützung für Angular 19 (#16862 von @fisker)

Angular 19 fügte Unterstützung für das typeof-Schlüsselwort in Template-Ausdrücken hinzu.

<!-- 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

Entfernung übermäßiger Leerzeichen nach Zeilenpräfixen für ungeordnete Listen in Markdown (#15526 von @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
<!-- 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).

Bewahrung nicht-ASCII-Leerzeichen am Zeilenende und Zeilenanfang (#16619 von @tats-u)

Prettier entfernte bisher nicht-ASCII-Leerzeichen am Zeilenende und Beginn der nächsten Zeile. Dieses Verhalten entspricht jedoch nicht der CommonMark-Spezifikation.

https://spec.commonmark.org/0.31.2/#soft-line-breaks

Leerzeichen am Zeilenende und Beginn der nächsten Zeile werden entfernt:

https://spec.commonmark.org/0.31.2/#unicode-whitespace-character

Ein Unicode-Leerzeichen ist ein Zeichen der Unicode-Zs-Kategorie oder Tabulator (U+0009), Zeilenvorschub (U+000A), Seitenvorschub (U+000C) oder Wagenrücklauf (U+000D).

Unicode-Leerzeichen sind eine Folge von einem oder mehreren Unicode-Leerzeichen.

Ein Leerzeichen ist U+0020.

Die CommonMark-Spezifikation erwähnt hier keine nicht-ASCII-Leerzeichen, daher verändert deren Entfernung den Inhalt des Markdown-Dokuments.

<!-- 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) 全形空白

Verhinderung von Zeilenumbrüchen zwischen Chinesisch/Japanisch und anderen Sprachen (#16691 von @tats-u)

Markdown-Dokumente werden hauptsächlich in HTML oder Komponenten JavaScript-basierter Frameworks konvertiert. Das bedeutet, dass Absätze in Markdown letztendlich vom Browser gemäß CSS-Regeln verarbeitet werden. Viele Markdown-Konverter bewahren Zeilenumbrüche in Absätzen des Eingabe-Markdowns, und HTML selbst legt nicht fest, wie Browser mit Zeilenumbrüchen in HTML-Text umgehen sollen.

Gemäß CSS-Regeln (CSS Text Module Level 3 oder höher) sollten Browser Zeilenumbrüche zwischen chinesischen/japanischen Zeichen entfernen, anstatt sie durch Leerzeichen zu ersetzen. Diese Regel wurde jedoch von WebKit-basierten Browsern (Chrome, Safari etc.) lange Zeit ignoriert.

Beispielsweise sollte dieser HTML-Absatz:

<p>
日本語
汉语
漢語
<p>

generiert aus folgendem Markdown:

日本語
汉语
漢語

laut CSS-Regeln so gerendert werden und wird tatsächlich von Firefox so dargestellt:

日本語汉语漢語

Chrome und Safari rendern ihn jedoch so:

日本語 汉语 漢語

Deshalb sollte Prettier keine Zeilenumbrüche zwischen chinesischen/japanischen Zeichen erzwingen. Wir haben beschlossen, dass Benutzer nicht länger ein Plugin für Markdown-Konverter benötigen sollten, das Zeilen mit CJK-Zeichen verbindet (z.B. remark-join-cjk-lines).

Außerdem ist ein Zeilenumbruch zwischen CJK-Zeichen und anderen Zeichen laut CSS-Regeln einem Leerzeichen gleichwertig gemäß dem Stand vor dem Commit, der eine konkrete Regel in CSS Text Module Level 3 durch Auskommentieren suspendiert, der ein Problem in den Editor-Entwürfen der CSS Working Group behoben hat. Firefox folgt dieser Regel. Daher rendern alle Browser folgenden Absatz:

<!-- prettier-ignore -->
```html
<p>日本語 English 汉语 한국어 漢語</p>

<p></p>

wie folgt:

日本語 English 汉语 한국어 漢語

Prettier hat jedoch lange Zeit Zeilenumbrüche zwischen CJK-Zeichen in Markdown erzwungen und seit Version 3.0.0 teilweise auch zwischen CJK- und lateinischen Zeichen. Beispielsweise wird dieser Markdown-Absatz:

日本語English汉语
English
漢語

von Prettier 3.x so formatiert, wenn --prose-wrap nicht auf preserve gesetzt ist:

日本語English汉语English漢語

Das aus diesem Markdown generierte HTML:

<p>
日本語English汉语
English
漢語
</p>

wird jedoch von allen Browsern so dargestellt:

日本語English汉语 English 漢語

Deshalb sollte Prettier auch keine Zeilenumbrüche um CJK-Zeichen in Markdown erzwingen. Wir werden Prettiers Verhalten in einer zukünftigen Version an diese Regel anpassen. Danach werden Zeilenumbrüche zwischen CJK- und anderen Zeichen unter bestimmten Regeln wieder erlaubt sein.

Eine der wenigen Ausnahmen sind Leerzeichen und Zeilenumbrüche zwischen CJK- und koreanischen Zeichen. Diese Markdown-Absätze sind bereits in der aktuellen Prettier-Version äquivalent:

현재 韓國의 大統領은 尹錫悅이다.
현재
韓國의
大統領은
尹錫悅이다.

Die erste Variante entsteht beim Formatieren der zweiten mit --prose-wrap=always und ausreichend langem --print-width oder mit --prose-wrap=never. Die zweite Variante entsteht beim Formatieren der ersten mit --prose-wrap=always und extrem kurzem --print-width. Daher müssen wir solche Leerzeichen/Umbrüche nicht anpassen.

Eine weitere Ausnahme sind Umbrüche zwischen CJK-Zeichen und Markdown-Symbolen wie *, `, [, ]. Beispielsweise ist dieser Markdown-Absatz bereits äquivalent:

**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한국어

regexp-util anweisen, regex-kompatible u-Flags zu generieren (#16816 von @tats-u)

CJK-Zeichen außerhalb der Basic Multilingual Plane (BMP) und Ideographische Variationssequenzen (IVS; Variationsselektoren für Han/Kanji), die in JavaScript-Strings zwei Zeichen belegen, wurden bisher nicht als CJK-Zeichen behandelt. Dies lag daran, dass Prettier das erforderliche Flag "u" nicht an das Paket regexp-util übergeben hatte.

Im folgenden Beispiel liegt „𠮷“ (U+20BB7) außerhalb des BMP, während „葛󠄀“ eine Kombination des Han-Zeichens „葛“ (U+845B) im BMP mit einem IVS U+E0100 darstellt. Letzteres erfordert eine Schriftart mit Unterstützung für Adobe Japan-1 (z.B. Yu Gothic UI oder Source Han Sans), um sich anders darzustellen als das Zeichen ohne IVS (葛).

<!-- Input (--prose-wrap=never) -->
a 字 a 字 a 字
𠮷
𠮷
葛󠄀
葛󠄀


<!-- Prettier 3.3 -->
a 字 a 字 a 字 𠮷 𠮷 葛󠄀 葛󠄀 終

<!-- Prettier 3.4 -->
a 字 a 字 a 字𠮷𠮷葛󠄀葛󠄀終

YAML

Behebung fehlender Leerzeichen vor # bei YAML-Kommentaren in nicht einzeiligen Elementen (#16489 von @fyc09)

# Input
123: # hello
# comment

# Prettier 3.3
123:# hello
# comment

# Prettier 3.4
123: # hello
# comment

API

Verhindere Dokument-Mutation in prettier.doc.printDocToString (#13315 von @fisker)

Aus Performance-Gründen mutierte prettier.doc.printDocToString früher .parts des fill-Befehls während des Drucks. Es wurde in eine pure Funktion umgewandelt, um die Ausgabekorrektheit sicherzustellen.

Mache getPreferredQuote öffentlich (#16567 von @sosukesuzuki)

Diese Änderung macht die interne Funktion getPreferredQuote zu einem Teil der öffentlichen API.

In Sprachen wie JavaScript können sowohl einfache als auch doppelte Anführungszeichen für String-Literale verwendet werden. Prettier bestimmt das Anführungszeichen basierend auf der Anzahl der Anführungszeichen innerhalb des Strings und dem Wert der Option singleQuote. Weitere Details finden Sie auf der Rationale-Seite.

Die Funktion getPreferredQuote bestimmt das passende Anführungszeichen für String-Literale und hat folgende Schnittstelle:

type Quote = '"' | "'";
function getPreferredQuote(
text: string,
preferredQuoteOrPreferSingleQuote: Quote | boolean,
): Quote;

Hier einige Anwendungsbeispiele:

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)); // "

Die Veröffentlichung dieser Funktion kommt Plugin-Entwicklern zugute. Da die Funktion relativ kurz ist, finden Sie weitere Details in der Implementierung.

Behebung des Ladens von ESM-Style-Shared-Config-Dateien in Node.js 23 (#16857 von @sosukesuzuki)

In Prettier 3.3 führte der Versuch, eine ESM-Style-Shared-Config-Datei in Node.js 23 zu laden, zu folgenden Warnungen, die das Laden der Optionen verhinderten:

[warn] Ignored unknown option { __esModule: true }.
[warn] Ignored unknown option { default: { trailingComma: "es5", tabWidth: 4, singleQuote: true } }.

Dieses Problem wurde durch eine neue Modulfunktion in Node.js 23 verursacht, bekannt als require(ESM). Prettier 3.4 behebt dieses Problem, sodass die Optionen korrekt geladen werden.

Weitere Details finden Sie unter https://github.com/prettier/prettier/issues/16812.

CLI

Dateien im Jujutsu-Verzeichnis ignorieren (#16684 von @marcusirgens)

Das Jujutsu-Versionskontrollsystem verwendet das .jj-Verzeichnis, ähnlich wie Git .git verwendet.

Diese Änderung fügt .jj zur Liste der Verzeichnisse hinzu, die von Prettier automatisch ignoriert werden.

Verschiedenes

Behebung von Performance-Problemen bei cursorOffset (#15709 von @ExplodingCabbage)

Bisher konnte die cursorOffset-Funktion von Prettier unter bestimmten ungünstigen Umständen extrem langsam werden (insbesondere wenn sich der Cursor nicht in einem Blattknoten des AST befand und der umgebende Knoten sehr groß war und stark neu formatiert wurde). Infolgedessen konnte bei Editor-Integrationen, die cursorOffset verwenden, der Editor manchmal unerklärlich hängen bleiben, wenn eine Datei formatiert wurde.

Alle uns bekannten Fälle dieses Problems sollten nun behoben sein. Wir sind jedoch für Meldungen weiterer pathologischer Beispiele dankbar.