Prettier 1.7 : Améliorations JSX, Pragma et correctifs TypeScript et CSS
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 des corrections de bugs et des ajustements autour du formatage JSX, TypeScript, CSS et JavaScript, ainsi que quelques nouvelles fonctionnalités.
Principales fonctionnalités
Évolutions JSX
Nous avons reçu de nombreux retours de la communauté concernant les changements de formatage JSX introduits dans la version 1.6.0, et avons apporté des modifications pour mieux correspondre aux standards et attentes communautaires.
Dans la 1.6.0, nous avions ajouté un second style pour les ternaires (expressions conditionnelles, a ? b : c), basé sur un format populaire dans la communauté utilisant des parenthèses pour délimiter le contenu JSX :
const DinnerOptions = ({ willEatMeat, willEatEggs, willEatVegetables }) => (
<div>
<div>Let's get some dinner...</div>
{willEatMeat ? (
<FullMenu />
) : willEatEggs ? (
<VegetarianMenu />
) : willEatVegetables ? (
<VeganMenu />
) : (
<BackupMenu />
)}
</div>
);
Avant cette fonctionnalité, prettier ne formatait les ternaires qu'avec un seul style cohérent :
willEatMeat
? "Full Menu"
: willEatEggs
? "Vegetarian Menu"
: willEatVegetables ? "Vegan Menu" : "Backup Menu";
Dans la 1.6.0, nous utilisions l'heuristique suivante pour décider quand employer les "ternaires en mode JSX" :
We should print a ternary using JSX mode if:
* The ternary contains some JSX in it
OR
* The ternary appears inside of some JSX
Cependant, cette heuristique a causé certains formatages inattendus :

Ainsi, dans la 1.7.0, nous avons simplifié notre heuristique comme suit :
We should print a ternary using JSX mode if:
* The ternary contains some JSX in it
Nous espérons que ce changement réduira les cas de ternaires surprenants.
Un grand merci à @duailibe qui a implémenté cette modification ainsi que plusieurs autres problèmes de formatage JSX signalés.
Uniformisation de la casse CSS
Nous avons consacré du temps lors de cette version à peaufiner notre formatage CSS, et dans ce cadre, @lydell a travaillé à normaliser la casse.
Désormais, presque tout en CSS s'imprimera en lower case.
/* Before */
DIV.Foo {
HEIGHT: 12PX;
}
/* After */
div.Foo {
height: 12px;
}
Mais ne vous inquiétez pas - Prettier ne touchera pas à vos $scss-variables, [@less](https://github.com/less)-variables ou FunctionNames(). Continuez vos préprocesseurs !
Support du pragma
Une nouvelle option --require-pragma (requirePragma via l'API) modifie le comportement de prettier pour qu'il ne reformate un fichier que s'il contient un commentaire "pragma" spécial en en-tête, comme ceci :
/**
* @prettier
*/
ou
/**
* @format
*/
Cette idée vient de @ajhyndman et a été implémentée par @wbinnssmith.
Autres changements
TypeScript
Un bug dans Prettier 1.6.1 provoquait une erreur lors du parsing de TypeScript utilisant le type never, par exemple :
Observable.empty<never>();
De plus, Prettier 1.6.1 supprimait incorrectement le mot-clé declare des déclarations enum dans les fichiers *.d.ts :
// In
declare const enum Foo {}
// Out
const enum Foo {}
Ces deux problèmes ont été corrigés. Merci à @JamesHenry et @existentialism pour ces correctifs qui soutiennent notre communauté TypeScript !
Configuration
Priorité configurable
Une nouvelle option CLI --config-precedence détermine comment prettier doit prioriser les sources de configuration. Les valeurs valides sont :
cli-override (par défaut) - Les options CLI priment sur le fichier de config
file-override - Le fichier de config prime sur les options CLI
prefer-file - Si un fichier de configuration est trouvé, il sera évalué et les autres options CLI seront ignorées. Si aucun fichier de configuration n'est trouvé, les options CLI seront évaluées normalement.
Cette option ajoute un support pour les intégrations d'éditeurs où les utilisateurs définissent leur configuration par défaut mais souhaitent respecter la configuration spécifique au projet.
prettier.resolveConfig.sync
Précédemment, il n'existait aucun moyen via l'API de résoudre la configuration pour un fichier source de manière synchrone. Grâce à des ajouts dans cosmiconfig par @sudo-suhas, @ikatyang a pu ajouter cette fonctionnalité à l'API prettier.
PRs fusionnées dans cette version
-
Correction de la recherche du fichier de configuration avec stdin par @lydell
-
docs(readme): ajout et tri des options CLI par @levithomason
-
Ajout de parenthèses autour des LogicalExpression dans ExperimentalSpreadProperty par @existentialism
-
Correction de l'impression du modificateur declare pour les enum TypeScript par @existentialism
-
feat(resolve-config): ajout de la méthode
.sync()par @ikatyang -
refactor(bin): utilisation de
resolveConfigFile.sync()par @ikatyang -
refactor(cli): séparation des fichiers et pureté maximale par @ikatyang
-
Rendre run-external-typescript-tests.js multiplateforme par @lydell
-
tâche(deps) : supprimer la devDependency
cross-spawnpar @ikatyang -
Ignorer certains éléments dans la couverture de tests par @lydell
-
Améliorer l'exemple de configuration lint-staged avec plus de types de fichiers par @MoOx
-
[Correction : mot-clé never TypeScript (corrige #2718)](https://github.com/prettier/prettier/pull/2756) par @JamesHenry
-
Grouper le dernier argument s'il s'agit d'un objet vide avec un commentaire par @duailibe
-
Utiliser
files:plutôt quetypes:dans la configuration pre-commit par @asottile -
refactor(runPrettier) : réduire le code dupliqué par @ikatyang
-
Corriger les expressions logiques chaînées avec objets/tableaux/etc. en ligne par @duailibe
-
Ajouter une option pour exiger le pragma @prettier ou @format par @wbinnssmith
-
tâche(build) : mettre à jour ISSUE_TEMPLATE.md avant publication par @ikatyang
-
Corriger le saut de ligne sur les expressions conditionnelles dans return par @duailibe
-
Correction(prettierignore) : prise en charge des noms de fichiers absolus par @ambar
-
Conserver les expressions conditionnelles sur une seule ligne dans les chaînes de méthodes par @duailibe
-
Correction(build) : mise à jour du MODÈLE_ISSUE avec regex
?:au lieu de?!par @ikatyang -
Casser la parenthèse fermante des expressions conditionnelles dans les chaînes de membres par @duailibe
Problèmes résolus dans cette version
-
Documentation des options CLI manquantes signalé par @levithomason
-
Formatage des propriétés spread diffère entre Babylon et TypeScript signalé par @mariusschulz
-
Suppression du modificateur
declaredesenumsignalé par @mariusschulz -
Le formatage des décimales ne capture pas toutes les décimales dans une règle signalé par @itsgreggreg
-
Utiliser resolveConfigFile.sync dans le CLI signalé par @azz
-
CSS : Normalisation de la casse (minuscules vs majuscules) signalé par @lydell
-
L'import dynamique avec le commentaire webpackChunkName échoue signalé par @pbomb
-
TypeScript : l'utilisation de never comme paramètre de type provoque une erreur : type inconnu : undefined signalé par @hccampos
-
Valeurs d'objets commentées signalé par @sylvainbaronnet
-
Configuration de pre-commit pour jsx, TypeScript, tsx signalé par @reywright
-
Les ternaires JSX incluent des parenthèses signalé par @jasonLaster
-
Conditionnels court-circuités chaînés dans JSX signalé par @brycehill
-
Prise en charge du commentaire pragma @prettier signalé par @ajhyndman
-
Pas d'indentation après un return cassé signalé par @jwbay
-
Prise en charge de la fonction graphql() pour formater le deuxième argument signalé par @brikou
-
prettierignore : impossible d'utiliser un nom de fichier absolu signalé par @ambar
-
Format JavaScript étrange signalé par @maxime1992
Un grand merci à toutes les personnes qui ont contribué à cette version, que ce soit par la création d'issues, les contributions de code, les relectures de code, ou les commentaires et retours généraux. Prettier est un projet géré par la communauté et continue d'exister grâce à des personnes comme vous. Merci !
