mirror of
https://we.phorge.it/source/arcanist.git
synced 2025-02-04 02:48:24 +01:00
ff3d3792ba
Summary: Self-explanatory Test Plan: `arc unit` Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: Korvin, epriestley Differential Revision: https://secure.phabricator.com/D11263
74 lines
1.8 KiB
PHP
74 lines
1.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* A linter which uses [[http://php.net/simplexml | SimpleXML]] to detect
|
|
* errors and potential problems in XML files.
|
|
*/
|
|
final class ArcanistXMLLinter extends ArcanistLinter {
|
|
|
|
public function getInfoName() {
|
|
return pht('SimpleXML Linter');
|
|
}
|
|
|
|
public function getInfoDescription() {
|
|
return pht('Uses SimpleXML to detect formatting errors in XML files.');
|
|
}
|
|
|
|
public function getLinterName() {
|
|
return 'XML';
|
|
}
|
|
|
|
public function getLinterConfigurationName() {
|
|
return 'xml';
|
|
}
|
|
|
|
public function canRun() {
|
|
return extension_loaded('libxml') && extension_loaded('simplexml');
|
|
}
|
|
|
|
public function getCacheVersion() {
|
|
return LIBXML_VERSION;
|
|
}
|
|
|
|
public function lintPath($path) {
|
|
libxml_use_internal_errors(true);
|
|
libxml_clear_errors();
|
|
|
|
if (simplexml_load_string($this->getData($path))) {
|
|
// XML appears to be valid.
|
|
return;
|
|
}
|
|
|
|
foreach (libxml_get_errors() as $error) {
|
|
$message = id(new ArcanistLintMessage())
|
|
->setPath($path)
|
|
->setLine($error->line)
|
|
->setChar($error->column ? $error->column : null)
|
|
->setCode($this->getLintMessageFullCode($error->code))
|
|
->setName('LibXML Error')
|
|
->setDescription(trim($error->message));
|
|
|
|
switch ($error->level) {
|
|
case LIBXML_ERR_NONE:
|
|
$message->setSeverity(ArcanistLintSeverity::SEVERITY_DISABLED);
|
|
break;
|
|
|
|
case LIBXML_ERR_WARNING:
|
|
$message->setSeverity(ArcanistLintSeverity::SEVERITY_WARNING);
|
|
break;
|
|
|
|
case LIBXML_ERR_ERROR:
|
|
case LIBXML_ERR_FATAL:
|
|
$message->setSeverity(ArcanistLintSeverity::SEVERITY_ERROR);
|
|
break;
|
|
|
|
default:
|
|
$message->setSeverity(ArcanistLintSeverity::SEVERITY_ADVICE);
|
|
break;
|
|
}
|
|
|
|
$this->addLintMessage($message);
|
|
}
|
|
}
|
|
|
|
}
|