Browse Source

DeclareEqualNormalizeFixer - fix for declare having multiple directives

Kuba Werłos 3 years ago
parent
commit
03f5eff63d

+ 7 - 2
src/Fixer/LanguageConstruct/DeclareEqualNormalizeFixer.php

@@ -88,9 +88,14 @@ final class DeclareEqualNormalizeFixer extends AbstractFixer implements Configur
                 continue;
             }
 
-            while (!$tokens[++$index]->equals('='));
+            $openParenthesisIndex = $tokens->getNextMeaningfulToken($index);
+            $closeParenthesisIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openParenthesisIndex);
 
-            $this->{$callback}($tokens, $index);
+            for ($i = $closeParenthesisIndex; $i > $openParenthesisIndex; --$i) {
+                if ($tokens[$i]->equals('=')) {
+                    $this->{$callback}($tokens, $i);
+                }
+            }
         }
     }
 

+ 10 - 0
tests/Fixer/LanguageConstruct/DeclareEqualNormalizeFixerTest.php

@@ -87,6 +87,16 @@ final class DeclareEqualNormalizeFixerTest extends AbstractFixerTestCase
                 null,
                 ['space' => 'none'],
             ],
+            'declare having multiple directives, single' => [
+                '<?php declare(strict_types=1, ticks=1);',
+                '<?php declare(strict_types = 1, ticks = 1);',
+                [],
+            ],
+            'declare having multiple directives, none' => [
+                '<?php declare(strict_types = 1, ticks = 1);',
+                '<?php declare(strict_types=1, ticks=1);',
+                ['space' => 'single'],
+            ],
         ];
     }