今日リリースされたPrettier v 1.18.0で、自分のPRのせいでかなり大きなバグを引き起こしてしまいました。
概要
僕の出したPRの影響で、以下のようなバグが起こるようになりました。
拡張子が.tsx
のファイルでtrailing-comma
オプションをnone
にしていても下のような末尾カンマの挿入が起こるバグです。
// Input
function func<T>() {}
interface Interface<T> {}
// Output
function func<T,>() {}
interface Interface<T,> {}
バグの原因である僕のPRの本来の目的についてはブログを読んでいただけると嬉しいです。
原因
もともとこの末尾カンマは、型引数が一つのアロー関数のみに対してつけるべきものでしたが、私の実装ではそうなっていませんでした。結果として、.tsx
のファイルでは通常の関数、インターフェース、タイプエイリアス、などあらゆる型引数受け取る構文に対して末尾カンマを挿入してしまうことになりました。
そしてバグをリリース前に発見できなかった理由ですが、フォーマット結果がファイル名(拡張子が .tsx
であること)に依存するためにPlayground上でバグを発見できなかったためです。Prettierは https://prettier.io/playground でフォーマットの結果を試してみることができるのですが、これにはファイル名の概念が(現時点では)存在しないため、.tsx
として解釈されないので、Playgroundで確認しても正しく動いているように見えてしまっていたのです。
現在
現在はバージョン 1.18.1 がリリースされ、修正されています。ちなみに、その修正のPRは https://github.com/prettier/prettier/pull/6190 にあります。授業中に死ぬほどドキドキしながら書きました。
ごめんなさい
本当に申し訳なく思っています。もっと慎重にやります、、、。