diff --git a/docs/en/plugins/php_cs_fixes.md b/docs/en/plugins/php_cs_fixes.md index babb8160..7aacc8a1 100644 --- a/docs/en/plugins/php_cs_fixes.md +++ b/docs/en/plugins/php_cs_fixes.md @@ -13,6 +13,7 @@ Configuration * **directory** [string, optional] - The directory in which PHP CS Fixer should work (default: `%BUILD_PATH%`) * **rules** [string, optional] - Fixer rules (default: `@PSR2`) * **args** [string, optional] - Command line args (in string format) to pass to PHP Coding Standards Fixer (default: ``) +* **config** [string, optional] - Special config file (default: `%BUILD_PATH%./.php_cs` or `%BUILD_PATH%./.php_cs.dist`) ### Examples @@ -31,3 +32,9 @@ test: diff: true rules: "@PSR2" ``` + +```yml +test: + php_cs_fixer: + config: "./my/dir/.php_cs.special" +``` diff --git a/src/PHPCensor/Plugin/PhpCsFixer.php b/src/PHPCensor/Plugin/PhpCsFixer.php index 2cbc7bf1..45789a4f 100644 --- a/src/PHPCensor/Plugin/PhpCsFixer.php +++ b/src/PHPCensor/Plugin/PhpCsFixer.php @@ -15,6 +15,12 @@ class PhpCsFixer extends Plugin { protected $directory = null; protected $args = ''; + + protected $config = false; + protected $configs = [ + '.php_cs', + '.php_cs.dist', + ]; /** * @return string @@ -34,7 +40,7 @@ class PhpCsFixer extends Plugin if (!empty($options['args'])) { $this->args = $options['args']; } - + if (isset($options['verbose']) && $options['verbose']) { $this->args .= ' --verbose'; } @@ -47,6 +53,11 @@ class PhpCsFixer extends Plugin $this->args .= ' --rules=' . $options['rules']; } + if (isset($options['config']) && $options['config']) { + $this->config = true; + $this->args .= ' --config=' . $builder->interpolate($options['config']); + } + if (isset($options['directory']) && $options['directory']) { $this->directory = $builder->interpolate($options['directory']); } @@ -55,17 +66,31 @@ class PhpCsFixer extends Plugin /** * Run PHP CS Fixer. * - * @return bool + * @return boolean */ public function execute() { - $cmd = ''; + $directory = ''; if (!empty($this->directory)) { - $cmd = 'cd ' . $this->directory . ' && '; + $directory = $this->directory; + } + + if (!$this->config) { + foreach ($this->configs as $config) { + if (file_exists($this->builder->buildPath . '/' . $config)) { + $this->config = true; + $this->args .= ' --config=./' . $config; + break; + } + } + } + + if (!$this->config && !$directory) { + $directory = '.'; } $phpCsFixer = $this->builder->findBinary('php-cs-fixer'); - $cmd .= $phpCsFixer . ' fix . %s'; + $cmd = $phpCsFixer . ' fix ' . $directory . ' %s'; $success = $this->builder->executeCommand($cmd, $this->args); return $success;