Browse Source

feat: `PhpdocTypesOrderFixer` Support DNF types (#7732)

Co-authored-by: Greg Korba <greg@codito.dev>
Simon 1 year ago
parent
commit
1d34bb2e06

+ 1 - 1
src/Fixer/Phpdoc/PhpdocTypesOrderFixer.php

@@ -169,7 +169,7 @@ final class PhpdocTypesOrderFixer extends AbstractFixer implements ConfigurableF
      */
     private function sortTypes(TypeExpression $typeExpression): array
     {
-        $normalizeType = static fn (string $type): string => Preg::replace('/^\\??\\\?/', '', $type);
+        $normalizeType = static fn (string $type): string => Preg::replace('/^\(*\??\\\?/', '', $type);
 
         $typeExpression->sortTypes(
             function (TypeExpression $a, TypeExpression $b) use ($normalizeType): int {

+ 30 - 0
tests/Fixer/Phpdoc/PhpdocTypesOrderFixerTest.php

@@ -522,6 +522,36 @@ final class PhpdocTypesOrderFixerTest extends AbstractFixerTestCase
             '<?php /** @return A&B<X|Y|Z>&C&D */',
             '<?php /** @return A&D&B<X|Y|Z>&C */',
         ];
+
+        yield [
+            '<?php /** @param A|(B&C) */',
+            '<?php /** @param (C&B)|A */',
+        ];
+
+        yield [
+            '<?php /** @param A|((A&B)|(B&C)) */',
+            '<?php /** @param ((B&C)|(B&A))|A */',
+        ];
+
+        yield [
+            '<?php /** @param A&(B&C) */',
+            '<?php /** @param (C&B)&A */',
+        ];
+
+        yield [
+            '<?php /** @param (A&C)|(B&C)|(C&D) */',
+            '<?php /** @param (C&A)|(C&B)|(C&D) */',
+        ];
+
+        yield [
+            '<?php /** @param \A|(\B&\C)|D */',
+            '<?php /** @param D|\A|(\C&\B) */',
+        ];
+
+        yield [
+            '<?php /** @param A|((B&C)|D) */',
+            '<?php /** @param (D|(C&B))|A */',
+        ];
     }
 
     /**