跳至主内容区

Prettier 1.7:JSX优化、编译指示支持、TypeScript与CSS修复

· 1 分钟阅读
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

本次发布包含针对JSX、TypeScript、CSS和JavaScript格式化的多项错误修复与优化,以及若干新功能。

重要更新

JSX变更

我们收到了大量关于1.6.0版本中JSX格式调整的社区反馈,现已进行修改以更符合社区标准和预期。

在1.6.0中,我们新增了第二种三元表达式(条件表达式a ? b : c)的格式化风格,这种风格采用括号分隔JSX内容,在社区中颇为流行:

const DinnerOptions = ({ willEatMeat, willEatEggs, willEatVegetables }) => (
<div>
<div>Let's get some dinner...</div>
{willEatMeat ? (
<FullMenu />
) : willEatEggs ? (
<VegetarianMenu />
) : willEatVegetables ? (
<VeganMenu />
) : (
<BackupMenu />
)}
</div>
);

在此功能添加前,Prettier仅使用单一风格格式化三元表达式:

willEatMeat
? "Full Menu"
: willEatEggs
? "Vegetarian Menu"
: willEatVegetables ? "Vegan Menu" : "Backup Menu";

在1.6.0版本中,我们采用以下启发式规则决定何时使用新的"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

但该规则导致了一些意外格式化问题GitHub差异截图:包含在JSX元素内部的国际化字符串三元表达式被转换为JSX模式风格

因此在1.7.0版本中,我们将启发式规则简化为:

We should print a ternary using JSX mode if:
* The ternary contains some JSX in it

希望此项变更能减少意外的三元表达式格式化结果。

特别感谢@duailibe实现此项变更,并修复了多个其他已报告的JSX相关格式化问题。

CSS大小写一致性

本次发布中我们优化了CSS格式化功能,其中@lydell实现了大小写规范化处理

现在CSS中几乎所有内容都将采用lower case输出。

/* Before */
DIV.Foo {
HEIGHT: 12PX;
}

/* After */
div.Foo {
height: 12px;
}

但请放心——Prettier不会改动您的$scss-variables[@less](https://github.com/less)-variablesFunctionNames()。预处理可继续使用!

编译指示支持

新增--require-pragma选项(API中称为requirePragma),该选项将改变Prettier的行为:仅当文件顶部包含特定"编译指示"注释时才执行格式化:

/**
* @prettier
*/

或者

/**
* @format
*/

此功能由@ajhyndman提议,并由@wbinnssmith实现。

其他变更

TypeScript

修复了Prettier 1.6.1中解析never类型时抛出错误的缺陷,例如:

Observable.empty<never>();

同时修复了1.6.1版本在*.d.ts文件中错误移除enum声明前declare关键字的问题:

// In
declare const enum Foo {}

// Out
const enum Foo {}

特别感谢@JamesHenry@existentialism修复这些问题,为TypeScript社区提供支持!

配置

可配置的优先级顺序

新增CLI选项--config-precedence用于配置配置源优先级,有效值为:

cli-override(默认)- CLI选项优先级高于配置文件

file-override - 配置文件优先级高于CLI选项

prefer-file - 若找到配置文件则应用其设置并忽略其他CLI选项;未找到配置文件时正常应用CLI选项

此选项支持编辑器集成场景:用户可定义默认配置,同时遵循项目特定配置。

prettier.resolveConfig.sync

此前API缺少同步解析源文件配置的方法。感谢@sudo-suhas对cosmiconfig的新增功能@ikatyang得以在Prettier API中实现此功能。

本版本合并的PR

本版本修复的问题


感谢所有为本次发布做出贡献的人,无论是通过创建问题、提交代码、代码审查,还是一般的评论和反馈。Prettier 是一个社区驱动的项目,正是因为有你们这样的人才能继续存在。谢谢大家!