Browse Source

handle goto labels

SpacePossum 4 years ago
parent
commit
a99775c986

+ 26 - 0
src/Fixer/Operator/OperatorLinebreakFixer.php

@@ -137,6 +137,10 @@ function foo() {
                 continue;
             }
 
+            if ($this->belongsToGoToLabel($tokens, $index)) {
+                continue;
+            }
+
             if ($referenceAnalyzer->isReference($tokens, $index)) {
                 continue;
             }
@@ -311,4 +315,26 @@ function foo() {
 
         return false;
     }
+
+    /**
+     * @param int $index
+     *
+     * @return bool
+     */
+    private function belongsToGoToLabel(Tokens $tokens, $index)
+    {
+        if (!$tokens[$index]->equals(':')) {
+            return false;
+        }
+
+        $prevMeaningfulTokenIndex = $tokens->getPrevMeaningfulToken($index);
+
+        if (!$tokens[$prevMeaningfulTokenIndex]->isGivenKind(T_STRING)) {
+            return false;
+        }
+
+        $prevMeaningfulTokenIndex = $tokens->getPrevMeaningfulToken($prevMeaningfulTokenIndex);
+
+        return $tokens[$prevMeaningfulTokenIndex]->equalsAny([';', '{', '}', [T_OPEN_TAG]]);
+    }
 }

+ 20 - 0
tests/Fixer/Operator/OperatorLinebreakFixerTest.php

@@ -185,6 +185,11 @@ return $foo
                 {};',
             ];
         }
+
+        yield 'go to' => ['<?php
+                prepare_value:
+                $objectsPool[$value] = [$id = \count($objectsPool)];
+        '];
     }
 
     /**
@@ -291,6 +296,21 @@ return $foo ||
 ',
         ];
 
+        yield 'handle multiple operators with nested' => [
+            '<?php
+return $foo
+    || $bar
+    || ($bar2 || $bar3)
+    || $baz;
+',
+            '<?php
+return $foo ||
+    $bar ||
+    ($bar2 || $bar3) ||
+    $baz;
+',
+        ];
+
         yield 'handle operator when no whitespace is before' => [
             '<?php
 function foo() {