Browse Source

Psr4Fixer - class with anonymous class

Kuba Werłos 6 years ago
parent
commit
77e25d6e01
2 changed files with 36 additions and 9 deletions
  1. 7 9
      src/Fixer/Basic/Psr4Fixer.php
  2. 29 0
      tests/Fixer/Basic/Psr4FixerTest.php

+ 7 - 9
src/Fixer/Basic/Psr4Fixer.php

@@ -52,22 +52,18 @@ class InvalidName {}
      */
     protected function applyFix(\SplFileInfo $file, Tokens $tokens)
     {
-        $namespace = false;
-        $classyName = null;
+        $isNamespaceFound = false;
         $classyIndex = 0;
+        $classyName = null;
 
         foreach ($tokens as $index => $token) {
             if ($token->isGivenKind(T_NAMESPACE)) {
-                if (false !== $namespace) {
+                if ($isNamespaceFound) {
                     return;
                 }
 
-                $namespace = true;
+                $isNamespaceFound = true;
             } elseif ($token->isClassy()) {
-                if (null !== $classyName) {
-                    return;
-                }
-
                 $prevToken = $tokens[$tokens->getPrevMeaningfulToken($index)];
                 if ($prevToken->isGivenKind(T_NEW)) {
                     return;
@@ -75,6 +71,8 @@ class InvalidName {}
 
                 $classyIndex = $tokens->getNextMeaningfulToken($index);
                 $classyName = $tokens[$classyIndex]->getContent();
+
+                break;
             }
         }
 
@@ -82,7 +80,7 @@ class InvalidName {}
             return;
         }
 
-        if (false !== $namespace) {
+        if ($isNamespaceFound) {
             $filename = basename(str_replace('\\', '/', $file->getRealPath()), '.php');
 
             if ($classyName !== $filename) {

+ 29 - 0
tests/Fixer/Basic/Psr4FixerTest.php

@@ -163,6 +163,35 @@ EOF;
         $this->doTest($expected, null, $file);
     }
 
+    /**
+     * @requires PHP 7.0
+     */
+    public function testClassWithAnonymousClass()
+    {
+        $file = $this->getTestFile(__FILE__);
+
+        $expected = <<<'EOF'
+<?php
+namespace PhpCsFixer\Tests\Fixer\Basic;
+class Psr4FixerTest {
+    public function foo() {
+        return new class() implements FooInterface {};
+    }
+}
+EOF;
+        $input = <<<'EOF'
+<?php
+namespace PhpCsFixer\Tests\Fixer\Basic;
+class stdClass {
+    public function foo() {
+        return new class() implements FooInterface {};
+    }
+}
+EOF;
+
+        $this->doTest($expected, $input, $file);
+    }
+
     /**
      * @requires PHP 7.0
      */