如何让 Prettier 忽略一段代码?

How to make Prettier to ignore a block of code?

假设我们有一行代码:

const a = 'a'; const b = 'b';

我们不希望它成为 Prettier 的格式化程序。

到目前为止我尝试过的:

1)

// prettier-ignore
const a = 'a'; const b = 'b';
// prettier-ignore-start
const a = 'a'; const b = 'b';
// prettier-ignore-end

在这两种情况下,它都被转换为:

const a = 'a';
const b = 'b';

那么如何忽略一段代码呢?

// prettier-ignore在这里不起作用的原因是// prettier-ignore将从格式化中排除抽象语法树中的下一个节点(参见https://prettier.io/docs/en/ignore.html).

在您的情况下,下一个节点只会是 const a = 'a';。例如,

// prettier-ignore
const a = 
  'a';

格式化后会保留

如果你想在一行中保留两个分配而不改变整个文件的更漂亮的配置,你可以使用 destructuring assignment 如果你使用的是 es6 或 node:

const [a, b] = ["a", "b"];

有时可以将多个语句包装在一个块中,并在其前面加上 // prettier-ignore

// prettier-ignore
{
abcRouter('/api/abc', server);
xRouter  ('/api/x', server);
}

当然,这对于块级 const 声明没有意义,但您写的不是您的实际代码,只是一个示例。所以这是一种在某些情况下但并非在所有情况下都有效的解决方案。总的来说,策略是将多个东西包装在一个东西中,可以是 prettier-ignored.

另一种选择是将所有您不想格式化的代码(例如,因为它是生成的)移动到 .prettierignore 排除的单独文件中。

支持

prettier-ignore-startprettier-ignore-end only in Markdown

你可以忽略整个方法

// prettier-ignore
function myFunc() {
    const a = 'a'; const b = 'b';
    return a + b;
}

其实我只试过打字稿。但我认为应该也适用于 JS。

您可以忽略目前不支持的代码块,您的选择是仅使用 // prettier-ignore

示例如下:

// prettier-ignore
const a = 'a';
const b = 'b';

// prettier-ignore
function xyz() {
 console.log({a, b})
}

已知问题 -> https://github.com/prettier/prettier/issues/5287

文档 -> https://prettier.io/docs/en/ignore.html#javascript

很烂,但目前不支持。

虽然这对 OP 的示例不起作用,但一种选择是将 prettier-ignore 注释添加到要忽略的每一行的 开头 ,使用 /* */ 注释样式,例如

/* prettier-ignore */ import { SomeTypeA, SomeTypeB, SomeTypeC } from './some-long-folder-name/super-long-import';
/* prettier-ignore */ import { someFnA, someFnB, someFnC, } from './another-long-folder-name/super-long-import';

在我看来,这比其他选择更容易让人眼前一亮;

让 prettier 重新格式化导入:

import {
    SomeTypeA,
    SomeTypeB,
    SomeTypeC,
} from './some-long-folder-name/super-long-import';
import {
    someFnA,
    someFnB,
    someFnC,
} from './another-long-folder-name/super-long-import';

在每个导入上方指定 // prettier-ignore 注释:

// prettier-ignore
import { SomeTypeA, SomeTypeB, SomeTypeC } from './some-long-folder-name/super-long-import';
// prettier-ignore
import { someFnA, someFnB, someFnC, } from './another-long-folder-name/super-long-import';