You are here

public function SiteAuditCheckCodebasePhpCodeSniffer::calculateScore in Site Audit 8.2

Implements \SiteAudit\Check\Abstract\calculateScore().

Overrides SiteAuditCheckAbstract::calculateScore

File

Check/Codebase/PhpCodeSniffer.php, line 118
Contains \SiteAudit\Check\Codebase\PhpCodeSniffer.

Class

SiteAuditCheckCodebasePhpCodeSniffer
Class SiteAuditCheckCodebasePhpCodeSniffer.

Code

public function calculateScore() {

  // Get the path of phpcs.
  $phpcs_path = $this
    ->getExecPath('phpcs');
  if ($phpcs_path === '') {
    $this->registry['phpcs_path_error'] = TRUE;
    return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_INFO;
  }

  // Get the custom code paths.
  $custom_code = $this
    ->getCustomCodePaths();
  if ($custom_code === FALSE) {
    return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_FAIL;
  }
  if (empty($custom_code)) {
    $this->registry['custom_code'] = TRUE;
    return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_INFO;
  }

  // Get options.
  $valid_options = array(
    'extensions' => 'php,module,inc,install,test,profile,theme,css,info,txt',
    'ignore' => '*.features.*,*_default.inc,*.ds.inc,*.strongarm.inc,*.panelizer.inc,*_defaults.inc,*.box.inc,*.context.inc,*displays.inc',
    'standard' => SITE_AUDIT_BASE_PATH . '/vendor/drupal/coder/coder_sniffer/Drupal',
  );
  $options = $this
    ->getOptions($valid_options, 'phpcs-');

  // Check if 'standard' is a valid directory.
  if (!is_dir($options['standard'])) {
    $this->registry['phpcs_standard'] = $options['standard'];
    return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_INFO;
  }
  $temp_file = tempnam(sys_get_temp_dir(), 'site_audit');
  $option_string = " --report=checkstyle";
  foreach ($options as $option => $value) {
    $option_string .= " --{$option}";
    if ($value !== TRUE) {
      $option_string .= "={$value}";
    }
  }

  // Suppress XML errors which will be handled by try catch instead.
  libxml_use_internal_errors(TRUE);
  foreach ($custom_code as $path) {
    $command = $phpcs_path . ' ' . $path . $option_string;
    $process = new Process($command);
    $process
      ->run();
    try {
      $output = new SimpleXMLElement($process
        ->getOutput());
      foreach ($output as $file) {
        foreach ($file as $violation) {
          $filename = $this
            ->getRelativePath((string) $file[0]['name']);
          $this->registry['phpcs_out'][$filename][] = $violation;
        }
      }
    } catch (Exception $e) {
      $this
        ->logXmlError($path, 'phpcs');
      continue;
    }
  }
  if (empty($this->registry['phpcs_out'])) {
    return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_PASS;
  }
  return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_WARN;
}