From 21e6371ce25c42ea19dcd6f0e1ce16a5e8ae82c7 Mon Sep 17 00:00:00 2001 From: Bruce Weirdan Date: Wed, 9 Feb 2022 15:35:40 +0200 Subject: [PATCH] Strip colours from success message Fixes vimeo/psalm#7619 --- src/Psalm/IssueBuffer.php | 20 +++++++++++++++----- tests/IssueBufferTest.php | 4 +++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/Psalm/IssueBuffer.php b/src/Psalm/IssueBuffer.php index 9de67613558..5c666574ffe 100644 --- a/src/Psalm/IssueBuffer.php +++ b/src/Psalm/IssueBuffer.php @@ -691,7 +691,7 @@ function (IssueData $d1, IssueData $d2): int { : $error_count . ' errors' ) . ' found' . "\n"; } else { - self::printSuccessMessage(); + self::printSuccessMessage($project_analyzer); } $show_info = $project_analyzer->stdout_report_options->show_info; @@ -782,8 +782,12 @@ function (IssueData $d1, IssueData $d2): int { } } - public static function printSuccessMessage(): void + public static function printSuccessMessage(ProjectAnalyzer $project_analyzer): void { + if (!$project_analyzer->stdout_report_options) { + throw new UnexpectedValueException('Cannot print success message without stdout report options'); + } + // this message will be printed $message = "No errors found!"; @@ -808,9 +812,15 @@ public static function printSuccessMessage(): void // text style, 1 = bold $style = "1"; - echo "\e[{$background};{$style}m{$paddingTop}\e[0m" . "\n"; - echo "\e[{$background};{$foreground};{$style}m{$messageWithPadding}\e[0m" . "\n"; - echo "\e[{$background};{$style}m{$paddingBottom}\e[0m" . "\n"; + if ($project_analyzer->stdout_report_options->use_color) { + echo "\e[{$background};{$style}m{$paddingTop}\e[0m" . "\n"; + echo "\e[{$background};{$foreground};{$style}m{$messageWithPadding}\e[0m" . "\n"; + echo "\e[{$background};{$style}m{$paddingBottom}\e[0m" . "\n"; + } else { + echo "\n"; + echo "$messageWithPadding\n"; + echo "\n"; + } } /** diff --git a/tests/IssueBufferTest.php b/tests/IssueBufferTest.php index a1f8714771b..7da31f16a64 100644 --- a/tests/IssueBufferTest.php +++ b/tests/IssueBufferTest.php @@ -113,8 +113,10 @@ public function testFinishDoesNotCorruptInternalState(): void public function testPrintSuccessMessageWorks(): void { + $project_analyzer = $this->createMock(ProjectAnalyzer::class); + $project_analyzer->stdout_report_options = new ReportOptions; ob_start(); - IssueBuffer::printSuccessMessage(); + IssueBuffer::printSuccessMessage($project_analyzer); $output = ob_get_clean(); $this->assertStringContainsString('No errors found!', $output);