* @package PHPCI * @subpackage Plugins */ class Lint implements PHPCI\Plugin { protected $directories; protected $recursive = true; protected $ignore; protected $phpci; protected $build; /** * Standard Constructor * * $options['directory'] Output Directory. Default: %BUILDPATH% * $options['filename'] Phar Filename. Default: build.phar * $options['regexp'] Regular Expression Filename Capture. Default: /\.php$/ * $options['stub'] Stub Content. No Default Value * * @param Builder $phpci * @param Build $build * @param array $options */ public function __construct(Builder $phpci, Build $build, array $options = array()) { $this->phpci = $phpci; $this->build = $build; $this->directories = array(''); $this->ignore = $phpci->ignore; if (!empty($options['directory'])) { $this->directories[] = $options['directory']; } if (!empty($options['directories'])) { $this->directories = $options['directories']; } if (array_key_exists('recursive', $options)) { $this->recursive = $options['recursive']; } } /** * Executes parallel lint */ public function execute() { $this->phpci->quiet = true; $success = true; $php = $this->phpci->findBinary('php'); foreach ($this->directories as $dir) { if (!$this->lintDirectory($php, $dir)) { $success = false; } } $this->phpci->quiet = false; return $success; } /** * Lint an item (file or directory) by calling the appropriate method. * @param $php * @param $item * @param $itemPath * @return bool */ protected function lintItem($php, $item, $itemPath) { $success = true; if ($item->isFile() && $item->getExtension() == 'php' && !$this->lintFile($php, $itemPath)) { $success = false; } elseif ($item->isDir() && $this->recursive && !$this->lintDirectory($php, $itemPath . DIRECTORY_SEPARATOR)) { $success = false; } return $success; } /** * Run php -l against a directory of files. * @param $php * @param $path * @return bool */ protected function lintDirectory($php, $path) { $success = true; $directory = new \DirectoryIterator($this->phpci->buildPath . $path); foreach ($directory as $item) { if ($item->isDot()) { continue; } $itemPath = $path . $item->getFilename(); if (in_array($itemPath, $this->ignore)) { continue; } if (!$this->lintItem($php, $item, $itemPath)) { $success = false; } } return $success; } /** * Run php -l against a specific file. * @param $php * @param $path * @return bool */ protected function lintFile($php, $path) { $success = true; if (!$this->phpci->executeCommand($php . ' -l "%s"', $this->phpci->buildPath . $path)) { $this->phpci->logFailure($path); $success = false; } return $success; } }