ただ今回の記事の内容は新モードではなく通常モードについてです
Prettier の更新で条件演算子がフラットになる問題が起きて以降 Prettier のバージョンを固定して上げないようにしているプロジェクトがありました
この数年は触れることもなかったので 別フォーマッターに移行せず Prettier のままです
とりあえずこれを通常モードの 3.1.0 にしてみました
差分なしになるのが期待の動作だったのですが 結果は謎のスペースが入るというものでした
[元]
const value = aaaaaaaaaaaaaaaaaaaaaaa
? bbbbbbbbbbbbbbbbbbbbbb
: cccccccccccccccccccccc
? dddddddddddddddddddd
: eeeeeeeeeeeeeeeeeeee
[フォーマット後]
const value = aaaaaaaaaaaaaaaaaaaaaaa
? bbbbbbbbbbbbbbbbbbbbbb
: cccccccccccccccccccccc
? dddddddddddddddddddd
: eeeeeeeeeeeeeeeeeeee
インデントにはタブを使っています
元のコードは b, c の行は 1 つのタブで d, e の行は 2 つのタブです
このままが期待するものです
しかしフォーマット後は d, e の行は 1 つのタブとそれに続く 2 つのスペースです
一応 タブサイズは 4 にはしているのに 2 つのスペースのインデントが追加されました
以前 インデントをフラットにした理由の一つにネストが深くなるというのがあるので 浅くしたいというのはわからなくもないですが タブを使ってるときはタブに揃えてもらいたいです
ただ すでに似たような問題としてこういうのがあります
[元]
const value = aaaaaaaaaaaaaaaaaaaaaaa
? {
a: 1,
}
: {
a: 2,
}
[フォーマット後]
const value = aaaaaaaaaaaaaaaaaaaaaaa
? {
a: 1,
}
: {
a: 2,
}
これも元のコードが期待するものです
しかしフォーマットすると 「{」 と 「}」 の縦の位置をそろえようとしてスペースが入ります
タブを使用する設定なので 「}」 の前には 1 つのタブと 2 つのスペースです
タブのインデントは見た目を揃える以上に論理的な構造を視覚化するためのものだと思うのですが Prettier 開発者は考えが違うみたいなので仕方ないですね
……と諦めてましたが issues を探してみるとすでに存在して バグ とラベル付けされています
https://github.com/prettier/prettier/issues/15655
修正されるのでしょうか?
今回の変更は 「前の動きに戻す」 というものだったはずなのでそういう意味では意図したものではなさそうですし修正されるのかもしれません
とはいえ 2 つめの例のような問題が残るのなら もうどっちでもいいのですけどね
でもこれをバグとするなら タブを使うモードでテストしてないというわけで やっぱり Prettier 開発者はタブを重視してなさそうです
デフォルトをタブにするという issue にコメントが 450 以上ついてますが これも実現するのか怪しいところがありますね
https://github.com/prettier/prettier/issues/7475