From 681d6f47346b634c578c119b730895cacec5cfe4 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Thu, 25 Sep 2025 11:56:28 +0200 Subject: [PATCH] TableErrorFormatter: Link path in JetBrain IDEs --- .../ErrorFormatter/TableErrorFormatter.php | 7 +++- .../TableErrorFormatterTest.php | 37 +++++++++++++++++-- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/Command/ErrorFormatter/TableErrorFormatter.php b/src/Command/ErrorFormatter/TableErrorFormatter.php index b04b62964d..bf79a7dc5f 100644 --- a/src/Command/ErrorFormatter/TableErrorFormatter.php +++ b/src/Command/ErrorFormatter/TableErrorFormatter.php @@ -108,7 +108,12 @@ public function formatErrors( $message .= '💡 ' . $tip; } } - if (is_string($this->editorUrl)) { + + if (getenv('TERMINAL_EMULATOR') === 'JetBrains-JediTerm') { + $title = $this->relativePathHelper->getRelativePath($filePath); + $message .= sprintf("\nat %s:%d", $title, $error->getLine()); + + } elseif (is_string($this->editorUrl)) { $url = str_replace( ['%file%', '%relFile%', '%line%'], [$filePath, $this->simpleRelativePathHelper->getRelativePath($filePath), (string) $error->getLine()], diff --git a/tests/PHPStan/Command/ErrorFormatter/TableErrorFormatterTest.php b/tests/PHPStan/Command/ErrorFormatter/TableErrorFormatterTest.php index abf000b4d0..de43d63811 100644 --- a/tests/PHPStan/Command/ErrorFormatter/TableErrorFormatterTest.php +++ b/tests/PHPStan/Command/ErrorFormatter/TableErrorFormatterTest.php @@ -17,10 +17,15 @@ class TableErrorFormatterTest extends ErrorFormatterTestCase { + private string|false $terminalEmulator; + #[Override] protected function setUp(): void { putenv('GITHUB_ACTIONS'); + + $this->terminalEmulator = getenv('TERMINAL_EMULATOR'); + putenv('TERMINAL_EMULATOR'); } #[Override] @@ -28,6 +33,7 @@ protected function tearDown(): void { putenv('COLUMNS'); putenv('TERM_PROGRAM'); + putenv('TERMINAL_EMULATOR' . ($this->terminalEmulator !== false ? '=' . $this->terminalEmulator : '')); } public static function dataFormatterOutputProvider(): iterable @@ -226,6 +232,33 @@ public static function dataFormatterOutputProvider(): iterable [ERROR] Found 1 error +', + ]; + + yield [ + 'message' => 'Errors in JetBrains', + 'exitCode' => 1, + 'numFileErrors' => [5, 1], + 'numGenericErrors' => 1, + 'verbose' => true, + 'extraEnvVars' => ['TERMINAL_EMULATOR=JetBrains-JediTerm'], + 'expected' => ' ------ ---------------- + Line foo.php + ------ ---------------- + 5 Foobar\Buz + 🪪 foobar.buz + 💡 a tip + at foo.php:5 + ------ ---------------- + + -- --------------------- + Error + -- --------------------- + first generic error + -- --------------------- + + [ERROR] Found 2 errors + ', ]; } @@ -271,10 +304,6 @@ public function testEditorUrlWithTrait(): void public function testEditorUrlWithRelativePath(): void { - if (getenv('TERMINAL_EMULATOR') === 'JetBrains-JediTerm') { - $this->markTestSkipped('PhpStorm console does not support links in console.'); - } - $formatter = $this->createErrorFormatter('editor://custom/path/%relFile%/%line%'); $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));