跳至主内容区

Prettier 2.4:新增 bracketSameLine 选项与 TypeScript 4.4 支持!

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

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

本次发布将 jsxBracketSameLine 选项重命名为 bracketSameLine,新选项除支持 JSX 外还兼容 HTML、Vue 和 Angular。旧选项名称已被弃用。

我们还新增了对 TypeScript 4.4 的支持,包括 static 等新语法特性。

如果您喜欢 Prettier 并希望支持我们的工作,欢迎通过 我们的 OpenCollective 直接赞助,或赞助我们依赖的项目,包括 typescript-eslintremarkBabel

重要更新

TypeScript

支持 TypeScript 4.4 (#11426 by @sosukesuzuki)

现已支持 TypeScript 4.4

类中的 static 代码块

类静态块语法是 ECMAScript Stage 4 提案。详见 https://github.com/tc39/proposal-class-static-block。

// Input
class Foo {
static count = 0;

// This is a static block:
static {
if (someCondition()) {
Foo.count++;
}
}
}

// Prettier 2.3
SyntaxError: Declaration expected. (5:9)
3 |
4 | // This is a static block:
> 5 | static {
| ^
6 | if (someCondition()) {
7 | Foo.count++;
8 | }

// Prettier 2.4
class Foo {
static count = 0;

// This is a static block:
static {
if (someCondition()) {
Foo.count++;
}
}
}

HTML

使用 bracketSameLine 选项替代 jsxBracketSameLine (#11006 by @kurtztech)

弃用 jsxBracketSameLine 选项,改用新的 bracketSameLine 选项,该选项将适用于 HTML、Angular、Vue 和 JSX。

<!-- Input -->
<div id="foo-bar-baz"
class="bar-foo-baz"
title="a sample title"
data-foo="bar"
data-bar="baz">lorem ipsum dolor sit amet</div>

<!-- Prettier 2.3 -->
<div
id="foo-bar-baz"
class="bar-foo-baz"
title="a sample title"
data-foo="bar"
data-bar="baz"
>
lorem ipsum dolor sit amet
</div>

<!-- Prettier 2.4 -->
<!-- Options: `{bracketSameLine: true}` -->
<div
id="foo-bar-baz"
class="bar-foo-baz"
title="a sample title"
data-foo="bar"
data-bar="baz">
lorem ipsum dolor sit amet
</div>

其他变更

JavaScript

支持样式化组件的带括号标签模板 (#11246 by @sosukesuzuki)

// Input
const StyledComponent =
/** @type {import('styled-components').ThemedStyledFunction<'div',null,{overlap: boolean}>} */
(styled.div)`
position: fixed;
color: red;
`;

// Prettier 2.3
const StyledComponent =
/** @type {import('styled-components').ThemedStyledFunction<'div',null,{overlap: boolean}>} */
(styled.div)`
position: fixed;
color: red;
`;

// Prettier 2.4
const StyledComponent =
/** @type {import('styled-components').ThemedStyledFunction<'div',null,{overlap: boolean}>} */
(styled.div)`
position: fixed;
color: red;
`;

正确统计方法链参数中的正则表达式字面量 (#11299 by @sosukesuzuki)

// Input
foo1(/𠮟𠮟𠮟/).foo2(bar).foo3(baz);

foo1(/叱叱叱/).foo2(bar).foo3(baz);

// Prettier 2.3
foo1(/𠮟𠮟𠮟/)
.foo2(bar)
.foo3(baz);

foo1(/叱叱叱/).foo2(bar).foo3(baz);

// Prettier 2.4
foo1(/𠮟𠮟𠮟/)
.foo2(bar)
.foo3(baz);

foo1(/叱叱叱/)
.foo2(bar)
.foo3(baz);

支持 Hack 风格管道提案 (#11335 by @sosukesuzuki)

Prettier 现已支持 Hack 风格管道语法 提案。根据官方说明文档,我们使用 % 作为主题标记符——随着提案进展,该符号可能在后续版本中变更。

作为本次变更的一部分,“智能”管道语法 的支持已被移除。关于此决策的缘由,请参阅 我们对非标准语法的政策说明

// Input
const foo = fn() |> fn1(%) |> fn2(%);

// Prettier 2.3
SyntaxError: Unexpected token (1:25)
> 1 | const foo = fn() |> fn1(%) |> fn2(%);
| ^
2 |

// Prettier 2.4
const foo = fn() |> fn1(%) |> fn(%);

TypeScript

修复包含映射类型的交叉类型格式化问题 (#11247 by @sosukesuzuki)

// Input
type Example = {
[A in B]: T;
} & {
[A in B]: T;
};

// Prettier 2.3
type Example = {
[A in B]: T;
} &
{
[A in B]: T;
};

// Prettier 2.4
type Example = {
[A in B]: T;
} & {
[A in B]: T;
};

Flow

始终在 Flow 方差符号前添加分号 (#11398 by @noppa)

// Input
class A {
+one = function() {};
-two = val();
+#privOne = val();
static +#privTwo = val();
}
// Prettier 2.3
class A {
+one = function() {}
-two = val()
+#privOne = val()
static +#privTwo = val()
}
// Prettier 2.4
class A {
+one = function() {};
-two = val();
+#privOne = val()
static +#privTwo = val()
}

SCSS

统一为 Sass 模块字符串添加引号 (#11461 by @niksy)

// Input
@use "sass:math";
@forward "list";

// Prettier 2.3
@use "sass:math";
@forward "list";

// Prettier 2.4
@use 'sass:math';
@forward 'list';

CLI

.stylelintrc 自动推断解析器 (#10924 by @SevenOutman)

无扩展名的 .stylelintrc 文件现在会使用 jsonyaml 解析器进行处理。