/**
  * @param string $composer
  * @param string $lib
  * @param array $info
  * @param string $level
  * @return Result
  */
 private function createIssues($composer, $lib, array $info, $level)
 {
     $result = new Result();
     foreach ($info['advisories'] as $advisory) {
         $result->addIssue($this->createIssue($composer, $lib, $info['version'], $advisory, $level));
     }
     return $result;
 }
Пример #2
0
 /**
  * @param string $message
  * @param Node   $node
  * @param string $level
  */
 private function addIssue($message, Node $node = null, $level = Issue::LEVEL_ERROR)
 {
     $issue = new Issue($this->gadget, $message);
     $issue->setLevel($level);
     $issue->setFile($this->currentFile);
     if ($node) {
         $issue->setLine($node->getLine());
     }
     $this->result->addIssue($issue);
 }
Пример #3
0
 /**
  * @param string $path
  * @param array $options
  * @param AbstractLogger $logger
  * @return Result
  */
 public function run($path, array $options, AbstractLogger $logger)
 {
     $result = new Result();
     $files = FilesystemHelper::findFiles($path, $options['files'], '*.twig');
     foreach ($files as $file) {
         try {
             $this->twig->parse($this->twig->tokenize(file_get_contents($file), $file));
         } catch (\Twig_Error $e) {
             $message = get_class($e) . ': ' . $e->getRawMessage();
             $issue = new Issue($this, $message);
             $issue->setLevel($options['error_level']);
             $issue->setFile($file);
             $issue->setLine($e->getTemplateLine());
             $result->addIssue($issue);
         }
     }
     return $result;
 }
Пример #4
0
 /**
  * @param string $path
  * @param array $options
  * @param AbstractLogger $logger
  * @return Result
  */
 public function run($path, array $options, AbstractLogger $logger)
 {
     $processBuilder = new ProcessBuilder([$this->bin, '--report=csv']);
     foreach ($options['standards'] as $standard) {
         $processBuilder->add('--standard=' . $standard);
     }
     $processBuilder->add('--extensions=' . implode(',', $options['extensions']));
     foreach ($options['files'] as $file) {
         $processBuilder->add($file);
     }
     $processBuilder->setWorkingDirectory($path);
     $output = $processBuilder->run($logger);
     $rawIssues = $this->convertFromCsvToArray($output);
     $result = new Result();
     foreach ($rawIssues as $info) {
         $result->addIssue($this->createIssue($info));
     }
     return $result;
 }
Пример #5
0
 /**
  * @param array $options
  * @param array $method
  * @param string $className
  * @param string $file
  *
  * @return Result
  */
 private function processMethod(array $options, array $method, $className, $file)
 {
     $result = new Result();
     if ($method['docblock'] === null) {
         if ($options['missing_docblock'] !== null) {
             $result->addIssue($this->issueFactory->createIssueForMissingDocblock($options, $method, $className, $file));
         }
         return $result;
     }
     $docBlock = new DocBlock($method['docblock']);
     $tagsInDocblock = $docBlock->getTags();
     $signature = new FunctionSignature($method['signature']);
     if ($options['type_missmatch'] !== null) {
         foreach ($this->differ->inDocBlockAndSignature($tagsInDocblock, $signature) as $params) {
             /** @var DocBlock\Tag\ParamTag $docBlockParam */
             $docBlockParam = $params[0];
             /** @var FunctionParameter $functionParameter */
             $functionParameter = $params[1];
             if (!$this->differ->equalTypes($functionParameter, $docBlockParam)) {
                 if (!$functionParameter->type) {
                     $result->addIssue($this->issueFactory->createIssueForMissingTypeInSignature($options, $method, $className, $file, $functionParameter));
                 } elseif (!$docBlockParam->getType()) {
                     $result->addIssue($this->issueFactory->createIssueForMissingTypeInDocBlock($options, $method, $className, $file, $docBlockParam));
                 } else {
                     $result->addIssue($this->issueFactory->createIssueForMismatchingTypes($options, $method, $className, $file, $functionParameter, $docBlockParam));
                 }
             }
         }
     }
     if ($options['obsolete_variable'] !== null) {
         foreach ($this->differ->inDocblockOnly($tagsInDocblock, $signature) as $param) {
             $result->addIssue($this->issueFactory->createIssueForObsoleteVariable($options, $method, $className, $file, $param->getContent()));
         }
     }
     if ($options['missing_variable'] !== null) {
         foreach ($this->differ->inSignatureOnly($tagsInDocblock, $signature) as $param) {
             $result->addIssue($this->issueFactory->createIssueForMissingVariable($options, $method, $className, $file, $param));
         }
     }
     return $result;
 }
Пример #6
0
 /**
  * @param string $path
  * @param array $options
  * @param AbstractLogger $logger
  * @return Result
  */
 public function run($path, array $options, AbstractLogger $logger)
 {
     $processBuilder = new ProcessBuilder([$this->bin]);
     $processBuilder->add(implode(',', $options['files']));
     $processBuilder->add('xml');
     $processBuilder->add(implode(',', $options['rulesets']));
     $processBuilder->setWorkingDirectory($path);
     $output = $processBuilder->run($logger);
     $data = $this->convertFromXmlToArray($output);
     $result = new Result();
     if (!isset($data['file']) || !is_array($data['file'])) {
         return $result;
     }
     $files = isset($data['file'][0]) ? $data['file'] : [$data['file']];
     foreach ($files as $file) {
         $violations = isset($file['violation'][0]) ? $file['violation'] : [$file['violation']];
         foreach ($violations as $violation) {
             $result->addIssue($this->createIssue($file['@name'], $violation));
         }
     }
     return $result;
 }
 /**
  * @param string $filename
  * @param array $options
  * @param string $comment
  * @return Result
  */
 private function processComment($filename, array $options, $comment)
 {
     $result = new Result();
     foreach (explode("\n", $comment['content']) as $lineOffset => $line) {
         foreach ($options['blacklist'] as $blacklistedWord => $errorLevel) {
             if (stristr($line, $blacklistedWord) === false) {
                 continue;
             }
             $issue = new Issue($this, sprintf('found "%s" in a comment', $blacklistedWord));
             $issue->setLevel($errorLevel);
             $issue->setFile($filename);
             $issue->setLine($comment['line'] + $lineOffset);
             $result->addIssue($issue);
         }
     }
     return $result;
 }