Biome

配置参考

如何用 biome.json 定制和配置 Biome。

$schema

允许传入指向 JSON schema 文件的路径。

我们为 biome.json/biome.jsonc 文件发布了一份 JSON schema 文件。

如果 @biomejs/biome NPM 包安装在 node_modules 文件夹中,你可以在其中为该 schema 指定一个相对路径:

{
  "$schema": "./node_modules/@biomejs/biome/configuration_schema.json"
}

如果你在解析实际文件时遇到问题,可以使用本站发布的那份:

{
  "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json"
}

extends

指向其他 Biome 配置文件的路径列表。Biome 会解析并应用 extends 列表中所含文件的配置项,最后再应用本 biome.json/biome.jsonc 文件中包含的选项。

要继承的路径顺序,从相关性最低到相关性最高排列。

自 v2 起,该选项接受一个必须等于值 "//" 的字符串,可在搭建 monorepo 时使用。

root

该配置是否应被视为根配置。默认情况下,任何配置文件都默认被视为根配置。 当某个配置文件是「嵌套配置」时,它必须设置 "root": false,否则会抛出错误。

这是必需的,以便 Biome 能在命令行接口和编辑器中同时编排多个文件。

默认值:true

plugins

要启用的 GritQL 插件 列表。每个条目可以是简单的路径字符串,也可以是带路径和可选文件过滤选项的对象。

简单路径:

{
  "plugins": ["./my-plugin.grit"]
}

限定到特定文件:

{
  "plugins": [
    {
      "path": "./react-plugin.grit",
      "includes": ["src/components/**", "!src/components/generated/**"]
    }
  ]
}

你可以在同一个列表中混用这两种形式。

plugins.<ITEM>.path

必填。

指向插件 .grit 文件的路径。

plugins.<ITEM>.includes

指定该插件应在哪些文件上运行的一组 glob 模式。用取反 glob(以 ! 开头)进行排除。

省略时,该插件会在 Linter 处理的每个文件上运行。如果 includes 为空 [],该插件不会在任何文件上运行。

files

files.includes

一组 glob 模式

如果某个文件夹匹配某个 glob 模式,该文件夹内的所有文件都会被处理。

下面的例子匹配 src 文件夹内所有带 .js 扩展名的文件:

{
  "files": {
    "includes": ["src/**/*.js"]
  }
}

* 用于匹配 某个文件夹内的所有文件,而 **递归地 匹配某个文件夹内的所有文件和子文件夹。有关 glob 的更多信息,请参阅 glob 语法参考

includes 还支持取反模式,也就是例外。这些是以 ! 开头的模式,可用来指示 Biome 处理所有文件,但 排除 匹配该取反模式的文件。使用取反模式时,你应当始终以 ** 开头来匹配所有文件和文件夹,否则该取反模式不会匹配任何文件。

请注意,例外按顺序处理,因此你可以为例外再设置例外。

考虑下面的例子:

{
  "files": {
    "includes": ["**", "!**/*.test.js", "**/special.test.js", "!test"]
  }
}

这个例子说明:

  1. 借助 ** 模式,所有(子)文件夹内的所有文件都会被处理……
  2. …… 但当这些文件带有 .test.js 扩展名时 除外 ……
  3. …… 不过 special.test.js 这个文件 仍然 会被处理……
  4. …… 但当它出现在名为 test 的文件夹中时 除外,因为该文件夹内 没有 文件会被处理。

这意味着:

  • src/app.js 被处理。
  • src/app.test.js 不会 被处理。
  • src/special.test.js 被处理。
  • test/special.test.js 不会 被处理。

请注意,无论 files.includes 如何设置,node_modules/ 内的文件都会被忽略。

与扫描器的交互

Biome 有一个 扫描器,负责发现嵌套配置文件以及 .gitignore 文件。如果启用了 项目域 中的一条或多条规则,它还可以索引源文件。

扫描器既遵循 files.includes,也遵循 .gitignore 文件中的忽略模式,但有两个例外需要注意:

  • biome.json.gitignore 这样的特殊文件,优先于 files.includes 中的任何忽略模式。
  • 如果启用了项目域中的任何规则,扫描器会索引源文件 及其依赖。这意味着作为 files.includes 一部分而被忽略的文件,仍可能被扫描器索引,只要另有被包含的文件导入了这些文件。这也意味着 node_modules/ 内的 .d.ts 文件和 package.json 清单同样可能被索引。

在遍历文件系统时,Biome 最多跟随三层深的符号链接链。更长的链会被跳过,并产生一条警告级别的诊断信息。

如果你想显式强制扫描器忽略某些文件,可以使用所谓的 强制忽略模式。强制忽略模式看起来像普通的取反模式,但以双感叹号(!!)开头。

例如,你可以用以下配置告诉 Biome 永远不查看任何 dist/ 文件夹:

{
  "files": {
    "includes": ["**", "!!**/dist"]
  }
}

我们建议对包含 输出 文件的任何文件夹(如 build/dist/)使用强制忽略语法。对于这类文件夹,索引几乎不可能带来什么好处。对于包含生成文件的文件夹,我们建议使用普通的忽略模式,以便仍能从这些文件中提取类型信息。

对于嵌套的 biome.json 文件以及你希望显式忽略的 .gitignore 文件,同样必须使用强制忽略语法。

files.ignoreUnknown

如果为 true,Biome 遇到它无法处理的文件时不会发出诊断信息。

{
  "files": {
    "ignoreUnknown": true
  }
}

默认值:false

files.maxSize

源代码文件允许的最大大小,以字节计。超过此限制的文件会因性能原因被忽略。

默认值:1048576 (1024*1024, 1MB)

files.experimentalScannerIgnores

一个由字面路径段组成的数组,扫描器在遍历过程中会忽略这些路径。被忽略的文件不会被索引,这意味着这些文件不会出现在模块图中,也不会从中推断出类型。

vcs

一组用于将 Biome 与 VCS(版本控制软件)集成的属性。

vcs.enabled

Biome 是否应当与 VCS 客户端集成。

默认值:false

vcs.clientKind

客户端的类型。

取值:

  • "git"

vcs.useIgnoreFile

Biome 是否应使用项目的 VCS 忽略文件。当为 true 时,Biome 会忽略 VCS 忽略文件中指定的文件、Git 的本地 exclude 文件以及 .ignore 文件。

此功能也支持嵌套的忽略文件。

根忽略文件产生的语义与根 files.includes 相同。

vcs.root

Biome 应在其中检查 VCS 文件的文件夹。默认情况下,Biome 会使用找到 biome.json 的同一文件夹。

如果你的配置文件不在 VCS 仓库的根目录,你应当在此指定到 VCS 根的路径。该路径必须相对于配置文件。这可确保 Biome 能正确找到并遵循你的 VCS 忽略文件。

例如,如果你的 Biome 配置位于 frontend/biome.json,而你的 VCS 根在项目根目录,你应当像这样配置 vcs.root

{
  "vcs": {
    "enabled": true,
    "clientKind": "git",
    "useIgnoreFile": true,
    "root": "../"
  }
}

如果 Biome 找不到该配置,它会尝试使用当前工作目录。如果连当前工作目录也找不到,Biome 就不会使用 VCS 集成,并发出一条诊断信息。

vcs.defaultBranch

项目的主分支。Biome 在评估发生更改的文件时会使用该分支。

linter

linter.enabled

启用 Biome 的 Linter。

默认值:true

linter.includes

要 Lint 的文件的一组 glob 模式

下面的例子会 Lint src 文件夹内所有带 .js 扩展名的文件:

{
  "linter": {
    "includes": ["src/**/*.js"]
  }
}

* 用于匹配 某个文件夹内的所有文件,而 **递归地 匹配某个文件夹内的所有文件和子文件夹。有关 glob 的更多信息,请参阅 glob 语法参考

includes 还支持取反模式,也就是例外。这些是以 ! 开头的模式,可用来指示 Biome 处理所有文件,但 排除 匹配该取反模式的文件。

请注意,例外按顺序处理,因此你可以为例外再设置例外。

考虑下面的例子:

{
  "linter": {
    "includes": ["**", "!**/*.test.js", "**/special.test.js"]
  }
}

这个例子说明:

  1. 借助 ** 模式,所有(子)文件夹内的所有文件都会被 Lint……
  2. …… 但当这些文件带有 .test.js 扩展名时 除外 ……
  3. …… 不过 special.test.ts 这个文件 仍然 会被 Lint。

这意味着:

  • src/app.js 被 Lint。
  • src/app.test.js 不会 被 Lint。
  • src/special.test.js * 被 Lint。

请注意,linter.includes 是在 files.includes 之后 应用的。这意味着任何未被 files.includes 匹配的文件,都无法再被 linter.includes 匹配。所以下面这个例子 不起作用

{
  "files": {
    "includes": "src/**"
  },
  "linter": {
    // 这不会匹配任何文件,因为它与 `files.includes` 没有重叠:
    "includes": "scripts/**"
  }
}

如果没有指定 linter.includes,所有被 files.includes 匹配的文件都会被 Lint。

linter.rules.recommended

为所有分组启用推荐规则。

默认值:true

linter.rules.preset

它允许启用某一组特定的规则。它接受以下值:

  • "recommended":启用 Biome 的推荐规则(默认)
  • "all":启用所有 Lint 规则,但 nursery 规则除外。
  • "none":禁用所有 Lint 规则。

linter.rules.[group]

影响单个分组规则的选项。Biome 支持以下分组:

  • a11y: 专注于预防无障碍访问问题的规则。
  • complexity: 专注于检查可被简化的复杂代码的规则。
  • correctness: 检测保证有误或无用的代码的规则。
  • nursery: 仍在开发中的新规则。在稳定版本中,nursery 规则需要通过配置显式选择启用,因为它们可能仍存在 bug 或性能问题(即使它们被标记为推荐)。在 nightly 构建中它们默认启用,但由于尚不稳定,其诊断严重性可能被设置为 error 或 warning,具体取决于我们在该规则最终稳定时是否打算将其设为推荐。nursery 规则在稳定后会被提升为其他分组,也可能被移除。属于此分组的规则不受语义化版本约束。
  • performance: 发现可以让代码运行更快或总体更高效的写法的规则。
  • security: 检测潜在安全缺陷的规则。
  • style: 强制以一种一致且符合惯用方式编写代码的规则。
  • suspicious: 检测很可能有误或无用的代码的规则。

每个分组可以接受一个表示严重性的字符串,或一个可逐条配置规则的对象作为值。

传入严重性时,你可以控制属于某个分组的所有规则所发出的严重性。 例如,你可以将 a11y 分组配置为发出 information 级别的诊断信息:

{
  "linter": {
    "rules": {
      "a11y": "info"
    }
  }
}

以下是接受的值:

  • "on":属于该分组的每条规则都会以该规则的默认严重性发出一条诊断信息。请参阅该规则的文档,或使用 explain 命令:
    biome explain noDebugger
  • "off":属于该分组的规则都不会发出任何诊断信息。
  • "info":属于该分组的所有规则都会发出 information 严重性的诊断信息
  • "warn":属于该分组的所有规则都会发出 warning 严重性的诊断信息
  • "error":属于该分组的所有规则都会发出 error 严重性的诊断信息

linter.rules.[group].recommended

为单个分组启用推荐规则。

示例:

{
  "linter": {
    "enabled": true,
    "rules": {
      "nursery": {
        "recommended": true
      }
    }
  }
}

assist

assist.enabled

启用 Biome 的 Assist。

默认值:true

assist.includes

要 Lint 的文件的一组 glob 模式

下面的例子会分析 src 文件夹内所有带 .js 扩展名的文件:

{
  "assist": {
    "includes": ["src/**/*.js"]
  }
}

* 用于匹配 某个文件夹内的所有文件,而 **递归地 匹配某个文件夹内的所有文件和子文件夹。有关 glob 的更多信息,请参阅 glob 语法参考

includes 还支持取反模式,也就是例外。这些是以 ! 开头的模式,可用来指示 Biome 处理所有文件,但 排除 匹配该取反模式的文件。

请注意,例外按顺序处理,因此你可以为例外再设置例外。

考虑下面的例子:

{
  "assist": {
    "includes": ["**", "!**/*.test.js", "**/special.test.js"]
  }
}

这个例子说明:

  1. 借助 ** 模式,所有(子)文件夹内的所有文件都会被分析……
  2. …… 但当这些文件带有 .test.js 扩展名时 除外 ……
  3. …… 不过 special.test.ts 这个文件 仍然 会被分析。

这意味着:

  • src/app.js 被分析。
  • src/app.test.js 不会 被分析。
  • src/special.test.js * 被分析。

请注意,assist.includes 是在 files.includes 之后 应用的。这意味着任何未被 files.includes 匹配的文件,都无法再被 assist.includes 匹配。所以下面这个例子 不起作用

{
  "files": {
    "includes": "src/**"
  },
  "assist": {
    // 这不会匹配任何文件,因为它与 `files.includes` 没有重叠:
    "includes": "scripts/**"
  }
}

如果没有指定 assist.includes,所有被 files.includes 匹配的文件都会被 Lint。

assist.actions.recommended

为所有分组启用推荐操作。

assist.actions.[group]

影响单个分组规则的选项。Biome 支持以下分组:

  • source: 该分组表示那些在保存时可安全应用到文档的操作。这些操作通常都是安全的,一般不会改变程序的功能。

assist.actions.[group].recommended

为单个分组启用推荐规则。

示例:

{
  "assist": {
    "enabled": true,
    "actions": {
      "source": {
        "recommended": true
      }
    }
  }
}

formatter

这些选项适用于所有语言。下面还有针对各语言的格式化选项。

formatter.enabled

启用 Biome 的格式化器。

默认值:true

formatter.includes

要格式化的文件的一组 glob 模式

下面的例子会格式化 src 文件夹内所有带 .js 扩展名的文件:

{
  "formatter": {
    "includes": ["src/**/*.js"]
  }
}

* 用于匹配 某个文件夹内的所有文件,而 **递归地 匹配某个文件夹内的所有文件和子文件夹。有关 glob 的更多信息,请参阅 glob 语法参考

includes 还支持取反模式,也就是例外。这些是以 ! 开头的模式,可用来指示 Biome 处理所有文件,但 排除 匹配该取反模式的文件。

请注意,例外按顺序处理,因此你可以为例外再设置例外。

考虑下面的例子:

{
  "formatter": {
    "includes": ["**", "!**/*.test.js", "**/special.test.js"]
  }
}

这个例子说明:

  1. 借助 ** 模式,所有(子)文件夹内的所有文件都会被格式化……
  2. …… 但当这些文件带有 .test.js 扩展名时 除外 ……
  3. …… 不过 special.test.ts 这个文件 仍然 会被格式化。

这意味着:

  • src/app.js 被格式化。
  • src/app.test.js 不会 被格式化。
  • src/special.test.js 被格式化。

请注意,formatter.includes 是在 files.includes 之后 应用的。这意味着任何未被 files.includes 匹配的文件,都无法再被 formatter.includes 匹配。所以下面这个例子 不起作用

{
  "files": {
    "includes": "src/**"
  },
  "formatter": {
    // 这不会匹配任何文件,因为它与 `files.includes` 没有重叠:
    "includes": "scripts/**"
  }
}

如果没有指定 formatter.includes,所有被 files.includes 匹配的文件都会被格式化。

formatter.formatWithErrors

允许格式化带有语法错误的文档。

{
  "formatter": {
    "formatWithErrors": true
  }
}

默认值:false

formatter.indentStyle

缩进的风格。可以是 "tab""space"

默认值:"tab"

formatter.indentWidth

缩进应当有多大。

默认值:2

formatter.lineEnding

行尾的类型。

  • "lf",仅换行符 Line Feed(\n),在 Linux、macOS 以及 git 仓库中常见;
  • "crlf",回车符加换行符(\r\n),在 Windows 上常见;
  • "cr",仅回车符(\r),极少使用。
  • "auto",匹配操作系统的预期行尾风格:在 Windows 上为 CRLF(\r\n),在 macOS/Linux 上为 LF(\n)。

默认值:"lf"

formatter.lineWidth

单行上可以书写的字符数。

默认值:80

formatter.attributePosition

类 HTML 语言中的属性位置风格。

  • "auto",属性会被自动格式化,只有当它们满足某些条件时才会折成多行;
  • "multiline",如果使用了多于 1 个属性,属性会折成多行。

默认值:"auto"

formatter.bracketSpacing

选择在括号与内部值之间是否添加空格。

默认值:true

formatter.delimiterSpacing

是否在分隔符内部插入空格(在起始分隔符之后、结束分隔符之前)。空的分隔符不受影响,且不会在起始分隔符之前添加空格。

默认值:false

formatter.expand

是否将数组和对象展开到多行。

  • "auto",如果第一个属性带有换行,则对象字面量被格式化到多行;如果数组字面量能放进一行,则被格式化到单行。
  • "always",这些字面量被格式化到多行,不论列表有多长。
  • "never",如果这些字面量能放进一行,则被格式化到单行。

格式化 package.json 时,除非另有配置,Biome 会使用 always

默认值:"auto"

formatter.trailingNewline

是否在文件末尾添加一个结尾换行。

默认值为 true。

formatter.useEditorconfig

Biome 是否应使用 .editorconfig 文件来确定格式化选项。

配置文件 .editorconfigbiome.json 会遵循以下规则:

  • biome.json 中的格式化设置始终优先于 .editorconfig 文件。
  • 位于 biome.json 文件所在层级之上的 .editorconfig 文件已被忽略。这是为了避免把某人主目录中的格式化设置加载到带有 biome.json 文件的项目中。
  • 目前不支持嵌套的 .editorconfig 文件。

默认值:false

javascript

这些选项仅适用于 JavaScript(以及 TypeScript)文件。

javascript.parser.unsafeParameterDecoratorsEnabled

允许支持不安全/实验性的参数装饰器。

{
  "javascript": {
    "parser": {
	    "unsafeParameterDecoratorsEnabled": true
    }
  }
}

默认值:false

javascript.parser.jsxEverywhere

设置为 true 时,允许解析 .js 文件内的 JSX 语法。设置为 false 时,Biome 遇到 .js 文件内的 JSX 语法会抛出诊断信息。

默认值:true

{
  "javascript": {
    "parser": {
      "jsxEverywhere": false
    }
  }
}

javascript.formatter.quoteStyle

表示字符串字面量时所使用的引号类型。可以是 "single""double"

默认值:"double"

{
  "javascript": {
    "formatter": {
      "quoteStyle": "single"
    }
  }
}

javascript.formatter.jsxQuoteStyle

表示 jsx 字符串字面量时所使用的引号类型。可以是 "single""double"

默认值:"double"

{
  "javascript": {
    "formatter": {
      "jsxQuoteStyle": "single"
    }
  }
}

javascript.formatter.quoteProperties

对象内的属性在何时应被加引号。可以是 "asNeeded""preserve"

默认值:"asNeeded"

{
  "javascript": {
    "formatter": {
      "quoteProperties": "preserve"
    }
  }
}

javascript.formatter.trailingCommas

在多行的逗号分隔语法结构中,凡是可能之处都打印结尾逗号。可能的取值:

  • "all",始终添加结尾逗号;
  • "es5",仅在旧版 JavaScript 支持的地方添加结尾逗号;
  • "none",从不添加结尾逗号。

默认值:"all"

javascript.formatter.semicolons

它配置格式化器在何处打印分号:

  • "always",始终在每条语句末尾添加分号;
  • "asNeeded",仅在需要之处添加分号,以防 ASI

默认值:"always"

示例:

{
  "javascript": {
    "formatter": {
      "semicolons": "asNeeded"
    }
  }
}

javascript.formatter.arrowParentheses

是否为箭头函数添加非必需的括号:

  • "always",始终添加括号;
  • "asNeeded",仅在需要时添加括号。

默认值:"always"

javascript.formatter.enabled

为 JavaScript(及其超语言)文件启用 Biome 的格式化器。

默认值:true

javascript.formatter.indentStyle

JavaScript(及其超语言)文件的缩进风格。可以是 "tab""space"

默认值:"tab"

javascript.formatter.indentWidth

JavaScript(及其超语言)文件的缩进应当有多大。

默认值:2

javascript.formatter.lineEnding

JavaScript(及其超语言)文件的行尾类型。

  • "lf",仅换行符 Line Feed(\n),在 Linux、macOS 以及 git 仓库中常见;
  • "crlf",回车符加换行符(\r\n),在 Windows 上常见;
  • "cr",仅回车符(\r),极少使用。
  • "auto",匹配操作系统的预期行尾风格:在 Windows 上为 CRLF(\r\n),在 macOS/Linux 上为 LF(\n)。

默认值:"lf"

javascript.formatter.lineWidth

在 JavaScript(及其超语言)文件中,单行上可以书写的字符数。

默认值:80

javascript.formatter.bracketSameLine

选择多行 JSX 元素结尾的 > 是否应放在最后一个属性所在的那一行

默认值:false

javascript.formatter.bracketSpacing

选择在括号与内部值之间是否添加空格。

默认值:true

javascript.formatter.delimiterSpacing

是否在分隔符内部插入空格(在起始分隔符之后、结束分隔符之前)。空的分隔符不受影响,且不会在起始分隔符之前添加空格。

对于 JavaScript,它影响圆括号(例如 foo( a, b ))、方括号(例如 [ a, b ])、模板字面量插值(例如 ${ expr })、TypeScript 尖括号(例如 foo< T >())、JSX 表达式大括号(例如 { value }),以及逻辑非运算符(例如 ! x)。

默认值:false

javascript.formatter.attributePosition

jsx 元素中的属性位置风格。

  • "auto",不强制每行一个属性。
  • "multiline",强制每行一个属性。

默认值:"auto"

javascript.formatter.expand

是否将数组和对象展开到多行。

  • "auto",如果第一个属性带有换行,则对象字面量被格式化到多行;如果数组字面量能放进一行,则被格式化到单行。
  • "always",这些字面量被格式化到多行,不论列表有多长。
  • "never",如果这些字面量能放进一行,则被格式化到单行。

默认值:"auto"

javascript.formatter.operatorLinebreak

在把二元表达式折成多行时,是在二元运算符之前还是之后折行。

默认值:"after"

  • "after:运算符放在表达式之后:
  if (
    expressionOne &&
    expressionTwo &&
    expressionThree &&
    expressionFour
  ) {}
  • "before:运算符放在表达式之前:
  if (
    expressionOne
    && expressionTwo
    && expressionThree
    && expressionFour
  ) {}

javascript.formatter.trailingNewline

是否在文件末尾添加一个结尾换行。

默认值为 true。

javascript.globals

Biome 应当忽略的全局名称列表(分析器、Linter 等)

{
  "javascript": {
    "globals": ["$", "_", "externalVariable"]
  }
}

javascript.jsxRuntime

指明用于解释 JSX 的运行时或转换的类型。

  • "transparent":表示现代或原生的 JSX 环境,不需要 Biome 做特殊处理。
  • "reactClassic":表示需要 React 导入的经典 React 环境。对应 TypeScript 的 tsconfig.jsonjsx 选项的 react 值。
{
  "javascript": {
    "jsxRuntime": "reactClassic"
  }
}

有关旧版与新版 JSX 运行时的更多信息,请参阅: https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html

默认值:"transparent"

javascript.resolver.experimentalPnpmCatalogs

启用对从默认目录和命名 pnpm 目录解析依赖的支持。

启用后,Biome 在解析包依赖时可以使用 pnpm-workspace.yaml 中的 catalogcatalogs 条目。

默认值:false

javascript.linter.enabled

为 JavaScript(及其超语言)文件启用 Biome 的 Linter。

默认值:true

{
  "javascript": {
    "linter": {
      "enabled": false
    }
  }
}

javascript.assist.enabled

为 JavaScript(及其超语言)文件启用 Biome 的 Assist。

默认值:true

{
  "javascript": {
    "assist": {
      "enabled": false
    }
  }
}

javascript.experimentalEmbeddedSnippetsEnabled

启用在 JavaScript(及其超语言)文件中解析和格式化嵌入的语言片段。

默认值:false

{
  "javascript": {
    "experimentalEmbeddedSnippetsEnabled": true
  }
}

json

应用于 JSON 文件的选项。

json.parser.allowComments

启用对 JSON 文件中注释的解析。

{
  "json": {
    "parser": {
      "allowComments": true
    }
  }
}

json.parser.allowTrailingCommas

启用对 JSON 文件中结尾逗号的解析。

{
  "json": {
    "parser": {
      "allowTrailingCommas": true
    }
  }
}

json.formatter.enabled

为 JSON(及其超语言)文件启用 Biome 的格式化器。

默认值:true

{
  "json": {
    "formatter": {
      "enabled": false
    }
  }
}

json.formatter.indentStyle

JSON(及其超语言)文件的缩进风格。可以是 "tab""space"

默认值:"tab"

json.formatter.indentWidth

JSON(及其超语言)文件的缩进应当有多大。

默认值:2

json.formatter.lineEnding

JSON(及其超语言)文件的行尾类型。

  • "lf",仅换行符 Line Feed(\n),在 Linux、macOS 以及 git 仓库中常见;
  • "crlf",回车符加换行符(\r\n),在 Windows 上常见;
  • "cr",仅回车符(\r),极少使用。
  • "auto",匹配操作系统的预期行尾风格:在 Windows 上为 CRLF(\r\n),在 macOS/Linux 上为 LF(\n)。

默认值:"lf"

json.formatter.lineWidth

在 JSON(及其超语言)文件中,单行上可以书写的字符数。

默认值:80

json.formatter.trailingCommas

在多行的逗号分隔语法结构中,凡是可能之处都打印结尾逗号。

允许的取值:

  • "none":移除结尾逗号;
  • "all"保留 结尾逗号并优先使用它。

默认值:"none"

json.formatter.bracketSpacing

选择在括号与内部值之间是否添加空格。

默认值:true

json.formatter.delimiterSpacing

是否在分隔符内部插入空格(在起始分隔符之后、结束分隔符之前)。空的分隔符不受影响,且不会在起始分隔符之前添加空格。对于 JSON,它影响方括号(例如 [ 1, 2, 3 ])。

默认值:false

json.formatter.expand

是否将数组和对象展开到多行。

  • "auto",如果第一个属性带有换行,则对象字面量被格式化到多行;如果数组字面量能放进一行,则被格式化到单行。
  • "always",这些字面量被格式化到多行,不论列表有多长。
  • "never",如果这些字面量能放进一行,则被格式化到单行。

格式化 package.json 时,除非另有配置,Biome 会使用 always

默认值:"auto"

json.formatter.trailingNewline

是否在文件末尾添加一个结尾换行。

默认值为 true。

json.linter.enabled

为 JSON(及其超语言)文件启用 Biome 的格式化器。

默认值:true

{
  "json": {
    "linter": {
      "enabled": false
    }
  }
}

json.assist.enabled

为 JSON(及其超语言)文件启用 Biome 的 Assist。

默认值:true

{
  "json": {
    "assist": {
      "enabled": false
    }
  }
}

css

应用于 CSS 文件的选项。

css.parser.cssModules

启用对 CSS modules 的解析。

默认值:false

css.parser.tailwindDirectives

tailwindDirectives, tailwind, tailwind directives, tailwind syntax

启用对 Tailwind 专有语法的解析,例如 @theme@utility@apply

默认值:false

css.formatter.enabled

为 CSS 文件启用 Biome 的格式化器。

默认值:false

{
  "css": {
    "formatter": {
      "enabled": false
    }
  }
}

css.formatter.indentStyle

CSS 文件的缩进风格。可以设为 "tab""space"

默认值:"tab"

css.formatter.indentWidth

CSS 文件的缩进宽度。

默认值:2

{
  "css": {
    "formatter": {
      "indentWidth": 2
    }
  }
}

css.formatter.lineEnding

CSS 文件的换行类型。

  • "lf",仅换行符(\n),常见于 Linux、macOS 以及 git 仓库内部;
  • "crlf",回车符 + 换行符(\r\n),常见于 Windows;
  • "cr",仅回车符(\r),极少使用;
  • "auto",匹配操作系统期望的换行风格:Windows 上使用 CRLF(\r\n),macOS/Linux 上使用 LF(\n)。

默认值:"lf"

css.formatter.lineWidth

CSS 文件单行可以书写的字符数。

默认值:80

css.formatter.quoteStyle

表示字符串字面量时使用的引号类型。可以设为 "single""double"

默认值:"double"

css.formatter.delimiterSpacing

是否在定界符内部插入空格(起始定界符之后、闭合定界符之前)。空定界符不受影响,起始定界符之前也不会添加空格。对于 CSS,影响圆括号(例如 rgb( 0, 0, 0 ))和方括号(例如 [ data-attr ])。

默认值:false

css.formatter.trailingNewline

是否在文件末尾添加尾部换行符。

默认为 true。

css.linter.enabled

为 CSS 文件启用 Biome 的 Linter。

默认值:true

{
  "css": {
    "linter": {
      "enabled": false
    }
  }
}

css.assist.enabled

为 CSS 文件启用 Biome 的 Assist 辅助操作。

默认值:true

{
  "css": {
    "assist": {
      "enabled": false
    }
  }
}

graphql

应用于 GraphQL 文件的选项。

graphql.formatter.enabled

为 GraphQL 文件启用 Biome 的格式化器。

默认值:false

graphql.formatter.indentStyle

GraphQL 文件的缩进风格。可以设为 "tab""space"

默认值:"tab"

graphql.formatter.indentWidth

GraphQL 文件的缩进宽度。

默认值:2

graphql.formatter.lineEnding

GraphQL 文件的换行类型。

  • "lf",仅换行符(\n),常见于 Linux、macOS 以及 git 仓库内部;
  • "crlf",回车符 + 换行符(\r\n),常见于 Windows;
  • "cr",仅回车符(\r),极少使用;
  • "auto",匹配操作系统期望的换行风格:Windows 上使用 CRLF(\r\n),macOS/Linux 上使用 LF(\n)。

默认值:"lf"

graphql.formatter.lineWidth

GraphQL 文件单行可以书写的字符数。

默认值:80

graphql.formatter.quoteStyle

表示字符串字面量时使用的引号类型。可以设为 "single""double"

默认值:"double"

graphql.formatter.trailingNewline

是否在文件末尾添加尾部换行符。

默认为 true。

graphql.linter.enabled

为 GraphQL 文件启用 Biome 的 Linter。

默认值:true

graphql.assist.enabled

为 GraphQL 文件启用 Biome 的 Assist 辅助操作。

默认值:true

grit

应用于 Grit 文件的选项。

grit.formatter.enabled

为 Grit 文件启用 Biome 的格式化器。

默认值:false

grit.formatter.indentStyle

Grit 文件的缩进风格。可以设为 "tab""space"

默认值:"tab"

grit.formatter.indentWidth

Grit 文件的缩进宽度。

默认值:2

grit.formatter.lineEnding

Grit 文件的换行类型。

  • "lf",仅换行符(\n),常见于 Linux、macOS 以及 git 仓库内部;
  • "crlf",回车符 + 换行符(\r\n),常见于 Windows;
  • "cr",仅回车符(\r),极少使用;
  • "auto",匹配操作系统期望的换行风格:Windows 上使用 CRLF(\r\n),macOS/Linux 上使用 LF(\n)。

默认值:"lf"

grit.formatter.lineWidth

Grit 文件单行可以书写的字符数。

默认值:80

grit.formatter.quoteStyle

表示字符串字面量时使用的引号类型。可以设为 "single""double"

默认值:"double"

grit.formatter.trailingNewline

是否在文件末尾添加尾部换行符。

默认为 true。

grit.linter.enabled

为 Grit 文件启用 Biome 的 Linter。

默认值:true

{
  "grit": {
    "linter": {
      "enabled": false
    }
  }
}

grit.assist.enabled

为 Grit 文件启用 Biome 的 Assist 辅助操作。

默认值:true

{
  "grit": {
    "assist": {
      "enabled": false
    }
  }
}

html

html.experimentalFullSupportEnabled

启用后,Biome 将对类 HTML 语言(Vue、Svelte 和 Astro 文件)提供完整支持,这些文件中嵌入式语言的解析、格式化和 Lint 行为保持一致。

禁用后,Biome 只会从这些文件中提取 JavaScript/TypeScript 部分进行分析,忽略其余内容。

html.parser.interpolation

启用对 .html 文件中双花括号文本表达式(如 {{ expression }})的解析。

默认值:false

html.parser.vue

启用 .html 文件内 Vue 专有语法的解析。由于插值语法是 Vue 语法的核心组成部分,启用此选项也会隐式启用 html.parser.interpolation

Biome 已能自动识别 .vue 文件,因此除非你的项目使用 .html 文件承载 Vue 组件,否则你可能无需启用此选项。

默认值:false

html.formatter.enabled

为 HTML 文件启用 Biome 的格式化器。

默认值:false

html.formatter.indentStyle

HTML 文件的缩进风格。可以设为 "tab""space"

默认值:"tab"

html.formatter.indentWidth

HTML 文件的缩进宽度。

默认值:2

html.formatter.lineEnding

HTML 文件的换行类型。

  • "lf",仅换行符(\n),常见于 Linux、macOS 以及 git 仓库内部;
  • "crlf",回车符 + 换行符(\r\n),常见于 Windows;
  • "cr",仅回车符(\r),极少使用;
  • "auto",匹配操作系统期望的换行风格:Windows 上使用 CRLF(\r\n),macOS/Linux 上使用 LF(\n)。

默认值:"lf"

html.formatter.lineWidth

HTML 文件单行可以书写的字符数。

默认值:80

html.formatter.attributePosition

HTML 元素中属性的排布风格。

  • "auto",属性自动格式化,仅在满足特定条件时才会拆分为多行;
  • "multiline",若使用了超过 1 个属性,属性将拆分为多行。

默认值:"auto"

html.formatter.bracketSameLine

多行 HTML 标签的闭合右括号是否紧贴在最后一行的行尾,而不是单独占据下一行。

默认值:false

html.formatter.whitespaceSensitivity

whitespaceSensitivity, whitespace sensitivity

格式化 HTML(及其超集语言)时,是否考虑空白的敏感性。

默认值:"css"

  • "css":对于在浏览器用户代理样式表中默认显示样式为 "inline" 的元素,格式化器认为其空白是有意义的。

  • "strict":对所有元素而言,内容首尾的空白都被视为有意义。

    若存在空白,格式化器至少应保留一个空白字符。 否则,若不存在空白,则不应在 > 之后或 < 之前添加任何空白。换句话说,若没有空白,文本内容应紧贴标签。

    文本紧贴标签的示例:

    <b
       >content</b
    >
  • "ignore":空白被视为无意义。格式化器可以自行决定删除或添加空白。

html.formatter.indentScriptAndStyle

indentScriptAndStyle, indent script, indent style

自 2.3 起:仅影响 .vue.svelte 文件

是否对 Vue 和 Svelte 文件中 <script><style> 标签的内容进行缩进。目前不适用于普通 HTML 文件。

默认值:false

设为 true 时,<script><style> 标签的内容将相对标签缩进一级。

<script>

  import Bar from "./Bar.vue";
</script>

html.formatter.selfCloseVoidElements

selfCloseVoidElements, void elements, self closing elements

空元素是否应采用自闭合写法。默认为 never。

默认值:"never"

  • "never":格式化器会移除空元素中的斜杠 /
  • "always":始终在空元素中添加斜杠 /

html.formatter.trailingNewline

是否在文件末尾添加尾部换行符。

默认为 true。

html.linter.enabled

为 HTML 文件启用 Biome 的 Linter。

默认值:true

html.assist.enabled

为 HTML 文件启用 Biome 的 Assist 辅助操作。

默认值:true

overrides

一个模式列表。

使用该配置可以针对特定文件更改工具的行为。

当某个文件匹配到某个 override 模式时,该模式中指定的配置将覆盖顶层配置。

模式的顺序很重要。如果一个文件可以匹配三个模式,只会使用第一个。

overrides.<ITEM>.includes

用于应用自定义设置的文件所对应的 glob 模式 列表。

{
  "overrides": [{
    "includes": ["scripts/*.js"],
    // 仅应用于 includes 字段所指定文件的设置。
  }]
}

overrides.<ITEM>.formatter

包含顶层 formatter配置的选项,但不含 ignoreinclude

示例

例如,可以为 glob 路径 generated/** 匹配的文件修改格式化器的 lineWidthindentStyle

{
  "formatter": {
    "lineWidth": 100
  },
  "overrides": [
    {
      "includes": ["generated/**"],
      "formatter": {
        "lineWidth": 160,
        "indentStyle": "space"
      }
    }
  ]
}

overrides.<ITEM>.linter

包含顶层 linter配置的选项,但不含 ignoreinclude

示例

你可以对特定 glob 路径禁用某些规则,并对其他 glob 路径禁用 Linter:

{
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true
    }
  },
  "overrides": [
    {
      "includes": ["lib/**"],
      "linter": {
        "rules": {
          "suspicious": {
            "noDebugger": "off"
          }
        }
      }
    },
    {
      "includes": ["shims/**"],
      "linter": {
        "enabled": false
      }
    }
  ]
}

overrides.<ITEM>.javascript

包含顶层 javascript配置的选项。允许你针对特定文件覆盖 JavaScript 专属设置。

示例

你可以更改特定文件夹中 JavaScript 文件的格式化行为:

{
  "formatter": {
    "lineWidth": 120
  },
  "javascript": {
    "formatter": {
      "quoteStyle": "single"
    }
  },
  "overrides": [
    {
      "includes": ["lib/**"],
      "javascript": {
        "formatter": {
          "quoteStyle": "double"
        }
      }
    }
  ]
}

overrides.<ITEM>.json

包含顶层 json配置的选项。允许你针对特定文件覆盖 JSON 专属设置。

示例

你可以为特定 JSON 文件启用解析特性:

{
  "linter": {
    "enabled": true,
    "rules": {
      "recommended": true
    }
  },
  "overrides": [
    {
      "includes": [".vscode/**"],
      "json": {
        "parser": {
          "allowComments": true,
          "allowTrailingCommas": true
        }
      }
    }
  ]
}

overrides.<ITEM>.[language]

包含顶层语言配置的选项。允许你针对特定文件覆盖语言专属设置。

Glob 语法参考

glob 模式用于匹配文件和文件夹的路径。Biome 在 glob 中支持以下语法:

  • * 匹配零个或多个字符。它不能匹配路径分隔符 /
  • ** 递归匹配目录和文件。该序列必须作为完整的路径组件使用, 因此 **ab** 都无效,会导致报错。连续超过两个 * 字符的序列 同样无效。
  • [...] 匹配方括号内的任意字符。 也可以按 Unicode 顺序指定字符范围,例如 [0-9] 表示 0 到 9(含两端)之间的任意字符。
  • [!...][...] 的取反,即匹配在方括号内的任意字符。
  • 如果整个 glob 以 ! 开头,则为所谓的否定模式。仅当路径 匹配该 glob 时, 它才会命中。否定模式不能单独使用,只能作为常规 glob 的 例外
  • 判断文件是否被包含时,Biome 也会考虑其父文件夹。这意味着,如果你想 包含 某个文件夹中的所有文件,需要使用 /** 后缀来匹配这些文件。但如果想 忽略 某个文件夹中的所有文件,则无需 /** 后缀。我们建议忽略文件夹时 不带尾部的 /**,以避免不必要的遍历, 也避免 Biome 从被忽略的文件夹中加载 biome.json.gitignore 文件的风险。

一些示例:

  • dist/** 匹配 dist/ 文件夹及其内部的所有文件。
  • !dist 忽略 dist/ 文件夹及其内部的所有文件。
  • **/test/** 匹配任意名为 test 的文件夹下的所有文件,无论其位于何处。 例如 dist/testsrc/test
  • **/*.js 匹配所有文件夹中以 .js 扩展名结尾的文件。