hidekatsu-izuno 日々の記録

プログラミング、経済政策など伊津野英克が興味あることについて適当に語ります(旧サイト:A.R.N [日記])

Biome で有効にしたくてもできなかったプロパティ

JavaScript ではデファクトスタンダードとなっていた es-lint からフォーマット機能が削除されたり設定ファイルの形式が変更になったり*1と個人的にストレスに感じることが多くなってきたので、自分のプロジェクトについては順次 Biome に移行している。

biomejs.dev

Biome は Biome でまだまだ未成熟な部分が多い(editorconfig support が不十分、vuejs のサポートもまだまだ進行中)けれども、おおむね満足していて、基本的にはデフォルト設定のままで使える。

とはいえ、有効にすると多くの問題をもたらすので off にせざるを得ない項目もいくつか出てきた。

noAssignInExpressions

これは、式中に代入の = を使ってはならないというルールで、これ自体はまっとうな内容だし、原則は禁止すべきではある……のだが、これを禁止すると代入系ループが使えず極めて読みにくくなる。

let line;
while (line = file.read()) {
    ...
}

eslint のデフォルトは except-parens で () にて明示的に囲んだ場合のみエラーにならないという仕様になっていたのだけれど biome にはないようだ。 

noControlCharactersInRegex

正規表現中に制御文字を入れるな、というルールなのだけど個人的には eslint 時代から謎のルールだと思っている。ブラウザだけの世界なら制御文字なんて出てこないだろうけれども、Node.js のようにファイル入出力扱う世界ならば頻出する内容だ。off にするのが適切だと思う。

noUselessElse

関数の途中で return する場合、後続の else (if) は不要になるので削除すべき、というルール。一見ごもっともなのだけれど、return する場合としない場合が混在するような場合には、else (if) を使った方がすっきりする。eslint では allowElseIf というオプションを使うことで最後の else 以外はOK扱いにできる。

noParameterAssign

引数への再設定を禁止するという指定。これも一見ごもっともなんだけど、引数の初期化をしたい(それも数行にわたる場合がある)場合にはむしろ見通しが悪くなる。このルールは有効にしてもいいかな、と思ったけど実際にやると微妙だったので off に設定した。

*1:prettier 使えはわかるんだが、lintter と formatter の不整合でうまく動作しないことが多く現実的ではないと感じている。