Prettier 1.7:JSX优化、编译指示支持、TypeScript与CSS修复
本页面由 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
但该规则导致了一些意外格式化问题:

因此在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)-variables或FunctionNames()。预处理可继续使用!
编译指示支持
新增--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
-
确保ExperimentalSpreadProperty内的LogicalExpression保留括号 by @existentialism
-
在覆盖率报告中忽略特定内容 由 @lydell 贡献
-
修复动态导入问题 由 @rkurbatov 贡献
-
[修复: TypeScript never 关键字 (解决 #2718)](https://github.com/prettier/prettier/pull/2756) 由 @JamesHenry 贡献
-
修复 WebStorm 集成指南 由 @xsburg 贡献
本版本修复的问题
-
return 语句换行后不缩进(由 @jwbay 报告)
感谢所有为本次发布做出贡献的人,无论是通过创建问题、提交代码、代码审查,还是一般的评论和反馈。Prettier 是一个社区驱动的项目,正是因为有你们这样的人才能继续存在。谢谢大家!
