1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-26 20:34:47 +01:00

Fix #1617 and fix #1773 - properly filter out info in reports

This commit is contained in:
Brown 2019-06-13 11:06:01 -04:00
parent 78a9d1aa9b
commit e3c9dbf2c0
3 changed files with 104 additions and 17 deletions

View File

@ -61,10 +61,21 @@ abstract class Report
int $mixed_expression_count = 1,
int $total_expression_count = 1
) {
if (!$report_options->show_info) {
$this->issues_data = array_filter(
$issues_data,
function (array $issue_data) : bool {
return $issue_data['severity'] !== Config::REPORT_INFO;
}
);
} else {
$this->issues_data = $issues_data;
}
$this->use_color = $report_options->use_color;
$this->show_snippet = $report_options->show_snippet;
$this->show_info = $report_options->show_info;
$this->mixed_expression_count = $mixed_expression_count;
$this->total_expression_count = $total_expression_count;
}

View File

@ -13,10 +13,6 @@ class ConsoleReport extends Report
{
$output = '';
foreach ($this->issues_data as $issue_data) {
if (!$this->show_info && $issue_data['severity'] === Config::REPORT_INFO) {
continue;
}
$output .= $this->format($issue_data) . "\n" . "\n";
}

View File

@ -22,6 +22,7 @@ class ReportOutputTest extends TestCase
$config = new TestConfig();
$config->throw_exception = false;
$config->setCustomErrorLevel('PossiblyUndefinedGlobalVariable', \Psalm\Config::REPORT_INFO);
$json_report_options = ProjectAnalyzer::getFileReportOptions([__DIR__ . '/test-report.json']);
@ -63,10 +64,7 @@ class ReportOutputTest extends TestCase
ProjectAnalyzer::getFileReportOptions(['/tmp/report.log']);
}
/**
* @return void
*/
public function testGetOutputForGetPsalmDotOrg()
public function analyzeFileForReport() : void
{
$file_contents = '<?php
function psalmCanVerify(int $your_code): ?string {
@ -90,6 +88,14 @@ echo $a;';
);
$this->analyzeFile('somefile.php', new Context());
}
/**
* @return void
*/
public function testJsonReport()
{
$this->analyzeFileForReport();
$issue_data = [
[
@ -144,7 +150,7 @@ echo $a;';
'column_to' => 15,
],
[
'severity' => 'error',
'severity' => 'info',
'line_from' => 15,
'line_to' => 15,
'type' => 'PossiblyUndefinedGlobalVariable',
@ -168,6 +174,14 @@ echo $a;';
$issue_data,
json_decode(IssueBuffer::getOutput($json_report_options), true)
);
}
/**
* @return void
*/
public function testEmacsReport()
{
$this->analyzeFileForReport();
$emacs_report_options = ProjectAnalyzer::getFileReportOptions([__DIR__ . '/test-report.emacs'])[0];
@ -175,10 +189,18 @@ echo $a;';
'somefile.php:3:10:error - Cannot find referenced variable $as_you
somefile.php:2:42:error - Could not verify return type \'string|null\' for psalmCanVerify
somefile.php:7:6:error - Const CHANGE_ME is not defined
somefile.php:15:6:error - Possibly undefined global variable $a, first seen on line 10
somefile.php:15:6:warning - Possibly undefined global variable $a, first seen on line 10
',
IssueBuffer::getOutput($emacs_report_options)
);
}
/**
* @return void
*/
public function testPylintReport()
{
$this->analyzeFileForReport();
$pylint_report_options = ProjectAnalyzer::getFileReportOptions([__DIR__ . '/test-report.pylint'])[0];
@ -186,10 +208,18 @@ somefile.php:15:6:error - Possibly undefined global variable $a, first seen on l
'somefile.php:3: [E0001] UndefinedVariable: Cannot find referenced variable $as_you (column 10)
somefile.php:2: [E0001] MixedInferredReturnType: Could not verify return type \'string|null\' for psalmCanVerify (column 42)
somefile.php:7: [E0001] UndefinedConstant: Const CHANGE_ME is not defined (column 6)
somefile.php:15: [E0001] PossiblyUndefinedGlobalVariable: Possibly undefined global variable $a, first seen on line 10 (column 6)
somefile.php:15: [W0001] PossiblyUndefinedGlobalVariable: Possibly undefined global variable $a, first seen on line 10 (column 6)
',
IssueBuffer::getOutput($pylint_report_options)
);
}
/**
* @return void
*/
public function testConsoleReport()
{
$this->analyzeFileForReport();
$console_report_options = new Report\ReportOptions();
$console_report_options->use_color = false;
@ -204,12 +234,46 @@ function psalmCanVerify(int $your_code): ?string {
ERROR: UndefinedConstant - somefile.php:7:6 - Const CHANGE_ME is not defined
echo CHANGE_ME;
ERROR: PossiblyUndefinedGlobalVariable - somefile.php:15:6 - Possibly undefined global variable $a, first seen on line 10
INFO: PossiblyUndefinedGlobalVariable - somefile.php:15:6 - Possibly undefined global variable $a, first seen on line 10
echo $a
',
IssueBuffer::getOutput($console_report_options)
);
}
/**
* @return void
*/
public function testConsoleReportNoInfo()
{
$this->analyzeFileForReport();
$console_report_options = new Report\ReportOptions();
$console_report_options->use_color = false;
$console_report_options->show_info = false;
$this->assertSame(
'ERROR: UndefinedVariable - somefile.php:3:10 - Cannot find referenced variable $as_you
return $as_you . "type";
ERROR: MixedInferredReturnType - somefile.php:2:42 - Could not verify return type \'string|null\' for psalmCanVerify
function psalmCanVerify(int $your_code): ?string {
ERROR: UndefinedConstant - somefile.php:7:6 - Const CHANGE_ME is not defined
echo CHANGE_ME;
',
IssueBuffer::getOutput($console_report_options)
);
}
/**
* @return void
*/
public function testConsoleReportNoSnippet()
{
$this->analyzeFileForReport();
$console_report_options = new Report\ReportOptions();
$console_report_options->show_snippet = false;
@ -225,12 +289,20 @@ ERROR: MixedInferredReturnType - somefile.php:2:42 - Could not verify return typ
ERROR: UndefinedConstant - somefile.php:7:6 - Const CHANGE_ME is not defined
ERROR: PossiblyUndefinedGlobalVariable - somefile.php:15:6 - Possibly undefined global variable $a, first seen on line 10
INFO: PossiblyUndefinedGlobalVariable - somefile.php:15:6 - Possibly undefined global variable $a, first seen on line 10
',
IssueBuffer::getOutput($console_report_options)
);
}
/**
* @return void
*/
public function testCompactReport()
{
$this->analyzeFileForReport();
$compact_report_options = new Report\ReportOptions();
$compact_report_options->format = Report::TYPE_COMPACT;
@ -245,10 +317,18 @@ ERROR: PossiblyUndefinedGlobalVariable - somefile.php:15:6 - Possibly undefined
'| ERROR | 3 | UndefinedVariable | Cannot find referenced variable $as_you |' . PHP_EOL .
'| ERROR | 2 | MixedInferredReturnType | Could not verify return type \'string|null\' for psalmCanVerify |' . PHP_EOL .
'| ERROR | 7 | UndefinedConstant | Const CHANGE_ME is not defined |' . PHP_EOL .
'| ERROR | 15 | PossiblyUndefinedGlobalVariable | Possibly undefined global variable $a, first seen on line 10 |' . PHP_EOL .
'| INFO | 15 | PossiblyUndefinedGlobalVariable | Possibly undefined global variable $a, first seen on line 10 |' . PHP_EOL .
'+----------+------+---------------------------------+---------------------------------------------------------------+' . PHP_EOL,
IssueBuffer::getOutput($compact_report_options)
);
}
/**
* @return void
*/
public function testCheckstyleReport()
{
$this->analyzeFileForReport();
$checkstyle_report_options = ProjectAnalyzer::getFileReportOptions([__DIR__ . '/test-report.checkstyle.xml'])[0];
@ -265,7 +345,7 @@ ERROR: PossiblyUndefinedGlobalVariable - somefile.php:15:6 - Possibly undefined
<error line="7" column="6" severity="error" message="UndefinedConstant: Const CHANGE_ME is not defined"/>
</file>
<file name="somefile.php">
<error line="15" column="6" severity="error" message="PossiblyUndefinedGlobalVariable: Possibly undefined global variable $a, first seen on line 10"/>
<error line="15" column="6" severity="info" message="PossiblyUndefinedGlobalVariable: Possibly undefined global variable $a, first seen on line 10"/>
</file>
</checkstyle>
',