鈴木颯介のブログ

Prettier にコントリビュートした(5)

また Prettier に PR を投げたらマージされました。やったぜ。

解決した Issue

https://github.com/prettier/prettier/issues/6149

bind オペレータのフォーマットについての Issue です。bind オペレータは ECMAScript の標準ではなく、Stage0 のプロポーザルですが、Babel には実装されています。

bind オペレータについては、日本語だと、2 年以上前の記事ですが@shinoutさんのどうなる bind operatorという記事が詳しいかと思います。

今回の Issue についてですが、つぎのような bind オペレータを使ったコードをフォーマットしたときに

new (a::b)();

次のように変換されてしまうというものです。

new a::b();

意味を保つために必要なカッコがはずされてしまうやつですね。

出した PR

https://github.com/prettier/prettier/pull/6152

ざっくりいうと bind オペレータの親ノードがNewExpressionであるときにカッコをつけるという変更をしましたが、ちょっとしたレビューを他の方からいただき、それを元に修正し、テストを書いておしまいです。

感想

ちなみに、bind オペレータに関するバグとして

// Input
f[a::b];

// Output
f[(a::b)];

// Output(Expected)
f[a::b];

というのもあって、そちらはコアメンテナの@duailibeさんが#6159で修正されたみたいです。

そういえば、今日か明日くらいに 1.18 がリリースらしいので、今バージョンに入れられる自分の変更はこれで最後だと思います。もしかしたらコアメンテナさんを覗いたら今回のバージョンの最多コントリビュートかも?