Prettier 1.7: Anpassungen für JSX, Pragma, TypeScript und CSS-Korrekturen
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Diese Version enthält einige Fehlerbehebungen und Anpassungen für JSX, TypeScript, CSS und die JavaScript-Formatierung sowie einige neue Funktionen.
Höhepunkte
Änderungen an JSX
Wir haben viel Feedback aus der Community zu den Änderungen an der JSX-Formatierung in Version 1.6.0 erhalten und haben Anpassungen vorgenommen, um die Formatierung näher an die Community-Standards und -Erwartungen zu bringen.
In Version 1.6.0 haben wir einen zweiten Stil für ternäre Ausdrücke (bedingte Ausdrücke, a ? b : c) hinzugefügt, basierend auf einem in der Community beliebten Format, bei dem Klammern zur Abgrenzung von JSX-Inhalten verwendet werden:
const DinnerOptions = ({ willEatMeat, willEatEggs, willEatVegetables }) => (
<div>
<div>Let's get some dinner...</div>
{willEatMeat ? (
<FullMenu />
) : willEatEggs ? (
<VegetarianMenu />
) : willEatVegetables ? (
<VeganMenu />
) : (
<BackupMenu />
)}
</div>
);
Bevor dies hinzugefügt wurde, formatierte Prettier ternäre Ausdrücke nur in einem einheitlichen Stil:
willEatMeat
? "Full Menu"
: willEatEggs
? "Vegetarian Menu"
: willEatVegetables ? "Vegan Menu" : "Backup Menu";
In Version 1.6.0 verwendeten wir die folgende Heuristik, um zu entscheiden, wann die neuen "JSX-Modus-Ternaries" verwendet werden sollen:
We should print a ternary using JSX mode if:
* The ternary contains some JSX in it
OR
* The ternary appears inside of some JSX
Diese Heuristik führte jedoch zu einigen unerwarteten Formatierungen:

Daher haben wir in Version 1.7.0 unsere Heuristik wie folgt überarbeitet:
We should print a ternary using JSX mode if:
* The ternary contains some JSX in it
Wir hoffen, dass diese Änderung zu weniger überraschenden ternären Ausdrücken führt.
Ein großer Dank geht an @duailibe, der diese Änderung implementiert hat sowie mehrere andere gemeldete JSX-bezogene Formatierungsprobleme.
Konsistente Groß-/Kleinschreibung in CSS
Wir haben in dieser Version einige Zeit darauf verwendet, unsere CSS-Formatierung zu verfeinern, und als Teil davon hat @lydell Arbeiten zur Normalisierung der Groß-/Kleinschreibung durchgeführt.
Daher wird nun fast alles in CSS in lower case (Kleinschreibung) ausgegeben.
/* Before */
DIV.Foo {
HEIGHT: 12PX;
}
/* After */
div.Foo {
height: 12px;
}
Keine Sorge – Prettier wird Ihre $scss-variables, [@less](https://github.com/less)-variables oder FunctionNames() nicht anrühren. Weiter mit dem Preprocessing!
Pragma-Unterstützung
Es gibt eine neue Option namens --require-pragma (requirePragma über die API), die das Verhalten von Prettier so ändert, dass es eine Datei nur neu formatiert, wenn sie einen speziellen "Pragma"-Kommentar am Anfang enthält, der so aussieht:
/**
* @prettier
*/
oder
/**
* @format
*/
Dies war die Idee von @ajhyndman und wurde von @wbinnssmith implementiert.
Weitere Änderungen
TypeScript
Es gab einen Fehler in Prettier 1.6.1, bei dem ein Fehler ausgelöst wurde, wenn TypeScript mit dem Typ never geparst wurde, zum Beispiel:
Observable.empty<never>();
Außerdem entfernte Prettier 1.6.1 fälschlicherweise das Schlüsselwort declare aus enum-Deklarationen in *.d.ts-Dateien:
// In
declare const enum Foo {}
// Out
const enum Foo {}
Beide Probleme wurden behoben. Vielen Dank an @JamesHenry und @existentialism für diese Korrekturen, die unsere TypeScript-Community unterstützen!
Konfiguration
Konfigurierbare Konfigurationspriorität
Es gibt eine neue CLI-Option --config-precedence, die konfiguriert, wie Prettier Konfigurationsquellen priorisieren soll. Gültige Werte sind:
cli-override (Standard) - CLI-Optionen haben Vorrang vor der Konfigurationsdatei
file-override - Die Konfigurationsdatei hat Vorrang vor CLI-Optionen
prefer-file - Wenn eine Konfigurationsdatei gefunden wird, wird diese ausgewertet und andere CLI-Optionen ignoriert. Wird keine Konfigurationsdatei gefunden, werden CLI-Optionen normal ausgewertet.
Diese Option unterstützt Editor-Integrationen, bei denen Benutzer ihre Standardkonfiguration definieren, aber projektspezifische Konfigurationen respektieren möchten.
prettier.resolveConfig.sync
Bisher gab es über die API keine Möglichkeit, die Konfiguration für eine Quelldatei synchron aufzulösen. Dank neuer Ergänzungen zu cosmiconfig von @sudo-suhas konnte @ikatyang dies in die Prettier-API integrieren.
In diesem Release zusammengeführte PRs
-
Ensure parens around LogicalExpression inside ExperimentalSpreadProperty von @existentialism
-
Fix printing declare modifier for TS enum von @existentialism
-
refactor(cli): separate files and make it pure as possible von @ikatyang
-
run-external-typescript-tests.js plattformübergreifend machen von @lydell
-
chore(deps): Dev-Abhängigkeit
cross-spawnentfernen von @ikatyang -
Einige Dinge in der Coverage-Auswertung ignorieren von @lydell
-
run-external-typescript-tests.js verallgemeinern von @lydell
-
Lint-staged-Setup-Beispiel durch Hinzufügen weiterer Dateitypen verbessern von @MoOx
-
[Korrektur: TypeScript-Schlüsselwort never (behebt #2718)](https://github.com/prettier/prettier/pull/2756) von @JamesHenry
-
Letztes Argument gruppieren, wenn es ein leeres Objekt mit Kommentar ist von @duailibe
-
files:statttypes:in Pre-Commit-Konfiguration verwenden von @asottile -
refactor(runPrettier): Redundanten Code reduzieren von @ikatyang
-
Ändern, wann Ternaries im JSX-Modus ausgegeben werden von @duailibe
-
Verkettete logische Ausdrücke mit inline-Objekten/Arrays/etc. korrigieren von @duailibe
-
Option hinzufügen, um @prettier oder @format-Pragma zu erfordern von @wbinnssmith
-
chore(build): ISSUE_TEMPLATE.md vor Veröffentlichung aktualisieren von @ikatyang
-
Umbruch bei Bedingungsausdrücken innerhalb von return-Anweisungen korrigieren von @duailibe
-
Korrektur(prettierignore): Absolute Dateinamen unterstützen von @ambar
-
Bedingte Ausdrücke in Methodenketten in einer Zeile belassen von @duailibe
-
Korrektur(build): ISSUE_TEMPLATE mit Regex
?:statt?!aktualisieren von @ikatyang -
Schließende Klammer von ConditionalExpression in Member-Ketten umbrechen von @duailibe
In dieser Version behobene Probleme
-
Fehlende CLI-Optionen dokumentieren gemeldet von @levithomason
-
Formatierung von Spread Properties unterscheidet sich zwischen Babylon und TypeScript gemeldet von @mariusschulz
-
Entfernung des
declare-Modifikators vonenumgemeldet von @mariusschulz -
Dezimale Formatierung erfasst nicht alle Dezimalstellen in einer Regel gemeldet von @itsgreggreg
-
resolveConfigFile.sync in der CLI verwenden gemeldet von @azz
-
CSS: Groß-/Kleinschreibung bei Elementen normalisieren gemeldet von @lydell
-
Dynamischer Import mit webpackChunkName-Kommentar schlägt fehl gemeldet von @pbomb
-
TypeScript: never als Typparameter verursacht Fehler: unknown type: undefined gemeldet von @hccampos
-
Kommentierte Objektwerte gemeldet von @sylvainbaronnet
-
Konfiguration von pre-commit für jsx, TypeScript, tsx gemeldet von @reywright
-
JSX-Ternäre enthalten Klammern gemeldet von @jasonLaster
-
Verkettete Kurzschlussbedingungen in JSX gemeldet von @brycehill
-
Unterstützung für @prettier-Pragma-Kommentar gemeldet von @ajhyndman
-
Keine Einrückung nach break in Return-Anweisung gemeldet von @jwbay
-
Unterstützung für graphql()-Funktion und Formatierung des zweiten Arguments gemeldet von @brikou
-
prettierignore: Absolute Dateinamen nicht verwendbar gemeldet von @ambar
-
Seltsames JavaScript-Format gemeldet von @maxime1992
Ein herzliches Dankeschön an alle, die zu diesem Release beigetragen haben - sei es durch das Erstellen von Issues, Code-Beiträgen, Code-Reviews oder allgemeines Feedback. Prettier ist ein Community-Projekt und kann nur dank Menschen wie Ihnen weiterbestehen. Vielen Dank!
