From d28972189935989e78ed4dd67cb9e38c586cb1b1 Mon Sep 17 00:00:00 2001 From: Jacob Dreesen Date: Thu, 13 Feb 2025 19:01:05 +0100 Subject: [PATCH 1/4] Update ErrorWriter.php --- src/ErrorFormat/ErrorWriter.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ErrorFormat/ErrorWriter.php b/src/ErrorFormat/ErrorWriter.php index e73b4cf..cacc997 100644 --- a/src/ErrorFormat/ErrorWriter.php +++ b/src/ErrorFormat/ErrorWriter.php @@ -6,6 +6,8 @@ use PHPStan\Command\AnalysisResult; use PHPStan\Command\Output; use PHPStan\File\RelativePathHelper; +use PHPStan\File\SimpleRelativePathHelper; +use Symfony\Component\Console\Formatter\OutputFormatter; use Yamadashy\PhpStanFriendlyFormatter\CodeHighlight\CodeHighlighter; use Yamadashy\PhpStanFriendlyFormatter\Config\FriendlyFormatterConfig; @@ -14,14 +16,19 @@ class ErrorWriter /** @var RelativePathHelper */ private $relativePathHelper; + /** @var SimpleRelativePathHelper */ + private $simpleRelativePathHelper; + /** @var FriendlyFormatterConfig */ private $config; public function __construct( RelativePathHelper $relativePathHelper, + SimpleRelativePathHelper $simpleRelativePathHelper, FriendlyFormatterConfig $config ) { $this->relativePathHelper = $relativePathHelper; + $this->simpleRelativePathHelper = $simpleRelativePathHelper; $this->config = $config; } @@ -72,7 +79,11 @@ public function writeFileSpecificErrors(AnalysisResult $analysisResult, Output $ } if (\is_string($this->config->editorUrl)) { - $output->writeLineFormatted(' ✏️ '.str_replace(['%file%', '%line%'], [$error->getTraitFilePath() ?? $error->getFilePath(), (string) $error->getLine()], $this->config->editorUrl)); + $output->writeLineFormatted(' ✏️ simpleRelativePathHelper->getRelativePath($filePath), (string) $error->getLine()], + $this->config->editorUrl, + )).'>'.$relativeFilePath.''); } $output->writeLineFormatted($codeSnippet); From a95cb3f23d862944e322130aa9f8e1a77fa4c932 Mon Sep 17 00:00:00 2001 From: Jacob Dreesen Date: Thu, 13 Feb 2025 19:02:10 +0100 Subject: [PATCH 2/4] Update FriendlyErrorFormatter.php --- src/FriendlyErrorFormatter.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/FriendlyErrorFormatter.php b/src/FriendlyErrorFormatter.php index f69e221..1e05c00 100644 --- a/src/FriendlyErrorFormatter.php +++ b/src/FriendlyErrorFormatter.php @@ -7,6 +7,7 @@ use PHPStan\Command\ErrorFormatter\ErrorFormatter; use PHPStan\Command\Output; use PHPStan\File\RelativePathHelper; +use PHPStan\File\SimpleRelativePathHelper; use Yamadashy\PhpStanFriendlyFormatter\Config\FriendlyFormatterConfig; use Yamadashy\PhpStanFriendlyFormatter\ErrorFormat\ErrorWriter; use Yamadashy\PhpStanFriendlyFormatter\ErrorFormat\SummaryWriter; @@ -16,12 +17,21 @@ class FriendlyErrorFormatter implements ErrorFormatter /** @var RelativePathHelper */ private $relativePathHelper; + /** @var SimpleRelativePathHelper */ + private $simpleRelativePathHelper; + /** @var FriendlyFormatterConfig */ private $config; - public function __construct(RelativePathHelper $relativePathHelper, int $lineBefore, int $lineAfter, ?string $editorUrl) - { + public function __construct( + RelativePathHelper $relativePathHelper, + SimpleRelativePathHelper $simpleRelativePathHelper, + int $lineBefore, + int $lineAfter, + ?string $editorUrl + ) { $this->relativePathHelper = $relativePathHelper; + $this->simpleRelativePathHelper = $simpleRelativePathHelper; $this->config = new FriendlyFormatterConfig( $lineBefore, $lineAfter, @@ -40,7 +50,7 @@ public function formatErrors(AnalysisResult $analysisResult, Output $output): in $output->writeLineFormatted(''); - $errorWriter = new ErrorWriter($this->relativePathHelper, $this->config); + $errorWriter = new ErrorWriter($this->relativePathHelper, $this->simpleRelativePathHelper, $this->config); $errorWriter->writeFileSpecificErrors($analysisResult, $output); $errorWriter->writeNotFileSpecificErrors($analysisResult, $output); $errorWriter->writeWarnings($analysisResult, $output); From e6aa32d391274d4c65e4b595fb831ef874cdd8a4 Mon Sep 17 00:00:00 2001 From: Jacob Dreesen Date: Thu, 13 Feb 2025 19:02:24 +0100 Subject: [PATCH 3/4] Update extension.neon --- extension.neon | 1 + 1 file changed, 1 insertion(+) diff --git a/extension.neon b/extension.neon index f521483..55d5d55 100644 --- a/extension.neon +++ b/extension.neon @@ -15,6 +15,7 @@ services: errorFormatter.friendly: class: Yamadashy\PhpStanFriendlyFormatter\FriendlyErrorFormatter arguments: + simpleRelativePathHelper: @simpleRelativePathHelper lineBefore: %friendly.lineBefore% lineAfter: %friendly.lineAfter% editorUrl: %friendly.editorUrl% From 36508d03ae5ac7cd2321251b531c09c9bb0dfa9a Mon Sep 17 00:00:00 2001 From: yamadashy Date: Sat, 29 Nov 2025 12:51:05 +0900 Subject: [PATCH 4/4] fix: Update tests for SimpleRelativePathHelper and add BC promise comment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add SimpleRelativePathHelper to test constructor call - Add PHPDoc comment explaining BC promise exception 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/ErrorFormat/ErrorWriter.php | 10 +++++++++- tests/FriendlyErrorFormatterTest.php | 4 +++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/ErrorFormat/ErrorWriter.php b/src/ErrorFormat/ErrorWriter.php index cacc997..f3c702b 100644 --- a/src/ErrorFormat/ErrorWriter.php +++ b/src/ErrorFormat/ErrorWriter.php @@ -79,9 +79,17 @@ public function writeFileSpecificErrors(AnalysisResult $analysisResult, Output $ } if (\is_string($this->config->editorUrl)) { + /** + * SimpleRelativePathHelper is not covered by PHPStan's backward compatibility promise. + * + * @see https://phpstan.org/developing-extensions/backward-compatibility-promise + * + * @phpstan-ignore-next-line phpstanApi.method + */ + $relFile = $this->simpleRelativePathHelper->getRelativePath($filePath); $output->writeLineFormatted(' ✏️ simpleRelativePathHelper->getRelativePath($filePath), (string) $error->getLine()], + [$filePath, $relFile, (string) $error->getLine()], $this->config->editorUrl, )).'>'.$relativeFilePath.''); } diff --git a/tests/FriendlyErrorFormatterTest.php b/tests/FriendlyErrorFormatterTest.php index 66f0c24..4a90e28 100644 --- a/tests/FriendlyErrorFormatterTest.php +++ b/tests/FriendlyErrorFormatterTest.php @@ -6,6 +6,7 @@ use PHPStan\Command\AnalysisResult; use PHPStan\File\FuzzyRelativePathHelper; use PHPStan\File\NullRelativePathHelper; +use PHPStan\File\SimpleRelativePathHelper; use PHPStan\ShouldNotHappenException; use PHPStan\Testing\ErrorFormatterTestCase; use PHPUnit\Framework\Attributes\CoversClass; @@ -31,7 +32,8 @@ public function testFormatErrors( array $expectedOutputSubstrings ): void { $relativePathHelper = new FuzzyRelativePathHelper(new NullRelativePathHelper(), '', [], '/'); - $formatter = new FriendlyErrorFormatter($relativePathHelper, 3, 3, null); + $simpleRelativePathHelper = new SimpleRelativePathHelper((string) getcwd()); + $formatter = new FriendlyErrorFormatter($relativePathHelper, $simpleRelativePathHelper, 3, 3, null); $dummyAnalysisResult = $this->getDummyAnalysisResult($numFileErrors, $numGenericErrors, $numWarnings); $exitCode = $formatter->formatErrors($dummyAnalysisResult, $this->getOutput());