Browse Source

ReturnAssignmentFixer - Support more cases

Julien Falque 5 years ago
parent
commit
566b69e99e

+ 10 - 0
src/Fixer/ReturnNotation/ReturnAssignmentFixer.php

@@ -221,6 +221,16 @@ final class ReturnAssignmentFixer extends AbstractFixer
             }
 
             // Note: here we are @ "; return $a;" (or "; return $a ? >")
+            do {
+                $prevMeaningFul = $tokens->getPrevMeaningfulToken($assignVarEndIndex);
+
+                if (!$tokens[$prevMeaningFul]->equals(')')) {
+                    break;
+                }
+
+                $assignVarEndIndex = $tokens->findBlockStart(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $prevMeaningFul);
+            } while (true);
+
             $assignVarOperatorIndex = $tokens->getPrevTokenOfKind(
                 $assignVarEndIndex,
                 ['=', ';', '{', [T_OPEN_TAG], [T_OPEN_TAG_WITH_ECHO]]

+ 2 - 6
tests/AutoReview/TravisTest.php

@@ -113,11 +113,9 @@ final class TravisTest extends TestCase
             return 'Deployment' === $job['stage'];
         });
 
-        $versions = array_map(function ($job) {
+        return array_map(function ($job) {
             return (string) $job['php'];
         }, $jobs);
-
-        return $versions;
     }
 
     private function getAllPhpVersionsUsedByCiForTests()
@@ -126,11 +124,9 @@ final class TravisTest extends TestCase
             return false !== strpos($job['stage'], 'Test');
         });
 
-        $versions = array_map(function ($job) {
+        return array_map(function ($job) {
             return (string) $job['php'];
         }, $jobs);
-
-        return $versions;
     }
 
     private function convertPhpVerIdToNiceVer($verId)

+ 62 - 0
tests/Fixer/ReturnNotation/ReturnAssignmentFixerTest.php

@@ -407,6 +407,68 @@ var names are case insensitive */ }
 var names are case insensitive */ return $a   ;}
                 ',
             ],
+            [
+                '<?php
+                    function a($foos) {
+                        return array_map(function ($foo) {
+                            return (string) $foo;
+                        }, $foos);
+                    }',
+                '<?php
+                    function a($foos) {
+                        $bars = array_map(function ($foo) {
+                            return (string) $foo;
+                        }, $foos);
+
+                        return $bars;
+                    }',
+            ],
+            [
+                '<?php
+                    function a($foos) {
+                        return ($foos = [\'bar\']);
+                    }',
+                '<?php
+                    function a($foos) {
+                        $bars = ($foos = [\'bar\']);
+
+                        return $bars;
+                    }',
+            ],
+        ];
+    }
+
+    /**
+     * @dataProvider provideFix70Cases
+     * @requires PHP 7.0
+     *
+     * @param string $expected
+     * @param string $input
+     */
+    public function testFix70($expected, $input)
+    {
+        $this->doTest($expected, $input);
+    }
+
+    public function provideFix70Cases()
+    {
+        return [
+            [
+                '<?php
+                    function a($foos) {
+                        return (function ($foos) {
+                            return $foos;
+                        })($foos);
+                    }',
+                '<?php
+                    function a($foos) {
+                        $bars = (function ($foos) {
+                            return $foos;
+                        })($foos);
+
+                        return $bars;
+                    }',
+            ],
         ];
     }