From 1cd680384705da4c53aba76bc1331c5eee8c7e88 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Fri, 24 Apr 2020 23:52:35 +0200 Subject: [PATCH] [CodeQuality] Fix CompactToVariablesRector for unknown names --- rules/code-quality/src/CompactConverter.php | 13 +++++++++++++ .../Rector/FuncCall/CompactToVariablesRector.php | 4 ++++ .../Fixture/skip_unknown.php.inc | 13 +++++++++++++ .../src/Command/SyncAnnotationParserCommand.php | 10 +++++----- 4 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 rules/code-quality/tests/Rector/FuncCall/CompactToVariablesRector/Fixture/skip_unknown.php.inc diff --git a/rules/code-quality/src/CompactConverter.php b/rules/code-quality/src/CompactConverter.php index 6b64bba1c8ce..cdac341d20a9 100644 --- a/rules/code-quality/src/CompactConverter.php +++ b/rules/code-quality/src/CompactConverter.php @@ -24,6 +24,19 @@ public function __construct(ValueResolver $valueResolver) $this->valueResolver = $valueResolver; } + public function hasAllArgumentsNamed(FuncCall $funcCall): bool + { + foreach ($funcCall->args as $arg) { + /** @var string|null $variableName */ + $variableName = $this->valueResolver->getValue($arg->value); + if (! is_string($variableName)) { + return false; + } + } + + return true; + } + public function convertToArray(FuncCall $funcCall): Array_ { $array = new Array_(); diff --git a/rules/code-quality/src/Rector/FuncCall/CompactToVariablesRector.php b/rules/code-quality/src/Rector/FuncCall/CompactToVariablesRector.php index 8fd3aaf1f445..3a9b06ef2e3d 100644 --- a/rules/code-quality/src/Rector/FuncCall/CompactToVariablesRector.php +++ b/rules/code-quality/src/Rector/FuncCall/CompactToVariablesRector.php @@ -78,6 +78,10 @@ public function refactor(Node $node): ?Node return null; } + if (! $this->compactConverter->hasAllArgumentsNamed($node)) { + return null; + } + return $this->compactConverter->convertToArray($node); } } diff --git a/rules/code-quality/tests/Rector/FuncCall/CompactToVariablesRector/Fixture/skip_unknown.php.inc b/rules/code-quality/tests/Rector/FuncCall/CompactToVariablesRector/Fixture/skip_unknown.php.inc new file mode 100644 index 000000000000..59a2bbe765fe --- /dev/null +++ b/rules/code-quality/tests/Rector/FuncCall/CompactToVariablesRector/Fixture/skip_unknown.php.inc @@ -0,0 +1,13 @@ +symfonyStyle = $symfonyStyle; $this->classSyncers = $classSyncers; $this->parameterProvider = $parameterProvider; + + parent::__construct(); } protected function configure(): void { - // disable imports - $this->parameterProvider->changeParameter(Option::AUTO_IMPORT_NAMES, false); - $this->setName(CommandNaming::classToName(self::class)); $this->setDescription('[DOC] Generate value-preserving DocParser from doctrine/annotation'); @@ -63,6 +60,9 @@ protected function configure(): void protected function execute(InputInterface $input, OutputInterface $output): int { + // disable imports + $this->parameterProvider->changeParameter(Option::AUTO_IMPORT_NAMES, false); + $dryRun = (bool) $input->getOption(Option::OPTION_DRY_RUN); foreach ($this->classSyncers as $classSyncer) {