2016-12-30 02:07:42 +01:00
|
|
|
<?php
|
|
|
|
namespace Psalm\Config;
|
|
|
|
|
|
|
|
use SimpleXMLElement;
|
|
|
|
|
|
|
|
class IssueHandler
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
2017-02-12 00:56:38 +01:00
|
|
|
private $error_level = \Psalm\Config::REPORT_ERROR;
|
2016-12-30 02:07:42 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @var array<ErrorLevelFileFilter>
|
|
|
|
*/
|
2017-02-12 00:56:38 +01:00
|
|
|
private $custom_levels = [];
|
2016-12-30 02:07:42 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param SimpleXMLElement $e
|
2017-05-04 20:25:58 +02:00
|
|
|
* @param string $base_dir
|
2017-05-27 02:16:18 +02:00
|
|
|
*
|
2016-12-30 02:07:42 +01:00
|
|
|
* @return self
|
|
|
|
*/
|
2017-05-04 20:25:58 +02:00
|
|
|
public static function loadFromXMLElement(SimpleXMLElement $e, $base_dir)
|
2016-12-30 02:07:42 +01:00
|
|
|
{
|
|
|
|
$handler = new self();
|
|
|
|
|
|
|
|
if (isset($e['errorLevel'])) {
|
|
|
|
$handler->error_level = (string) $e['errorLevel'];
|
|
|
|
|
2017-05-27 02:05:57 +02:00
|
|
|
if (!in_array($handler->error_level, \Psalm\Config::$ERROR_LEVELS, true)) {
|
2016-12-30 02:07:42 +01:00
|
|
|
throw new \Psalm\Exception\ConfigException('Unexepected error level ' . $handler->error_level);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/** @var \SimpleXMLElement $error_level */
|
|
|
|
foreach ($e->errorLevel as $error_level) {
|
2017-05-04 20:25:58 +02:00
|
|
|
$handler->custom_levels[] = ErrorLevelFileFilter::loadFromXMLElement($error_level, $base_dir, true);
|
2016-12-30 02:07:42 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return $handler;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $error_level
|
2017-05-27 02:16:18 +02:00
|
|
|
*
|
2016-12-30 02:07:42 +01:00
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function setErrorLevel($error_level)
|
|
|
|
{
|
2017-05-27 02:05:57 +02:00
|
|
|
if (!in_array($error_level, \Psalm\Config::$ERROR_LEVELS, true)) {
|
2016-12-30 02:07:42 +01:00
|
|
|
throw new \Psalm\Exception\ConfigException('Unexepected error level ' . $error_level);
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->error_level = $error_level;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2017-01-16 18:59:09 +01:00
|
|
|
* @param string $file_path
|
2017-05-27 02:16:18 +02:00
|
|
|
*
|
2016-12-30 02:07:42 +01:00
|
|
|
* @return string
|
|
|
|
*/
|
2017-01-16 18:59:09 +01:00
|
|
|
public function getReportingLevelForFile($file_path)
|
2016-12-30 02:07:42 +01:00
|
|
|
{
|
|
|
|
foreach ($this->custom_levels as $custom_level) {
|
2017-01-16 18:59:09 +01:00
|
|
|
if ($custom_level->allows($file_path)) {
|
2016-12-30 02:07:42 +01:00
|
|
|
return $custom_level->getErrorLevel();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->error_level;
|
|
|
|
}
|
2018-03-21 03:36:03 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $fq_classlike_name
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function getReportingLevelForClass($fq_classlike_name)
|
|
|
|
{
|
|
|
|
foreach ($this->custom_levels as $custom_level) {
|
|
|
|
if ($custom_level->allowsClass($fq_classlike_name)) {
|
|
|
|
return $custom_level->getErrorLevel();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->error_level;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param string $method_id
|
|
|
|
*
|
|
|
|
* @return string
|
|
|
|
*/
|
|
|
|
public function getReportingLevelForMethod($method_id)
|
|
|
|
{
|
|
|
|
foreach ($this->custom_levels as $custom_level) {
|
|
|
|
if ($custom_level->allowsMethod($method_id)) {
|
|
|
|
return $custom_level->getErrorLevel();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->error_level;
|
|
|
|
}
|
2016-12-30 02:07:42 +01:00
|
|
|
}
|