PHP_CodeSniffer_File::_addWarning PHP Method

_addWarning() private method

Adds an warning to the warning stack.
private _addWarning ( string $warning, integer $line, integer $column, string $code, array $data, integer $severity, boolean $fixable ) : boolean
$warning string The error message.
$line integer The line on which the warning occurred.
$column integer The column at which the warning occurred.
$code string A violation code unique to the sniff message.
$data array Replacements for the warning message.
$severity integer The severity level for this warning. A value of 0 will be converted into the default severity level.
$fixable boolean Can the warning be fixed by the sniff?
return boolean
    private function _addWarning($warning, $line, $column, $code, $data, $severity, $fixable)
    {
        if (isset(self::$_ignoredLines[$line]) === true) {
            return false;
        }
        // Work out which sniff generated the warning.
        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 "error".
        if (isset($this->ruleset[$sniffCode]['type']) === true && $this->ruleset[$sniffCode]['type'] === 'error') {
            // Pass this off to the error handler.
            return $this->_addError($warning, $line, $column, $code, $data, $severity, $fixable);
        } else {
            if ($this->phpcs->cli->warningSeverity === 0) {
                // Don't bother doing any processing as warnings 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_WARN_SEV;
            }
        }
        if ($this->phpcs->cli->warningSeverity > $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->_warningCount++;
        if ($fixable === true) {
            $this->_fixableCount++;
        }
        if ($this->_recordErrors === false) {
            if (isset($this->_warnings[$line]) === false) {
                $this->_warnings[$line] = 0;
            }
            $this->_warnings[$line]++;
            return true;
        }
        // Work out the warning message.
        if (isset($this->ruleset[$sniffCode]['message']) === true) {
            $warning = $this->ruleset[$sniffCode]['message'];
        }
        if (empty($data) === true) {
            $message = $warning;
        } else {
            $message = vsprintf($warning, $data);
        }
        if (isset($this->_warnings[$line]) === false) {
            $this->_warnings[$line] = array();
        }
        if (isset($this->_warnings[$line][$column]) === false) {
            $this->_warnings[$line][$column] = array();
        }
        $this->_warnings[$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 "\tW: {$message} ({$sniffCode})" . PHP_EOL;
            ob_start();
        }
        return true;
    }