There’s JSON error formatter which is also machine readable. You can also implement your own error formatters.
phpstan analyseのerror-formatにcsvがないので、PHPStanにIssueを投げてみたら、ほぼガチャ切りのような形でIssueをクローズされた。 追加でいくつか質問したけどなんとなくそっけない印象だった。
しょうがないから、Issueなどで言われたとおり、自前で実装してみることにした。
GitHub - phpstan/phpstan: PHP Static Analysis Tool - discover bugs in your code without running it!
以下、CsvErrorFormatter.phpなる実装。自前での実装だから、RawErrorFormatterを参考にしただけ。 別に出力するだけだから。
<?php declare(strict_types = 1); namespace PHPStan\Command\ErrorFormatter; use PHPStan\Command\AnalysisResult; use Symfony\Component\Console\Style\OutputStyle; class CsvErrorFormatter implements ErrorFormatter { public function formatErrors( AnalysisResult $analysisResult, OutputStyle $style ): int { if (!$analysisResult->hasErrors()) { return 0; } $style->writeln(sprintf('file_name,line,error_message')); foreach ($analysisResult->getNotFileSpecificErrors() as $notFileSpecificError) { $style->writeln(sprintf('?,?,%s', $notFileSpecificError)); } foreach ($analysisResult->getFileSpecificErrors() as $fileSpecificError) { $style->writeln( sprintf( '%s,%d,%s', $fileSpecificError->getFile(), $fileSpecificError->getLine() ?? '', $fileSpecificError->getMessage() ) ); } return 1; } }
設定はこんなふうに追加しろ、ってりどみには書かれているけど、どこに実装していいかわからなかった。
Appってどこやねん
services: errorFormatter.awesome: class: App\PHPStan\AwesomeErrorFormatter
なので、neonファイルの末尾にこいつを追加して、
services: errorFormatter.csv: class: PHPStan\Command\ErrorFormatter\CsvErrorFormatter
なので、すっごい適当に、 vendor/phpstan/phpstan/src/Command/ErrorFormatter
の下にCsvErrorFormatter.phpをおいて、
vendor/bin/phpstan analyse -c phpstan.neon -l 4 --error-format csv src tests
みたいなコマンドを実行したら、CSVっぽい出力がされた。