1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-27 04:45:20 +01:00

Actually suppress child issues

This commit is contained in:
Matthew Brown 2018-03-18 17:26:28 -04:00
parent 0defe84e01
commit cc9ffb36d9

View File

@ -56,18 +56,14 @@ class IssueBuffer
return false;
}
if (strpos($issue_type, 'Possibly') === 0) {
$stripped_issue_type = preg_replace('/^Possibly(False|Null)?/', '', $issue_type);
$parent_issue_type = self::getParentIssueType($issue_type);
if (strpos($stripped_issue_type, 'Invalid') === false && strpos($stripped_issue_type, 'Un') !== 0) {
$stripped_issue_type = 'Invalid' . $stripped_issue_type;
}
if (in_array($stripped_issue_type, $suppressed_issues, true)) {
if ($parent_issue_type) {
if (in_array($parent_issue_type, $suppressed_issues, true)) {
return false;
}
if (!$config->reportIssueInFile($stripped_issue_type, $e->getFilePath())) {
if (!$config->reportIssueInFile($parent_issue_type, $e->getFilePath())) {
return false;
}
}
@ -81,6 +77,29 @@ class IssueBuffer
return self::add($e);
}
/**
* @param string $issue_type
* @return string|null
*/
private static function getParentIssueType($issue_type)
{
if (strpos($issue_type, 'Possibly') === 0) {
$stripped_issue_type = preg_replace('/^Possibly(False|Null)?/', '', $issue_type);
if (strpos($stripped_issue_type, 'Invalid') === false && strpos($stripped_issue_type, 'Un') !== 0) {
$stripped_issue_type = 'Invalid' . $stripped_issue_type;
}
return $stripped_issue_type;
}
if (preg_match('/^(False|Null)[A-Z]/', $issue_type)) {
return preg_replace('/^(False|Null)/', 'Invalid', $issue_type);
}
return null;
}
/**
* @param CodeIssue $e
*
@ -105,6 +124,16 @@ class IssueBuffer
$reporting_level = $config->getReportingLevelForFile($issue_type, $e->getFilePath());
$parent_issue_type = self::getParentIssueType($issue_type);
if ($parent_issue_type && $reporting_level === Config::REPORT_ERROR) {
$parent_reporting_level = $config->getReportingLevelForFile($parent_issue_type, $e->getFilePath());
if ($parent_reporting_level !== $reporting_level) {
$reporting_level = $parent_reporting_level;
}
}
if ($reporting_level === Config::REPORT_SUPPRESS) {
return false;
}