1
0
mirror of https://github.com/danog/psalm.git synced 2024-12-14 02:07:37 +01:00
psalm/src/Psalm/Config/IssueHandler.php

71 lines
1.8 KiB
PHP
Raw Normal View History

2016-12-30 02:07:42 +01:00
<?php
namespace Psalm\Config;
use SimpleXMLElement;
class IssueHandler
{
/**
* @var string
*/
private $error_level = \Psalm\Config::REPORT_ERROR;
2016-12-30 02:07:42 +01:00
/**
* @var array<ErrorLevelFileFilter>
*/
private $custom_levels = [];
2016-12-30 02:07:42 +01:00
/**
* @param SimpleXMLElement $e
* @param string $base_dir
2016-12-30 02:07:42 +01:00
* @return self
*/
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) {
$handler->custom_levels[] = ErrorLevelFileFilter::loadFromXMLElement($error_level, $base_dir, true);
2016-12-30 02:07:42 +01:00
}
return $handler;
}
/**
* @param string $error_level
* @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;
}
/**
* @param string $file_path
2016-12-30 02:07:42 +01:00
* @return string
*/
public function getReportingLevelForFile($file_path)
2016-12-30 02:07:42 +01:00
{
foreach ($this->custom_levels as $custom_level) {
if ($custom_level->allows($file_path)) {
2016-12-30 02:07:42 +01:00
return $custom_level->getErrorLevel();
}
}
return $this->error_level;
}
}