Closed11

Prettier v3でプラグインが追加したファイルタイプが`.`にマッチしない

おーみーおーみー

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

  • Prettier v3で
  • .prettierrc などの設定ファイルで指定したプラグインが追加した言語が
  • pretter --write . など . にマッチしない

具体的には prettier-plugin-svelte prettier-plugin-astro などを入れて .svelte .astro などがフォーマットできない。CLIから --plugin=prettier-plugin-astro と指定する、より明示的な ./**/* パターンを使う (なお、Prettierは未知の拡張子を踏むと怒ってくるので --ignore-unknown だったかが必要になる) などの対策が必要。

おーみーおーみー

そもそもPrettierの . の展開っていうのはpluginがlanguageを増やすと変わる。pushContextPlugins がファイルごとに呼ばれたり初回に呼ばれたりしていて、そのうち初回のもの init() がglob展開に使われたりするんだけどなぜかここで指定したはずのpluginが入ってない。

おーみーおーみー

ファイルごとに呼ばれる場合、必要なプラグインが必ずしもここで用意されているわけではなさそう。--plugin=prettier-plugin-astro のとき pushContextPlugins に刺したlogにはastroが出てないけど普通にフォーマットできてるので。ただし初回には出るし、ちゃんとglob展開に出るのですくなくともこれは正しい挙動。

おーみーおーみー

Prettier v2でも起こると思ったら install-strategy=linked が原因っぽい

おーみーおーみー

わかった、Prettierが探索のために . などのglobを展開するときcontextにあるlanguagesを見ているが、このとき使うcontextの生成時に.prettierrc (などのファイル) を見ていなくてCLI optionしか見てない。ファイルごとの解決のときにはちゃんと見ているが、プラグインがないとサポートにならないやつはそもそも探索対象に入らないのでファイル自体が見えてなくてアレ。

このスクラップは5ヶ月前にクローズされました