diff --git a/src/Psalm/Checker/ProjectChecker.php b/src/Psalm/Checker/ProjectChecker.php index 59df2187c..2472b7423 100644 --- a/src/Psalm/Checker/ProjectChecker.php +++ b/src/Psalm/Checker/ProjectChecker.php @@ -254,6 +254,11 @@ class ProjectChecker */ private $replace_code = false; + /** + * @var bool + */ + private $fix_code = false; + const TYPE_CONSOLE = 'console'; const TYPE_JSON = 'json'; const TYPE_EMACS = 'emacs'; @@ -1002,7 +1007,15 @@ class ProjectChecker } } - if ($this->update_docblocks || $this->replace_code) { + if ($this->replace_code) { + foreach ($this->files_to_report as $file_path) { + $this->updateFile($file_path, true); + } + } elseif ($this->update_docblocks) { + foreach ($this->files_to_report as $file_path) { + $this->updateFile($file_path, true); + } + } elseif ($this->fix_code) { foreach ($this->files_to_report as $file_path) { $this->updateFile($file_path, true); } @@ -2082,4 +2095,12 @@ class ProjectChecker { $this->replace_code = true; } + + /** + * @return void + */ + public function fixCodeAfterCompletion() + { + $this->fix_code = true; + } } diff --git a/src/psalm.php b/src/psalm.php index 360f48994..f742e9c81 100644 --- a/src/psalm.php +++ b/src/psalm.php @@ -14,9 +14,10 @@ $options = getopt( 'f:mhvc:ir:', [ 'help', 'debug', 'config:', 'monochrome', 'show-info:', 'diff', - 'file:', 'self-check', 'update-docblocks', 'output-format:', + 'file:', 'self-check', 'add-docblocks', 'output-format:', 'find-dead-code', 'init', 'find-references-to:', 'root:', 'threads:', 'report:', 'clear-cache', 'no-cache', 'version', 'plugin:', 'replace-code', + 'fix-code', ] ); @@ -81,8 +82,8 @@ Options: --self-check Psalm checks itself - --update-docblocks - Adds correct return types to the given file(s) + --add-docblocks + Adds correct docblock return types to the given file(s) --output-format=console Changes the output format. Possible values: console, json, xml @@ -113,6 +114,9 @@ Options: --replace-code Processes any plugin code replacements and updates the code accordingly + --fix-issues=IssueType1,IssueType2 + If any issues that can be fixed automatically, Psalm will update the codebase + HELP; exit; @@ -418,6 +422,16 @@ if (isset($options['replace-code'])) { $project_checker->replaceCodeAfterCompletion(); } +if (isset($options['fix-issues'])) { + if (!is_string($options['fix-issues']) || !$options['fix-issues']) { + die('Expecting a comma-separated string of issues' . PHP_EOL); + } + + $issues = explode(',', $options['fix-issues']); + + $project_checker->fixIssuesAfterCompletion($issues); +} + /** @psalm-suppress MixedArgument */ \Psalm\IssueBuffer::setStartTime(microtime(true));