跳至主内容区

Prettier 1.2

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

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

1.0 版本并非 Prettier 的终点,我们将继续处理那些细枝末节的格式化问题,以打造一款卓越的 JavaScript 代码格式化工具。您可以预期像此版本一样的次要版本更新会带来一些细节和边界情况的调整,但不会有重大或争议性的改动。

格式化

使用 prettier-ignore 时不再打印子树 (#1286)

遍历 === 分组时提前退出 (#1294)

1.0 版本中引入的回归问题导致深度嵌套函数会触发指数级行为,无法在合理时间内完成格式化。我们已实施缓解措施,虽然无法瞬间完成,但至少能在合理时间内处理完毕。

someObject.someFunction().then(function () {
return someObject.someFunction().then(function () {
return someObject.someFunction().then(function () {
return someObject.someFunction().then(function () {
return someObject.someFunction().then(function () {
});
});
});
});
});

当条件内部发生换行时,对 if 条件进行换行 (#1344)

当 if 条件超出 80 列限制时,Prettier 有时会在条件内部换行却将所有条件打印在同一行,这显得非常怪异。现在当 if 条件需要换行时,Prettier 会对整个条件进行换行处理。

// Before
if (
this.hasPlugin("dynamicImports") && this.lookahead().type === tt.parenLeft
) {

// After
if (
this.hasPlugin("dynamicImports") &&
this.lookahead().type === tt.parenLeft
) {

避免在最后一个参数展开时破坏参数结构 (#1305)

长期存在的最后一个参数展开与复杂参数问题已修复,输出结果不再显得混乱不堪。

// Before
manageChildren: jest.fn(function manageChildren(parentTag, moveFromIndices = [
], moveToIndices = [], addChildReactTags = [], addAtIndices = [
], removeAtIndices = []) {

// After
manageChildren: jest.fn(function manageChildren(
parentTag,
moveFromIndices = [],
moveToIndices = [],
addChildReactTags = [],
addAtIndices = [],
removeAtIndices = []
) {

为箭头函数体内的赋值语句添加括号 (#1326)

我们正在微调括号添加规则以提升代码可读性。本次更新特别为箭头函数体内的赋值语句添加了括号。如果您认为某处需要括号而 Prettier 未添加,请提交 issue 反馈。

// Before
() => foo = bar + 2;

// After
() => (foo = bar + 2);

改进正则表达式打印 (#1341)

Flow 和 Babylon 在转义符和标志位的打印方式上存在不一致。现在转义符将保持原始形式不变,标志位则按字母顺序排序。

// Before
/[\/]\/\u0aBc/mgi;

// After
/[/]\/\u0aBc/gim;

修复 Flow 解析器下带注释的箭头函数括号问题 (#1339)

使用 Flow 解析器时,Prettier 未为带注释的单参数箭头函数添加括号。

// Before
call(/*object*/ row => {});

// After
call((/*object*/ row) => {});

避免在参数右侧内联括号 (#1345)

我们错误地将注释放置在参数列表内参数的右侧。

// Before
f(/* ... */) {}

// After
f() /* ... */ {}

修复模板字面量中的注释问题 (#1296)

模板字面量内部的注释在某些情况下会引发崩溃或错误插入到 ${} 中,此问题已彻底解决 :)

// Before
stdin: TypeError: Cannot read property 'comments' of undefined

// After
`
(?:${escapeChar}[\\S\\s]|(?:(?!${// Using `XRegExp.union` safely rewrites backreferences in `left` and `right`.
// Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax
// transformation resulting from those flags was already applied to `left` and
// `right` when they were passed through the XRegExp constructor above.
XRegExp.union([left, right], '', {conjunction: 'or'}).source})[^${escapeChar}])+)+
`

修复 Windows 下的 isPreviousLineEmpty 问题 (#1263)

Windows 系统中 switch case 语句的空行未能正确保留。

// Before
switch (a) {
case x:

case y:
call();
}

// After
switch (a) {
case x:
case y:
call();
}

CLI

当文件名不是 glob 模式时,跳过 node-glob 文件名匹配 (#1307)

当运行 prettier file.jsfile.js 不存在时,现在会抛出异常而非静默失败。

同步写入 CLI 更改 (#1292)

之前存在一个竞态条件:当您按下 Ctrl-C 停止进程时,可能导致文件被意外删除。现在我们改为同步写入文件,从而彻底解决了这个问题。