VS Code Prettier拡張でPretteir v2/v3両対応を試みる
この拡張には現在 (2023/07/30 9.19.0 時点) はまだPrettier v2が同梱されている。同梱をv3に変更するPRはまだマージされていない(と書いてたらさっきマージされた)。
ただ、この拡張は対象ワークスペースのプロジェクトのローカルにprettierがインストールされていればそっちを使ってくれるので、この拡張の変更のリリースを待たずとも、単にプロジェクトでprettierをアップデートすればVS Codeでもv3が使われて期待通り動くはず。
が、結果は予想に反して、v3で動いているはずなのにtrailingComma
がall
ではなく、v2相当のes5
で動いてしまってた。あれ?
原因は、この拡張は拡張側でPrettierのデフォルト設定を独自に持ってしまっていて、プロジェクトに設定ファイルprettierrc
が無い場合は拡張側のデフォルト設定が使われるから。Prettierインスタンスのデフォルト設定は無視される。だからプロジェクトローカルのPrettierインスタンスがv3であっても、拡張が抱えているデフォルト設定がv2時代のままなので、trailingComma:es5
の挙動になっていた。
ということは、上記のPRの変更がリリースされると、今度は逆にプロジェクトローカルがv2の場合でも、VS Codeでの挙動はv3相当でtrailingComma:all
なってしまうということになる。
プロジェクトによってPrettier v2とv3がどちらも使われている過渡期なので、ちゃんとプロジェクトローカルのバージョンに従った挙動で動いてほしいという気持ち。
回避策の1つは、プロジェクトローカルに空の設定ファイルを置くこと (by @__sosukesuzuki)。これは拡張の設定より優先されるので、結果的にローカルのprettierインスタンスのデフォルト設定が適用される。が、せっかく無設定でPrettierのデフォルト挙動に合わせてるのに、ファイルを置きたくないし、自分のプロジェクトじゃなかったら勝手におけない。
そこでややハック感がある方法としては、VS Codeの設定をJSONモードにして以下を追加する。
"prettier.trailingComma": null
設定値の型はnon-nullable enumなので設定画面で警告は出るが、無視する。これでtrailingComma
に関してはインスタンスのデフォ値を優先してくれるようになる。
ふーむ、みんなどうしてるんだろう。
設定書いてチームに共有するべきっていうコメントがあったけど、
- あらゆるツールのデフォルト値を設定ファイルに重複で列挙していくの?っていうのを考えれば筋悪だよね、っていう話
- 自社/自分の少数のリポジトリならwork aroundとして筋悪でも設定ファイル共有するだろうけど、OSSなどの自分がオーナーシップを持っていないプロジェクトを含む多数のリポジトリを触ることを考えると、それも大変
上記のPRはマージされてv10.0.0がリリースされたけど、その直後にリバートされてv10.1.0が出ている。Issueではこの辺でエラー報告が上がってるっぽいが、詳細は不明
しばらくVS Codeの設定に
"prettier.trailingComma": null
を書く前述の設定で使ってて期待通りに動いてて問題なさそう。微妙だけどこれで使ってく。