Просмотр исходного кода

TokensAnalyzer - fix isConstantInvocation detection for mulitple exce…

SpacePossum 3 лет назад
Родитель
Сommit
eb1e3d5dcc

+ 5 - 0
src/Tokenizer/TokensAnalyzer.php

@@ -381,6 +381,11 @@ final class TokensAnalyzer
         }
 
         // check for non-capturing catches
+
+        while ($this->tokens[$prevIndex]->isGivenKind([CT::T_NAMESPACE_OPERATOR, T_NS_SEPARATOR, T_STRING, CT::T_TYPE_ALTERNATION])) {
+            $prevIndex = $this->tokens->getPrevMeaningfulToken($prevIndex);
+        }
+
         if ($this->tokens[$prevIndex]->equals('(')) {
             $prevPrevIndex = $this->tokens->getPrevMeaningfulToken($prevIndex);
 

+ 2 - 2
tests/AutoReview/FixerFactoryTest.php

@@ -62,7 +62,7 @@ final class FixerFactoryTest extends TestCase
                 foreach ($edges as $edge) {
                     $second = $fixers[$edge];
 
-                    static::assertLessThan($first->getPriority(), $second->getPriority(), sprintf('"%s" should have less priority than "%s"', $fixerName, $edge));
+                    static::assertLessThan($first->getPriority(), $second->getPriority(), sprintf('"%s" should have less priority than "%s"', $edge, $fixerName));
                 }
             }
         }
@@ -232,7 +232,7 @@ final class FixerFactoryTest extends TestCase
             ksort($fixersPhpDocIssues);
 
             foreach ($fixersPhpDocIssues as $fixerName => $issue) {
-                $message .= sprintf("\n--------------------------------------------------\n%s\n%s", $fixerName, $issue);
+                $message .= sprintf("\n--------------------------------------------------\n%s\n%s", $fixers[$fixerName]['short_classname'], $issue);
             }
 
             static::fail($message);

+ 14 - 4
tests/Fixer/ConstantNotation/NativeConstantInvocationFixerTest.php

@@ -489,16 +489,26 @@ echo M_PI;
     }
 
     /**
+     * @dataProvider provideFix80Cases
      * @requires PHP 8.0
      */
-    public function testFixPhp80(): void
+    public function testFixPhp80(string $expected): void
     {
         $this->fixer->configure(['strict' => true]);
-        $this->doTest(
+        $this->doTest($expected);
+    }
+
+    public function provideFix80Cases(): iterable
+    {
+        yield [
             '<?php
             try {
             } catch (\Exception) {
-            }'
-        );
+            }',
+        ];
+
+        yield ['<?php try { foo(); } catch(\InvalidArgumentException|\LogicException $e) {}'];
+
+        yield ['<?php try { foo(); } catch(\InvalidArgumentException|\LogicException) {}'];
     }
 }

+ 20 - 0
tests/Tokenizer/TokensAnalyzerTest.php

@@ -1082,6 +1082,26 @@ abstract class Baz
             [3 => false, 5 => false, 12 => false],
             '<?php #[\A\Foo()] function foo() {}',
         ];
+
+        yield 'multiple type catch with variable' => [
+            [5 => false, 15 => false, 18 => false],
+            '<?php try { foo(); } catch(\InvalidArgumentException|\LogicException $e) {}',
+        ];
+
+        yield 'multiple type catch without variable 1' => [
+            [5 => false, 15 => false, 18 => false],
+            '<?php try { foo(); } catch(\InvalidArgumentException|\LogicException) {}',
+        ];
+
+        yield 'multiple type catch without variable 2' => [
+            [5 => false, 15 => false, 17 => false, 19 => false, 21 => false, 24 => false, 27 => false],
+            '<?php try { foo(); } catch(\D|Z|A\B|\InvalidArgumentException|\LogicException) {}',
+        ];
+
+        yield 'multiple type catch without variable 3' => [
+            [5 => false, 14 => false, 16 => false, 19 => false, 22 => false],
+            '<?php try { foo(); } catch(A\B|\InvalidArgumentException|\LogicException) {}',
+        ];
     }
 
     /**