From f5291cd003f47166af5c4f0014783f7ec3c77bb9 Mon Sep 17 00:00:00 2001 From: Corey Aufang Date: Fri, 24 Oct 2025 21:46:45 -0700 Subject: [PATCH] Ensure that JetBrains terminal sees correct relative path. --- .../ErrorFormatter/TableErrorFormatter.php | 2 +- .../TableErrorFormatterTest.php | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Command/ErrorFormatter/TableErrorFormatter.php b/src/Command/ErrorFormatter/TableErrorFormatter.php index cbea7e6bfa..26004b4a11 100644 --- a/src/Command/ErrorFormatter/TableErrorFormatter.php +++ b/src/Command/ErrorFormatter/TableErrorFormatter.php @@ -110,7 +110,7 @@ public function formatErrors( } if (getenv('TERMINAL_EMULATOR') === 'JetBrains-JediTerm') { - $title = $this->relativePathHelper->getRelativePath($filePath); + $title = $this->simpleRelativePathHelper->getRelativePath($filePath); $message .= sprintf("\nat %s:%d", $title, $error->getLine() ?? 0); } elseif (is_string($this->editorUrl)) { diff --git a/tests/PHPStan/Command/ErrorFormatter/TableErrorFormatterTest.php b/tests/PHPStan/Command/ErrorFormatter/TableErrorFormatterTest.php index de43d63811..1abebf5986 100644 --- a/tests/PHPStan/Command/ErrorFormatter/TableErrorFormatterTest.php +++ b/tests/PHPStan/Command/ErrorFormatter/TableErrorFormatterTest.php @@ -424,6 +424,30 @@ public function testBug13317(): void ); } + public function testJetBrainsTerminalRelativePath(): void + { + putenv('TERMINAL_EMULATOR=JetBrains-JediTerm'); + + // FuzzyRelativePathHelper trims path segments based on analysed paths. + $relativePathHelper = new FuzzyRelativePathHelper(new NullRelativePathHelper(), self::DIRECTORY_PATH, [self::DIRECTORY_PATH . '/rel'], '/'); + + $formatter = new TableErrorFormatter( + $relativePathHelper, + new SimpleRelativePathHelper(self::DIRECTORY_PATH), + new CiDetectedErrorFormatter( + new GithubErrorFormatter($relativePathHelper), + new TeamcityErrorFormatter($relativePathHelper), + ), + false, + null, + null, + ); + $error = new Error('Test', 'Foo.php', 12, filePath: self::DIRECTORY_PATH . '/rel/Foo.php'); + $formatter->formatErrors(new AnalysisResult([$error], [], [], [], [], false, null, true, 0, false, []), $this->getOutput(true)); + + $this->assertStringContainsString('at rel/Foo.php:12', $this->getOutputContent(true)); + } + private function createErrorFormatter(?string $editorUrl, ?string $editorUrlTitle = null): TableErrorFormatter { $relativePathHelper = new FuzzyRelativePathHelper(new NullRelativePathHelper(), self::DIRECTORY_PATH, [], '/');