編集

Biome v2 リリース

TypeScript コンパイラに依存しない型推論を提供する初の JavaScript と TypeScript リンター、Biome v2 がリリース。TypeScript パッケージをインストールせずに型推論ベースの lint rules を利用可能。

次のコマンドでインストールまたマイグレーションが可能。

bash
npm install --save-dev --save-exact @biomejs/biome
npx @biomejs/biome migrate --write

出展:Biome v2—codename: Biotype

#Multi-file analysis と type inference

v2.0 以前は Biome の lint ルールは 1 つのファイルずつしか操作できなかった。v2 では他のファイルからの情報を必要とするより複雑なルールが可能に。

file scanner がプロジェクト内の全ファイルをスキャンしてインデックス化。noFloatingPromises rule は typescript-eslint の約 75%のケースを検出可能で、パフォーマンスへの影響は大幅に軽減。

file scanner は opt-in のため、v1 から v2 への移行時のパフォーマンスへの影響は最小限。デフォルトではネストした設定ファイルの発見にのみ使用され、フルスキャンはプロジェクトルールが有効な場合のみ実行。

#Monorepo Support

package.json ファイルから適切なパッケージ情報を取得し、ネストした設定ファイルをサポート。プロジェクトルートに単一の biome.json または biome.jsonc を持ちつつ、サブディレクトリに任意の数の設定ファイルを配置可能。

ネストした設定ファイルの定義方法:

json
{
  "root": false
}

または、ルート設定からの継承:

json
{
  "extends": "//"
}

#Import Organizer Revamp

同一モジュールからの import のマージ、カスタム順序の設定、export 文の整理が可能。従来の制限が解除され、より柔軟な整理が実現。

js
// Before
import { util1 } from "./utils.js";
import { util2 } from "./utils.js";

// After
import { util1, util2 } from "./utils.js";

カスタム順序での整理例:

js
import { open } from "node:fs";

import { internalLib1 } from "@company/library1";
import { internalLib2 } from "@company/library2";

import { lib1 } from "library1";

#Plugins

Linter Plugins の初期実装により、コードスニペットのマッチングと診断レポートが可能。プラグインはソースコードの構造検索を実行するためのクエリ言語であるGritQLで記述。現在はスコープが限定されているが、将来的な拡張の基盤を提供。

参考:Linter Plugins | Biome 参考:GritQL | Biome

#Assists

診断なしでのアクション実行を提供する Biome Assist を導入。Import Organizer が assist として再実装され、useSortedKeys によるオブジェクトリテラルのキーソート、useSortedAttributes による JSX 属性のソートが可能。

参考:Assist | Biome

#Improved suppressions

従来の// biome-ignore コメントに加えて、ファイル全体での lint ルールや formatter の抑制を行う// biome-ignore-all をサポート。

範囲指定での抑制も可能:

js
// biome-ignore-start
// 抑制したいコード
// biome-ignore-end

#HTML formatter

.html ファイルのフォーマットが可能な実験的実装。Vue、Svelte、Astro などの HTML テンプレート言語への対応準備が進行中。

現在は Prettier の HTML テストスイートの 46/124 を正しくフォーマット可能。デフォルトでは無効のため、手動での有効化が必要:

json
{
  "html": {
    "formatter": {
      "enabled": true
    }
  }
}
編集