Prettier v3でプラグインが追加したファイルタイプが`.`にマッチしない
- 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展開に出るのですくなくともこれは正しい挙動。
parseArgvWithoutPlugins
がめっっちゃあやしい
Prettier v2でも起こると思ったら install-strategy=linked
が原因っぽい
ア
The plugin auto search feature didn't work well when using pnpm, and cause slowness.
v2の--no-plugin-search
でも同じことが起きる
わかった、Prettierが探索のために .
などのglobを展開するときcontextにあるlanguagesを見ているが、このとき使うcontextの生成時に.prettierrc (などのファイル) を見ていなくてCLI optionしか見てない。ファイルごとの解決のときにはちゃんと見ているが、プラグインがないとサポートにならないやつはそもそも探索対象に入らないのでファイル自体が見えてなくてアレ。
各ファイル
ここでpluginに値が渡ってる
これはこういういかにもな名前のファイルが呼んでて
ここでさらに具体的に読み込みしてる
初回
これを
同じクラスのいかにも初期化っぽいメソッドが呼んでて
ここに辿りつくけどどうみても設定ファイルを見ていない