Closed4

BiomeのType-aware linterとMulti-file supportをちょっと眺める

mehm8128mehm8128

Type-aware linter

前提として、型情報を必要とするルールのためにTSコンパイラを使うとしたらパフォーマンスが問題になるという話がある(TSコンパイラをRustで利用すること自体は可能なのかな、あんまり分かってない)
そこで、Biome側で型検査器を独自実装しようとしている

しかし、全て型推論できるようにするのではなくて、実装したいルールのために必要なものだけ推論できればOKみたいな方針になりそう
例えば今メインで動いているものだとnoFloatingPromisesだったり、issueで例として最初に挙げられているのはuseAwaitThenableで、どちらもPromise周りの型が必要になるので、その部分だけ取得できるようにするみたいな形

このコメントでnoFloatingPromisesの実装方針が説明されている
https://github.com/biomejs/biome/issues/3187#issuecomment-2598344384

実装の進捗を管理しているのがこのissue
https://github.com/biomejs/biome/issues/4956

既に1つPRがnextブランチにマージされた(中枢部分はcrates/biome_js_analyze/src/lint/nursery/no_floating_promises.rs
https://github.com/biomejs/biome/pull/4911

手元で試してみた感じでは、今マージされたものは同じファイル内の関数を使用した場合のlintのみで、別のファイルの関数をimportして使用するとかはまだ対応されていない
これは次に書くmulti-file supportが実装されたら、他のファイルの情報も見て検知できるようになるはず

一応メモとして、手元で試す方法
Biomeのプロジェクトのルートで

cargo build --bin biome

でビルドして、いい感じのファイルを用意したプロジェクトで

/path/to/biomejs/biome/target/debug/biome lint --only=nursery/noFloatingPromises

みたいにしてビルド成果物を用いてコマンドを叩けばOK

参考
https://github.com/biomejs/biome/blob/next/CONTRIBUTING.md#debug-binaries
https://biomejs.dev/reference/cli/#biome-lint

mehm8128mehm8128

Multi-file support

思ってたより実装寄りでちゃんと読めそうなところあんまりなかったので一旦パスで

このスクラップは2025/01/26にクローズされました