Biome

语言支持

Biome 支持的语言与特性。

图例:

  • ✅:支持
  • 🚫:未排期
  • ⌛️:进行中
  • 🟡:实验性
语言解析格式化Lint插件支持
JavaScript
TypeScript
JSX
TSX
JSON
JSONC
HTML*🟡🚫
SVG🟡🚫
Vue🟡🟡🟡🚫
Svelte🟡🟡🟡🚫
Astro🟡🟡🟡🚫
CSS✅️✅️✅️
SCSS⌛️⌛️🚫🚫
YAML⌛️⌛️🚫🚫
GraphQL✅️✅️✅️🚫
Markdown⌛️⌛️🚫🚫
GritQL✅️✅️🚫🚫

* 目前需要显式启用

JavaScript 支持

Biome 支持该语言的 ES2024 版本。

Biome 只支持已定稿的官方语法。当一项提案进入 阶段 3 后,团队才会开始开发对应的新语法。

内嵌语言支持(实验性)

Biome 支持嵌入在 JavaScript 模板字符串中的以下语言:

  • CSS(cssstyled 标签)
  • GraphQL(gqlgraphql 标签)

该特性仍是实验性的,默认禁用。要启用此特性,请设置 javascript.experimentalEmbeddedSnippetsEnabled 选项。

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

TypeScript 支持

Biome 支持 TypeScript 5.9 版本。

JSONC 支持

JSONC 是 “JSON with Comments” 的缩写。由于允许用户在配置文件中添加注释,这一格式被 VS CodeTypeScriptBabel 等各种工具广泛使用。但 JSONC 并不是一个定义严格的标准,不同工具对 JSONC 文件中尾逗号的处理方式存在差异。为了适配这一点,Biome 没有为 JSONC 提供单独的语言配置。相反,我们通过 json.parser.allowCommentsjson.parser.allowTrailingCommasjson.formatter.trailingCommas 等选项增强了 JSON 的解析与格式化能力。这种方式让 Biome 能够有效支持各种 JSON 文件变体。

对于扩展名为 .jsonc 的文件,或根据语言标识符被识别为 jsonc 的文件,Biome 会自动应用以下默认设置来解析和格式化它们:

  • json.parser.allowCommentstrue
  • json.parser.allowTrailingCommastrue
  • json.formatter.trailingCommasnone

请注意,一些知名文件(如 tsconfig.json.babelrc)没有使用 .jsonc 扩展名,但同样允许注释和尾逗号;而另一些文件(如 .eslintrc.json)只允许注释。Biome 能够识别这些文件,并相应调整 json.parser.allowTrailingCommas 选项,确保它们被正确解析。

本节给出了 Biome 能识别的全部知名文件的完整列表。

HTML 超级语言支持

v2.3.0 起,Biome 开箱即用地支持 Vue、Svelte 和 Astro 文件。这意味着 Biome 能够格式化并 Lint 这些文件中的 HTML、CSS 和 JavaScript 部分。

不过,这种支持必须被视为实验性的,仍会不断变化和改进。在 v2.3.0 中,我们落地了支撑该功能的架构,但一些格式化和 Lint 规则仍需调整。

v2.4.0 起,Biome 对语言特有语法的支持好了很多,例如 Svelte 的控制流语法(如 {#if}{/if})。这对绝大多数 Svelte 5 项目来说应该已经够用,但更新的特性、罕见语法或边缘场景可能尚未覆盖。

跨内嵌语言生效的 Lint 规则已有支持(并且自 v2.5.0 起效果更好一些),但由于相关工作仍在进行,它们可能会报出一些误报。

由于完整支持仍是实验性的,必须显式启用。格式化器也仍是实验性的,因此同样必须显式启用。

{
  "html": {
    "experimentalFullSupportEnabled": true,
    "formatter": {
      "enabled": true
    }
  }
}

Lint 类 HTML 语言

如果你要 Lint .svelte.astro.vue 文件,且 html.experimentalFullSupportEnabledfalse,建议关闭以下几条额外的规则,以避免我们的部分支持造成误报的 Lint 错误。为此请使用 overrides 选项:

{
  "overrides": [
    {
      "includes": ["**/*.svelte", "**/*.astro", "**/*.vue"],
      "linter": {
        "rules": {
          "style": {
            "useConst": "off",
            "useImportType": "off"
          },
          "correctness": {
            "noUnusedVariables": "off",
            "noUnusedImports": "off"
          }
        }
      }
    }
  ]
}

使用不同的设置进行格式化

使用 Biome,你可以分别控制各种语言的格式化。既然 Biome 已能在同一个文件中处理多种语言,根据你的配置,出现不一致情况的概率也会上升。

例如,在格式化一个同时包含 JavaScript 和 CSS 代码的类 HTML 文件时,你的文件有可能变成制表符与空格混用的状态,就像下面这个例子(我们假设已启用完整支持):

{
  "javascript": {
    "format": {
      "indentStyle": "tab"
    }
  },
  "css": {
    "format": {
      "indentStyle": "space",
      "indentWidth": 4
    }
  }
}

我们创建了一个 GitHub discussion 来讨论这个问题,欢迎加入讨论并告诉我们你的想法。