Example #1
0
File: Cbf.php Project: thekabal/tki
 /**
  * Generate a partial report for a single processed file.
  *
  * Function should return TRUE if it printed or stored data about the file
  * and FALSE if it ignored the file. Returning TRUE indicates that the file and
  * its data should be counted in the grand totals.
  *
  * @param array                 $report      Prepared report data.
  * @param \PHP_CodeSniffer\File $phpcsFile   The file being reported on.
  * @param bool                  $showSources Show sources?
  * @param int                   $width       Maximum allowed line width.
  *
  * @return bool
  */
 public function generateFileReport($report, File $phpcsFile, $showSources = false, $width = 80)
 {
     $errors = $phpcsFile->getFixableCount();
     if ($errors !== 0) {
         if (PHP_CODESNIFFER_VERBOSITY > 0) {
             ob_end_clean();
             $startTime = microtime(true);
             echo "\t=> Fixing file: {$errors}/{$errors} violations remaining";
         }
         $fixed = $phpcsFile->fixer->fixFile();
     }
     if ($phpcsFile->config->stdin === true) {
         // Replacing STDIN, so output current file to STDOUT
         // even if nothing was fixed. Exit here because we
         // can't process any more than 1 file in this setup.
         echo $phpcsFile->fixer->getContents();
         ob_end_flush();
         exit(1);
     }
     if ($errors === 0) {
         return false;
     }
     if (PHP_CODESNIFFER_VERBOSITY > 0) {
         if ($fixed === false) {
             echo 'ERROR';
         } else {
             echo 'DONE';
         }
         $timeTaken = (microtime(true) - $startTime) * 1000;
         if ($timeTaken < 1000) {
             $timeTaken = round($timeTaken);
             echo " in {$timeTaken}ms" . PHP_EOL;
         } else {
             $timeTaken = round($timeTaken / 1000, 2);
             echo " in {$timeTaken} secs" . PHP_EOL;
         }
     }
     if ($fixed === true) {
         $newFilename = $report['filename'] . $phpcsFile->config->suffix;
         $newContent = $phpcsFile->fixer->getContents();
         file_put_contents($newFilename, $newContent);
         if (PHP_CODESNIFFER_VERBOSITY > 0) {
             if ($newFilename === $report['filename']) {
                 echo "\t=> File was overwritten" . PHP_EOL;
             } else {
                 echo "\t=> Fixed file written to " . basename($newFilename) . PHP_EOL;
             }
         }
     }
     if (PHP_CODESNIFFER_VERBOSITY > 0) {
         ob_start();
     }
     $errorCount = $phpcsFile->getErrorCount();
     $warningCount = $phpcsFile->getWarningCount();
     $fixableCount = $phpcsFile->getFixableCount();
     $fixedCount = $errors - $fixableCount;
     echo $report['filename'] . ">>{$errorCount}>>{$warningCount}>>{$fixableCount}>>{$fixedCount}" . PHP_EOL;
     return $fixed;
 }
Example #2
0
 /**
  * Generate a partial report for a single processed file.
  *
  * Function should return TRUE if it printed or stored data about the file
  * and FALSE if it ignored the file. Returning TRUE indicates that the file and
  * its data should be counted in the grand totals.
  *
  * @param array                 $report      Prepared report data.
  * @param \PHP_CodeSniffer\File $phpcsFile   The file being reported on.
  * @param bool                  $showSources Show sources?
  * @param int                   $width       Maximum allowed line width.
  *
  * @return bool
  */
 public function generateFileReport($report, File $phpcsFile, $showSources = false, $width = 80)
 {
     $errors = $phpcsFile->getFixableCount();
     if ($errors === 0) {
         return false;
     }
     $phpcsFile->disableCaching();
     $tokens = $phpcsFile->getTokens();
     if (empty($tokens) === true) {
         if (PHP_CODESNIFFER_VERBOSITY === 1) {
             $startTime = microtime(true);
             echo 'DIFF report is parsing ' . basename($report['filename']) . ' ';
         } else {
             if (PHP_CODESNIFFER_VERBOSITY > 1) {
                 echo 'DIFF report is forcing parse of ' . $report['filename'] . PHP_EOL;
             }
         }
         $phpcsFile->parse();
         if (PHP_CODESNIFFER_VERBOSITY === 1) {
             $timeTaken = (microtime(true) - $startTime) * 1000;
             if ($timeTaken < 1000) {
                 $timeTaken = round($timeTaken);
                 echo "DONE in {$timeTaken}ms";
             } else {
                 $timeTaken = round($timeTaken / 1000, 2);
                 echo "DONE in {$timeTaken} secs";
             }
             echo PHP_EOL;
         }
         $phpcsFile->fixer->startFile($phpcsFile);
     }
     //end if
     if (PHP_CODESNIFFER_VERBOSITY > 1) {
         ob_end_clean();
         echo "\t*** START FILE FIXING ***" . PHP_EOL;
     }
     $fixed = $phpcsFile->fixer->fixFile();
     if (PHP_CODESNIFFER_VERBOSITY > 1) {
         echo "\t*** END FILE FIXING ***" . PHP_EOL;
         ob_start();
     }
     if ($fixed === false) {
         return false;
     }
     $diff = $phpcsFile->fixer->generateDiff();
     if ($diff === '') {
         // Nothing to print.
         return false;
     }
     echo $diff . PHP_EOL;
     return true;
 }
Example #3
0
 /**
  * Attempt to fix the file by processing it until no fixes are made.
  *
  * @return boolean
  */
 public function fixFile()
 {
     $fixable = $this->currentFile->getFixableCount();
     if ($fixable === 0) {
         // Nothing to fix.
         return false;
     }
     $stdin = false;
     if (empty($this->currentFile->config->files) === true) {
         $stdin = true;
     }
     $this->enabled = true;
     $this->loops = 0;
     while ($this->loops < 50) {
         ob_start();
         // Only needed once file content has changed.
         $contents = $this->getContents();
         if (PHP_CODESNIFFER_VERBOSITY > 2) {
             @ob_end_clean();
             echo '---START FILE CONTENT---' . PHP_EOL;
             $lines = explode($this->currentFile->eolChar, $contents);
             $max = strlen(count($lines));
             foreach ($lines as $lineNum => $line) {
                 $lineNum++;
                 echo str_pad($lineNum, $max, ' ', STR_PAD_LEFT) . '|' . $line . PHP_EOL;
             }
             echo '--- END FILE CONTENT ---' . PHP_EOL;
             ob_start();
         }
         $this->inConflict = false;
         $this->currentFile->ruleset->populateTokenListeners();
         $this->currentFile->setContent($contents);
         $this->currentFile->process();
         ob_end_clean();
         $this->loops++;
         if (PHP_CODESNIFFER_CBF === true && PHP_CODESNIFFER_VERBOSITY > 0) {
             echo "\r" . str_repeat(' ', 80) . "\r";
             echo "\t=> Fixing file: {$this->numFixes}/{$fixable} violations remaining [made {$this->loops} pass";
             if ($this->loops > 1) {
                 echo 'es';
             }
             echo ']... ';
         }
         if ($this->numFixes === 0 && $this->inConflict === false) {
             // Nothing left to do.
             break;
         } else {
             if (PHP_CODESNIFFER_VERBOSITY > 1) {
                 echo "\t* fixed {$this->numFixes} violations, starting loop " . ($this->loops + 1) . ' *' . PHP_EOL;
             }
         }
     }
     //end while
     $this->enabled = false;
     if ($this->numFixes > 0) {
         if (PHP_CODESNIFFER_VERBOSITY > 1) {
             @ob_end_clean();
             echo "\t*** Reached maximum number of loops with {$this->numFixes} violations left unfixed ***" . PHP_EOL;
             ob_start();
         }
         return false;
     }
     return true;
 }
Example #4
0
 /**
  * Generate summary information to be used during report generation.
  *
  * @param \PHP_CodeSniffer\Files\File $phpcsFile The file that has been processed.
  *
  * @return array
  */
 public function prepareFileReport(File $phpcsFile)
 {
     $report = array('filename' => Common::stripBasepath($phpcsFile->getFilename(), $this->config->basepath), 'errors' => $phpcsFile->getErrorCount(), 'warnings' => $phpcsFile->getWarningCount(), 'fixable' => $phpcsFile->getFixableCount(), 'messages' => array());
     if ($report['errors'] === 0 && $report['warnings'] === 0) {
         // Prefect score!
         return $report;
     }
     if ($this->config->recordErrors === false) {
         $message = 'Errors are not being recorded but this report requires error messages. ';
         $message .= 'This report will not show the correct information.';
         $report['messages'][1][1] = array(array('message' => $message, 'source' => 'Internal.RecordErrors', 'severity' => 5, 'fixable' => false, 'type' => 'ERROR'));
         return $report;
     }
     $errors = array();
     // Merge errors and warnings.
     foreach ($phpcsFile->getErrors() as $line => $lineErrors) {
         foreach ($lineErrors as $column => $colErrors) {
             $newErrors = array();
             foreach ($colErrors as $data) {
                 $newErrors[] = array('message' => $data['message'], 'source' => $data['source'], 'severity' => $data['severity'], 'fixable' => $data['fixable'], 'type' => 'ERROR');
             }
             $errors[$line][$column] = $newErrors;
         }
         ksort($errors[$line]);
     }
     //end foreach
     foreach ($phpcsFile->getWarnings() as $line => $lineWarnings) {
         foreach ($lineWarnings as $column => $colWarnings) {
             $newWarnings = array();
             foreach ($colWarnings as $data) {
                 $newWarnings[] = array('message' => $data['message'], 'source' => $data['source'], 'severity' => $data['severity'], 'fixable' => $data['fixable'], 'type' => 'WARNING');
             }
             if (isset($errors[$line]) === false) {
                 $errors[$line] = array();
             }
             if (isset($errors[$line][$column]) === true) {
                 $errors[$line][$column] = array_merge($newWarnings, $errors[$line][$column]);
             } else {
                 $errors[$line][$column] = $newWarnings;
             }
         }
         //end foreach
         ksort($errors[$line]);
     }
     //end foreach
     ksort($errors);
     $report['messages'] = $errors;
     return $report;
 }
Example #5
0
 /**
  * Print progress information for a single processed file.
  *
  * @param File $file         The file that was processed.
  * @param int  $numFiles     The total number of files to process.
  * @param int  $numProcessed The number of files that have been processed,
  *                           including this one.
  *
  * @return void
  */
 function printProgress($file, $numFiles, $numProcessed)
 {
     if (PHP_CODESNIFFER_VERBOSITY > 0 || $this->config->showProgress === false) {
         return;
     }
     // Show progress information.
     if ($file->ignored === true) {
         echo 'S';
     } else {
         $errors = $file->getErrorCount();
         $warnings = $file->getWarningCount();
         $fixable = $file->getFixableCount();
         $fixed = $file->getFixedCount();
         if (PHP_CODESNIFFER_CBF === true) {
             // Files with fixed errors or warnings are F (green).
             // Files with unfixable errors or warnings are E (red).
             // Files with no errors or warnings are . (black).
             if ($fixable > 0) {
                 if ($this->config->colors === true) {
                     echo "";
                 }
                 echo 'E';
                 if ($this->config->colors === true) {
                     echo "";
                 }
             } else {
                 if ($fixed > 0) {
                     if ($this->config->colors === true) {
                         echo "";
                     }
                     echo 'F';
                     if ($this->config->colors === true) {
                         echo "";
                     }
                 } else {
                     echo '.';
                 }
             }
             //end if
         } else {
             // Files with errors are E (red).
             // Files with fixable errors are E (green).
             // Files with warnings are W (yellow).
             // Files with fixable warnings are W (green).
             // Files with no errors or warnings are . (black).
             if ($errors > 0) {
                 if ($this->config->colors === true) {
                     if ($fixable > 0) {
                         echo "";
                     } else {
                         echo "";
                     }
                 }
                 echo 'E';
                 if ($this->config->colors === true) {
                     echo "";
                 }
             } else {
                 if ($warnings > 0) {
                     if ($this->config->colors === true) {
                         if ($fixable > 0) {
                             echo "";
                         } else {
                             echo "";
                         }
                     }
                     echo 'W';
                     if ($this->config->colors === true) {
                         echo "";
                     }
                 } else {
                     echo '.';
                 }
             }
             //end if
         }
         //end if
     }
     //end if
     if ($numProcessed % 60 === 0) {
         $padding = strlen($numFiles) - strlen($numProcessed);
         echo str_repeat(' ', $padding);
         $percent = round($numProcessed / $numFiles * 100);
         echo " {$numProcessed} / {$numFiles} ({$percent}%)" . PHP_EOL;
     }
 }