private function _addError($error, $line, $column, $code, $data, $severity, $fixable)
{
if (isset(self::$_ignoredLines[$line]) === true) {
return false;
}
// Work out which sniff generated the error.
if (substr($code, 0, 9) === 'Internal.') {
// Any internal message.
$sniffCode = $code;
} else {
$parts = explode('_', str_replace('\\', '_', $this->_activeListener));
if (isset($parts[3]) === true) {
$sniff = $parts[0] . '.' . $parts[2] . '.' . $parts[3];
// Remove "Sniff" from the end.
$sniff = substr($sniff, 0, -5);
} else {
$sniff = 'unknownSniff';
}
$sniffCode = $sniff;
if ($code !== '') {
$sniffCode .= '.' . $code;
}
}
//end if
// If we know this sniff code is being ignored for this file, return early.
if (isset($this->_ignoredCodes[$sniffCode]) === true) {
return false;
}
// Make sure this message type has not been set to "warning".
if (isset($this->ruleset[$sniffCode]['type']) === true && $this->ruleset[$sniffCode]['type'] === 'warning') {
// Pass this off to the warning handler.
return $this->_addWarning($error, $line, $column, $code, $data, $severity, $fixable);
} else {
if ($this->phpcs->cli->errorSeverity === 0) {
// Don't bother doing any processing as errors are just going to
// be hidden in the reports anyway.
return false;
}
}
// Make sure we are interested in this severity level.
if (isset($this->ruleset[$sniffCode]['severity']) === true) {
$severity = $this->ruleset[$sniffCode]['severity'];
} else {
if ($severity === 0) {
$severity = PHPCS_DEFAULT_ERROR_SEV;
}
}
if ($this->phpcs->cli->errorSeverity > $severity) {
return false;
}
// Make sure we are not ignoring this file.
$patterns = $this->phpcs->getIgnorePatterns($sniffCode);
foreach ($patterns as $pattern => $type) {
// While there is support for a type of each pattern
// (absolute or relative) we don't actually support it here.
$replacements = array('\\,' => ',', '*' => '.*');
// We assume a / directory separator, as do the exclude rules
// most developers write, so we need a special case for any system
// that is different.
if (DIRECTORY_SEPARATOR === '\\') {
$replacements['/'] = '\\\\';
}
$pattern = '`' . strtr($pattern, $replacements) . '`i';
if (preg_match($pattern, $this->_file) === 1) {
$this->_ignoredCodes[$sniffCode] = true;
return false;
}
}
//end foreach
$this->_errorCount++;
if ($fixable === true) {
$this->_fixableCount++;
}
if ($this->_recordErrors === false) {
if (isset($this->_errors[$line]) === false) {
$this->_errors[$line] = 0;
}
$this->_errors[$line]++;
return true;
}
// Work out the error message.
if (isset($this->ruleset[$sniffCode]['message']) === true) {
$error = $this->ruleset[$sniffCode]['message'];
}
if (empty($data) === true) {
$message = $error;
} else {
$message = vsprintf($error, $data);
}
if (isset($this->_errors[$line]) === false) {
$this->_errors[$line] = array();
}
if (isset($this->_errors[$line][$column]) === false) {
$this->_errors[$line][$column] = array();
}
$this->_errors[$line][$column][] = array('message' => $message, 'source' => $sniffCode, 'severity' => $severity, 'fixable' => $fixable);
if (PHP_CODESNIFFER_VERBOSITY > 1 && $this->fixer->enabled === true && $fixable === true) {
@ob_end_clean();
echo "\tE: [Line {$line}] {$message} ({$sniffCode})" . PHP_EOL;
ob_start();
}
return true;
}