Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Source.php

function Source::generate

Prints the source of all errors and warnings.

Parameters

string $cachedData Any partial report data that was returned from: generateFileReport during the run.

int $totalFiles Total number of files processed during the run.:

int $totalErrors Total number of errors found during the run.:

int $totalWarnings Total number of warnings found during the run.:

int $totalFixable Total number of problems that can be fixed.:

bool $showSources Show sources?:

int $width Maximum allowed line width.:

bool $interactive Are we running in interactive mode?:

bool $toScreen Is the report being printed to screen?:

Return value

void

Overrides Report::generate

File

vendor/squizlabs/php_codesniffer/src/Reports/Source.php, line 84

Class

Source

Namespace

PHP_CodeSniffer\Reports

Code

public function generate($cachedData, $totalFiles, $totalErrors, $totalWarnings, $totalFixable, $showSources = false, $width = 80, $interactive = false, $toScreen = true) {
    $lines = explode(PHP_EOL, $cachedData);
    array_pop($lines);
    if (empty($lines) === true) {
        return;
    }
    $sources = [];
    $maxLength = 0;
    foreach ($lines as $line) {
        $parts = explode('>>', $line);
        $source = $parts[0];
        $fixable = (bool) $parts[1];
        $count = $parts[2];
        if (isset($sources[$source]) === false) {
            if ($showSources === true) {
                $parts = null;
                $sniff = $source;
            }
            else {
                $parts = explode('.', $source);
                if ($parts[0] === 'Internal') {
                    $parts[2] = $parts[1];
                    $parts[1] = '';
                }
                $parts[1] = $this->makeFriendlyName($parts[1]);
                $sniff = $this->makeFriendlyName($parts[2]);
                if (isset($parts[3]) === true) {
                    $name = $this->makeFriendlyName($parts[3]);
                    $name[0] = strtolower($name[0]);
                    $sniff .= ' ' . $name;
                    unset($parts[3]);
                }
                $parts[2] = $sniff;
            }
            
            //end if
            $maxLength = max($maxLength, strlen($sniff));
            $sources[$source] = [
                'count' => $count,
                'fixable' => $fixable,
                'parts' => $parts,
            ];
        }
        else {
            $sources[$source]['count'] += $count;
        }
        
        //end if
    }
    
    //end foreach
    if ($showSources === true) {
        $width = min($width, $maxLength + 11);
    }
    else {
        $width = min($width, $maxLength + 41);
    }
    $width = max($width, 70);
    // Sort the data based on counts and source code.
    $sourceCodes = array_keys($sources);
    $counts = [];
    foreach ($sources as $source => $data) {
        $counts[$source] = $data['count'];
    }
    array_multisort($counts, SORT_DESC, $sourceCodes, SORT_ASC, SORT_NATURAL, $sources);
    echo PHP_EOL . "\x1b[1mPHP CODE SNIFFER VIOLATION SOURCE SUMMARY\x1b[0m" . PHP_EOL;
    echo str_repeat('-', $width) . PHP_EOL . "\x1b[1m";
    if ($showSources === true) {
        if ($totalFixable > 0) {
            echo '    SOURCE' . str_repeat(' ', $width - 15) . 'COUNT' . PHP_EOL;
        }
        else {
            echo 'SOURCE' . str_repeat(' ', $width - 11) . 'COUNT' . PHP_EOL;
        }
    }
    else {
        if ($totalFixable > 0) {
            echo '    STANDARD  CATEGORY            SNIFF' . str_repeat(' ', $width - 44) . 'COUNT' . PHP_EOL;
        }
        else {
            echo 'STANDARD  CATEGORY            SNIFF' . str_repeat(' ', $width - 40) . 'COUNT' . PHP_EOL;
        }
    }
    echo "\x1b[0m" . str_repeat('-', $width) . PHP_EOL;
    $fixableSources = 0;
    if ($showSources === true) {
        $maxSniffWidth = $width - 7;
    }
    else {
        $maxSniffWidth = $width - 37;
    }
    if ($totalFixable > 0) {
        $maxSniffWidth -= 4;
    }
    foreach ($sources as $source => $sourceData) {
        if ($totalFixable > 0) {
            echo '[';
            if ($sourceData['fixable'] === true) {
                echo 'x';
                $fixableSources++;
            }
            else {
                echo ' ';
            }
            echo '] ';
        }
        if ($showSources === true) {
            if (strlen($source) > $maxSniffWidth) {
                $source = substr($source, 0, $maxSniffWidth);
            }
            echo $source;
            if ($totalFixable > 0) {
                echo str_repeat(' ', $width - 9 - strlen($source));
            }
            else {
                echo str_repeat(' ', $width - 5 - strlen($source));
            }
        }
        else {
            $parts = $sourceData['parts'];
            if (strlen($parts[0]) > 8) {
                $parts[0] = substr($parts[0], 0, (strlen($parts[0]) - 8) * -1);
            }
            echo $parts[0] . str_repeat(' ', 10 - strlen($parts[0]));
            $category = $parts[1];
            if (strlen($category) > 18) {
                $category = substr($category, 0, (strlen($category) - 18) * -1);
            }
            echo $category . str_repeat(' ', 20 - strlen($category));
            $sniff = $parts[2];
            if (strlen($sniff) > $maxSniffWidth) {
                $sniff = substr($sniff, 0, $maxSniffWidth);
            }
            if ($totalFixable > 0) {
                echo $sniff . str_repeat(' ', $width - 39 - strlen($sniff));
            }
            else {
                echo $sniff . str_repeat(' ', $width - 35 - strlen($sniff));
            }
        }
        
        //end if
        echo $sourceData['count'] . PHP_EOL;
    }
    
    //end foreach
    echo str_repeat('-', $width) . PHP_EOL;
    echo "\x1b[1m" . 'A TOTAL OF ' . ($totalErrors + $totalWarnings) . ' SNIFF VIOLATION';
    if ($totalErrors + $totalWarnings > 1) {
        echo 'S';
    }
    echo ' WERE FOUND IN ' . count($sources) . ' SOURCE';
    if (count($sources) !== 1) {
        echo 'S';
    }
    echo "\x1b[0m";
    if ($totalFixable > 0) {
        echo PHP_EOL . str_repeat('-', $width) . PHP_EOL;
        echo "\x1b[1mPHPCBF CAN FIX THE {$fixableSources} MARKED SOURCES AUTOMATICALLY ({$totalFixable} VIOLATIONS IN TOTAL)\x1b[0m";
    }
    echo PHP_EOL . str_repeat('-', $width) . PHP_EOL . PHP_EOL;
    if ($toScreen === true && $interactive === false) {
        Timing::printRunTime();
    }
}
RSS feed
Powered by Drupal