久しぶりにphpスクリプトをVisual Studio Codeで編集するとPHP CS Fixerによる整形が動かなくなっていました。VS Codeの開発者ツールで確認すると以下のようなメッセージが。
console.ts:137 [Extension Host] Error: spawn EINVAL
at ChildProcess.spawn (node:internal/child_process:421:11)
at spawn (node:child_process:799:9)
at Rn (c:\Users\username\.vscode\extensions\junstyle.php-cs-fixer-0.3.13\index.js:76:34872)
at c:\Users\username\.vscode\extensions\junstyle.php-cs-fixer-0.3.13\index.js:76:39035
at new Promise (<anonymous>)
at Dn.format (c:\Users\username\.vscode\extensions\junstyle.php-cs-fixer-0.3.13\index.js:76:39015)
at c:\Users\username\.vscode\extensions\junstyle.php-cs-fixer-0.3.13\index.js:80:490
at new Promise (<anonymous>)
at Dn.formattingProvider (c:\Users\username\.vscode\extensions\junstyle.php-cs-fixer-0.3.13\index.js:80:276)
at Object.provideDocumentFormattingEdits (c:\Users\username\.vscode\extensions\junstyle.php-cs-fixer-0.3.13\index.js:81:2081)
Error: spawn EINVALとか出てたので、そのメッセージで検索したもののそれらしい現象はヒットせず、Windowsに入れているPHPのバージョンを最新版にしたり、php-cs-fixer.pharファイルを最新版にとしたのですが結局解決しませんでした。
さらに探してようやく見つけて、こちらにあるようにVS Codeが1.92になってVS Codeに含まれるnode.jsのbatやcmdファイルなどのバッチファイル実行時のコマンドインジェクションのセキュリティ対応が原因でphp-cs-fixer.batの呼び出しが失敗しているとのことでした。
一応、手作業での編集が必要ですがこちらに対応策があり、C:\Users\username\.vscode\extensions\junstyle.php-cs-fixer-0.3.13にあるindex.jsで、index.jsはサイズ圧縮のため読みにくいですが、最後の方の
function Rn(t,e,i,s=null){let n=(0,sg.spawn)(t,e,i),r=new Promise((o,h)
の部分に
function Rn(t,e,i,s=null){i.shell=true;let n=(0,sg.spawn)(t,e,i),r=new Promise((o,h)
とi.shell=true;を追加すればphp-cs-fixerのフォーマッターが動くようになります。
たぶん近日中に、拡張機能のphp cs fixer本体で修正されるのではないでしょうか。