Explorar el Código

修改b端接口:获取项目列表、获取企业列表

15313670163 hace 6 meses
padre
commit
368729970f
Se han modificado 100 ficheros con 2021 adiciones y 1242 borrados
  1. 4 1
      app/JsonRpc/NewsService.php
  2. 194 154
      composer.lock
  3. 17 0
      vendor/brick/math/CHANGELOG.md
  4. 14 5
      vendor/brick/math/src/BigDecimal.php
  5. 4 0
      vendor/brick/math/src/BigInteger.php
  6. 1 1
      vendor/brick/math/src/Exception/MathException.php
  7. 13 2
      vendor/composer/autoload_classmap.php
  8. 1 1
      vendor/composer/autoload_files.php
  9. 2 2
      vendor/composer/autoload_psr4.php
  10. 20 9
      vendor/composer/autoload_static.php
  11. 206 166
      vendor/composer/installed.json
  12. 104 104
      vendor/composer/installed.php
  13. 34 10
      vendor/fidry/cpu-core-counter/README.md
  14. 179 0
      vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php
  15. 4 2
      vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php
  16. 5 2
      vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php
  17. 7 4
      vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php
  18. 321 0
      vendor/friendsofphp/php-cs-fixer/CHANGELOG.md
  19. 5 26
      vendor/friendsofphp/php-cs-fixer/README.md
  20. 31 22
      vendor/friendsofphp/php-cs-fixer/composer.json
  21. 17 11
      vendor/friendsofphp/php-cs-fixer/php-cs-fixer
  22. 8 4
      vendor/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php
  23. 1 4
      vendor/friendsofphp/php-cs-fixer/src/AbstractFixer.php
  24. 1 4
      vendor/friendsofphp/php-cs-fixer/src/AbstractFunctionReferenceFixer.php
  25. 13 3
      vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php
  26. 17 35
      vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocTypesFixer.php
  27. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Cache/Directory.php
  28. 3 6
      vendor/friendsofphp/php-cs-fixer/src/Cache/FileCacheManager.php
  29. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Cache/Signature.php
  30. 25 5
      vendor/friendsofphp/php-cs-fixer/src/Config.php
  31. 23 1
      vendor/friendsofphp/php-cs-fixer/src/ConfigInterface.php
  32. 5 2
      vendor/friendsofphp/php-cs-fixer/src/Console/Application.php
  33. 0 2
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/CheckCommand.php
  34. 3 4
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php
  35. 0 1
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php
  36. 9 7
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php
  37. 0 1
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/HelpCommand.php
  38. 0 1
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListFilesCommand.php
  39. 0 1
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php
  40. 0 1
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php
  41. 7 9
      vendor/friendsofphp/php-cs-fixer/src/Console/Command/WorkerCommand.php
  42. 60 72
      vendor/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php
  43. 3 4
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php
  44. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/OutputContext.php
  45. 14 17
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/DotsOutput.php
  46. 4 2
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/NullOutput.php
  47. 4 2
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/PercentageBarOutput.php
  48. 11 3
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputFactory.php
  49. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputInterface.php
  50. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.php
  51. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/GitlabReporter.php
  52. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php
  53. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php
  54. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReportSummary.php
  55. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php
  56. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/XmlReporter.php
  57. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/JsonReporter.php
  58. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReportSummary.php
  59. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php
  60. 8 1
      vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php
  61. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionChecker.php
  62. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php
  63. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Differ/FullDiffer.php
  64. 32 25
      vendor/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php
  65. 1 1
      vendor/friendsofphp/php-cs-fixer/src/DocBlock/DocBlock.php
  66. 2 0
      vendor/friendsofphp/php-cs-fixer/src/DocBlock/ShortDescription.php
  67. 205 60
      vendor/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php
  68. 6 8
      vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/DocLexer.php
  69. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php
  70. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php
  71. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Documentation/RuleSetDocumentationGenerator.php
  72. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Error/Error.php
  73. 2 0
      vendor/friendsofphp/php-cs-fixer/src/Error/SourceExceptionFactory.php
  74. 1 4
      vendor/friendsofphp/php-cs-fixer/src/FileReader.php
  75. 27 26
      vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php
  76. 1 1
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/BacktickToShellExecFixer.php
  77. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php
  78. 58 19
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/MbStrFunctionsFixer.php
  79. 112 7
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ModernizeStrposFixer.php
  80. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php
  81. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php
  82. 7 5
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php
  83. 0 1
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php
  84. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php
  85. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php
  86. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php
  87. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/AttributeEmptyParenthesesFixer.php
  88. 20 71
      vendor/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/OrderedAttributesFixer.php
  89. 4 10
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php
  90. 19 7
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesPositionFixer.php
  91. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php
  92. 10 0
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php
  93. 3 3
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php
  94. 10 10
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php
  95. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NumericLiteralSeparatorFixer.php
  96. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php
  97. 2 2
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php
  98. 1 6
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseKeywordsFixer.php
  99. 9 4
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.php
  100. 26 235
      vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeTypeDeclarationCasingFixer.php

+ 4 - 1
app/JsonRpc/NewsService.php

@@ -6015,6 +6015,7 @@ class NewsService implements NewsServiceInterface
           'website_category.alias as category_name',
           'company.status',
           'company.updated_at',
+          'company.user_id'
         )
         ->orderBy('company.updated_at', 'desc')
         ->paginate($data['pageSize'], ['*'], 'page', $data['page']);
@@ -6314,7 +6315,9 @@ class NewsService implements NewsServiceInterface
         'project.updated_at',
         'project.status',
         'website.website_name',
-        'website_category.alias as category_name'
+        'website_category.alias as category_name',
+        'project.website_id',
+        'project.user_id'
       )
       ->orderBy('project.updated_at', 'desc')
       ->offset(($data['page'] - 1) * $data['pageSize'])

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 194 - 154
composer.lock


+ 17 - 0
vendor/brick/math/CHANGELOG.md

@@ -2,6 +2,23 @@
 
 All notable changes to this project will be documented in this file.
 
+## [0.13.1](https://github.com/brick/math/releases/tag/0.13.1) - 2025-03-29
+
+✨ **Improvements**
+
+- `__toString()` methods of `BigInteger` and `BigDecimal` are now type-hinted as returning `numeric-string` instead of `string` (#90 by @vudaltsov)
+
+## [0.13.0](https://github.com/brick/math/releases/tag/0.13.0) - 2025-03-03
+
+💥 **Breaking changes**
+
+- `BigDecimal::ofUnscaledValue()` no longer throws an exception if the scale is negative
+- `MathException` now extends `RuntimeException` instead of `Exception`; this reverts the change introduced in version `0.11.0` (#82)
+
+✨ **New features**
+
+- `BigDecimal::ofUnscaledValue()` allows a negative scale (and converts the values to create a zero scale number)
+
 ## [0.12.3](https://github.com/brick/math/releases/tag/0.12.3) - 2025-02-28
 
 ✨ **New features**

+ 14 - 5
vendor/brick/math/src/BigDecimal.php

@@ -60,19 +60,23 @@ final class BigDecimal extends BigNumber
      * Example: `(12345, 3)` will result in the BigDecimal `12.345`.
      *
      * @param BigNumber|int|float|string $value The unscaled value. Must be convertible to a BigInteger.
-     * @param int                        $scale The scale of the number, positive or zero.
-     *
-     * @throws \InvalidArgumentException If the scale is negative.
+     * @param int                        $scale The scale of the number. If negative, the scale will be set to zero
+     *                                          and the unscaled value will be adjusted accordingly.
      *
      * @psalm-pure
      */
     public static function ofUnscaledValue(BigNumber|int|float|string $value, int $scale = 0) : BigDecimal
     {
+        $value = (string) BigInteger::of($value);
+
         if ($scale < 0) {
-            throw new \InvalidArgumentException('The scale cannot be negative.');
+            if ($value !== '0') {
+                $value .= \str_repeat('0', -$scale);
+            }
+            $scale = 0;
         }
 
-        return new BigDecimal((string) BigInteger::of($value), $scale);
+        return new BigDecimal($value, $scale);
     }
 
     /**
@@ -685,15 +689,20 @@ final class BigDecimal extends BigNumber
         return (float) (string) $this;
     }
 
+    /**
+     * @return numeric-string
+     */
     #[Override]
     public function __toString() : string
     {
         if ($this->scale === 0) {
+            /** @var numeric-string */
             return $this->value;
         }
 
         $value = $this->getUnscaledValueWithLeadingZeros();
 
+        /** @var numeric-string */
         return \substr($value, 0, -$this->scale) . '.' . \substr($value, -$this->scale);
     }
 

+ 4 - 0
vendor/brick/math/src/BigInteger.php

@@ -1023,9 +1023,13 @@ final class BigInteger extends BigNumber
         return \hex2bin($hex);
     }
 
+    /**
+     * @return numeric-string
+     */
     #[Override]
     public function __toString() : string
     {
+        /** @var numeric-string */
         return $this->value;
     }
 

+ 1 - 1
vendor/brick/math/src/Exception/MathException.php

@@ -7,6 +7,6 @@ namespace Brick\Math\Exception;
 /**
  * Base class for all math exceptions.
  */
-class MathException extends \Exception
+class MathException extends \RuntimeException
 {
 }

+ 13 - 2
vendor/composer/autoload_classmap.php

@@ -40,9 +40,11 @@ return array(
     'App\\Model\\JobPosition' => $baseDir . '/app/Model/JobPosition.php',
     'App\\Model\\JobRecruiting' => $baseDir . '/app/Model/JobRecruiting.php',
     'App\\Model\\JobRemuse' => $baseDir . '/app/Model/JobRemuse.php',
+    'App\\Model\\JobResume' => $baseDir . '/app/Model/JobResume.php',
     'App\\Model\\Link' => $baseDir . '/app/Model/Link.php',
     'App\\Model\\Model' => $baseDir . '/app/Model/Model.php',
     'App\\Model\\Notice' => $baseDir . '/app/Model/Notice.php',
+    'App\\Model\\Project' => $baseDir . '/app/Model/Project.php',
     'App\\Model\\Riddle' => $baseDir . '/app/Model/Riddle.php',
     'App\\Model\\User' => $baseDir . '/app/Model/User.php',
     'App\\Model\\UserInfo' => $baseDir . '/app/Model/UserInfo.php',
@@ -53,6 +55,7 @@ return array(
     'App\\Model\\WebsiteGroup' => $baseDir . '/app/Model/WebsiteGroup.php',
     'App\\Model\\WebsiteRole' => $baseDir . '/app/Model/WebsiteRole.php',
     'App\\Model\\WebsiteRoleUser' => $baseDir . '/app/Model/WebsiteRoleUser.php',
+    'App\\Model\\WhiteRouter' => $baseDir . '/app/Model/WhiteRouter.php',
     'App\\Tools\\PublicData' => $baseDir . '/app/Tools/PublicData.php',
     'App\\Tools\\Result' => $baseDir . '/app/Tools/Result.php',
     'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
@@ -363,6 +366,7 @@ return array(
     'Fidry\\CpuCoreCounter\\Finder\\CpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\CpuInfoFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\DummyCpuCoreFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php',
+    'Fidry\\CpuCoreCounter\\Finder\\EnvVariableFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/EnvVariableFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\FinderRegistry' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/FinderRegistry.php',
     'Fidry\\CpuCoreCounter\\Finder\\HwLogicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\HwPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php',
@@ -380,6 +384,7 @@ return array(
     'Fidry\\CpuCoreCounter\\Finder\\WmicPhysicalFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php',
     'Fidry\\CpuCoreCounter\\Finder\\_NProcessorFinder' => $vendorDir . '/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php',
     'Fidry\\CpuCoreCounter\\NumberOfCpuCoreNotFound' => $vendorDir . '/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php',
+    'Fidry\\CpuCoreCounter\\ParallelisationResult' => $vendorDir . '/fidry/cpu-core-counter/src/ParallelisationResult.php',
     'Fig\\Http\\Message\\RequestMethodInterface' => $vendorDir . '/fig/http-message-util/src/RequestMethodInterface.php',
     'Fig\\Http\\Message\\StatusCodeInterface' => $vendorDir . '/fig/http-message-util/src/StatusCodeInterface.php',
     'Fukuball\\Jieba\\Finalseg' => $vendorDir . '/fukuball/jieba-php/src/class/Finalseg.php',
@@ -733,6 +738,7 @@ return array(
     'Hyperf\\Coordinator\\CoordinatorManager' => $vendorDir . '/hyperf/coordinator/src/CoordinatorManager.php',
     'Hyperf\\Coordinator\\Listener\\ResumeExitCoordinatorListener' => $vendorDir . '/hyperf/coordinator/src/Listener/ResumeExitCoordinatorListener.php',
     'Hyperf\\Coordinator\\Timer' => $vendorDir . '/hyperf/coordinator/src/Timer.php',
+    'Hyperf\\Coroutine\\Barrier' => $vendorDir . '/hyperf/coroutine/src/Barrier.php',
     'Hyperf\\Coroutine\\Channel\\Caller' => $vendorDir . '/hyperf/coroutine/src/Channel/Caller.php',
     'Hyperf\\Coroutine\\Channel\\Manager' => $vendorDir . '/hyperf/coroutine/src/Channel/Manager.php',
     'Hyperf\\Coroutine\\Channel\\Pool' => $vendorDir . '/hyperf/coroutine/src/Channel/Pool.php',
@@ -3402,7 +3408,6 @@ return array(
     'PhpCsFixer\\FixerDefinition\\VersionSpecification' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecification.php',
     'PhpCsFixer\\FixerDefinition\\VersionSpecificationInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificationInterface.php',
     'PhpCsFixer\\FixerFactory' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerFactory.php',
-    'PhpCsFixer\\FixerFileProcessedEvent' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerFileProcessedEvent.php',
     'PhpCsFixer\\FixerNameValidator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/FixerNameValidator.php',
     'PhpCsFixer\\Fixer\\AbstractIncrementOperatorFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php',
     'PhpCsFixer\\Fixer\\AbstractPhpUnitFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php',
@@ -3428,6 +3433,7 @@ return array(
     'PhpCsFixer\\Fixer\\ArrayNotation\\WhitespaceAfterCommaInArrayFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php',
     'PhpCsFixer\\Fixer\\ArrayNotation\\YieldFromArrayToYieldsFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/YieldFromArrayToYieldsFixer.php',
     'PhpCsFixer\\Fixer\\AttributeNotation\\AttributeEmptyParenthesesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/AttributeEmptyParenthesesFixer.php',
+    'PhpCsFixer\\Fixer\\AttributeNotation\\GeneralAttributeRemoveFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/GeneralAttributeRemoveFixer.php',
     'PhpCsFixer\\Fixer\\AttributeNotation\\OrderedAttributesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/OrderedAttributesFixer.php',
     'PhpCsFixer\\Fixer\\Basic\\BracesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php',
     'PhpCsFixer\\Fixer\\Basic\\BracesPositionFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesPositionFixer.php',
@@ -3602,6 +3608,7 @@ return array(
     'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitAssertNewNamesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitAssertNewNamesFixer.php',
     'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitAttributesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitAttributesFixer.php',
     'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitConstructFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitConstructFixer.php',
+    'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderMethodOrderFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderMethodOrderFixer.php',
     'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderNameFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderNameFixer.php',
     'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderReturnTypeFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderReturnTypeFixer.php',
     'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderStaticFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderStaticFixer.php',
@@ -3701,6 +3708,7 @@ return array(
     'PhpCsFixer\\Fixer\\Whitespace\\TypeDeclarationSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypeDeclarationSpacesFixer.php',
     'PhpCsFixer\\Fixer\\Whitespace\\TypesSpacesFixer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.php',
     'PhpCsFixer\\Fixer\\WhitespacesAwareFixerInterface' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php',
+    'PhpCsFixer\\Hasher' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Hasher.php',
     'PhpCsFixer\\Indicator\\PhpUnitTestCaseIndicator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php',
     'PhpCsFixer\\Linter\\CachingLinter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/CachingLinter.php',
     'PhpCsFixer\\Linter\\Linter' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Linter/Linter.php',
@@ -3746,6 +3754,7 @@ return array(
     'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationRiskySet.php',
     'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.php',
     'PhpCsFixer\\RuleSet\\Sets\\PHP81MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP81MigrationSet.php',
+    'PhpCsFixer\\RuleSet\\Sets\\PHP82MigrationRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationRiskySet.php',
     'PhpCsFixer\\RuleSet\\Sets\\PHP82MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php',
     'PhpCsFixer\\RuleSet\\Sets\\PHP83MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP83MigrationSet.php',
     'PhpCsFixer\\RuleSet\\Sets\\PHP84MigrationSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP84MigrationSet.php',
@@ -3773,6 +3782,8 @@ return array(
     'PhpCsFixer\\RuleSet\\Sets\\PhpCsFixerSet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerSet.php',
     'PhpCsFixer\\RuleSet\\Sets\\SymfonyRiskySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonyRiskySet.php',
     'PhpCsFixer\\RuleSet\\Sets\\SymfonySet' => $vendorDir . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonySet.php',
+    'PhpCsFixer\\Runner\\Event\\AnalysisStarted' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Runner/Event/AnalysisStarted.php',
+    'PhpCsFixer\\Runner\\Event\\FileProcessed' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Runner/Event/FileProcessed.php',
     'PhpCsFixer\\Runner\\FileCachingLintingFileIterator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Runner/FileCachingLintingFileIterator.php',
     'PhpCsFixer\\Runner\\FileFilterIterator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Runner/FileFilterIterator.php',
     'PhpCsFixer\\Runner\\LintingFileIterator' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Runner/LintingFileIterator.php',
@@ -3812,6 +3823,7 @@ return array(
     'PhpCsFixer\\Tokenizer\\Analyzer\\CommentsAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/CommentsAnalyzer.php',
     'PhpCsFixer\\Tokenizer\\Analyzer\\ControlCaseStructuresAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php',
     'PhpCsFixer\\Tokenizer\\Analyzer\\DataProviderAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/DataProviderAnalyzer.php',
+    'PhpCsFixer\\Tokenizer\\Analyzer\\FullyQualifiedNameAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FullyQualifiedNameAnalyzer.php',
     'PhpCsFixer\\Tokenizer\\Analyzer\\FunctionsAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.php',
     'PhpCsFixer\\Tokenizer\\Analyzer\\GotoLabelAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/GotoLabelAnalyzer.php',
     'PhpCsFixer\\Tokenizer\\Analyzer\\NamespaceUsesAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php',
@@ -3821,7 +3833,6 @@ return array(
     'PhpCsFixer\\Tokenizer\\Analyzer\\SwitchAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/SwitchAnalyzer.php',
     'PhpCsFixer\\Tokenizer\\Analyzer\\WhitespacesAnalyzer' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/WhitespacesAnalyzer.php',
     'PhpCsFixer\\Tokenizer\\CT' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/CT.php',
-    'PhpCsFixer\\Tokenizer\\CodeHasher' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/CodeHasher.php',
     'PhpCsFixer\\Tokenizer\\Processor\\ImportProcessor' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Processor/ImportProcessor.php',
     'PhpCsFixer\\Tokenizer\\Token' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Token.php',
     'PhpCsFixer\\Tokenizer\\Tokens' => $vendorDir . '/friendsofphp/php-cs-fixer/src/Tokenizer/Tokens.php',

+ 1 - 1
vendor/composer/autoload_files.php

@@ -7,9 +7,9 @@ $baseDir = dirname($vendorDir);
 
 return array(
     '9c7a683baffd24f5595c1dc5f5273030' => $vendorDir . '/hyperf/engine/src/Functions.php',
-    'f0334cce41da231af374e1df9dc548c9' => $vendorDir . '/hyperf/collection/src/Functions.php',
     '3ac0459b8c20ccf3a7319b7cba59c914' => $vendorDir . '/hyperf/tappable/src/Functions.php',
     'e45471c4161dad9820dfacbc5735c3f5' => $vendorDir . '/hyperf/stringable/src/Functions.php',
+    'f0334cce41da231af374e1df9dc548c9' => $vendorDir . '/hyperf/collection/src/Functions.php',
     '6c17036e92b20070dc14f563311a06a3' => $vendorDir . '/hyperf/coroutine/src/Functions.php',
     'ffe5873ab2256a6c3a4c92b3488528cb' => $vendorDir . '/hyperf/support/src/Functions.php',
     '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',

+ 2 - 2
vendor/composer/autoload_psr4.php

@@ -39,7 +39,7 @@ return array(
     'Ramsey\\Collection\\' => array($vendorDir . '/ramsey/collection/src'),
     'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
     'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
-    'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-middleware/src', $vendorDir . '/psr/http-server-handler/src'),
+    'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'),
     'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'),
     'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'),
     'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'),
@@ -56,7 +56,7 @@ return array(
     'Laminas\\Stdlib\\' => array($vendorDir . '/laminas/laminas-stdlib/src'),
     'Laminas\\Mime\\' => array($vendorDir . '/laminas/laminas-mime/src'),
     'JetBrains\\PhpStorm\\' => array($vendorDir . '/jetbrains/phpstorm-attributes/src'),
-    'Illuminate\\Support\\' => array($vendorDir . '/illuminate/support', $vendorDir . '/illuminate/collections', $vendorDir . '/illuminate/conditionable', $vendorDir . '/illuminate/macroable'),
+    'Illuminate\\Support\\' => array($vendorDir . '/illuminate/collections', $vendorDir . '/illuminate/conditionable', $vendorDir . '/illuminate/macroable', $vendorDir . '/illuminate/support'),
     'Illuminate\\Contracts\\' => array($vendorDir . '/illuminate/contracts'),
     'Illuminate\\Cache\\' => array($vendorDir . '/illuminate/cache'),
     'Hyperf\\Watcher\\' => array($vendorDir . '/hyperf/watcher/src'),

+ 20 - 9
vendor/composer/autoload_static.php

@@ -8,9 +8,9 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
 {
     public static $files = array (
         '9c7a683baffd24f5595c1dc5f5273030' => __DIR__ . '/..' . '/hyperf/engine/src/Functions.php',
-        'f0334cce41da231af374e1df9dc548c9' => __DIR__ . '/..' . '/hyperf/collection/src/Functions.php',
         '3ac0459b8c20ccf3a7319b7cba59c914' => __DIR__ . '/..' . '/hyperf/tappable/src/Functions.php',
         'e45471c4161dad9820dfacbc5735c3f5' => __DIR__ . '/..' . '/hyperf/stringable/src/Functions.php',
+        'f0334cce41da231af374e1df9dc548c9' => __DIR__ . '/..' . '/hyperf/collection/src/Functions.php',
         '6c17036e92b20070dc14f563311a06a3' => __DIR__ . '/..' . '/hyperf/coroutine/src/Functions.php',
         'ffe5873ab2256a6c3a4c92b3488528cb' => __DIR__ . '/..' . '/hyperf/support/src/Functions.php',
         '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
@@ -359,8 +359,8 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         ),
         'Psr\\Http\\Server\\' => 
         array (
-            0 => __DIR__ . '/..' . '/psr/http-server-middleware/src',
-            1 => __DIR__ . '/..' . '/psr/http-server-handler/src',
+            0 => __DIR__ . '/..' . '/psr/http-server-handler/src',
+            1 => __DIR__ . '/..' . '/psr/http-server-middleware/src',
         ),
         'Psr\\Http\\Message\\' => 
         array (
@@ -429,10 +429,10 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         ),
         'Illuminate\\Support\\' => 
         array (
-            0 => __DIR__ . '/..' . '/illuminate/support',
-            1 => __DIR__ . '/..' . '/illuminate/collections',
-            2 => __DIR__ . '/..' . '/illuminate/conditionable',
-            3 => __DIR__ . '/..' . '/illuminate/macroable',
+            0 => __DIR__ . '/..' . '/illuminate/collections',
+            1 => __DIR__ . '/..' . '/illuminate/conditionable',
+            2 => __DIR__ . '/..' . '/illuminate/macroable',
+            3 => __DIR__ . '/..' . '/illuminate/support',
         ),
         'Illuminate\\Contracts\\' => 
         array (
@@ -791,9 +791,11 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'App\\Model\\JobPosition' => __DIR__ . '/../..' . '/app/Model/JobPosition.php',
         'App\\Model\\JobRecruiting' => __DIR__ . '/../..' . '/app/Model/JobRecruiting.php',
         'App\\Model\\JobRemuse' => __DIR__ . '/../..' . '/app/Model/JobRemuse.php',
+        'App\\Model\\JobResume' => __DIR__ . '/../..' . '/app/Model/JobResume.php',
         'App\\Model\\Link' => __DIR__ . '/../..' . '/app/Model/Link.php',
         'App\\Model\\Model' => __DIR__ . '/../..' . '/app/Model/Model.php',
         'App\\Model\\Notice' => __DIR__ . '/../..' . '/app/Model/Notice.php',
+        'App\\Model\\Project' => __DIR__ . '/../..' . '/app/Model/Project.php',
         'App\\Model\\Riddle' => __DIR__ . '/../..' . '/app/Model/Riddle.php',
         'App\\Model\\User' => __DIR__ . '/../..' . '/app/Model/User.php',
         'App\\Model\\UserInfo' => __DIR__ . '/../..' . '/app/Model/UserInfo.php',
@@ -804,6 +806,7 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'App\\Model\\WebsiteGroup' => __DIR__ . '/../..' . '/app/Model/WebsiteGroup.php',
         'App\\Model\\WebsiteRole' => __DIR__ . '/../..' . '/app/Model/WebsiteRole.php',
         'App\\Model\\WebsiteRoleUser' => __DIR__ . '/../..' . '/app/Model/WebsiteRoleUser.php',
+        'App\\Model\\WhiteRouter' => __DIR__ . '/../..' . '/app/Model/WhiteRouter.php',
         'App\\Tools\\PublicData' => __DIR__ . '/../..' . '/app/Tools/PublicData.php',
         'App\\Tools\\Result' => __DIR__ . '/../..' . '/app/Tools/Result.php',
         'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
@@ -1114,6 +1117,7 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'Fidry\\CpuCoreCounter\\Finder\\CpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CpuCoreFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\CpuInfoFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\DummyCpuCoreFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/DummyCpuCoreFinder.php',
+        'Fidry\\CpuCoreCounter\\Finder\\EnvVariableFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/EnvVariableFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\FinderRegistry' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/FinderRegistry.php',
         'Fidry\\CpuCoreCounter\\Finder\\HwLogicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/HwLogicalFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\HwPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/HwPhysicalFinder.php',
@@ -1131,6 +1135,7 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'Fidry\\CpuCoreCounter\\Finder\\WmicPhysicalFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/WmicPhysicalFinder.php',
         'Fidry\\CpuCoreCounter\\Finder\\_NProcessorFinder' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/Finder/_NProcessorFinder.php',
         'Fidry\\CpuCoreCounter\\NumberOfCpuCoreNotFound' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/NumberOfCpuCoreNotFound.php',
+        'Fidry\\CpuCoreCounter\\ParallelisationResult' => __DIR__ . '/..' . '/fidry/cpu-core-counter/src/ParallelisationResult.php',
         'Fig\\Http\\Message\\RequestMethodInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/RequestMethodInterface.php',
         'Fig\\Http\\Message\\StatusCodeInterface' => __DIR__ . '/..' . '/fig/http-message-util/src/StatusCodeInterface.php',
         'Fukuball\\Jieba\\Finalseg' => __DIR__ . '/..' . '/fukuball/jieba-php/src/class/Finalseg.php',
@@ -1484,6 +1489,7 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'Hyperf\\Coordinator\\CoordinatorManager' => __DIR__ . '/..' . '/hyperf/coordinator/src/CoordinatorManager.php',
         'Hyperf\\Coordinator\\Listener\\ResumeExitCoordinatorListener' => __DIR__ . '/..' . '/hyperf/coordinator/src/Listener/ResumeExitCoordinatorListener.php',
         'Hyperf\\Coordinator\\Timer' => __DIR__ . '/..' . '/hyperf/coordinator/src/Timer.php',
+        'Hyperf\\Coroutine\\Barrier' => __DIR__ . '/..' . '/hyperf/coroutine/src/Barrier.php',
         'Hyperf\\Coroutine\\Channel\\Caller' => __DIR__ . '/..' . '/hyperf/coroutine/src/Channel/Caller.php',
         'Hyperf\\Coroutine\\Channel\\Manager' => __DIR__ . '/..' . '/hyperf/coroutine/src/Channel/Manager.php',
         'Hyperf\\Coroutine\\Channel\\Pool' => __DIR__ . '/..' . '/hyperf/coroutine/src/Channel/Pool.php',
@@ -4153,7 +4159,6 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'PhpCsFixer\\FixerDefinition\\VersionSpecification' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecification.php',
         'PhpCsFixer\\FixerDefinition\\VersionSpecificationInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerDefinition/VersionSpecificationInterface.php',
         'PhpCsFixer\\FixerFactory' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerFactory.php',
-        'PhpCsFixer\\FixerFileProcessedEvent' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerFileProcessedEvent.php',
         'PhpCsFixer\\FixerNameValidator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/FixerNameValidator.php',
         'PhpCsFixer\\Fixer\\AbstractIncrementOperatorFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractIncrementOperatorFixer.php',
         'PhpCsFixer\\Fixer\\AbstractPhpUnitFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php',
@@ -4179,6 +4184,7 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'PhpCsFixer\\Fixer\\ArrayNotation\\WhitespaceAfterCommaInArrayFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php',
         'PhpCsFixer\\Fixer\\ArrayNotation\\YieldFromArrayToYieldsFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/YieldFromArrayToYieldsFixer.php',
         'PhpCsFixer\\Fixer\\AttributeNotation\\AttributeEmptyParenthesesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/AttributeEmptyParenthesesFixer.php',
+        'PhpCsFixer\\Fixer\\AttributeNotation\\GeneralAttributeRemoveFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/GeneralAttributeRemoveFixer.php',
         'PhpCsFixer\\Fixer\\AttributeNotation\\OrderedAttributesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/OrderedAttributesFixer.php',
         'PhpCsFixer\\Fixer\\Basic\\BracesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php',
         'PhpCsFixer\\Fixer\\Basic\\BracesPositionFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesPositionFixer.php',
@@ -4353,6 +4359,7 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitAssertNewNamesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitAssertNewNamesFixer.php',
         'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitAttributesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitAttributesFixer.php',
         'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitConstructFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitConstructFixer.php',
+        'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderMethodOrderFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderMethodOrderFixer.php',
         'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderNameFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderNameFixer.php',
         'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderReturnTypeFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderReturnTypeFixer.php',
         'PhpCsFixer\\Fixer\\PhpUnit\\PhpUnitDataProviderStaticFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/PhpUnit/PhpUnitDataProviderStaticFixer.php',
@@ -4452,6 +4459,7 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'PhpCsFixer\\Fixer\\Whitespace\\TypeDeclarationSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypeDeclarationSpacesFixer.php',
         'PhpCsFixer\\Fixer\\Whitespace\\TypesSpacesFixer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/Whitespace/TypesSpacesFixer.php',
         'PhpCsFixer\\Fixer\\WhitespacesAwareFixerInterface' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Fixer/WhitespacesAwareFixerInterface.php',
+        'PhpCsFixer\\Hasher' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Hasher.php',
         'PhpCsFixer\\Indicator\\PhpUnitTestCaseIndicator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Indicator/PhpUnitTestCaseIndicator.php',
         'PhpCsFixer\\Linter\\CachingLinter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/CachingLinter.php',
         'PhpCsFixer\\Linter\\Linter' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Linter/Linter.php',
@@ -4497,6 +4505,7 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationRiskySet.php',
         'PhpCsFixer\\RuleSet\\Sets\\PHP80MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP80MigrationSet.php',
         'PhpCsFixer\\RuleSet\\Sets\\PHP81MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP81MigrationSet.php',
+        'PhpCsFixer\\RuleSet\\Sets\\PHP82MigrationRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationRiskySet.php',
         'PhpCsFixer\\RuleSet\\Sets\\PHP82MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP82MigrationSet.php',
         'PhpCsFixer\\RuleSet\\Sets\\PHP83MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP83MigrationSet.php',
         'PhpCsFixer\\RuleSet\\Sets\\PHP84MigrationSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PHP84MigrationSet.php',
@@ -4524,6 +4533,8 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'PhpCsFixer\\RuleSet\\Sets\\PhpCsFixerSet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/PhpCsFixerSet.php',
         'PhpCsFixer\\RuleSet\\Sets\\SymfonyRiskySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonyRiskySet.php',
         'PhpCsFixer\\RuleSet\\Sets\\SymfonySet' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/RuleSet/Sets/SymfonySet.php',
+        'PhpCsFixer\\Runner\\Event\\AnalysisStarted' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Runner/Event/AnalysisStarted.php',
+        'PhpCsFixer\\Runner\\Event\\FileProcessed' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Runner/Event/FileProcessed.php',
         'PhpCsFixer\\Runner\\FileCachingLintingFileIterator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Runner/FileCachingLintingFileIterator.php',
         'PhpCsFixer\\Runner\\FileFilterIterator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Runner/FileFilterIterator.php',
         'PhpCsFixer\\Runner\\LintingFileIterator' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Runner/LintingFileIterator.php',
@@ -4563,6 +4574,7 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'PhpCsFixer\\Tokenizer\\Analyzer\\CommentsAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/CommentsAnalyzer.php',
         'PhpCsFixer\\Tokenizer\\Analyzer\\ControlCaseStructuresAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/ControlCaseStructuresAnalyzer.php',
         'PhpCsFixer\\Tokenizer\\Analyzer\\DataProviderAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/DataProviderAnalyzer.php',
+        'PhpCsFixer\\Tokenizer\\Analyzer\\FullyQualifiedNameAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FullyQualifiedNameAnalyzer.php',
         'PhpCsFixer\\Tokenizer\\Analyzer\\FunctionsAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/FunctionsAnalyzer.php',
         'PhpCsFixer\\Tokenizer\\Analyzer\\GotoLabelAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/GotoLabelAnalyzer.php',
         'PhpCsFixer\\Tokenizer\\Analyzer\\NamespaceUsesAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/NamespaceUsesAnalyzer.php',
@@ -4572,7 +4584,6 @@ class ComposerStaticInit93d050353fc587b1b1fb188f0a8c068c
         'PhpCsFixer\\Tokenizer\\Analyzer\\SwitchAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/SwitchAnalyzer.php',
         'PhpCsFixer\\Tokenizer\\Analyzer\\WhitespacesAnalyzer' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Analyzer/WhitespacesAnalyzer.php',
         'PhpCsFixer\\Tokenizer\\CT' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/CT.php',
-        'PhpCsFixer\\Tokenizer\\CodeHasher' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/CodeHasher.php',
         'PhpCsFixer\\Tokenizer\\Processor\\ImportProcessor' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Processor/ImportProcessor.php',
         'PhpCsFixer\\Tokenizer\\Token' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Token.php',
         'PhpCsFixer\\Tokenizer\\Tokens' => __DIR__ . '/..' . '/friendsofphp/php-cs-fixer/src/Tokenizer/Tokens.php',

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 206 - 166
vendor/composer/installed.json


+ 104 - 104
vendor/composer/installed.php

@@ -3,7 +3,7 @@
         'name' => 'hyperf/hyperf-skeleton',
         'pretty_version' => 'dev-master',
         'version' => 'dev-master',
-        'reference' => '9d12071cf0586267e5cb1c8008d745bd7632820e',
+        'reference' => '1be4553ed9a0a5c329bc2983be17f74f345fa1da',
         'type' => 'project',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
@@ -11,9 +11,9 @@
     ),
     'versions' => array(
         'brick/math' => array(
-            'pretty_version' => '0.12.3',
-            'version' => '0.12.3.0',
-            'reference' => '866551da34e9a618e64a819ee1e01c20d8a588ba',
+            'pretty_version' => '0.13.1',
+            'version' => '0.13.1.0',
+            'reference' => 'fc7ed316430118cc7836bf45faff18d5dfc8de04',
             'type' => 'library',
             'install_path' => __DIR__ . '/../brick/math',
             'aliases' => array(),
@@ -122,9 +122,9 @@
             'dev_requirement' => true,
         ),
         'fidry/cpu-core-counter' => array(
-            'pretty_version' => '1.1.0',
-            'version' => '1.1.0.0',
-            'reference' => 'f92996c4d5c1a696a6a970e20f7c4216200fcc42',
+            'pretty_version' => '1.2.0',
+            'version' => '1.2.0.0',
+            'reference' => '8520451a140d3f46ac33042715115e290cf5785f',
             'type' => 'library',
             'install_path' => __DIR__ . '/../fidry/cpu-core-counter',
             'aliases' => array(),
@@ -140,9 +140,9 @@
             'dev_requirement' => false,
         ),
         'friendsofphp/php-cs-fixer' => array(
-            'pretty_version' => 'v3.64.0',
-            'version' => '3.64.0.0',
-            'reference' => '58dd9c931c785a79739310aef5178928305ffa67',
+            'pretty_version' => 'v3.75.0',
+            'version' => '3.75.0.0',
+            'reference' => '399a128ff2fdaf4281e4e79b755693286cdf325c',
             'type' => 'application',
             'install_path' => __DIR__ . '/../friendsofphp/php-cs-fixer',
             'aliases' => array(),
@@ -203,9 +203,9 @@
             'dev_requirement' => true,
         ),
         'hyperf/cache' => array(
-            'pretty_version' => 'v3.1.56',
-            'version' => '3.1.56.0',
-            'reference' => '4848c733560941490d9bf3aa8605deb4cce8fbf1',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '40c786b5d1c85f41dd8692d7c3d9e2d187bce728',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/cache',
             'aliases' => array(),
@@ -257,45 +257,45 @@
             'dev_requirement' => false,
         ),
         'hyperf/config' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => '1df5e310aab752d6195f89f5cc98daf3cdc4bb6e',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => 'fb0b51ba1cb9fb1e688bbe18ac36d0a7e4d7901b',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/config',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/config-center' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => 'c96837394c842a0b1ece13b29ff972241021d4f3',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => 'bdc03fbcaada9d338bf40ccd96074574f30e5f52',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/config-center',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/config-nacos' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => 'f980296a1e8cdd1916433a99dcb98e6a1c49eb98',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '36e44c6e2eccc391d48dfffc65a98fcd62eeb6e9',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/config-nacos',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/constants' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => 'e1e1184779cd163f9603ce234e1ecccb6fe382ae',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '0b7f77ae9f54175163084096f60577627ffa55c4',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/constants',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/consul' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => '12888dddd5bd4acebb6e4ca9729b3401dafa64ef',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '1e9cf202dc5bcc763c941ad48a1046fcd8d235c9',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/consul',
             'aliases' => array(),
@@ -338,36 +338,36 @@
             'dev_requirement' => false,
         ),
         'hyperf/database' => array(
-            'pretty_version' => 'v3.1.56',
-            'version' => '3.1.56.0',
-            'reference' => 'a4e5f11df6a74337836f1690c05506adf6e82f0f',
+            'pretty_version' => 'v3.1.58',
+            'version' => '3.1.58.0',
+            'reference' => 'fe2bdefd2800d446a7e75aa9016d1fd52a583f7c',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/database',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/db-connection' => array(
-            'pretty_version' => 'v3.1.44',
-            'version' => '3.1.44.0',
-            'reference' => '95dbb713fda5556106b803d0201e1631645985b5',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '2b7ac3e322698e3e97f46556008cd197ef318d4d',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/db-connection',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/devtool' => array(
-            'pretty_version' => 'v3.1.51',
-            'version' => '3.1.51.0',
-            'reference' => 'b032916fa51293f894046754f596f7d6d71352df',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '399644050ef032d883690254db30a243f4db8f6a',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/devtool',
             'aliases' => array(),
             'dev_requirement' => true,
         ),
         'hyperf/di' => array(
-            'pretty_version' => 'v3.1.53',
-            'version' => '3.1.53.0',
-            'reference' => '13a89409da739102c7fc308ef53bdd2694cb220b',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => 'f9d40858346fe88336211e8e3ac0cc210adb94c7',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/di',
             'aliases' => array(),
@@ -410,9 +410,9 @@
             'dev_requirement' => false,
         ),
         'hyperf/exception-handler' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => 'df2135fb0ffe0bb61032911038aea6488077cdef',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => 'c2240b8a455b7305b470576dd846078d4aca44f0',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/exception-handler',
             'aliases' => array(),
@@ -428,27 +428,27 @@
             'dev_requirement' => false,
         ),
         'hyperf/guzzle' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => 'fe838557530bf7b2d39dc604563c3a3ff8d5618f',
+            'pretty_version' => 'v3.1.58',
+            'version' => '3.1.58.0',
+            'reference' => 'd6de1e1cc6175137b8f91b79f308c73ce426717e',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/guzzle',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/http-message' => array(
-            'pretty_version' => 'v3.1.48',
-            'version' => '3.1.48.0',
-            'reference' => '534ce81af0feaa0c4a9e132af1c6a9c5527a8d85',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '26201c732b9ceb6fa14af3bfa381463d3e1a4e6a',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/http-message',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/http-server' => array(
-            'pretty_version' => 'v3.1.55',
-            'version' => '3.1.55.0',
-            'reference' => '96a1d80cd9482942899d7068af0e6ecb78d382ce',
+            'pretty_version' => 'v3.1.59',
+            'version' => '3.1.59.0',
+            'reference' => 'b5f8dbd03578adb101fbf98ab7407510d553130f',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/http-server',
             'aliases' => array(),
@@ -457,16 +457,16 @@
         'hyperf/hyperf-skeleton' => array(
             'pretty_version' => 'dev-master',
             'version' => 'dev-master',
-            'reference' => '9d12071cf0586267e5cb1c8008d745bd7632820e',
+            'reference' => '1be4553ed9a0a5c329bc2983be17f74f345fa1da',
             'type' => 'project',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/json-rpc' => array(
-            'pretty_version' => 'v3.1.47',
-            'version' => '3.1.47.0',
-            'reference' => 'daa987e9e58fcbbf676ae266de2d428301a74d1b',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => 'bc0526468cafbd656578229cf70e19f7b244508d',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/json-rpc',
             'aliases' => array(),
@@ -500,9 +500,9 @@
             'dev_requirement' => false,
         ),
         'hyperf/memory' => array(
-            'pretty_version' => 'v3.1.53',
-            'version' => '3.1.53.0',
-            'reference' => '74a3093ee766e18f912269f6846a63ae21a4360b',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '448ceeaab7b32a6c8c0958040ea3a1872c28bb12',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/memory',
             'aliases' => array(),
@@ -563,27 +563,27 @@
             'dev_requirement' => false,
         ),
         'hyperf/redis' => array(
-            'pretty_version' => 'v3.1.53',
-            'version' => '3.1.53.0',
-            'reference' => 'd481e97926d8e12b41bfeb1ebf5d88e66482da64',
+            'pretty_version' => 'v3.1.59',
+            'version' => '3.1.59.0',
+            'reference' => 'e7bd1b5ce85c06a766ad599dfa64238596c5fb11',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/redis',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/rpc' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => '90e97635c0e3c5080e422abdfc1399fd57ee204f',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '1c81cd46be8d1926096cf333849add07e755ced3',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/rpc',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/rpc-server' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => '5647c5fd54342fe96aa2198e7fdeb8ee50cfc30c',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => 'b3730be9e992c6d2a3acf105c3aca1aec49efce9',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/rpc-server',
             'aliases' => array(),
@@ -599,9 +599,9 @@
             'dev_requirement' => false,
         ),
         'hyperf/server' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => 'e10c5ce6d9b72d3ca9ad16d36977e2e64d975460',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '1bb241ec5b52b42475aa26a15d5446f1ef429530',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/server',
             'aliases' => array(),
@@ -617,9 +617,9 @@
             'dev_requirement' => false,
         ),
         'hyperf/service-governance-consul' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => '0c153a006eff3778a208ca5233a33ecb2685407e',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => 'f40dcd05dd0cdae6915faf0fd088295b18d71878',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/service-governance-consul',
             'aliases' => array(),
@@ -635,9 +635,9 @@
             'dev_requirement' => false,
         ),
         'hyperf/snowflake' => array(
-            'pretty_version' => 'v3.1.42',
-            'version' => '3.1.42.0',
-            'reference' => '0271dfd9f0030e4f4cdd90f91428d1dbb35ecd56',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '698231cab7f174882c2b0fd6f377413c561ca49e',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/snowflake',
             'aliases' => array(),
@@ -653,18 +653,18 @@
             'dev_requirement' => false,
         ),
         'hyperf/stringable' => array(
-            'pretty_version' => 'v3.1.55',
-            'version' => '3.1.55.0',
-            'reference' => '1ce51e8c73609898da6b0b9ab80a14508fa671d7',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => '5548d35f5dbdad0b3196cc8503c618a990b38b3f',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/stringable',
             'aliases' => array(),
             'dev_requirement' => false,
         ),
         'hyperf/support' => array(
-            'pretty_version' => 'v3.1.51',
-            'version' => '3.1.51.0',
-            'reference' => '8d630b496945f3ac791a570fe6c1bf481c3f28ed',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => 'ea0d41f825595bf26daf6f41d0bb1bf2f48dfe2a',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/support',
             'aliases' => array(),
@@ -680,9 +680,9 @@
             'dev_requirement' => false,
         ),
         'hyperf/testing' => array(
-            'pretty_version' => 'v3.1.55',
-            'version' => '3.1.55.0',
-            'reference' => 'f7daebdcc7aa4520acf61689f7e2e4049e9247db',
+            'pretty_version' => 'v3.1.57',
+            'version' => '3.1.57.0',
+            'reference' => 'bda78d4d4d6962342caf7c337f85904db26c9614',
             'type' => 'library',
             'install_path' => __DIR__ . '/../hyperf/testing',
             'aliases' => array(),
@@ -821,9 +821,9 @@
             'dev_requirement' => false,
         ),
         'myclabs/deep-copy' => array(
-            'pretty_version' => '1.13.0',
-            'version' => '1.13.0.0',
-            'reference' => '024473a478be9df5fdaca2c793f2232fe788e414',
+            'pretty_version' => '1.13.3',
+            'version' => '1.13.3.0',
+            'reference' => 'faed855a7b5f4d4637717c2b3863e277116beb36',
             'type' => 'library',
             'install_path' => __DIR__ . '/../myclabs/deep-copy',
             'aliases' => array(),
@@ -1080,8 +1080,8 @@
         'psr/log-implementation' => array(
             'dev_requirement' => false,
             'provided' => array(
-                0 => '1.0|2.0|3.0',
-                1 => '3.0.0',
+                0 => '3.0.0',
+                1 => '1.0|2.0|3.0',
             ),
         ),
         'psr/simple-cache' => array(
@@ -1118,9 +1118,9 @@
             'dev_requirement' => false,
         ),
         'ramsey/uuid' => array(
-            'pretty_version' => '4.7.6',
-            'version' => '4.7.6.0',
-            'reference' => '91039bc1faa45ba123c4328958e620d382ec7088',
+            'pretty_version' => '4.8.1',
+            'version' => '4.8.1.0',
+            'reference' => 'fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28',
             'type' => 'library',
             'install_path' => __DIR__ . '/../ramsey/uuid',
             'aliases' => array(),
@@ -1192,7 +1192,7 @@
         'rhumsaa/uuid' => array(
             'dev_requirement' => false,
             'replaced' => array(
-                0 => '4.7.6',
+                0 => '4.8.1',
             ),
         ),
         'sebastian/cli-parser' => array(
@@ -1349,9 +1349,9 @@
             'dev_requirement' => false,
         ),
         'symfony/console' => array(
-            'pretty_version' => 'v6.4.21',
-            'version' => '6.4.21.0',
-            'reference' => 'a3011c7b7adb58d89f6c0d822abb641d7a5f9719',
+            'pretty_version' => 'v6.4.22',
+            'version' => '6.4.22.0',
+            'reference' => '7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/console',
             'aliases' => array(),
@@ -1409,9 +1409,9 @@
             'dev_requirement' => false,
         ),
         'symfony/http-foundation' => array(
-            'pretty_version' => 'v6.4.21',
-            'version' => '6.4.21.0',
-            'reference' => '3f0c7ea41db479383b81d436b836d37168fd5b99',
+            'pretty_version' => 'v6.4.22',
+            'version' => '6.4.22.0',
+            'reference' => '6b7c97fe1ddac8df3cc9ba6410c8abc683e148ae',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/http-foundation',
             'aliases' => array(),
@@ -1526,9 +1526,9 @@
             'dev_requirement' => false,
         ),
         'symfony/translation' => array(
-            'pretty_version' => 'v6.4.21',
-            'version' => '6.4.21.0',
-            'reference' => 'bb92ea5588396b319ba43283a5a3087a034cb29c',
+            'pretty_version' => 'v6.4.23',
+            'version' => '6.4.23.0',
+            'reference' => 'de8afa521e04a5220e9e58a1dc99971ab7cac643',
             'type' => 'library',
             'install_path' => __DIR__ . '/../symfony/translation',
             'aliases' => array(),

+ 34 - 10
vendor/fidry/cpu-core-counter/README.md

@@ -16,6 +16,10 @@ use Fidry\CpuCoreCounter\Finder\DummyCpuCoreFinder;
 
 $counter = new CpuCoreCounter();
 
+// For knowing the number of cores you can use for launching parallel processes:
+$counter->getAvailableForParallelisation()->availableCpus;
+
+// Get the number of CPU cores (by default it will use the logical cores count):
 try {
     $counter->getCount();   // e.g. 8
 } catch (NumberOfCpuCoreNotFound) {
@@ -29,6 +33,10 @@ $counter = new CpuCoreCounter([
     new DummyCpuCoreFinder(1),  // Fallback value
 ]);
 
+// A type-safe alternative form:
+$counter->getCountWithFallback(1);
+
+// Note that the result is memoized.
 $counter->getCount();   // e.g. 8
 
 ```
@@ -68,30 +76,46 @@ $cores = (new CpuCoreCounter($finders))->getCount();
 `FinderRegistry` provides two helpful entries:
 
 - `::getDefaultLogicalFinders()`: gives an ordered list of finders that will
-  look for the _logical_ CPU cores count
+  look for the _logical_ CPU cores count.
 - `::getDefaultPhysicalFinders()`: gives an ordered list of finders that will
-  look for the _physical_ CPU cores count
+  look for the _physical_ CPU cores count.
 
-By default when using `CpuCoreCounter`, it will use the logical finders since
+By default, when using `CpuCoreCounter`, it will use the logical finders since
 it is more likely what you are looking for and is what is used by PHP source to
 build the PHP binary.
 
 
 ### Checks what finders find what on your system
 
-You have two commands available that provides insight about what the finders
+You have three scrips available that provides insight about what the finders
 can find:
 
-```
-$ make diagnose                                     # From this repository
-$ ./vendor/fidry/cpu-core-counter/bin/diagnose.php  # From the library
+```shell
+# Checks what each given finder will find on your system with details about the
+# information it had.
+make diagnose                                     # From this repository
+./vendor/fidry/cpu-core-counter/bin/diagnose.php  # From the library
 ```
 
 And:
+```shell
+# Execute all finders and display the result they found.
+make execute                                     # From this repository
+./vendor/fidry/cpu-core-counter/bin/execute.php  # From the library
 ```
-$ make execute                                     # From this repository
-$ ./vendor/fidry/cpu-core-counter/bin/execute.php  # From the library
-```
+
+
+### Debug the results found
+
+You have 3 methods available to help you find out what happened:
+
+1. If you are using the default configuration of finder registries, you can check
+   the previous section which will provide plenty of information.
+2. If what you are interested in is how many CPU cores were found, you can use
+   the `CpuCoreCounter::trace()` method.
+3. If what you are interested in is how the calculation of CPU cores available
+   for parallelisation was done, you can inspect the values of `ParallelisationResult`
+   returned by `CpuCoreCounter::getAvailableForParallelisation()`.
 
 
 ## Backward Compatibility Promise (BCP)

+ 179 - 0
vendor/fidry/cpu-core-counter/src/CpuCoreCounter.php

@@ -14,7 +14,14 @@ declare(strict_types=1);
 namespace Fidry\CpuCoreCounter;
 
 use Fidry\CpuCoreCounter\Finder\CpuCoreFinder;
+use Fidry\CpuCoreCounter\Finder\EnvVariableFinder;
 use Fidry\CpuCoreCounter\Finder\FinderRegistry;
+use InvalidArgumentException;
+use function implode;
+use function max;
+use function sprintf;
+use function sys_getloadavg;
+use const PHP_EOL;
 
 final class CpuCoreCounter
 {
@@ -36,6 +43,89 @@ final class CpuCoreCounter
         $this->finders = $finders ?? FinderRegistry::getDefaultLogicalFinders();
     }
 
+    /**
+     * @param positive-int|0    $reservedCpus      Number of CPUs to reserve. This is useful when you want
+     *                                             to reserve some CPUs for other processes. If the main
+     *                                             process is going to be busy still, you may want to set
+     *                                             this value to 1.
+     * @param non-zero-int|null $countLimit        The maximum number of CPUs to return. If not provided, it
+     *                                             may look for a limit in the environment variables, e.g.
+     *                                             KUBERNETES_CPU_LIMIT. If negative, the limit will be
+     *                                             the total number of cores found minus the absolute value.
+     *                                             For instance if the system has 10 cores and countLimit=-2,
+     *                                             then the effective limit considered will be 8.
+     * @param float|null        $loadLimit         Element of [0., 1.]. Percentage representing the
+     *                                             amount of cores that should be used among the available
+     *                                             resources. For instance, if set to 0.7, it will use 70%
+     *                                             of the available cores, i.e. if 1 core is reserved, 11
+     *                                             cores are available and 5 are busy, it will use 70%
+     *                                             of (11-1-5)=5 cores, so 3 cores. Set this parameter to null
+     *                                             to skip this check. Beware that 1 does not mean "no limit",
+     *                                             but 100% of the _available_ resources, i.e. with the
+     *                                             previous example, it will return 5 cores. How busy is
+     *                                             the system is determined by the system load average
+     *                                             (see $systemLoadAverage).
+     * @param float|null        $systemLoadAverage The system load average. If passed, it will use
+     *                                             this information to limit the available cores based
+     *                                             on the _available_ resources. For instance, if there
+     *                                             is 10 cores but 3 are busy, then only 7 cores will
+     *                                             be considered for further calculation. If set to
+     *                                             `null`, it will use `sys_getloadavg()` to check the
+     *                                             load of the system in the past minute. You can
+     *                                             otherwise pass an arbitrary value. Should be a
+     *                                             positive float.
+     *
+     * @see https://php.net/manual/en/function.sys-getloadavg.php
+     */
+    public function getAvailableForParallelisation(
+        int $reservedCpus = 0,
+        ?int $countLimit = null,
+        ?float $loadLimit = null,
+        ?float $systemLoadAverage = 0.
+    ): ParallelisationResult {
+        self::checkCountLimit($countLimit);
+        self::checkLoadLimit($loadLimit);
+        self::checkSystemLoadAverage($systemLoadAverage);
+
+        $totalCoreCount = $this->getCountWithFallback(1);
+        $availableCores = max(1, $totalCoreCount - $reservedCpus);
+
+        // Adjust available CPUs based on current load
+        if (null !== $loadLimit) {
+            $correctedSystemLoadAverage = null === $systemLoadAverage
+                ? sys_getloadavg()[0] ?? 0.
+                : $systemLoadAverage;
+
+            $availableCores = max(
+                1,
+                $loadLimit * ($availableCores - $correctedSystemLoadAverage)
+            );
+        }
+
+        if (null === $countLimit) {
+            $correctedCountLimit = self::getKubernetesLimit();
+        } else {
+            $correctedCountLimit = $countLimit > 0
+                ? $countLimit
+                : max(1, $totalCoreCount + $countLimit);
+        }
+
+        if (null !== $correctedCountLimit && $availableCores > $correctedCountLimit) {
+            $availableCores = $correctedCountLimit;
+        }
+
+        return new ParallelisationResult(
+            $reservedCpus,
+            $countLimit,
+            $loadLimit,
+            $systemLoadAverage,
+            $correctedCountLimit,
+            $correctedSystemLoadAverage ?? $systemLoadAverage,
+            $totalCoreCount,
+            (int) $availableCores
+        );
+    }
+
     /**
      * @throws NumberOfCpuCoreNotFound
      *
@@ -51,6 +141,48 @@ final class CpuCoreCounter
         return $this->count;
     }
 
+    /**
+     * @param positive-int $fallback
+     *
+     * @return positive-int
+     */
+    public function getCountWithFallback(int $fallback): int
+    {
+        try {
+            return $this->getCount();
+        } catch (NumberOfCpuCoreNotFound $exception) {
+            return $fallback;
+        }
+    }
+
+    /**
+     * This method is mostly for debugging purposes.
+     */
+    public function trace(): string
+    {
+        $output = [];
+
+        foreach ($this->finders as $finder) {
+            $output[] = sprintf(
+                'Executing the finder "%s":',
+                $finder->toString()
+            );
+            $output[] = $finder->diagnose();
+
+            $cores = $finder->find();
+
+            if (null !== $cores) {
+                $output[] = 'Result found: '.$cores;
+
+                break;
+            }
+
+            $output[] = '–––';
+        }
+
+        return implode(PHP_EOL, $output);
+    }
+
     /**
      * @throws NumberOfCpuCoreNotFound
      *
@@ -86,4 +218,51 @@ final class CpuCoreCounter
 
         throw NumberOfCpuCoreNotFound::create();
     }
+
+    /**
+     * @return positive-int|null
+     */
+    public static function getKubernetesLimit(): ?int
+    {
+        $finder = new EnvVariableFinder('KUBERNETES_CPU_LIMIT');
+
+        return $finder->find();
+    }
+
+    private static function checkCountLimit(?int $countLimit): void
+    {
+        if (0 === $countLimit) {
+            throw new InvalidArgumentException(
+                'The count limit must be a non zero integer. Got "0".'
+            );
+        }
+    }
+
+    private static function checkLoadLimit(?float $loadLimit): void
+    {
+        if (null === $loadLimit) {
+            return;
+        }
+
+        if ($loadLimit < 0. || $loadLimit > 1.) {
+            throw new InvalidArgumentException(
+                sprintf(
+                    'The load limit must be in the range [0., 1.], got "%s".',
+                    $loadLimit
+                )
+            );
+        }
+    }
+
+    private static function checkSystemLoadAverage(?float $systemLoadAverage): void
+    {
+        if (null !== $systemLoadAverage && $systemLoadAverage < 0.) {
+            throw new InvalidArgumentException(
+                sprintf(
+                    'The system load average must be a positive float, got "%s".',
+                    $systemLoadAverage
+                )
+            );
+        }
+    }
 }

+ 4 - 2
vendor/fidry/cpu-core-counter/src/Finder/CpuInfoFinder.php

@@ -49,10 +49,12 @@ final class CpuInfoFinder implements CpuCoreFinder
         }
 
         return sprintf(
-            'Found the file "%s" with the content:%s%s',
+            'Found the file "%s" with the content:%s%s%sWill return "%s".',
             self::CPU_INFO_PATH,
             PHP_EOL,
-            $cpuInfo
+            $cpuInfo,
+            PHP_EOL,
+            self::countCpuCores($cpuInfo)
         );
     }
 

+ 5 - 2
vendor/fidry/cpu-core-counter/src/Finder/NProcFinder.php

@@ -30,10 +30,13 @@ final class NProcFinder extends ProcOpenBasedFinder
     private $all;
 
     /**
-     * @param bool $all If disabled will give the number of cores available for the current process only.
+     * @param bool $all If disabled will give the number of cores available for the current process
+     *                  only. This is disabled by default as it is known to be "buggy" on virtual
+     *                  environments as the virtualization tool, e.g. VMWare, might over-commit
+     *                  resources by default.
      */
     public function __construct(
-        bool $all = true,
+        bool $all = false,
         ?ProcessExecutor $executor = null
     ) {
         parent::__construct($executor);

+ 7 - 4
vendor/fidry/cpu-core-counter/src/Finder/ProcOpenBasedFinder.php

@@ -56,16 +56,19 @@ abstract class ProcOpenBasedFinder implements CpuCoreFinder
 
         return $failed
             ? sprintf(
-                'Executed the command "%s" which wrote the following output to the STDERR:%s%s',
+                'Executed the command "%s" which wrote the following output to the STDERR:%s%s%sWill return "null".',
                 $command,
                 PHP_EOL,
-                $stderr
+                $stderr,
+                PHP_EOL
             )
             : sprintf(
-                'Executed the command "%s" and got the following (STDOUT) output:%s%s',
+                'Executed the command "%s" and got the following (STDOUT) output:%s%s%sWill return "%s".',
                 $command,
                 PHP_EOL,
-                $stdout
+                $stdout,
+                PHP_EOL,
+                $this->countCpuCores($stdout) ?? 'null'
             );
     }
 

+ 321 - 0
vendor/friendsofphp/php-cs-fixer/CHANGELOG.md

@@ -3,6 +3,327 @@ CHANGELOG for PHP CS Fixer
 
 This file contains changelogs for stable releases only.
 
+Changelog for v3.75.0
+---------------------
+
+* feat: `ClassAttributesSeparationFixer` - add support for asymmetric visibility (#8518)
+* fix: `NativeFunctionInvocationFixer` - fix for property hooks (#8540)
+* chore: add return types for data providers for fixers (#8542)
+* chore: add return types for data providers for non-fixers (#8543)
+* chore: add return types for remaining data providers (#8544)
+* chore: make data providers key type `int` if all the keys are strings (#8550)
+* chore: make data providers key type `string` if all the keys are strings (#8545)
+* chore: SwitchContinueToBreakFixerTest - improve test case descriptions/typehint (#8546)
+* chore: `FunctionsAnalyzerTest` cleanup (#8539)
+* deps: bump the phpstan group in /dev-tools with 2 updates (#8537)
+* test: ProjectCodeTest::testDataProvidersDeclaredReturnType - allow for int as iterable keys (#8548)
+
+Changelog for v3.74.0
+---------------------
+
+* feat: add `--format=@auto` (#8513)
+* fix: `BracesPositionFixer` - do not create two consecutive whitespace tokens (#8496)
+* fix: `MbStrFunctionsFixer` - fix imports with leading backslash (#8507)
+* fix: `NoUnreachableDefaultArgumentValueFixer` - do not crash on property hook (#8512)
+* fix: `OrderedImportsFixer` - do not take the braces part in grouped imports into account (#8459)
+* fix: `OrderedImportsFixer` - fix syntax error with grouped use statement and multiple use with comma (#8483)
+* fix: `PhpUnitAttributesFixer` - handle parentheses after data provider method name (#8510)
+* fix: `PhpUnitMethodCasingFixer` - do not touch anonymous class (#8463)
+* chore: make options that have default and allowed sets the same size the same array (#8529)
+* chore: update return type of `FixerOptionInterface::getAllowedValues` (#8530)
+* chore: `Preg` - improve types (#8527)
+* CI: fix code coverage job (#8520)
+* CI: try MacOS job without ParaUnit (#8528)
+* deps: update PHPStan (#8531)
+* deps: upgrade `PHPStan/*` (#8524)
+
+Changelog for v3.73.1
+---------------------
+
+* fix: `OrderedClassElementsFixer` - do not crash on property hook (#8517)
+
+Changelog for v3.73.0
+---------------------
+
+* feat: add support for asymmetric visibility to Doctrine's fixers (#8415)
+* fix: `GeneralPhpdocTagRenameFixer` - do not rename keys in array shape definition (#8477)
+* fix: `MethodArgumentSpaceFixer` - handle when nested in HTML (#8503)
+* chore: update `checkbashisms` to 2.25.5 (#8519)
+* DX: cleanup `NoExtraBlankLinesFixerTest` (#8505)
+* DX: for duplicated test methods check methods without parameters (#8508)
+* DX: remove more duplicated test methods (#8506)
+* refactor: `Tokenizer` hash metode using `xxHash` (#8491)
+* refactor: `TokensAnalyzerTest` - better test `isArray` and `isArrayMultiLine` (#8504)
+* test: run code coverage on PHP 8.4 (#8448)
+
+Changelog for v3.72.0
+---------------------
+
+* feat: `StatementIndentationFixer` - handle property hooks (#8492)
+* fix: `MbStrFunctionsFixer` - fix imports (#8474)
+* fix: `TrailingCommaInMultilineFixer` - handle empty match body (#8480)
+* fix: `VisibilityRequiredFixer` - handle property hooks (#8495)
+* deps: upgrade few dev-deps (#8490)
+* deps: Upgrade PHPStan to 2.1.8 (#8489)
+* DX: add trailing comma to multiline auto-generated types (#8499)
+* refactor: generalize CodeHasher into Hasher (#8500)
+* refactor: Runner - unify paths used when using parallel runner (#8488)
+* refactor: use Hasher instead of md5 directly (#8501)
+
+Changelog for v3.71.0
+---------------------
+
+* feat: OrderedImportsFixer - deprecate length sorting algorithm (#8473)
+* fix: `BinaryOperatorSpacesFixer` - do not break alignment of UTF-8 array keys (#8484)
+* fix: `PhpdocAlignFixer` - align correctly type with UTF8 characters (#8486)
+* fix: `SingleSpaceAroundConstructFixer` - handle alternative syntax (#8317)
+* fix: `StatementIndentationFixer` - return in braceless if (#8479)
+* chore: update type in `SingleSpaceAroundConstructFixerTest::provideFixWithElseIfCases` (#8481)
+* chore: update type in `SingleSpaceAroundConstructFixerTest::provideFixWithIfCases` (#8482)
+* deps: bump phpstan/phpstan from 2.1.6 to 2.1.7 in /dev-tools in the phpstan group (#8485)
+* DX: cleanup `PhpdocNoAliasTagFixerTest` (#8476)
+* refactor: add `FullyQualifiedNameAnalyzer` (#8048)
+* refactor: codeHash - update when it's (re-)generated (#8470)
+* refactor: `SwitchAnalyzer` - improve performance (#8407)
+* test: NameQualifiedTransformerTest - correct test case (#8471)
+
+Changelog for v3.70.2
+---------------------
+
+* deps: upgrade deep dev-tools deps (#8472)
+* fix: `MbStrFunctionsFixer` must run before `NativeFunctionInvocationFixer` (#8466)
+* fix: `MethodArgumentSpaceFixer` - fix nested calls for `ensure_fully_multiline` option (#8469)
+
+Changelog for v3.70.1
+---------------------
+
+* fix: `PhpUnitSizeClassFixer` must run before `PhpUnitAttributesFixer` (#8457)
+* DX: cleanup `OrderedImportsFixerTest` (#8458)
+
+Changelog for v3.70.0
+---------------------
+
+* feat: Add `PhpUnitDataProviderMethodOrderFixer` fixer (#8225)
+* feat: `HeaderCommentFixer` - allow validators (#8452)
+* feat: `PhpCsFixer` ruleset: use `operator_linebreak` rule for all operators (#8417)
+* feat: `PhpUnitMethodCasingFixer` to support PHPUnit's `Test` attribute (#8451)
+* feat: `TypeDeclarationSpacesFixer` - Fix whitespace between const type and const name (#8442)
+* chore: extend bug report template (#8447)
+* chore: extend bug report template - more installation options (#8450)
+* CI: phpstan-symfony - add entry point for console (#8292)
+* deps: bump alpine from 3.21.2 to 3.21.3 (#8454)
+* deps: bump phpstan/phpstan from 2.1.5 to 2.1.6 in /dev-tools in the phpstan group (#8453)
+* fix: `CommentsAnalyzer` - allow other forms of assignment as valid structural elements for PHPDocs (#8371)
+* fix: `PhpUnitTestClassRequiresCoversFixer` must run before `PhpUnitAttributesFixer` (#8444)
+* test: fix `CheckCommandTest::testDryRunModeIsUnavailable` to correctly check that option `--dry-run` is unavailable (#8438)
+
+Changelog for v3.69.1
+---------------------
+
+* fix: `PhpUnitAttributesFixer` - convert correctly version constraint (#8439)
+* test: `PhpUnitAttributesFixer` must run before `NoEmptyPhpdocFixer` (#8443)
+
+Changelog for v3.69.0
+---------------------
+
+* feat: Add unsealed array shape phpdoc support (#8299)
+* fix: `OrderedClassElementsFixer` - sort correctly typed constants (#8408)
+* chore: do not use test class as test data (#8430)
+* chore: update `checkbashisms` to 2.25.2 (#8427)
+* chore: use constants instead of literal strings (#8422)
+* CI: no need to unlock deps on master (#8426)
+* CI: run tests using PHPUnit 12 (#8431)
+* deps: bump kubawerlos/composer-smaller-lock from 1.0.1 to 1.1.0 in /dev-tools (#8414)
+* deps: bump maglnet/composer-require-checker from 4.14.0 to 4.15.0 in /dev-tools (#8406)
+* deps: bump phpstan/phpstan from 2.1.3 to 2.1.5 in /dev-tools in the phpstan group (#8437)
+* deps: bump the phpstan (#8423)
+* deps: upgrade dev requirements (#8424)
+
+Changelog for v3.68.5
+---------------------
+
+* fix: `NativeTypeDeclarationCasingFixer` - do not touch constants named as native types (#8404)
+
+Changelog for v3.68.4
+---------------------
+
+* chore: run SCA on PHP 8.4 (#8396)
+* fix: NativeTypeDeclarationCasingFixer should not touch property names (#8400)
+
+Changelog for v3.68.3
+---------------------
+
+* fix: `NativeTypeDeclarationCasingFixer` - fix for enum with "Mixed" case (#8395)
+
+Changelog for v3.68.2
+---------------------
+
+* fix: `NativeTypeDeclarationCasingFixer` - fix for promoted properties, enums, `false` and `mixed` (#8386)
+* chore: ensure that `dev-tools` dependencies are bumped (#8389)
+* chore: experiment to see if we can auto-shrink the lock after dependabot (#8383)
+* chore: experiment to see if we can auto-shrink the lock after dependabot /part (#8384)
+* chore: Get rid of Docker warnings during build (#8379)
+* chore: remove redundant check (#8391)
+* chore: update types (#8390)
+* CI: stale - update close msg to emphasize contribution over demand (#8385)
+* deps: bump phpcompatibility/phpcompatibility-symfony from 1.2.1 to 1.2.2 in /dev-tools (#8378)
+* deps: bump the phpstan group in /dev-tools with 4 updates (#8387)
+* refactor: Use native `Yaml::parseFile()` instead of custom method (#8380)
+
+Changelog for v3.68.1
+---------------------
+
+* chore: `AutoReview/CiConfigurationTest` - handle failure of reading files (#8375)
+* CI: `Docker` - check all `compose` services (#8370)
+* deps: bump alpine from 3.18 to 3.21 (#8377)
+* deps: bump alpine from 3.18.4 to 3.21.2 (#8362)
+* refactor: Tokens::clearEmptyTokens - optimize cache handling (#8335)
+
+Changelog for v3.68.0
+---------------------
+
+* feat: `ModernizeStrposFixer` - support `stripos` (#8019)
+* chore: `FullyQualifiedStrictTypesFixer` - reduce conditions count (#8368)
+* test: `PhpUnitSetUpTearDownVisibilityFixer` - extend test for anonymous classes (#8369)
+
+Changelog for v3.67.1
+---------------------
+
+* fix: `FullyQualifiedStrictTypesFixer` - fix return types (#8367)
+* fix: `PhpUnitSetUpTearDownVisibilityFixer` - do not touch anonymous classes (#8366)
+* chore: allow for class-string in doc types of rule options (#8358)
+* chore: CS: Move data provider methods after their test method (#8302)
+* chore: dependabot integration (#8357)
+* chore: `PHPStan` - upgrade to 2.1 (#8355)
+* CI: Introduce PHP compatibility check (#7844)
+* deps: bump docker/build-push-action from 5 to 6 (#8361)
+* docs: update installation instructions (#8356)
+
+Changelog for v3.67.0
+---------------------
+
+* chore: simplify loops using `end`/`prev` functions (#8352)
+* feat: Introduce `general_attribute_remove` fixer (#8339)
+
+Changelog for v3.66.2
+---------------------
+
+* chore: do not use bitwise "or" assignment operator (#8346)
+* chore: remove extra check, never happening (#8348)
+* chore: remove impossible `@throws` annotation (#8353)
+* chore: Tokens - cleanup (#8350)
+* chore: Tokens - minor performance and types optimizations (#8349)
+
+Changelog for v3.66.1
+---------------------
+
+* chore: fix CI for Windows (#8326)
+* chore: `NoMultipleStatementsPerLineFixer` - be aware of PHP 8.4 property hooks (#8344)
+* chore: `TernaryToElvisOperatorFixer` - improvements based on PHPStan detections (#8345)
+* chore: `PhpUnitTestCaseStaticMethodCallsFixer` - fix type of `methods` option in documemtation and add example with it (#8338)
+* chore: update legacy deps (#8342)
+* deps: update box (#8336)
+
+Changelog for v3.66.0
+---------------------
+
+* feat: `Tokenizer` - initial support for PHP 8.4 property hooks (#8312)
+* feat: `PhpUnitTestCaseStaticMethodCallsFixer` - cover PHPUnit v11.5 methods (#8314)
+* feat: `PhpUnitTestCaseStaticMethodCallsFixer` - make sure all static protected methods are handled (#8327)
+* feat: `PhpUnitTestCaseStaticMethodCallsFixer` - support createStub (#8319)
+* feat: `UseArrowFunctionsFixer` - support multiline statements (#8311)
+* fix: `NullableTypeDeclarationFixer` - do not break multi-line declaration (#8331)
+* test: `CiConfigurationTest` - drop not needed condition, logic is checked in upcoming assertion (#8303)
+* chore: add more typehints (#8325)
+* chore: `DotsOutput` - more const, better typing (#8318)
+* chore: mark classes as readonly (#8275)
+* chore: more const, better typing (#8320)
+* chore: temporarily prevent symfony/process 7.2+ (#8322)
+* chore: `Tokens` - simplify (un)registerFoundToken types (#8328)
+* chore: upgrade PHPStan (#8321)
+* chore: `BraceTransformer` - don't touch curly index braces since 8.4, as it's not a valid syntax anymore (#8313)
+* CI: enable phpdoc_to_property_type on php-lowest (#8324)
+* Create SECURITY.md
+* docs: `Tokens` - fix docs (#8332)
+
+Changelog for v3.65.0
+---------------------
+
+* feat: Ability to set upper limit when using CPU auto-detection (#8280)
+* feat: create `@PHP82Migration:risky` ruleset (#8277)
+* feat: Impl. TypeExpression::mapTypes() (#8077)
+* feat: Parse array/generic/nullable type into inner expression (#8106)
+* feat: phpdoc_to_property_type - handle virtual types and null initialization, enable in php-highest CI job (#8283)
+* feat: Store PHPDoc offset in `DataProviderAnalysis` (#8226)
+* feat: Support for complex PHPDoc types in `fully_qualified_strict_types` (#8085)
+* fix: check for priority tests correctly (#8221)
+* fix: Do not mark with `@coversNothing` if `CoversMethod`/`CoversFunction` attribute is used (#8268)
+* fix: enum-case mistaken for const invocation (#8190)
+* fix: fix typing of few properties wrongly typed as non-nullable (#8285)
+* fix: fix typing property wrongly typed as non-nullable (#8290)
+* fix: MethodChainingIndentationFixer does not fix indentation of last chained property (#8080)
+* fix: NoSuperfluousPhpdocTagsFixer - Remove superfluous phpdoc of parameter with attribute (#8237)
+* fix: parsing mixed `&` and `|` in `TypeExpression` (#8210)
+* fix: proper base class used for AbstractDoctrineAnnotationFixer templates generation (#8291)
+* fix: Properly recognise constants in foreach loops (#8203)
+* fix: Tokens::overrideRange() block cache pruning (#8240)
+* fix: `BlankLineAfterOpeningTagFixer` - add blank line in file starting with multi-line comment (#8256)
+* fix: `MultilineWhitespaceBeforeSemicolonsFixer` - do not produce syntax error when there is a meaningful token after semicolon (#8230)
+* fix: `NullableTypeDeclarationFixer` - do not break syntax when there is no space before `?` (#8224)
+* fix: `PhpUnitDataProvider(.+)Fixer` - do not omit when there is an attribute between PHPDoc and test method (#8185)
+* fix: `PhpUnitDataProviderNameFixer` - for an attribute between PHPDoc and test method (#8217)
+* chore: add todo for PHP v8 (#8274)
+* chore: auto-fallback to sequential runner if single CPU would handle it (#8154)
+* chore: block changing tokens collection size using `PhpCsFixer\Tokenizer\Tokens::setSize` (#8257)
+* chore: bump dev-tools (#8286)
+* chore: bump PHPStan (#8245)
+* chore: Cheaper file check first (#8252)
+* chore: ConfigInterface - better types (#8244)
+* chore: do not call `Tokens::setSize` in `GroupImportFixer` (#8253)
+* chore: do not use `Reflection*::setAccessible` (#8264)
+* chore: fix priority tests (#8223)
+* chore: Fix typos in AbstractFixerTestCase (#8247)
+* chore: GithubClient - make URL injectable (#8272)
+* chore: Implement PHPStan `Preg::match()` extensions (#8103)
+* chore: mark remaining Analysis as `@internal` (#8284)
+* chore: PHPStan - upgrade to v2 (#8288)
+* chore: reduce amount of class mutable properties (#8281)
+* chore: remove from priority tests exceptions tests that are not actually exceptions (#8222)
+* chore: remove incorrect priority tests (#8231)
+* chore: remove not needed PHP version requirements in descriptions (#8265)
+* chore: remove unnecessary methods (#8200)
+* chore: tests/Tokenizer/Transformer - better typehinting (#8243)
+* chore: Token - remove 'changed' property (#8273)
+* chore: Token::getContent() phpdoc return type (#8236)
+* chore: update dev dependencies in root (#8289)
+* chore: update PHPStan to 1.12.9 (#8271)
+* chore: update `checkbashisms` to 2.24.1 (#8258)
+* chore: use null coalescing assignment operator where possible (#8219)
+* CI: allow macos to fail (#8194)
+* CI: build phar on PHP 8.3 (#8195)
+* CI: drop matrix for single-matrix-entry jobs of SCA and Deployment checks (#8193)
+* CI: Ensure php-cs-fixer PHP compatibility /part (#8241)
+* CI: Ensure `php-cs-fixer` PHP compatibility (#8235)
+* CI: generate and execute code in `assert` (#8207)
+* CI: update PHPStan to 1.12.2 (#8198)
+* CI: update PHPStan to 1.12.3 (#8204)
+* CI: use phpstan-symfony (#8287)
+* depr: ConfigInterface::getPhpExecutable() and ConfigInterface::setPhpExecutable() (#8192)
+* deps: add `composer-smaller-lock` (#8263)
+* deps: Update PHPStan to 1.12.4 (#8215)
+* deps: Update PHPStan to 1.12.5 (#8218)
+* deps: update PHPStan to 1.12.7 (#8255)
+* docs: fix unconsistency in config doc (#8269)
+* docs: mention github action example instead of travis-ci (#8250)
+* DX: Cover `php-cs-fixer` file with static analysis (#8229)
+* DX: Make `TypeExpression` API more explicit about composite types (#8214)
+* refactor: change `_AttributeItems` to `non-empty-list<_AttributeItem>` to allow using single attribute item (#8199)
+* refactor: Rename newly introduced option (#8293)
+* refactor: Runner - Enhance eventing system (#8276)
+* refactor: Runner - make 4.0 TODOs easier to understand (#8196)
+* refactor: use arrow functions in more places (#8294)
+* test: `@PHP82Migration:risky` - add integration tests (#8278)
+
 Changelog for v3.64.0
 ---------------------
 

+ 5 - 26
vendor/friendsofphp/php-cs-fixer/README.md

@@ -38,45 +38,24 @@ projects. This tool does not only detect them, but also fixes them for you.
 
 ### Installation
 
-The recommended way to install PHP CS Fixer is to use [Composer](https://getcomposer.org/download/)
-in a dedicated `composer.json` file in your project, for example in the
-`tools/php-cs-fixer` directory:
-
-```console
-mkdir -p tools/php-cs-fixer
-composer require --working-dir=tools/php-cs-fixer friendsofphp/php-cs-fixer
-```
-
-Or using the main `composer.json`:
+The recommended way to install PHP CS Fixer is to use [Composer](https://getcomposer.org/download/):
 
 ```console
 composer require --dev friendsofphp/php-cs-fixer
+## or when facing conflicts in dependencies:
+composer require --dev php-cs-fixer/shim
 ```
 
-For more details and other installation methods, see
+For more details and other installation methods (also with Docker or behind CI), see
 [installation instructions](./doc/installation.rst).
 
-### Run with Docker
-
-You can use pre-built Docker images to run ``php-cs-fixer``.
-
-```console
-docker run -it --rm -v $(pwd):/code ghcr.io/php-cs-fixer/php-cs-fixer:${FIXER_VERSION:-3-php8.3} fix src
-```
-
-`$FIXER_VERSION` used in example above is an identifier of a release you want to use, which is based on Fixer and PHP versions combined. There are different tags for each Fixer's SemVer level and PHP version with syntax `<php-cs-fixer-version>-php<php-version>`. For example:
-
-* `3.57.0-php7.4`
-* `3.57-php8.0`
-* `3-php8.3`
-
 ### Usage
 
 Assuming you installed PHP CS Fixer as instructed above, you can run the
 following command to fix the PHP files in the `src` directory:
 
 ```console
-tools/php-cs-fixer/vendor/bin/php-cs-fixer fix src
+./vendor/bin/php-cs-fixer fix src
 ```
 
 See [usage](./doc/usage.rst), list of [built-in rules](./doc/rules/index.rst), list of [rule sets](./doc/ruleSets/index.rst)

+ 31 - 22
vendor/friendsofphp/php-cs-fixer/composer.json

@@ -22,42 +22,43 @@
     "require": {
         "php": "^7.4 || ^8.0",
         "ext-filter": "*",
+        "ext-hash": "*",
         "ext-json": "*",
         "ext-tokenizer": "*",
         "clue/ndjson-react": "^1.0",
         "composer/semver": "^3.4",
         "composer/xdebug-handler": "^3.0.3",
-        "fidry/cpu-core-counter": "^1.0",
+        "fidry/cpu-core-counter": "^1.2",
         "react/child-process": "^0.6.5",
         "react/event-loop": "^1.0",
         "react/promise": "^2.0 || ^3.0",
         "react/socket": "^1.0",
         "react/stream": "^1.0",
-        "sebastian/diff": "^4.0 || ^5.0 || ^6.0",
-        "symfony/console": "^5.4 || ^6.0 || ^7.0",
-        "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0",
-        "symfony/filesystem": "^5.4 || ^6.0 || ^7.0",
-        "symfony/finder": "^5.4 || ^6.0 || ^7.0",
-        "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0",
-        "symfony/polyfill-mbstring": "^1.28",
-        "symfony/polyfill-php80": "^1.28",
-        "symfony/polyfill-php81": "^1.28",
-        "symfony/process": "^5.4 || ^6.0 || ^7.0",
-        "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0"
+        "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0",
+        "symfony/console": "^5.4 || ^6.4 || ^7.0",
+        "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0",
+        "symfony/filesystem": "^5.4 || ^6.4 || ^7.0",
+        "symfony/finder": "^5.4 || ^6.4 || ^7.0",
+        "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0",
+        "symfony/polyfill-mbstring": "^1.31",
+        "symfony/polyfill-php80": "^1.31",
+        "symfony/polyfill-php81": "^1.31",
+        "symfony/process": "^5.4 || ^6.4 || ^7.2",
+        "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0"
     },
     "require-dev": {
-        "facile-it/paraunit": "^1.3 || ^2.3",
-        "infection/infection": "^0.29.5",
-        "justinrainbow/json-schema": "^5.2",
+        "facile-it/paraunit": "^1.3.1 || ^2.6",
+        "infection/infection": "^0.29.14",
+        "justinrainbow/json-schema": "^5.3 || ^6.2",
         "keradus/cli-executor": "^2.1",
-        "mikey179/vfsstream": "^1.6.11",
+        "mikey179/vfsstream": "^1.6.12",
         "php-coveralls/php-coveralls": "^2.7",
         "php-cs-fixer/accessible-object": "^1.1",
-        "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.5",
-        "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.5",
-        "phpunit/phpunit": "^9.6.19 || ^10.5.21 || ^11.2",
-        "symfony/var-dumper": "^5.4 || ^6.0 || ^7.0",
-        "symfony/yaml": "^5.4 || ^6.0 || ^7.0"
+        "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6",
+        "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6",
+        "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.12",
+        "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.3",
+        "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.3"
     },
     "suggest": {
         "ext-dom": "For handling output formats in XML",
@@ -73,6 +74,7 @@
     },
     "autoload-dev": {
         "psr-4": {
+            "PhpCsFixer\\PHPStan\\": "dev-tools/phpstan/src/",
             "PhpCsFixer\\Tests\\": "tests/"
         },
         "exclude-from-classmap": [
@@ -112,6 +114,11 @@
             "@composer normalize --working-dir=dev-tools --dry-run ../composer.json",
             "@composer normalize --working-dir=dev-tools --dry-run composer.json"
         ],
+        "normalize:fix": [
+            "@composer normalize --working-dir=dev-tools ../composer.json",
+            "@composer normalize --working-dir=dev-tools composer.json"
+        ],
+        "php-compatibility": "@php dev-tools/vendor/bin/phpcs -p --standard=dev-tools/php-compatibility/phpcs-php-compatibility.xml",
         "phpstan": "@php -d memory_limit=512M dev-tools/vendor/bin/phpstan analyse",
         "phpstan:baseline": "@php -d memory_limit=512M dev-tools/vendor/bin/phpstan analyse --generate-baseline=./dev-tools/phpstan/baseline.php",
         "qa": "@quality-assurance",
@@ -178,7 +185,9 @@
         "infection": "Alias for 'test:mutation'",
         "install-tools": "Install DEV tools",
         "mess-detector": "Analyse code with Mess Detector",
-        "normalize": "Run normalization for composer.json files",
+        "normalize": "Check normalization for composer.json files",
+        "normalize:fix": "Run normalization for composer.json files",
+        "php-compatibility": "Check compatibility with all supported PHP versions",
         "phpstan": "Run PHPStan analysis",
         "phpstan:baseline": "Dump PHPStan baseline file - use only for updating, do not add new errors when possible",
         "post-autoload-dump": "Run additional tasks after installing/updating main dependencies",

+ 17 - 11
vendor/friendsofphp/php-cs-fixer/php-cs-fixer

@@ -1,6 +1,8 @@
 #!/usr/bin/env php
 <?php
 
+declare(strict_types=1);
+
 /*
  * This file is part of PHP CS Fixer.
  *
@@ -11,28 +13,33 @@
  * with this source code in the file LICENSE.
  */
 
+use Composer\XdebugHandler\XdebugHandler;
+use PhpCsFixer\Console\Application;
+
 error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);
 
-set_error_handler(static function ($severity, $message, $file, $line) {
-    if ($severity & error_reporting()) {
+set_error_handler(static function (int $severity, string $message, string $file, int $line): bool {
+    if (0 !== ($severity & error_reporting())) {
         throw new ErrorException($message, 0, $severity, $file, $line);
     }
+
+    return true;
 });
 
 // check environment requirements
-(function () {
-    if (\PHP_VERSION_ID === 80000) {
+(static function (): void {
+    if (\PHP_VERSION_ID === (int) '80000') { // TODO use 8_00_00 once only PHP 7.4+ is supported by this entry file
         fwrite(STDERR, "PHP CS Fixer is not able run on PHP 8.0.0 due to bug in PHP tokenizer (https://bugs.php.net/bug.php?id=80462).\n");
         fwrite(STDERR, "Update PHP version to unblock execution.\n");
 
         exit(1);
     }
 
-    if (\PHP_VERSION_ID < 70400 || \PHP_VERSION_ID >= 80400) {
+    if (\PHP_VERSION_ID < (int) '70400' || \PHP_VERSION_ID >= (int) '80400') {
         fwrite(STDERR, "PHP needs to be a minimum version of PHP 7.4.0 and maximum version of PHP 8.3.*.\n");
         fwrite(STDERR, 'Current PHP version: '.PHP_VERSION.".\n");
 
-        if (getenv('PHP_CS_FIXER_IGNORE_ENV')) {
+        if (filter_var(getenv('PHP_CS_FIXER_IGNORE_ENV'), FILTER_VALIDATE_BOOLEAN)) {
             fwrite(STDERR, "Ignoring environment requirements because `PHP_CS_FIXER_IGNORE_ENV` is set. Execution may be unstable.\n");
         } else {
             fwrite(STDERR, "To ignore this requirement please set `PHP_CS_FIXER_IGNORE_ENV`.\n");
@@ -47,7 +54,7 @@ set_error_handler(static function ($severity, $message, $file, $line) {
         if (!extension_loaded($extension)) {
             fwrite(STDERR, sprintf("PHP extension ext-%s is missing from your system. Install or enable it.\n", $extension));
 
-            if (getenv('PHP_CS_FIXER_IGNORE_ENV')) {
+            if (filter_var(getenv('PHP_CS_FIXER_IGNORE_ENV'), FILTER_VALIDATE_BOOLEAN)) {
                 fwrite(STDERR, "Ignoring environment requirements because `PHP_CS_FIXER_IGNORE_ENV` is set. Execution may be unstable.\n");
             } else {
                 exit(1);
@@ -57,14 +64,16 @@ set_error_handler(static function ($severity, $message, $file, $line) {
 })();
 
 // load dependencies
-(function () {
+(static function (): void {
     $require = true;
     if (class_exists('Phar')) {
         // Maybe this file is used as phar-stub? Let's try!
         try {
             Phar::mapPhar('php-cs-fixer.phar');
 
+            /** @phpstan-ignore requireOnce.fileNotFound */
             require_once 'phar://php-cs-fixer.phar/vendor/autoload.php';
+
             $require = false;
         } catch (PharException $e) {
         }
@@ -90,9 +99,6 @@ set_error_handler(static function ($severity, $message, $file, $line) {
     }
 })();
 
-use Composer\XdebugHandler\XdebugHandler;
-use PhpCsFixer\Console\Application;
-
 // Restart if xdebug is loaded, unless the environment variable PHP_CS_FIXER_ALLOW_XDEBUG is set.
 $xdebug = new XdebugHandler('PHP_CS_FIXER');
 $xdebug->check();

+ 8 - 4
vendor/friendsofphp/php-cs-fixer/src/AbstractDoctrineAnnotationFixer.php

@@ -28,12 +28,10 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
  * @internal
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  scalar_types?: bool,
- *  union_types?: bool
+ *  ignored_tags?: list<string>,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  scalar_types: bool,
- *  union_types: bool
+ *  ignored_tags: list<string>,
  * }
  *
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
@@ -224,6 +222,12 @@ abstract class AbstractDoctrineAnnotationFixer extends AbstractFixer implements
             $modifierKinds[] = T_READONLY;
         }
 
+        if (\defined('T_PRIVATE_SET')) { // @TODO: drop condition when PHP 8.4+ is required
+            $modifierKinds[] = T_PRIVATE_SET;
+            $modifierKinds[] = T_PROTECTED_SET;
+            $modifierKinds[] = T_PUBLIC_SET;
+        }
+
         while ($tokens[$index]->isGivenKind($modifierKinds)) {
             $index = $tokens->getNextMeaningfulToken($index);
         }

+ 1 - 4
vendor/friendsofphp/php-cs-fixer/src/AbstractFixer.php

@@ -27,10 +27,7 @@ use PhpCsFixer\Tokenizer\Tokens;
  */
 abstract class AbstractFixer implements FixerInterface
 {
-    /**
-     * @var WhitespacesFixerConfig
-     */
-    protected $whitespacesConfig;
+    protected WhitespacesFixerConfig $whitespacesConfig;
 
     public function __construct()
     {

+ 1 - 4
vendor/friendsofphp/php-cs-fixer/src/AbstractFunctionReferenceFixer.php

@@ -24,10 +24,7 @@ use PhpCsFixer\Tokenizer\Tokens;
  */
 abstract class AbstractFunctionReferenceFixer extends AbstractFixer
 {
-    /**
-     * @var null|FunctionsAnalyzer
-     */
-    private $functionsAnalyzer;
+    private ?FunctionsAnalyzer $functionsAnalyzer = null;
 
     public function isCandidate(Tokens $tokens): bool
     {

+ 13 - 3
vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocToTypeDeclarationFixer.php

@@ -34,11 +34,13 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @phpstan-type _CommonTypeInfo array{commonType: string, isNullable: bool}
  * @phpstan-type _AutogeneratedInputConfiguration array{
  *  scalar_types?: bool,
- *  union_types?: bool
+ *  types_map?: array<string, string>,
+ *  union_types?: bool,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
  *  scalar_types: bool,
- *  union_types: bool
+ *  types_map: array<string, string>,
+ *  union_types: bool,
  * }
  *
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
@@ -95,6 +97,10 @@ abstract class AbstractPhpdocToTypeDeclarationFixer extends AbstractFixer implem
                 ->setAllowedTypes(['bool'])
                 ->setDefault(\PHP_VERSION_ID >= 8_00_00)
                 ->getOption(),
+            (new FixerOptionBuilder('types_map', 'Map of custom types, e.g. template types from PHPStan.'))
+                ->setAllowedTypes(['array<string, string>'])
+                ->setDefault([])
+                ->getOption(),
         ]);
     }
 
@@ -213,6 +219,10 @@ abstract class AbstractPhpdocToTypeDeclarationFixer extends AbstractFixer implem
             return null;
         }
 
+        if (\array_key_exists($commonType, $this->configuration['types_map'])) {
+            $commonType = $this->configuration['types_map'][$commonType];
+        }
+
         if (isset($this->scalarTypes[$commonType])) {
             if (false === $this->configuration['scalar_types']) {
                 return null;
@@ -230,7 +240,7 @@ abstract class AbstractPhpdocToTypeDeclarationFixer extends AbstractFixer implem
             return null;
         }
 
-        if (!$typesExpression->isUnionType() || '|' !== $typesExpression->getTypesGlue()) {
+        if (!$typesExpression->isUnionType()) {
             return null;
         }
 

+ 17 - 35
vendor/friendsofphp/php-cs-fixer/src/AbstractPhpdocTypesFixer.php

@@ -63,7 +63,7 @@ abstract class AbstractPhpdocTypesFixer extends AbstractFixer
             }
 
             foreach ($annotations as $annotation) {
-                $this->fixTypes($annotation);
+                $this->fixType($annotation);
             }
 
             $tokens[$index] = new Token([T_DOC_COMMENT, $doc->getContent()]);
@@ -76,48 +76,30 @@ abstract class AbstractPhpdocTypesFixer extends AbstractFixer
     abstract protected function normalize(string $type): string;
 
     /**
-     * Fix the types at the given line.
+     * Fix the type at the given line.
      *
      * We must be super careful not to modify parts of words.
      *
      * This will be nicely handled behind the scenes for us by the annotation class.
      */
-    private function fixTypes(Annotation $annotation): void
+    private function fixType(Annotation $annotation): void
     {
-        $types = $annotation->getTypes();
+        $typeExpression = $annotation->getTypeExpression();
 
-        $new = $this->normalizeTypes($types);
-
-        if ($types !== $new) {
-            $annotation->setTypes($new);
+        if (null === $typeExpression) {
+            return;
         }
-    }
 
-    /**
-     * @param list<string> $types
-     *
-     * @return list<string>
-     */
-    private function normalizeTypes(array $types): array
-    {
-        return array_map(
-            function (string $type): string {
-                $typeExpression = new TypeExpression($type, null, []);
-
-                $typeExpression->walkTypes(function (TypeExpression $type): void {
-                    if (!$type->isUnionType()) {
-                        $value = $this->normalize($type->toString());
-
-                        // TODO TypeExpression should be immutable and walkTypes method should be changed to mapTypes method
-                        \Closure::bind(static function () use ($type, $value): void {
-                            $type->value = $value;
-                        }, null, TypeExpression::class)();
-                    }
-                });
-
-                return $typeExpression->toString();
-            },
-            $types
-        );
+        $newTypeExpression = $typeExpression->mapTypes(function (TypeExpression $type) {
+            if (!$type->isCompositeType()) {
+                $value = $this->normalize($type->toString());
+
+                return new TypeExpression($value, null, []);
+            }
+
+            return $type;
+        });
+
+        $annotation->setTypes([$newTypeExpression->toString()]);
     }
 }

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Cache/Directory.php

@@ -17,6 +17,8 @@ namespace PhpCsFixer\Cache;
 /**
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class Directory implements DirectoryInterface

+ 3 - 6
vendor/friendsofphp/php-cs-fixer/src/Cache/FileCacheManager.php

@@ -14,7 +14,7 @@ declare(strict_types=1);
 
 namespace PhpCsFixer\Cache;
 
-use PhpCsFixer\Tokenizer\CodeHasher;
+use PhpCsFixer\Hasher;
 
 /**
  * Class supports caching information about state of fixing files.
@@ -48,10 +48,7 @@ final class FileCacheManager implements CacheManagerInterface
 
     private bool $signatureWasUpdated = false;
 
-    /**
-     * @var CacheInterface
-     */
-    private $cache;
+    private CacheInterface $cache;
 
     public function __construct(
         FileHandlerInterface $handler,
@@ -141,6 +138,6 @@ final class FileCacheManager implements CacheManagerInterface
 
     private function calcHash(string $content): string
     {
-        return CodeHasher::calculateCodeHash($content);
+        return Hasher::calculate($content);
     }
 }

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Cache/Signature.php

@@ -17,6 +17,8 @@ namespace PhpCsFixer\Cache;
 /**
  * @author Andreas Möller <am@localheinz.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class Signature implements SignatureInterface

+ 25 - 5
vendor/friendsofphp/php-cs-fixer/src/Config.php

@@ -25,6 +25,9 @@ use PhpCsFixer\Runner\Parallel\ParallelConfigFactory;
  */
 class Config implements ConfigInterface, ParallelAwareConfigInterface
 {
+    /**
+     * @var non-empty-string
+     */
     private string $cacheFile = '.php-cs-fixer.cache';
 
     /**
@@ -37,24 +40,27 @@ class Config implements ConfigInterface, ParallelAwareConfigInterface
      */
     private ?iterable $finder = null;
 
-    private string $format = 'txt';
+    private string $format;
 
     private bool $hideProgress = false;
 
+    /**
+     * @var non-empty-string
+     */
     private string $indent = '    ';
 
     private bool $isRiskyAllowed = false;
 
+    /**
+     * @var non-empty-string
+     */
     private string $lineEnding = "\n";
 
     private string $name;
 
     private ParallelConfig $parallelConfig;
 
-    /**
-     * @var null|string
-     */
-    private $phpExecutable;
+    private ?string $phpExecutable = null;
 
     /**
      * @TODO: 4.0 - update to @PER
@@ -71,9 +77,11 @@ class Config implements ConfigInterface, ParallelAwareConfigInterface
         if (Utils::isFutureModeEnabled()) {
             $this->name = $name.' (future mode)';
             $this->rules = ['@PER-CS' => true];
+            $this->format = '@auto';
         } else {
             $this->name = $name;
             $this->rules = ['@PSR12' => true];
+            $this->format = 'txt';
         }
 
         // @TODO 4.0 cleanup
@@ -84,6 +92,9 @@ class Config implements ConfigInterface, ParallelAwareConfigInterface
         }
     }
 
+    /**
+     * @return non-empty-string
+     */
     public function getCacheFile(): string
     {
         return $this->cacheFile;
@@ -163,6 +174,9 @@ class Config implements ConfigInterface, ParallelAwareConfigInterface
         return $this;
     }
 
+    /**
+     * @param non-empty-string $cacheFile
+     */
     public function setCacheFile(string $cacheFile): ConfigInterface
     {
         $this->cacheFile = $cacheFile;
@@ -191,6 +205,9 @@ class Config implements ConfigInterface, ParallelAwareConfigInterface
         return $this;
     }
 
+    /**
+     * @param non-empty-string $indent
+     */
     public function setIndent(string $indent): ConfigInterface
     {
         $this->indent = $indent;
@@ -198,6 +215,9 @@ class Config implements ConfigInterface, ParallelAwareConfigInterface
         return $this;
     }
 
+    /**
+     * @param non-empty-string $lineEnding
+     */
     public function setLineEnding(string $lineEnding): ConfigInterface
     {
         $this->lineEnding = $lineEnding;

+ 23 - 1
vendor/friendsofphp/php-cs-fixer/src/ConfigInterface.php

@@ -25,7 +25,7 @@ interface ConfigInterface
     /**
      * Returns the path to the cache file.
      *
-     * @return null|string Returns null if not using cache
+     * @return null|non-empty-string Returns null if not using cache
      */
     public function getCacheFile(): ?string;
 
@@ -50,8 +50,14 @@ interface ConfigInterface
      */
     public function getHideProgress(): bool;
 
+    /**
+     * @return non-empty-string
+     */
     public function getIndent(): string;
 
+    /**
+     * @return non-empty-string
+     */
     public function getLineEnding(): string;
 
     /**
@@ -65,6 +71,10 @@ interface ConfigInterface
 
     /**
      * Get configured PHP executable, if any.
+     *
+     * @deprecated
+     *
+     * @TODO 4.0 remove me
      */
     public function getPhpExecutable(): ?string;
 
@@ -98,6 +108,8 @@ interface ConfigInterface
 
     /**
      * Sets the path to the cache file.
+     *
+     * @param non-empty-string $cacheFile
      */
     public function setCacheFile(string $cacheFile): self;
 
@@ -110,12 +122,22 @@ interface ConfigInterface
 
     public function setHideProgress(bool $hideProgress): self;
 
+    /**
+     * @param non-empty-string $indent
+     */
     public function setIndent(string $indent): self;
 
+    /**
+     * @param non-empty-string $lineEnding
+     */
     public function setLineEnding(string $lineEnding): self;
 
     /**
      * Set PHP executable.
+     *
+     * @deprecated
+     *
+     * @TODO 4.0 remove me
      */
     public function setPhpExecutable(?string $phpExecutable): self;
 

+ 5 - 2
vendor/friendsofphp/php-cs-fixer/src/Console/Application.php

@@ -44,9 +44,12 @@ use Symfony\Component\Console\Output\OutputInterface;
 final class Application extends BaseApplication
 {
     public const NAME = 'PHP CS Fixer';
-    public const VERSION = '3.64.0';
-    public const VERSION_CODENAME = 'Space Sets';
+    public const VERSION = '3.75.0';
+    public const VERSION_CODENAME = 'Persian Successor';
 
+    /**
+     * @readonly
+     */
     private ToolInfo $toolInfo;
     private ?Command $executedCommand = null;
 

+ 0 - 2
vendor/friendsofphp/php-cs-fixer/src/Console/Command/CheckCommand.php

@@ -27,10 +27,8 @@ use Symfony\Component\Console\Input\InputOption;
 #[AsCommand(name: 'check', description: 'Checks if configured files/directories comply with configured rules.')]
 final class CheckCommand extends FixCommand
 {
-    /** @var string */
     protected static $defaultName = 'check';
 
-    /** @var string */
     protected static $defaultDescription = 'Checks if configured files/directories comply with configured rules.';
 
     public function __construct(ToolInfoInterface $toolInfo)

+ 3 - 4
vendor/friendsofphp/php-cs-fixer/src/Console/Command/DescribeCommand.php

@@ -56,20 +56,19 @@ use Symfony\Component\Console\Output\OutputInterface;
 #[AsCommand(name: 'describe')]
 final class DescribeCommand extends Command
 {
-    /** @var string */
     protected static $defaultName = 'describe';
 
     /**
      * @var ?list<string>
      */
-    private $setNames;
+    private ?array $setNames = null;
 
     private FixerFactory $fixerFactory;
 
     /**
-     * @var array<string, FixerInterface>
+     * @var null|array<string, FixerInterface>
      */
-    private $fixers;
+    private ?array $fixers = null;
 
     public function __construct(?FixerFactory $fixerFactory = null)
     {

+ 0 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/Command/DocumentationCommand.php

@@ -33,7 +33,6 @@ use Symfony\Component\Finder\SplFileInfo;
 #[AsCommand(name: 'documentation')]
 final class DocumentationCommand extends Command
 {
-    /** @var string */
     protected static $defaultName = 'documentation';
 
     private Filesystem $filesystem;

+ 9 - 7
vendor/friendsofphp/php-cs-fixer/src/Console/Command/FixCommand.php

@@ -25,7 +25,7 @@ use PhpCsFixer\Console\Output\Progress\ProgressOutputFactory;
 use PhpCsFixer\Console\Output\Progress\ProgressOutputType;
 use PhpCsFixer\Console\Report\FixReport\ReportSummary;
 use PhpCsFixer\Error\ErrorsManager;
-use PhpCsFixer\FixerFileProcessedEvent;
+use PhpCsFixer\Runner\Event\FileProcessed;
 use PhpCsFixer\Runner\Runner;
 use PhpCsFixer\ToolInfoInterface;
 use Symfony\Component\Console\Attribute\AsCommand;
@@ -52,10 +52,8 @@ use Symfony\Component\Stopwatch\Stopwatch;
 #[AsCommand(name: 'fix', description: 'Fixes a directory or a file.')]
 /* final */ class FixCommand extends Command
 {
-    /** @var string */
     protected static $defaultName = 'fix';
 
-    /** @var string */
     protected static $defaultDescription = 'Fixes a directory or a file.';
 
     private EventDispatcherInterface $eventDispatcher;
@@ -102,7 +100,11 @@ use Symfony\Component\Stopwatch\Stopwatch;
 
                 <info>$ php %command.full_name% --path-mode=intersection /path/to/dir</info>
 
-            The <comment>--format</comment> option for the output format. Supported formats are `txt` (default one), `json`, `xml`, `checkstyle`, `junit` and `gitlab`.
+            The <comment>--format</comment> option for the output format. Supported formats are `@auto` (default one on v4+), `txt` (default one on v3), `json`, `xml`, `checkstyle`, `junit` and `gitlab`.
+
+            * `@auto` aims to auto-select best reporter for given CI or local execution (resolution into best format is outside of BC promise and is future-ready)
+              * `gitlab` for GitLab
+            * `@auto,{format}` takes `@auto` under CI, and {format} otherwise
 
             NOTE: the output for the following formats are generated in accordance with schemas
 
@@ -333,11 +335,11 @@ use Symfony\Component\Stopwatch\Stopwatch;
             $resolver->getConfigFile()
         );
 
-        $this->eventDispatcher->addListener(FixerFileProcessedEvent::NAME, [$progressOutput, 'onFixerFileProcessed']);
+        $this->eventDispatcher->addListener(FileProcessed::NAME, [$progressOutput, 'onFixerFileProcessed']);
         $this->stopwatch->start('fixFiles');
         $changed = $runner->fix();
         $this->stopwatch->stop('fixFiles');
-        $this->eventDispatcher->removeListener(FixerFileProcessedEvent::NAME, [$progressOutput, 'onFixerFileProcessed']);
+        $this->eventDispatcher->removeListener(FileProcessed::NAME, [$progressOutput, 'onFixerFileProcessed']);
 
         $progressOutput->printLegend();
 
@@ -390,6 +392,6 @@ use Symfony\Component\Stopwatch\Stopwatch;
 
     protected function isDryRun(InputInterface $input): bool
     {
-        return $input->getOption('dry-run');
+        return $input->getOption('dry-run'); // @phpstan-ignore symfonyConsole.optionNotFound (Because PHPStan doesn't recognise the method is overridden in the child class and this parameter is _not_ used in the child class.)
     }
 }

+ 0 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/Command/HelpCommand.php

@@ -32,7 +32,6 @@ use Symfony\Component\Console\Output\OutputInterface;
 #[AsCommand(name: 'help')]
 final class HelpCommand extends BaseHelpCommand
 {
-    /** @var string */
     protected static $defaultName = 'help';
 
     /**

+ 0 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListFilesCommand.php

@@ -33,7 +33,6 @@ use Symfony\Component\Filesystem\Path;
 #[AsCommand(name: 'list-files')]
 final class ListFilesCommand extends Command
 {
-    /** @var string */
     protected static $defaultName = 'list-files';
 
     private ConfigInterface $defaultConfig;

+ 0 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/Command/ListSetsCommand.php

@@ -36,7 +36,6 @@ use Symfony\Component\Console\Output\OutputInterface;
 #[AsCommand(name: 'list-sets')]
 final class ListSetsCommand extends Command
 {
-    /** @var string */
     protected static $defaultName = 'list-sets';
 
     protected function configure(): void

+ 0 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/Command/SelfUpdateCommand.php

@@ -37,7 +37,6 @@ use Symfony\Component\Console\Output\OutputInterface;
 #[AsCommand(name: 'self-update')]
 final class SelfUpdateCommand extends Command
 {
-    /** @var string */
     protected static $defaultName = 'self-update';
 
     private NewVersionCheckerInterface $versionChecker;

+ 7 - 9
vendor/friendsofphp/php-cs-fixer/src/Console/Command/WorkerCommand.php

@@ -20,7 +20,7 @@ use PhpCsFixer\Cache\NullCacheManager;
 use PhpCsFixer\Config;
 use PhpCsFixer\Console\ConfigurationResolver;
 use PhpCsFixer\Error\ErrorsManager;
-use PhpCsFixer\FixerFileProcessedEvent;
+use PhpCsFixer\Runner\Event\FileProcessed;
 use PhpCsFixer\Runner\Parallel\ParallelAction;
 use PhpCsFixer\Runner\Parallel\ParallelConfigFactory;
 use PhpCsFixer\Runner\Parallel\ParallelisationException;
@@ -49,10 +49,8 @@ final class WorkerCommand extends Command
     /** @var string Prefix used before JSON-encoded error printed in the worker's process */
     public const ERROR_PREFIX = 'WORKER_ERROR::';
 
-    /** @var string */
     protected static $defaultName = 'worker';
 
-    /** @var string */
     protected static $defaultDescription = 'Internal command for running fixers in parallel';
 
     private ToolInfoInterface $toolInfo;
@@ -60,7 +58,7 @@ final class WorkerCommand extends Command
     private ErrorsManager $errorsManager;
     private EventDispatcherInterface $eventDispatcher;
 
-    /** @var list<FixerFileProcessedEvent> */
+    /** @var list<FileProcessed> */
     private array $events;
 
     public function __construct(ToolInfoInterface $toolInfo)
@@ -154,10 +152,10 @@ final class WorkerCommand extends Command
                         /** @var iterable<int, string> $files */
                         $files = $json['files'];
 
-                        foreach ($files as $absolutePath) {
+                        foreach ($files as $path) {
                             // Reset events because we want to collect only those coming from analysed files chunk
                             $this->events = [];
-                            $runner->setFileIterator(new \ArrayIterator([new \SplFileInfo($absolutePath)]));
+                            $runner->setFileIterator(new \ArrayIterator([new \SplFileInfo($path)]));
                             $analysisResult = $runner->fix();
 
                             if (1 !== \count($this->events)) {
@@ -170,11 +168,11 @@ final class WorkerCommand extends Command
 
                             $out->write([
                                 'action' => ParallelAction::WORKER_RESULT,
-                                'file' => $absolutePath,
+                                'file' => $path,
                                 'fileHash' => $this->events[0]->getFileHash(),
                                 'status' => $this->events[0]->getStatus(),
                                 'fixInfo' => array_pop($analysisResult),
-                                'errors' => $this->errorsManager->forPath($absolutePath),
+                                'errors' => $this->errorsManager->forPath($path),
                             ]);
                         }
 
@@ -204,7 +202,7 @@ final class WorkerCommand extends Command
         }
 
         // There's no one single source of truth when it comes to fixing single file, we need to collect statuses from events.
-        $this->eventDispatcher->addListener(FixerFileProcessedEvent::NAME, function (FixerFileProcessedEvent $event): void {
+        $this->eventDispatcher->addListener(FileProcessed::NAME, function (FileProcessed $event): void {
             $this->events[] = $event;
         });
 

+ 60 - 72
vendor/friendsofphp/php-cs-fixer/src/Console/ConfigurationResolver.php

@@ -56,60 +56,56 @@ use Symfony\Component\Finder\Finder as SymfonyFinder;
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  *
  * @internal
+ *
+ * @phpstan-type _Options array{
+ *      allow-risky: null|string,
+ *      cache-file: null|string,
+ *      config: null|string,
+ *      diff: null|string,
+ *      dry-run: null|bool,
+ *      format: null|string,
+ *      path: list<string>,
+ *      path-mode: self::PATH_MODE_*,
+ *      rules: null|string,
+ *      sequential: null|string,
+ *      show-progress: null|string,
+ *      stop-on-violation: null|bool,
+ *      using-cache: null|string,
+ *      verbosity: null|string,
+ *  }
  */
 final class ConfigurationResolver
 {
     public const PATH_MODE_OVERRIDE = 'override';
     public const PATH_MODE_INTERSECTION = 'intersection';
 
-    /**
-     * @var null|bool
-     */
-    private $allowRisky;
+    private ?bool $allowRisky = null;
 
-    /**
-     * @var null|ConfigInterface
-     */
-    private $config;
+    private ?ConfigInterface $config = null;
 
-    /**
-     * @var null|string
-     */
-    private $configFile;
+    private ?string $configFile = null;
 
     private string $cwd;
 
     private ConfigInterface $defaultConfig;
 
-    /**
-     * @var null|ReporterInterface
-     */
-    private $reporter;
+    private ?ReporterInterface $reporter = null;
 
-    /**
-     * @var null|bool
-     */
-    private $isStdIn;
+    private ?bool $isStdIn = null;
 
-    /**
-     * @var null|bool
-     */
-    private $isDryRun;
+    private ?bool $isDryRun = null;
 
     /**
      * @var null|list<FixerInterface>
      */
-    private $fixers;
+    private ?array $fixers = null;
 
-    /**
-     * @var null|bool
-     */
-    private $configFinderIsOverridden;
+    private ?bool $configFinderIsOverridden = null;
 
     private ToolInfoInterface $toolInfo;
 
     /**
-     * @var array<string, mixed>
+     * @var _Options
      */
     private array $options = [
         'allow-risky' => null,
@@ -128,25 +124,13 @@ final class ConfigurationResolver
         'verbosity' => null,
     ];
 
-    /**
-     * @var null|string
-     */
-    private $cacheFile;
+    private ?string $cacheFile = null;
 
-    /**
-     * @var null|CacheManagerInterface
-     */
-    private $cacheManager;
+    private ?CacheManagerInterface $cacheManager = null;
 
-    /**
-     * @var null|DifferInterface
-     */
-    private $differ;
+    private ?DifferInterface $differ = null;
 
-    /**
-     * @var null|Directory
-     */
-    private $directory;
+    private ?Directory $directory = null;
 
     /**
      * @var null|iterable<\SplFileInfo>
@@ -155,10 +139,7 @@ final class ConfigurationResolver
 
     private ?string $format = null;
 
-    /**
-     * @var null|Linter
-     */
-    private $linter;
+    private ?Linter $linter = null;
 
     /**
      * @var null|list<string>
@@ -166,24 +147,15 @@ final class ConfigurationResolver
     private ?array $path = null;
 
     /**
-     * @var null|string
+     * @var null|ProgressOutputType::*
      */
     private $progress;
 
-    /**
-     * @var null|RuleSet
-     */
-    private $ruleSet;
+    private ?RuleSet $ruleSet = null;
 
-    /**
-     * @var null|bool
-     */
-    private $usingCache;
+    private ?bool $usingCache = null;
 
-    /**
-     * @var FixerFactory
-     */
-    private $fixerFactory;
+    private ?FixerFactory $fixerFactory = null;
 
     /**
      * @param array<string, mixed> $options
@@ -409,12 +381,14 @@ final class ConfigurationResolver
     }
 
     /**
+     * @return ProgressOutputType::*
+     *
      * @throws InvalidConfigurationException
      */
     public function getProgressType(): string
     {
         if (null === $this->progress) {
-            if ('txt' === $this->getFormat()) {
+            if ('txt' === $this->resolveFormat()) {
                 $progressType = $this->options['show-progress'];
 
                 if (null === $progressType) {
@@ -444,7 +418,7 @@ final class ConfigurationResolver
             $reporterFactory = new ReporterFactory();
             $reporterFactory->registerBuiltInReporters();
 
-            $format = $this->getFormat();
+            $format = $this->resolveFormat();
 
             try {
                 $this->reporter = $reporterFactory->getReporter($format);
@@ -600,10 +574,25 @@ final class ConfigurationResolver
         return $this->fixerFactory;
     }
 
-    private function getFormat(): string
+    private function resolveFormat(): string
     {
         if (null === $this->format) {
-            $this->format = $this->options['format'] ?? $this->getConfig()->getFormat();
+            $formatCandidate = $this->options['format'] ?? $this->getConfig()->getFormat();
+            $parts = explode(',', $formatCandidate);
+
+            if (\count($parts) > 2) {
+                throw new InvalidConfigurationException(\sprintf('The format "%s" is invalid.', $formatCandidate));
+            }
+
+            $this->format = $parts[0];
+
+            if ('@auto' === $this->format) {
+                $this->format = $parts[1] ?? 'txt';
+
+                if (filter_var(getenv('GITLAB_CI'), FILTER_VALIDATE_BOOL)) {
+                    $this->format = 'gitlab';
+                }
+            }
         }
 
         return $this->format;
@@ -932,14 +921,13 @@ final class ConfigurationResolver
         $this->options[$name] = $value;
     }
 
+    /**
+     * @param key-of<_Options> $optionName
+     */
     private function resolveOptionBooleanValue(string $optionName): bool
     {
         $value = $this->options[$optionName];
 
-        if (!\is_string($value)) {
-            throw new InvalidConfigurationException(\sprintf('Expected boolean or string value for option "%s".', $optionName));
-        }
-
         if ('yes' === $value) {
             return true;
         }
@@ -948,7 +936,7 @@ final class ConfigurationResolver
             return false;
         }
 
-        throw new InvalidConfigurationException(\sprintf('Expected "yes" or "no" for option "%s", got "%s".', $optionName, $value));
+        throw new InvalidConfigurationException(\sprintf('Expected "yes" or "no" for option "%s", got "%s".', $optionName, \is_object($value) ? \get_class($value) : (\is_scalar($value) ? $value : \gettype($value))));
     }
 
     private static function separatedContextLessInclude(string $path): ConfigInterface

+ 3 - 4
vendor/friendsofphp/php-cs-fixer/src/Console/Output/ErrorOutput.php

@@ -22,16 +22,15 @@ use Symfony\Component\Console\Formatter\OutputFormatter;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
+ * @readonly
+ *
  * @internal
  */
 final class ErrorOutput
 {
     private OutputInterface $output;
 
-    /**
-     * @var bool
-     */
-    private $isDecorated;
+    private bool $isDecorated;
 
     public function __construct(OutputInterface $output)
     {

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Output/OutputContext.php

@@ -17,6 +17,8 @@ namespace PhpCsFixer\Console\Output;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
+ * @readonly
+ *
  * @internal
  */
 final class OutputContext

+ 14 - 17
vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/DotsOutput.php

@@ -15,7 +15,7 @@ declare(strict_types=1);
 namespace PhpCsFixer\Console\Output\Progress;
 
 use PhpCsFixer\Console\Output\OutputContext;
-use PhpCsFixer\FixerFileProcessedEvent;
+use PhpCsFixer\Runner\Event\FileProcessed;
 use Symfony\Component\Console\Output\OutputInterface;
 
 /**
@@ -28,15 +28,15 @@ final class DotsOutput implements ProgressOutputInterface
     /**
      * File statuses map.
      *
-     * @var array<FixerFileProcessedEvent::STATUS_*, array{symbol: string, format: string, description: string}>
+     * @var array<FileProcessed::STATUS_*, array{symbol: string, format: string, description: string}>
      */
-    private static array $eventStatusMap = [
-        FixerFileProcessedEvent::STATUS_NO_CHANGES => ['symbol' => '.', 'format' => '%s', 'description' => 'no changes'],
-        FixerFileProcessedEvent::STATUS_FIXED => ['symbol' => 'F', 'format' => '<fg=green>%s</fg=green>', 'description' => 'fixed'],
-        FixerFileProcessedEvent::STATUS_SKIPPED => ['symbol' => 'S', 'format' => '<fg=cyan>%s</fg=cyan>', 'description' => 'skipped (cached or empty file)'],
-        FixerFileProcessedEvent::STATUS_INVALID => ['symbol' => 'I', 'format' => '<bg=red>%s</bg=red>', 'description' => 'invalid file syntax (file ignored)'],
-        FixerFileProcessedEvent::STATUS_EXCEPTION => ['symbol' => 'E', 'format' => '<bg=red>%s</bg=red>', 'description' => 'error'],
-        FixerFileProcessedEvent::STATUS_LINT => ['symbol' => 'E', 'format' => '<bg=red>%s</bg=red>', 'description' => 'error'],
+    private const EVENT_STATUS_MAP = [
+        FileProcessed::STATUS_NO_CHANGES => ['symbol' => '.', 'format' => '%s', 'description' => 'no changes'],
+        FileProcessed::STATUS_FIXED => ['symbol' => 'F', 'format' => '<fg=green>%s</fg=green>', 'description' => 'fixed'],
+        FileProcessed::STATUS_SKIPPED => ['symbol' => 'S', 'format' => '<fg=cyan>%s</fg=cyan>', 'description' => 'skipped (cached or empty file)'],
+        FileProcessed::STATUS_INVALID => ['symbol' => 'I', 'format' => '<bg=red>%s</bg=red>', 'description' => 'invalid file syntax (file ignored)'],
+        FileProcessed::STATUS_EXCEPTION => ['symbol' => 'E', 'format' => '<bg=red>%s</bg=red>', 'description' => 'error'],
+        FileProcessed::STATUS_LINT => ['symbol' => 'E', 'format' => '<bg=red>%s</bg=red>', 'description' => 'error'],
     ];
 
     /** @readonly */
@@ -44,10 +44,7 @@ final class DotsOutput implements ProgressOutputInterface
 
     private int $processedFiles = 0;
 
-    /**
-     * @var int
-     */
-    private $symbolsPerLine;
+    private int $symbolsPerLine;
 
     public function __construct(OutputContext $context)
     {
@@ -79,9 +76,9 @@ final class DotsOutput implements ProgressOutputInterface
         throw new \BadMethodCallException('Cannot unserialize '.self::class);
     }
 
-    public function onFixerFileProcessed(FixerFileProcessedEvent $event): void
+    public function onFixerFileProcessed(FileProcessed $event): void
     {
-        $status = self::$eventStatusMap[$event->getStatus()];
+        $status = self::EVENT_STATUS_MAP[$event->getStatus()];
         $this->getOutput()->write($this->getOutput()->isDecorated() ? \sprintf($status['format'], $status['symbol']) : $status['symbol']);
 
         ++$this->processedFiles;
@@ -108,9 +105,9 @@ final class DotsOutput implements ProgressOutputInterface
     {
         $symbols = [];
 
-        foreach (self::$eventStatusMap as $status) {
+        foreach (self::EVENT_STATUS_MAP as $status) {
             $symbol = $status['symbol'];
-            if ('' === $symbol || isset($symbols[$symbol])) {
+            if (isset($symbols[$symbol])) {
                 continue;
             }
 

+ 4 - 2
vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/NullOutput.php

@@ -14,14 +14,16 @@ declare(strict_types=1);
 
 namespace PhpCsFixer\Console\Output\Progress;
 
-use PhpCsFixer\FixerFileProcessedEvent;
+use PhpCsFixer\Runner\Event\FileProcessed;
 
 /**
+ * @readonly
+ *
  * @internal
  */
 final class NullOutput implements ProgressOutputInterface
 {
     public function printLegend(): void {}
 
-    public function onFixerFileProcessed(FixerFileProcessedEvent $event): void {}
+    public function onFixerFileProcessed(FileProcessed $event): void {}
 }

+ 4 - 2
vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/PercentageBarOutput.php

@@ -15,12 +15,14 @@ declare(strict_types=1);
 namespace PhpCsFixer\Console\Output\Progress;
 
 use PhpCsFixer\Console\Output\OutputContext;
-use PhpCsFixer\FixerFileProcessedEvent;
+use PhpCsFixer\Runner\Event\FileProcessed;
 use Symfony\Component\Console\Helper\ProgressBar;
 
 /**
  * Output writer to show the progress of a FixCommand using progress bar (percentage).
  *
+ * @readonly
+ *
  * @internal
  */
 final class PercentageBarOutput implements ProgressOutputInterface
@@ -63,7 +65,7 @@ final class PercentageBarOutput implements ProgressOutputInterface
         throw new \BadMethodCallException('Cannot unserialize '.self::class);
     }
 
-    public function onFixerFileProcessed(FixerFileProcessedEvent $event): void
+    public function onFixerFileProcessed(FileProcessed $event): void
     {
         $this->progressBar->advance(1);
 

+ 11 - 3
vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputFactory.php

@@ -17,19 +17,24 @@ namespace PhpCsFixer\Console\Output\Progress;
 use PhpCsFixer\Console\Output\OutputContext;
 
 /**
+ * @readonly
+ *
  * @internal
  */
 final class ProgressOutputFactory
 {
     /**
-     * @var array<string, class-string<ProgressOutputInterface>>
+     * @var array<ProgressOutputType::*, class-string<ProgressOutputInterface>>
      */
-    private static array $outputTypeMap = [
+    private const OUTPUT_TYPE_MAP = [
         ProgressOutputType::NONE => NullOutput::class,
         ProgressOutputType::DOTS => DotsOutput::class,
         ProgressOutputType::BAR => PercentageBarOutput::class,
     ];
 
+    /**
+     * @param ProgressOutputType::* $outputType
+     */
     public function create(string $outputType, OutputContext $context): ProgressOutputInterface
     {
         if (null === $context->getOutput()) {
@@ -45,7 +50,10 @@ final class ProgressOutputFactory
             );
         }
 
-        return new self::$outputTypeMap[$outputType]($context);
+        $outputClass = self::OUTPUT_TYPE_MAP[$outputType];
+
+        // @phpstan-ignore-next-line new.noConstructor
+        return new $outputClass($context);
     }
 
     private function isBuiltInType(string $outputType): bool

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Console/Output/Progress/ProgressOutputInterface.php

@@ -14,7 +14,7 @@ declare(strict_types=1);
 
 namespace PhpCsFixer\Console\Output\Progress;
 
-use PhpCsFixer\FixerFileProcessedEvent;
+use PhpCsFixer\Runner\Event\FileProcessed;
 
 /**
  * @internal
@@ -23,5 +23,5 @@ interface ProgressOutputInterface
 {
     public function printLegend(): void;
 
-    public function onFixerFileProcessed(FixerFileProcessedEvent $event): void;
+    public function onFixerFileProcessed(FileProcessed $event): void;
 }

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/CheckstyleReporter.php

@@ -20,6 +20,8 @@ use Symfony\Component\Console\Formatter\OutputFormatter;
 /**
  * @author Kévin Gomez <contact@kevingomez.fr>
  *
+ * @readonly
+ *
  * @internal
  */
 final class CheckstyleReporter implements ReporterInterface

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/GitlabReporter.php

@@ -27,6 +27,8 @@ use Symfony\Component\Console\Formatter\OutputFormatter;
  *
  * @author Hans-Christian Otto <c.otto@suora.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class GitlabReporter implements ReporterInterface

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JsonReporter.php

@@ -20,6 +20,8 @@ use Symfony\Component\Console\Formatter\OutputFormatter;
 /**
  * @author Boris Gorbylev <ekho@ekho.name>
  *
+ * @readonly
+ *
  * @internal
  */
 final class JsonReporter implements ReporterInterface

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/JunitReporter.php

@@ -21,6 +21,8 @@ use Symfony\Component\Console\Formatter\OutputFormatter;
 /**
  * @author Boris Gorbylev <ekho@ekho.name>
  *
+ * @readonly
+ *
  * @internal
  */
 final class JunitReporter implements ReporterInterface

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/ReportSummary.php

@@ -17,6 +17,8 @@ namespace PhpCsFixer\Console\Report\FixReport;
 /**
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class ReportSummary

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/TextReporter.php

@@ -19,6 +19,8 @@ use PhpCsFixer\Differ\DiffConsoleFormatter;
 /**
  * @author Boris Gorbylev <ekho@ekho.name>
  *
+ * @readonly
+ *
  * @internal
  */
 final class TextReporter implements ReporterInterface

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/FixReport/XmlReporter.php

@@ -20,6 +20,8 @@ use Symfony\Component\Console\Formatter\OutputFormatter;
 /**
  * @author Boris Gorbylev <ekho@ekho.name>
  *
+ * @readonly
+ *
  * @internal
  */
 final class XmlReporter implements ReporterInterface

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/JsonReporter.php

@@ -19,6 +19,8 @@ use PhpCsFixer\RuleSet\RuleSetDescriptionInterface;
 /**
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class JsonReporter implements ReporterInterface

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/ReportSummary.php

@@ -19,6 +19,8 @@ use PhpCsFixer\RuleSet\RuleSetDescriptionInterface;
 /**
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class ReportSummary

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Console/Report/ListSetsReport/TextReporter.php

@@ -19,6 +19,8 @@ use PhpCsFixer\RuleSet\RuleSetDescriptionInterface;
 /**
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class TextReporter implements ReporterInterface

+ 8 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/GithubClient.php

@@ -15,11 +15,18 @@ declare(strict_types=1);
 namespace PhpCsFixer\Console\SelfUpdate;
 
 /**
+ * @readonly
+ *
  * @internal
  */
 final class GithubClient implements GithubClientInterface
 {
-    private string $url = 'https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/tags';
+    private string $url;
+
+    public function __construct(string $url = 'https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/tags')
+    {
+        $this->url = $url;
+    }
 
     public function getTags(): array
     {

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Console/SelfUpdate/NewVersionChecker.php

@@ -30,7 +30,7 @@ final class NewVersionChecker implements NewVersionCheckerInterface
     /**
      * @var null|list<string>
      */
-    private $availableVersions;
+    private ?array $availableVersions = null;
 
     public function __construct(GithubClientInterface $githubClient)
     {

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Differ/DiffConsoleFormatter.php

@@ -20,6 +20,8 @@ use Symfony\Component\Console\Formatter\OutputFormatter;
 /**
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class DiffConsoleFormatter

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Differ/FullDiffer.php

@@ -20,6 +20,8 @@ use SebastianBergmann\Diff\Output\StrictUnifiedDiffOutputBuilder;
 /**
  * @author Dariusz Rumiński <dariusz.ruminski@gmail.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class FullDiffer implements DifferInterface

+ 32 - 25
vendor/friendsofphp/php-cs-fixer/src/DocBlock/Annotation.php

@@ -31,7 +31,7 @@ final class Annotation
      *
      * @var list<string>
      */
-    private static array $tags = [
+    private const TAGS = [
         'method',
         'param',
         'property',
@@ -52,43 +52,32 @@ final class Annotation
 
     /**
      * The position of the first line of the annotation in the docblock.
-     *
-     * @var int
      */
-    private $start;
+    private int $start;
 
     /**
      * The position of the last line of the annotation in the docblock.
-     *
-     * @var int
      */
-    private $end;
+    private int $end;
 
     /**
      * The associated tag.
-     *
-     * @var null|Tag
      */
-    private $tag;
+    private ?Tag $tag = null;
 
     /**
      * Lazy loaded, cached types content.
-     *
-     * @var null|string
      */
-    private $typesContent;
+    private ?string $typesContent = null;
 
     /**
      * The cached types.
      *
      * @var null|list<string>
      */
-    private $types;
+    private ?array $types = null;
 
-    /**
-     * @var null|NamespaceAnalysis
-     */
-    private $namespace;
+    private ?NamespaceAnalysis $namespace = null;
 
     /**
      * @var list<NamespaceUseAnalysis>
@@ -127,7 +116,7 @@ final class Annotation
      */
     public static function getTagsWithTypes(): array
     {
-        return self::$tags;
+        return self::TAGS;
     }
 
     /**
@@ -214,9 +203,21 @@ final class Annotation
      */
     public function setTypes(array $types): void
     {
-        $pattern = '/'.preg_quote($this->getTypesContent(), '/').'/';
+        $origTypesContent = $this->getTypesContent();
+        $newTypesContent = implode(
+            // Fallback to union type is provided for backward compatibility (previously glue was set to `|` by default even when type was not composite)
+            // @TODO Better handling for cases where type is fixed (original type is not composite, but was made composite during fix)
+            $this->getTypeExpression()->getTypesGlue() ?? '|',
+            $types
+        );
+
+        if ($origTypesContent === $newTypesContent) {
+            return;
+        }
 
-        $this->lines[0]->setContent(Preg::replace($pattern, implode($this->getTypeExpression()->getTypesGlue(), $types), $this->lines[0]->getContent(), 1));
+        $pattern = '/'.preg_quote($origTypesContent, '/').'/';
+
+        $this->lines[0]->setContent(Preg::replace($pattern, $newTypesContent, $this->lines[0]->getContent(), 1));
 
         $this->clearCache();
     }
@@ -228,11 +229,17 @@ final class Annotation
      */
     public function getNormalizedTypes(): array
     {
-        $normalized = array_map(static fn (string $type): string => strtolower($type), $this->getTypes());
+        $typeExpression = $this->getTypeExpression();
+        if (null === $typeExpression) {
+            return [];
+        }
 
-        sort($normalized);
+        $normalizedTypeExpression = $typeExpression
+            ->mapTypes(static fn (TypeExpression $v) => new TypeExpression(strtolower($v->toString()), null, []))
+            ->sortTypes(static fn (TypeExpression $a, TypeExpression $b) => $a->toString() <=> $b->toString())
+        ;
 
-        return $normalized;
+        return $normalizedTypeExpression->getTypes();
     }
 
     /**
@@ -273,7 +280,7 @@ final class Annotation
 
     public function supportTypes(): bool
     {
-        return \in_array($this->getTag()->getName(), self::$tags, true);
+        return \in_array($this->getTag()->getName(), self::TAGS, true);
     }
 
     /**

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/DocBlock/DocBlock.php

@@ -209,7 +209,7 @@ final class DocBlock
     {
         $index = $start;
 
-        while ($line = $this->getLine(++$index)) {
+        while (($line = $this->getLine(++$index)) !== null) {
             if ($line->containsATag()) {
                 // we've 100% reached the end of the description if we get here
                 break;

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/DocBlock/ShortDescription.php

@@ -17,6 +17,8 @@ namespace PhpCsFixer\DocBlock;
 /**
  * This class represents a short description (aka summary) of a docblock.
  *
+ * @readonly
+ *
  * @internal
  */
 final class ShortDescription

+ 205 - 60
vendor/friendsofphp/php-cs-fixer/src/DocBlock/TypeExpression.php

@@ -55,7 +55,8 @@ final class TypeExpression
             (?<nullable>\??\h*)
             (?:
                 (?<array_shape>
-                    (?<array_shape_start>(?i)(?:array|list|object)(?-i)\h*\{\h*)
+                    (?<array_shape_name>(?i)(?:array|list|object)(?-i))
+                    (?<array_shape_start>\h*\{\h*)
                     (?<array_shape_inners>
                         (?<array_shape_inner>
                             (?<array_shape_inner_key>(?:(?&constant)|(?&identifier)|(?&name))\h*\??\h*:\h*|)
@@ -65,7 +66,19 @@ final class TypeExpression
                             \h*,\h*
                             (?&array_shape_inner)
                         )*+
-                        (?:\h*,\h*)?
+                        (?:\h*,|(?!(?&array_shape_unsealed_variadic)))
+                    |)
+                    (?<array_shape_unsealed> # unsealed array shape, e.g. `...`. `...<string>`
+                        (?<array_shape_unsealed_variadic>\h*\.\.\.)
+                        (?<array_shape_unsealed_type>
+                            (?<array_shape_unsealed_type_start>\h*<\h*)
+                            (?<array_shape_unsealed_type_a>(?&types_inner))
+                            (?:
+                                (?<array_shape_unsealed_type_comma>\h*,\h*)
+                                (?<array_shape_unsealed_type_b>(?&array_shape_unsealed_type_a))
+                            |)
+                            \h*>
+                        |)
                     |)
                     \h*\}
                 )
@@ -109,7 +122,7 @@ final class TypeExpression
                             \h*,\h*
                             (?&callable_argument)
                         )*+
-                        (?:\h*,\h*)?
+                        (?:\h*,)?
                     |)
                     \h*\)
                     (?:
@@ -119,20 +132,22 @@ final class TypeExpression
                 )
                 |
                 (?<generic> # generic syntax, e.g.: `array<int, \Foo\Bar>`
-                    (?<generic_start>(?&name)\h*<\h*)
+                    (?<generic_name>(?&name))
+                    (?<generic_start>\h*<\h*)
                     (?<generic_types>
                         (?&types_inner)
                         (?:
                             \h*,\h*
                             (?&types_inner)
                         )*+
-                        (?:\h*,\h*)?
+                        (?:\h*,)?
                     )
                     \h*>
                 )
                 |
                 (?<class_constant> # class constants with optional wildcard, e.g.: `Foo::*`, `Foo::CONST_A`, `FOO::CONST_*`
-                    (?&name)::\*?(?:(?&identifier)\*?)*
+                    (?<class_constant_name>(?&name))
+                    ::\*?(?:(?&identifier)\*?)*
                 )
                 |
                 (?<constant> # single constant value (case insensitive), e.g.: 1, -1.8E+6, `\'a\'`
@@ -208,20 +223,17 @@ final class TypeExpression
 
     private string $value;
 
-    private bool $isUnionType = false;
+    private bool $isCompositeType;
 
-    private string $typesGlue = '|';
+    /** @var null|'&'|'|' */
+    private ?string $typesGlue = null;
 
-    /**
-     * @var list<array{start_index: int, expression: self}>
-     */
+    /** @var list<array{start_index: int, expression: self}> */
     private array $innerTypeExpressions = [];
 
     private ?NamespaceAnalysis $namespace;
 
-    /**
-     * @var list<NamespaceUseAnalysis>
-     */
+    /** @var list<NamespaceUseAnalysis> */
     private array $namespaceUses;
 
     /**
@@ -246,7 +258,7 @@ final class TypeExpression
      */
     public function getTypes(): array
     {
-        if ($this->isUnionType) {
+        if ($this->isCompositeType) {
             return array_map(
                 static fn (array $type) => $type['expression']->toString(),
                 $this->innerTypeExpressions,
@@ -256,69 +268,105 @@ final class TypeExpression
         return [$this->value];
     }
 
+    /**
+     * Determines if type expression is a composite type (union or intersection).
+     */
+    public function isCompositeType(): bool
+    {
+        return $this->isCompositeType;
+    }
+
     public function isUnionType(): bool
     {
-        return $this->isUnionType;
+        return $this->isCompositeType && '|' === $this->typesGlue;
     }
 
-    public function getTypesGlue(): string
+    public function isIntersectionType(): bool
     {
-        return $this->typesGlue;
+        return $this->isCompositeType && '&' === $this->typesGlue;
     }
 
     /**
-     * @param \Closure(self): void $callback
+     * @return null|'&'|'|'
      */
-    public function walkTypes(\Closure $callback): void
+    public function getTypesGlue(): ?string
     {
-        $innerValueOrig = $this->value;
+        return $this->typesGlue;
+    }
 
+    /**
+     * @param \Closure(self): self $callback
+     */
+    public function mapTypes(\Closure $callback): self
+    {
+        $value = $this->value;
         $startIndexOffset = 0;
 
         foreach ($this->innerTypeExpressions as [
             'start_index' => $startIndexOrig,
             'expression' => $inner,
         ]) {
-            $innerLengthOrig = \strlen($inner->toString());
+            $innerValueOrig = $inner->value;
 
-            $inner->walkTypes($callback);
+            $inner = $inner->mapTypes($callback);
 
-            $this->value = substr_replace(
-                $this->value,
-                $inner->toString(),
-                $startIndexOrig + $startIndexOffset,
-                $innerLengthOrig
-            );
+            if ($inner->value !== $innerValueOrig) {
+                $value = substr_replace(
+                    $value,
+                    $inner->value,
+                    $startIndexOrig + $startIndexOffset,
+                    \strlen($innerValueOrig)
+                );
 
-            $startIndexOffset += \strlen($inner->toString()) - $innerLengthOrig;
+                $startIndexOffset += \strlen($inner->value) - \strlen($innerValueOrig);
+            }
         }
 
-        $callback($this);
+        $type = $value === $this->value
+            ? $this
+            : $this->inner($value);
 
-        if ($this->value !== $innerValueOrig) {
-            $this->isUnionType = false;
-            $this->typesGlue = '|';
-            $this->innerTypeExpressions = [];
+        return $callback($type);
+    }
 
-            $this->parse();
-        }
+    /**
+     * @param \Closure(self): void $callback
+     */
+    public function walkTypes(\Closure $callback): void
+    {
+        $this->mapTypes(static function (self $type) use ($callback) {
+            $valueOrig = $type->value;
+            $callback($type);
+            \assert($type->value === $valueOrig);
+
+            return $type;
+        });
     }
 
     /**
      * @param \Closure(self, self): (-1|0|1) $compareCallback
      */
-    public function sortTypes(\Closure $compareCallback): void
+    public function sortTypes(\Closure $compareCallback): self
     {
-        $this->walkTypes(static function (self $type) use ($compareCallback): void {
-            if ($type->isUnionType) {
-                $type->innerTypeExpressions = Utils::stableSort(
+        return $this->mapTypes(function (self $type) use ($compareCallback): self {
+            if ($type->isCompositeType) {
+                $innerTypeExpressions = Utils::stableSort(
                     $type->innerTypeExpressions,
-                    static fn (array $type): self => $type['expression'],
+                    static fn (array $v): self => $v['expression'],
                     $compareCallback,
                 );
 
-                $type->value = implode($type->getTypesGlue(), $type->getTypes());
+                if ($innerTypeExpressions !== $type->innerTypeExpressions) {
+                    $value = implode(
+                        $type->getTypesGlue(),
+                        array_map(static fn (array $v): string => $v['expression']->toString(), $innerTypeExpressions)
+                    );
+
+                    return $this->inner($value);
+                }
             }
+
+            return $type;
         });
     }
 
@@ -376,10 +424,13 @@ final class TypeExpression
 
     private function parse(): void
     {
+        $seenGlues = null;
+        $innerValues = [];
+
         $index = 0;
         while (true) {
             Preg::match(
-                '{\G'.self::REGEX_TYPE.'(?:\h*(?<glue>[|&])\h*|$)}',
+                '{\G'.self::REGEX_TYPE.'(?<glue_raw>\h*(?<glue>[|&])\h*(?!$)|$)}',
                 $this->value,
                 $matches,
                 PREG_OFFSET_CAPTURE,
@@ -390,18 +441,24 @@ final class TypeExpression
                 throw new \Exception('Unable to parse phpdoc type '.var_export($this->value, true));
             }
 
-            if (!$this->isUnionType) {
+            if (null === $seenGlues) {
                 if (($matches['glue'][0] ?? '') === '') {
                     break;
                 }
 
-                $this->isUnionType = true;
-                $this->typesGlue = $matches['glue'][0];
+                $seenGlues = ['|' => false, '&' => false];
             }
 
-            $this->innerTypeExpressions[] = [
+            if (($matches['glue'][0] ?? '') !== '') {
+                \assert(isset($seenGlues[$matches['glue'][0]]));
+                $seenGlues[$matches['glue'][0]] = true;
+            }
+
+            $innerValues[] = [
                 'start_index' => $index,
-                'expression' => $this->inner($matches['type'][0]),
+                'value' => $matches['type'][0],
+                'next_glue' => $matches['glue'][0] ?? null,
+                'next_glue_raw' => $matches['glue_raw'][0] ?? null,
             ];
 
             $consumedValueLength = \strlen($matches[0][0]);
@@ -410,27 +467,82 @@ final class TypeExpression
             if (\strlen($this->value) <= $index) {
                 \assert(\strlen($this->value) === $index);
 
+                $seenGlues = array_filter($seenGlues);
+                \assert([] !== $seenGlues);
+
+                $this->isCompositeType = true;
+                $this->typesGlue = array_key_first($seenGlues);
+
+                if (1 === \count($seenGlues)) {
+                    foreach ($innerValues as $innerValue) {
+                        $this->innerTypeExpressions[] = [
+                            'start_index' => $innerValue['start_index'],
+                            'expression' => $this->inner($innerValue['value']),
+                        ];
+                    }
+                } else {
+                    for ($i = 0; $i < \count($innerValues); ++$i) {
+                        $innerStartIndex = $innerValues[$i]['start_index'];
+                        $innerValue = '';
+                        while (true) {
+                            $innerValue .= $innerValues[$i]['value'];
+
+                            if (($innerValues[$i]['next_glue'] ?? $this->typesGlue) === $this->typesGlue) {
+                                break;
+                            }
+
+                            $innerValue .= $innerValues[$i]['next_glue_raw'];
+
+                            ++$i;
+                        }
+
+                        $this->innerTypeExpressions[] = [
+                            'start_index' => $innerStartIndex,
+                            'expression' => $this->inner($innerValue),
+                        ];
+                    }
+                }
+
                 return;
             }
         }
 
-        $nullableLength = \strlen($matches['nullable'][0]);
-        $index = $nullableLength;
+        $this->isCompositeType = false;
+
+        if ('' !== $matches['nullable'][0]) {
+            $this->innerTypeExpressions[] = [
+                'start_index' => \strlen($matches['nullable'][0]),
+                'expression' => $this->inner(substr($matches['type'][0], \strlen($matches['nullable'][0]))),
+            ];
+        } elseif ('' !== $matches['array'][0]) {
+            $this->innerTypeExpressions[] = [
+                'start_index' => 0,
+                'expression' => $this->inner(substr($matches['type'][0], 0, -\strlen($matches['array'][0]))),
+            ];
+        } elseif ('' !== ($matches['generic'][0] ?? '') && 0 === $matches['generic'][1]) {
+            $this->innerTypeExpressions[] = [
+                'start_index' => 0,
+                'expression' => $this->inner($matches['generic_name'][0]),
+            ];
 
-        if ('' !== ($matches['generic'][0] ?? '') && $matches['generic'][1] === $nullableLength) {
             $this->parseCommaSeparatedInnerTypes(
-                $index + \strlen($matches['generic_start'][0]),
+                \strlen($matches['generic_name'][0]) + \strlen($matches['generic_start'][0]),
                 $matches['generic_types'][0]
             );
-        } elseif ('' !== ($matches['callable'][0] ?? '') && $matches['callable'][1] === $nullableLength) {
+        } elseif ('' !== ($matches['callable'][0] ?? '') && 0 === $matches['callable'][1]) {
+            $this->innerTypeExpressions[] = [
+                'start_index' => 0,
+                'expression' => $this->inner($matches['callable_name'][0]),
+            ];
+
             $this->parseCallableTemplateInnerTypes(
-                $index + \strlen($matches['callable_name'][0])
+                \strlen($matches['callable_name'][0])
                     + \strlen($matches['callable_template_start'][0]),
                 $matches['callable_template_inners'][0]
             );
 
             $this->parseCallableArgumentTypes(
-                $index + \strlen($matches['callable_name'][0])
+                \strlen($matches['callable_name'][0])
                     + \strlen($matches['callable_template'][0])
                     + \strlen($matches['callable_start'][0]),
                 $matches['callable_arguments'][0]
@@ -442,13 +554,41 @@ final class TypeExpression
                     'expression' => $this->inner($matches['callable_return'][0]),
                 ];
             }
-        } elseif ('' !== ($matches['array_shape'][0] ?? '') && $matches['array_shape'][1] === $nullableLength) {
+        } elseif ('' !== ($matches['array_shape'][0] ?? '') && 0 === $matches['array_shape'][1]) {
+            $this->innerTypeExpressions[] = [
+                'start_index' => 0,
+                'expression' => $this->inner($matches['array_shape_name'][0]),
+            ];
+
+            $nextIndex = \strlen($matches['array_shape_name'][0]) + \strlen($matches['array_shape_start'][0]);
+
             $this->parseArrayShapeInnerTypes(
-                $index + \strlen($matches['array_shape_start'][0]),
+                $nextIndex,
                 $matches['array_shape_inners'][0]
             );
-        } elseif ('' !== ($matches['parenthesized'][0] ?? '') && $matches['parenthesized'][1] === $nullableLength) {
-            $index += \strlen($matches['parenthesized_start'][0]);
+
+            if ('' !== ($matches['array_shape_unsealed_type'][0] ?? '')) {
+                $nextIndex += \strlen($matches['array_shape_inners'][0])
+                    + \strlen($matches['array_shape_unsealed_variadic'][0])
+                    + \strlen($matches['array_shape_unsealed_type_start'][0]);
+
+                $this->innerTypeExpressions[] = [
+                    'start_index' => $nextIndex,
+                    'expression' => $this->inner($matches['array_shape_unsealed_type_a'][0]),
+                ];
+
+                if ('' !== ($matches['array_shape_unsealed_type_b'][0] ?? '')) {
+                    $nextIndex += \strlen($matches['array_shape_unsealed_type_a'][0])
+                        + \strlen($matches['array_shape_unsealed_type_comma'][0]);
+
+                    $this->innerTypeExpressions[] = [
+                        'start_index' => $nextIndex,
+                        'expression' => $this->inner($matches['array_shape_unsealed_type_b'][0]),
+                    ];
+                }
+            }
+        } elseif ('' !== ($matches['parenthesized'][0] ?? '') && 0 === $matches['parenthesized'][1]) {
+            $index = \strlen($matches['parenthesized_start'][0]);
 
             if ('' !== ($matches['conditional'][0] ?? '')) {
                 if ('' !== ($matches['conditional_cond_left_types'][0] ?? '')) {
@@ -484,6 +624,11 @@ final class TypeExpression
                     'expression' => $this->inner($matches['parenthesized_types'][0]),
                 ];
             }
+        } elseif ('' !== $matches['class_constant'][0]) {
+            $this->innerTypeExpressions[] = [
+                'start_index' => 0,
+                'expression' => $this->inner($matches['class_constant_name'][0]),
+            ];
         }
     }
 

+ 6 - 8
vendor/friendsofphp/php-cs-fixer/src/Doctrine/Annotation/DocLexer.php

@@ -150,14 +150,12 @@ final class DocLexer
 
     private function scan(string $input): void
     {
-        if (!isset($this->regex)) {
-            $this->regex = \sprintf(
-                '/(%s)|%s/%s',
-                implode(')|(', $this->getCatchablePatterns()),
-                implode('|', $this->getNonCatchablePatterns()),
-                'iu'
-            );
-        }
+        $this->regex ??= \sprintf(
+            '/(%s)|%s/%s',
+            implode(')|(', $this->getCatchablePatterns()),
+            implode('|', $this->getNonCatchablePatterns()),
+            'iu'
+        );
 
         $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE;
         $matches = Preg::split($this->regex, $input, -1, $flags);

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Documentation/DocumentationLocator.php

@@ -19,6 +19,8 @@ use PhpCsFixer\Preg;
 use PhpCsFixer\Utils;
 
 /**
+ * @readonly
+ *
  * @internal
  */
 final class DocumentationLocator

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Documentation/FixerDocumentGenerator.php

@@ -34,6 +34,8 @@ use PhpCsFixer\Tokenizer\Tokens;
 use PhpCsFixer\Utils;
 
 /**
+ * @readonly
+ *
  * @internal
  */
 final class FixerDocumentGenerator

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Documentation/RuleSetDocumentationGenerator.php

@@ -21,6 +21,8 @@ use PhpCsFixer\RuleSet\RuleSetDescriptionInterface;
 use PhpCsFixer\Utils;
 
 /**
+ * @readonly
+ *
  * @internal
  */
 final class RuleSetDocumentationGenerator

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Error/Error.php

@@ -19,6 +19,8 @@ namespace PhpCsFixer\Error;
  *
  * @author Andreas Möller <am@localheinz.com>
  *
+ * @readonly
+ *
  * @internal
  */
 final class Error implements \JsonSerializable

+ 2 - 0
vendor/friendsofphp/php-cs-fixer/src/Error/SourceExceptionFactory.php

@@ -15,6 +15,8 @@ declare(strict_types=1);
 namespace PhpCsFixer\Error;
 
 /**
+ * @readonly
+ *
  * @internal
  */
 final class SourceExceptionFactory

+ 1 - 4
vendor/friendsofphp/php-cs-fixer/src/FileReader.php

@@ -25,10 +25,7 @@ namespace PhpCsFixer;
  */
 final class FileReader
 {
-    /**
-     * @var null|string
-     */
-    private $stdinContent;
+    private ?string $stdinContent = null;
 
     public static function createSingleton(): self
     {

+ 27 - 26
vendor/friendsofphp/php-cs-fixer/src/Fixer/AbstractPhpUnitFixer.php

@@ -18,9 +18,10 @@ use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\DocBlock\DocBlock;
 use PhpCsFixer\DocBlock\Line;
 use PhpCsFixer\Indicator\PhpUnitTestCaseIndicator;
+use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis;
 use PhpCsFixer\Tokenizer\Analyzer\AttributeAnalyzer;
+use PhpCsFixer\Tokenizer\Analyzer\FullyQualifiedNameAnalyzer;
 use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer;
-use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer;
 use PhpCsFixer\Tokenizer\Analyzer\WhitespacesAnalyzer;
 use PhpCsFixer\Tokenizer\CT;
 use PhpCsFixer\Tokenizer\Token;
@@ -145,6 +146,27 @@ abstract class AbstractPhpUnitFixer extends AbstractFixer
         }
     }
 
+    final protected function isTestAttributePresent(Tokens $tokens, int $index): bool
+    {
+        $attributeIndex = $tokens->getPrevTokenOfKind($index, ['{', [T_ATTRIBUTE]]);
+        if (!$tokens[$attributeIndex]->isGivenKind(T_ATTRIBUTE)) {
+            return false;
+        }
+
+        $fullyQualifiedNameAnalyzer = new FullyQualifiedNameAnalyzer($tokens);
+
+        foreach (AttributeAnalyzer::collect($tokens, $attributeIndex) as $attributeAnalysis) {
+            foreach ($attributeAnalysis->getAttributes() as $attribute) {
+                $attributeName = strtolower($fullyQualifiedNameAnalyzer->getFullyQualifiedName($attribute['name'], $attribute['start'], NamespaceUseAnalysis::TYPE_CLASS));
+                if ('phpunit\framework\attributes\test' === $attributeName) {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
     private function createDocBlock(Tokens $tokens, int $docBlockIndex, string $annotation): void
     {
         $lineEnd = $this->whitespacesConfig->getLineEnding();
@@ -189,6 +211,7 @@ abstract class AbstractPhpUnitFixer extends AbstractFixer
         $lines = $this->addInternalAnnotation($doc, $tokens, $docBlockIndex, $annotation);
         $lines = implode('', $lines);
 
+        $tokens->getNamespaceDeclarations();
         $tokens[$docBlockIndex] = new Token([T_DOC_COMMENT, $lines]);
     }
 
@@ -214,9 +237,11 @@ abstract class AbstractPhpUnitFixer extends AbstractFixer
         }
         $index = $tokens->findBlockStart(Tokens::BLOCK_TYPE_ATTRIBUTE, $index);
 
+        $fullyQualifiedNameAnalyzer = new FullyQualifiedNameAnalyzer($tokens);
+
         foreach (AttributeAnalyzer::collect($tokens, $index) as $attributeAnalysis) {
             foreach ($attributeAnalysis->getAttributes() as $attribute) {
-                if (\in_array(ltrim(self::getFullyQualifiedName($tokens, $attribute['name']), '\\'), $preventingAttributes, true)) {
+                if (\in_array(strtolower($fullyQualifiedNameAnalyzer->getFullyQualifiedName($attribute['name'], $attribute['start'], NamespaceUseAnalysis::TYPE_CLASS)), $preventingAttributes, true)) {
                     return true;
                 }
             }
@@ -225,30 +250,6 @@ abstract class AbstractPhpUnitFixer extends AbstractFixer
         return false;
     }
 
-    private static function getFullyQualifiedName(Tokens $tokens, string $name): string
-    {
-        $name = strtolower($name);
-
-        $names = [];
-        foreach ((new NamespaceUsesAnalyzer())->getDeclarationsFromTokens($tokens) as $namespaceUseAnalysis) {
-            $names[strtolower($namespaceUseAnalysis->getShortName())] = strtolower($namespaceUseAnalysis->getFullName());
-        }
-
-        foreach ($names as $shortName => $fullName) {
-            if ($name === $shortName) {
-                return $fullName;
-            }
-
-            if (!str_starts_with($name, $shortName.'\\')) {
-                continue;
-            }
-
-            return $fullName.substr($name, \strlen($shortName));
-        }
-
-        return $name;
-    }
-
     /**
      * @return list<Line>
      */

+ 1 - 1
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/BacktickToShellExecFixer.php

@@ -53,7 +53,7 @@ final class BacktickToShellExecFixer extends AbstractFixer
     /**
      * {@inheritdoc}
      *
-     * Must run before EscapeImplicitBackslashesFixer, ExplicitStringVariableFixer, NativeFunctionInvocationFixer, SingleQuoteFixer, StringImplicitBackslashesFixer.
+     * Must run before ExplicitStringVariableFixer, NativeFunctionInvocationFixer, SingleQuoteFixer.
      */
     public function getPriority(): int
     {

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/EregToPregFixer.php

@@ -33,7 +33,7 @@ final class EregToPregFixer extends AbstractFixer
      * @var list<array<int, string>> the list of the ext/ereg function names, their preg equivalent and the preg modifier(s), if any
      *                               all condensed in an array of arrays
      */
-    private static array $functions = [
+    private const FUNCTIONS = [
         ['ereg', 'preg_match', ''],
         ['eregi', 'preg_match', 'i'],
         ['ereg_replace', 'preg_replace', ''],
@@ -82,7 +82,7 @@ final class EregToPregFixer extends AbstractFixer
         $end = $tokens->count() - 1;
         $functionsAnalyzer = new FunctionsAnalyzer();
 
-        foreach (self::$functions as $map) {
+        foreach (self::FUNCTIONS as $map) {
             // the sequence is the function name, followed by "(" and a quoted string
             $seq = [[T_STRING, $map[0]], '(', [T_CONSTANT_ENCAPSED_STRING]];
             $currIndex = 0;

+ 58 - 19
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/MbStrFunctionsFixer.php

@@ -14,18 +14,20 @@ declare(strict_types=1);
 
 namespace PhpCsFixer\Fixer\Alias;
 
-use PhpCsFixer\AbstractFunctionReferenceFixer;
+use PhpCsFixer\AbstractFixer;
 use PhpCsFixer\FixerDefinition\CodeSample;
 use PhpCsFixer\FixerDefinition\FixerDefinition;
 use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
 use PhpCsFixer\Tokenizer\Analyzer\ArgumentsAnalyzer;
+use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer;
+use PhpCsFixer\Tokenizer\CT;
 use PhpCsFixer\Tokenizer\Token;
 use PhpCsFixer\Tokenizer\Tokens;
 
 /**
  * @author Filippo Tessarotto <zoeslam@gmail.com>
  */
-final class MbStrFunctionsFixer extends AbstractFunctionReferenceFixer
+final class MbStrFunctionsFixer extends AbstractFixer
 {
     /**
      * list of the string-related function names and their mb_ equivalent.
@@ -85,6 +87,26 @@ final class MbStrFunctionsFixer extends AbstractFunctionReferenceFixer
         );
     }
 
+    public function isCandidate(Tokens $tokens): bool
+    {
+        return $tokens->isTokenKindFound(T_STRING);
+    }
+
+    public function isRisky(): bool
+    {
+        return true;
+    }
+
+    /**
+     * {@inheritdoc}
+     *
+     * Must run before NativeFunctionInvocationFixer.
+     */
+    public function getPriority(): int
+    {
+        return 2;
+    }
+
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -115,27 +137,44 @@ $a = substr_count($a, $b);
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
         $argumentsAnalyzer = new ArgumentsAnalyzer();
-        foreach ($this->functions as $functionIdentity => $functionReplacement) {
-            $currIndex = 0;
-            do {
-                // try getting function reference and translate boundaries for humans
-                $boundaries = $this->find($functionIdentity, $tokens, $currIndex, $tokens->count() - 1);
-                if (null === $boundaries) {
-                    // next function search, as current one not found
-                    continue 2;
-                }
+        $functionsAnalyzer = new FunctionsAnalyzer();
+
+        for ($index = $tokens->count() - 1; $index > 0; --$index) {
+            if (!$tokens[$index]->isGivenKind(T_STRING)) {
+                continue;
+            }
+
+            $lowercasedContent = strtolower($tokens[$index]->getContent());
+            if (!isset($this->functions[$lowercasedContent])) {
+                continue;
+            }
 
-                [$functionName, $openParenthesis, $closeParenthesis] = $boundaries;
-                $count = $argumentsAnalyzer->countArguments($tokens, $openParenthesis, $closeParenthesis);
-                if (!\in_array($count, $functionReplacement['argumentCount'], true)) {
-                    continue 2;
+            // is it a global function call?
+            if ($functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) {
+                $openParenthesis = $tokens->getNextMeaningfulToken($index);
+                $closeParenthesis = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openParenthesis);
+                $numberOfArguments = $argumentsAnalyzer->countArguments($tokens, $openParenthesis, $closeParenthesis);
+                if (!\in_array($numberOfArguments, $this->functions[$lowercasedContent]['argumentCount'], true)) {
+                    continue;
                 }
+                $tokens[$index] = new Token([T_STRING, $this->functions[$lowercasedContent]['alternativeName']]);
 
-                // analysing cursor shift, so nested calls could be processed
-                $currIndex = $openParenthesis;
+                continue;
+            }
 
-                $tokens[$functionName] = new Token([T_STRING, $functionReplacement['alternativeName']]);
-            } while (null !== $currIndex);
+            // is it a global function import?
+            $functionIndex = $tokens->getPrevMeaningfulToken($index);
+            if ($tokens[$functionIndex]->isGivenKind(T_NS_SEPARATOR)) {
+                $functionIndex = $tokens->getPrevMeaningfulToken($functionIndex);
+            }
+            if (!$tokens[$functionIndex]->isGivenKind(CT::T_FUNCTION_IMPORT)) {
+                continue;
+            }
+            $useIndex = $tokens->getPrevMeaningfulToken($functionIndex);
+            if (!$tokens[$useIndex]->isGivenKind(T_USE)) {
+                continue;
+            }
+            $tokens[$index] = new Token([T_STRING, $this->functions[$lowercasedContent]['alternativeName']]);
         }
     }
 }

+ 112 - 7
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/ModernizeStrposFixer.php

@@ -15,6 +15,11 @@ declare(strict_types=1);
 namespace PhpCsFixer\Fixer\Alias;
 
 use PhpCsFixer\AbstractFixer;
+use PhpCsFixer\Fixer\ConfigurableFixerInterface;
+use PhpCsFixer\Fixer\ConfigurableFixerTrait;
+use PhpCsFixer\FixerConfiguration\FixerConfigurationResolver;
+use PhpCsFixer\FixerConfiguration\FixerConfigurationResolverInterface;
+use PhpCsFixer\FixerConfiguration\FixerOptionBuilder;
 use PhpCsFixer\FixerDefinition\CodeSample;
 use PhpCsFixer\FixerDefinition\FixerDefinition;
 use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
@@ -25,9 +30,21 @@ use PhpCsFixer\Tokenizer\Tokens;
 
 /**
  * @author Alexander M. Turek <me@derrabus.de>
+ *
+ * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
+ *
+ * @phpstan-type _AutogeneratedInputConfiguration array{
+ *  modernize_stripos?: bool,
+ * }
+ * @phpstan-type _AutogeneratedComputedConfiguration array{
+ *  modernize_stripos: bool,
+ * }
  */
-final class ModernizeStrposFixer extends AbstractFixer
+final class ModernizeStrposFixer extends AbstractFixer implements ConfigurableFixerInterface
 {
+    /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
+    use ConfigurableFixerTrait;
+
     private const REPLACEMENTS = [
         [
             'operator' => [T_IS_IDENTICAL, '==='],
@@ -55,10 +72,12 @@ final class ModernizeStrposFixer extends AbstractFixer
         ],
     ];
 
+    private bool $modernizeStripos = false;
+
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
-            'Replace `strpos()` calls with `str_starts_with()` or `str_contains()` if possible.',
+            'Replace `strpos()` and `stripos()` calls with `str_starts_with()` or `str_contains()` if possible.',
             [
                 new CodeSample(
                     '<?php
@@ -66,11 +85,24 @@ if (strpos($haystack, $needle) === 0) {}
 if (strpos($haystack, $needle) !== 0) {}
 if (strpos($haystack, $needle) !== false) {}
 if (strpos($haystack, $needle) === false) {}
-'
+',
+                ),
+                new CodeSample(
+                    '<?php
+if (strpos($haystack, $needle) === 0) {}
+if (strpos($haystack, $needle) !== 0) {}
+if (strpos($haystack, $needle) !== false) {}
+if (strpos($haystack, $needle) === false) {}
+if (stripos($haystack, $needle) === 0) {}
+if (stripos($haystack, $needle) !== 0) {}
+if (stripos($haystack, $needle) !== false) {}
+if (stripos($haystack, $needle) === false) {}
+',
+                    ['modernize_stripos' => true]
                 ),
             ],
             null,
-            'Risky if `strpos`, `str_starts_with` or `str_contains` functions are overridden.'
+            'Risky if `strpos`, `stripos`, `str_starts_with`, `str_contains` or `strtolower` functions are overridden.'
         );
     }
 
@@ -95,14 +127,36 @@ if (strpos($haystack, $needle) === false) {}
         return true;
     }
 
+    protected function configurePostNormalisation(): void
+    {
+        if (isset($this->configuration['modernize_stripos']) && true === $this->configuration['modernize_stripos']) {
+            $this->modernizeStripos = true;
+        }
+    }
+
+    protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
+    {
+        return new FixerConfigurationResolver([
+            (new FixerOptionBuilder('modernize_stripos', 'Whether to modernize `stripos` calls as well.'))
+                ->setAllowedTypes(['bool'])
+                ->setDefault(false) // @TODO change to "true" on next major 4.0
+                ->getOption(),
+        ]);
+    }
+
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
         $functionsAnalyzer = new FunctionsAnalyzer();
         $argumentsAnalyzer = new ArgumentsAnalyzer();
 
+        $modernizeCandidates = [[T_STRING, 'strpos']];
+        if ($this->modernizeStripos) {
+            $modernizeCandidates[] = [T_STRING, 'stripos'];
+        }
+
         for ($index = \count($tokens) - 1; $index > 0; --$index) {
             // find candidate function call
-            if (!$tokens[$index]->equals([T_STRING, 'strpos'], false) || !$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) {
+            if (!$tokens[$index]->equalsAny($modernizeCandidates, false) || !$functionsAnalyzer->isGlobalFunctionCall($tokens, $index)) {
                 continue;
             }
 
@@ -123,7 +177,8 @@ if (strpos($haystack, $needle) === false) {}
             }
 
             if (null !== $compareTokens) {
-                $this->fixCall($tokens, $index, $compareTokens);
+                $isCaseInsensitive = $tokens[$index]->equals([T_STRING, 'stripos'], false);
+                $this->fixCall($tokens, $index, $compareTokens, $isCaseInsensitive);
             }
         }
     }
@@ -131,7 +186,7 @@ if (strpos($haystack, $needle) === false) {}
     /**
      * @param array{operator_index: int, operand_index: int} $operatorIndices
      */
-    private function fixCall(Tokens $tokens, int $functionIndex, array $operatorIndices): void
+    private function fixCall(Tokens $tokens, int $functionIndex, array $operatorIndices, bool $isCaseInsensitive): void
     {
         foreach (self::REPLACEMENTS as $replacement) {
             if (!$tokens[$operatorIndices['operator_index']]->equals($replacement['operator'])) {
@@ -160,10 +215,60 @@ if (strpos($haystack, $needle) === false) {}
 
             $tokens->insertAt($functionIndex, new Token($replacement['replacement']));
 
+            if ($isCaseInsensitive) {
+                $this->wrapArgumentsWithStrToLower($tokens, $functionIndex);
+            }
+
             break;
         }
     }
 
+    private function wrapArgumentsWithStrToLower(Tokens $tokens, int $functionIndex): void
+    {
+        $argumentsAnalyzer = new ArgumentsAnalyzer();
+        $shouldAddNamespace = $tokens[$functionIndex - 1]->isGivenKind(T_NS_SEPARATOR);
+
+        $openIndex = $tokens->getNextMeaningfulToken($functionIndex);
+        $closeIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $openIndex);
+        $arguments = $argumentsAnalyzer->getArguments($tokens, $openIndex, $closeIndex);
+
+        $firstArgumentIndexStart = array_key_first($arguments);
+        if (!isset($arguments[$firstArgumentIndexStart])) {
+            return;
+        }
+        $firstArgumentIndexEnd = $arguments[$firstArgumentIndexStart] + 3 + ($shouldAddNamespace ? 1 : 0);
+
+        $isSecondArgumentTokenWhiteSpace = $tokens[array_key_last($arguments)]->isGivenKind(T_WHITESPACE);
+
+        if ($isSecondArgumentTokenWhiteSpace) {
+            $secondArgumentIndexStart = $tokens->getNextMeaningfulToken(array_key_last($arguments));
+        } else {
+            $secondArgumentIndexStart = array_key_last($arguments);
+        }
+
+        $secondArgumentIndexStart += 3 + ($shouldAddNamespace ? 1 : 0);
+        if (!isset($arguments[array_key_last($arguments)])) {
+            return;
+        }
+        $secondArgumentIndexEnd = $arguments[array_key_last($arguments)] + 6 + ($shouldAddNamespace ? 1 : 0) + ($isSecondArgumentTokenWhiteSpace ? 1 : 0);
+
+        if ($shouldAddNamespace) {
+            $tokens->insertAt($firstArgumentIndexStart, new Token([T_NS_SEPARATOR, '\\']));
+            ++$firstArgumentIndexStart;
+        }
+
+        $tokens->insertAt($firstArgumentIndexStart, [new Token([T_STRING, 'strtolower']), new Token('(')]);
+        $tokens->insertAt($firstArgumentIndexEnd, new Token(')'));
+
+        if ($shouldAddNamespace) {
+            $tokens->insertAt($secondArgumentIndexStart, new Token([T_NS_SEPARATOR, '\\']));
+            ++$secondArgumentIndexStart;
+        }
+
+        $tokens->insertAt($secondArgumentIndexStart, [new Token([T_STRING, 'strtolower']), new Token('(')]);
+        $tokens->insertAt($secondArgumentIndexEnd, new Token(')'));
+    }
+
     /**
      * @param -1|1 $direction
      *

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoAliasFunctionsFixer.php

@@ -36,10 +36,10 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  sets?: list<'@all'|'@exif'|'@ftp'|'@IMAP'|'@internal'|'@ldap'|'@mbreg'|'@mysqli'|'@oci'|'@odbc'|'@openssl'|'@pcntl'|'@pg'|'@posix'|'@snmp'|'@sodium'|'@time'>
+ *  sets?: list<'@all'|'@exif'|'@ftp'|'@IMAP'|'@internal'|'@ldap'|'@mbreg'|'@mysqli'|'@oci'|'@odbc'|'@openssl'|'@pcntl'|'@pg'|'@posix'|'@snmp'|'@sodium'|'@time'>,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  sets: list<'@all'|'@exif'|'@ftp'|'@IMAP'|'@internal'|'@ldap'|'@mbreg'|'@mysqli'|'@oci'|'@odbc'|'@openssl'|'@pcntl'|'@pg'|'@posix'|'@snmp'|'@sodium'|'@time'>
+ *  sets: list<'@all'|'@exif'|'@ftp'|'@IMAP'|'@internal'|'@ldap'|'@mbreg'|'@mysqli'|'@oci'|'@odbc'|'@openssl'|'@pcntl'|'@pg'|'@posix'|'@snmp'|'@sodium'|'@time'>,
  * }
  */
 final class NoAliasFunctionsFixer extends AbstractFixer implements ConfigurableFixerInterface

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/NoMixedEchoPrintFixer.php

@@ -33,10 +33,10 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  use?: 'echo'|'print'
+ *  use?: 'echo'|'print',
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  use: 'echo'|'print'
+ *  use: 'echo'|'print',
  * }
  */
 final class NoMixedEchoPrintFixer extends AbstractFixer implements ConfigurableFixerInterface

+ 7 - 5
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/RandomApiMigrationFixer.php

@@ -34,10 +34,10 @@ use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  replacements?: array<string, string>
+ *  replacements?: array<string, string>,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  replacements: array<string, string>
+ *  replacements: array<string, string>,
  * }
  */
 final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer implements ConfigurableFixerInterface
@@ -48,7 +48,7 @@ final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer imple
     /**
      * @var array<string, array<int, int>>
      */
-    private static array $argumentCounts = [
+    private const ARGUMENT_COUNTS = [
         'getrandmax' => [0],
         'mt_rand' => [1, 2],
         'rand' => [0, 2],
@@ -99,7 +99,9 @@ final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer imple
                 [$functionName, $openParenthesis, $closeParenthesis] = $boundaries;
                 $count = $argumentsAnalyzer->countArguments($tokens, $openParenthesis, $closeParenthesis);
 
-                if (!\in_array($count, self::$argumentCounts[$functionIdentity], true)) {
+                \assert(isset(self::ARGUMENT_COUNTS[$functionIdentity])); // for PHPStan
+
+                if (!\in_array($count, self::ARGUMENT_COUNTS[$functionIdentity], true)) {
                     continue 2;
                 }
 
@@ -130,7 +132,7 @@ final class RandomApiMigrationFixer extends AbstractFunctionReferenceFixer imple
                 ->setAllowedTypes(['array<string, string>'])
                 ->setAllowedValues([static function (array $value): bool {
                     foreach ($value as $functionName => $replacement) {
-                        if (!\array_key_exists($functionName, self::$argumentCounts)) {
+                        if (!\array_key_exists($functionName, self::ARGUMENT_COUNTS)) {
                             throw new InvalidOptionsException(\sprintf(
                                 'Function "%s" is not handled by the fixer.',
                                 $functionName

+ 0 - 1
vendor/friendsofphp/php-cs-fixer/src/Fixer/Alias/SetTypeToCastFixer.php

@@ -149,7 +149,6 @@ settype($bar, "null");
             if ('null' === $type) {
                 $this->fixSettypeNullCall($tokens, $functionNameIndex, $argumentToken);
             } else {
-                \assert(isset($map[$type]));
                 $this->fixSettypeCall($tokens, $functionNameIndex, $argumentToken, new Token($map[$type]));
             }
         }

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/ArraySyntaxFixer.php

@@ -35,10 +35,10 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  syntax?: 'long'|'short'
+ *  syntax?: 'long'|'short',
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  syntax: 'long'|'short'
+ *  syntax: 'long'|'short',
  * }
  */
 final class ArraySyntaxFixer extends AbstractFixer implements ConfigurableFixerInterface

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/NoWhitespaceBeforeCommaInArrayFixer.php

@@ -32,10 +32,10 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  after_heredoc?: bool
+ *  after_heredoc?: bool,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  after_heredoc: bool
+ *  after_heredoc: bool,
  * }
  */
 final class NoWhitespaceBeforeCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/ArrayNotation/WhitespaceAfterCommaInArrayFixer.php

@@ -34,10 +34,10 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  ensure_single_space?: bool
+ *  ensure_single_space?: bool,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  ensure_single_space: bool
+ *  ensure_single_space: bool,
  * }
  */
 final class WhitespaceAfterCommaInArrayFixer extends AbstractFixer implements ConfigurableFixerInterface

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/AttributeEmptyParenthesesFixer.php

@@ -33,10 +33,10 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  use_parentheses?: bool
+ *  use_parentheses?: bool,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  use_parentheses: bool
+ *  use_parentheses: bool,
  * }
  */
 final class AttributeEmptyParenthesesFixer extends AbstractFixer implements ConfigurableFixerInterface

+ 20 - 71
vendor/friendsofphp/php-cs-fixer/src/Fixer/AttributeNotation/OrderedAttributesFixer.php

@@ -26,11 +26,9 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
 use PhpCsFixer\FixerDefinition\VersionSpecification;
 use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample;
 use PhpCsFixer\Tokenizer\Analyzer\Analysis\AttributeAnalysis;
-use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceAnalysis;
 use PhpCsFixer\Tokenizer\Analyzer\Analysis\NamespaceUseAnalysis;
 use PhpCsFixer\Tokenizer\Analyzer\AttributeAnalyzer;
-use PhpCsFixer\Tokenizer\Analyzer\NamespacesAnalyzer;
-use PhpCsFixer\Tokenizer\Analyzer\NamespaceUsesAnalyzer;
+use PhpCsFixer\Tokenizer\Analyzer\FullyQualifiedNameAnalyzer;
 use PhpCsFixer\Tokenizer\Token;
 use PhpCsFixer\Tokenizer\Tokens;
 use Symfony\Component\OptionsResolver\Options;
@@ -44,11 +42,11 @@ use Symfony\Component\OptionsResolver\Options;
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
  *  order?: list<string>,
- *  sort_algorithm?: 'alpha'|'custom'
+ *  sort_algorithm?: 'alpha'|'custom',
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
  *  order: array<string, int>,
- *  sort_algorithm: 'alpha'|'custom'
+ *  sort_algorithm: 'alpha'|'custom',
  * }
  */
 final class OrderedAttributesFixer extends AbstractFixer implements ConfigurableFixerInterface
@@ -164,17 +162,17 @@ final class OrderedAttributesFixer extends AbstractFixer implements Configurable
 
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
+        $fullyQualifiedNameAnalyzer = new FullyQualifiedNameAnalyzer($tokens);
+
         $index = 0;
 
         while (null !== $index = $tokens->getNextTokenOfKind($index, [[T_ATTRIBUTE]])) {
-            /** @var list<array{name: string, start: int, end: int}> $elements */
-            $elements = array_map(function (AttributeAnalysis $attributeAnalysis) use ($tokens): array {
-                return [
-                    'name' => $this->sortAttributes($tokens, $attributeAnalysis->getStartIndex(), $attributeAnalysis->getAttributes()),
-                    'start' => $attributeAnalysis->getStartIndex(),
-                    'end' => $attributeAnalysis->getEndIndex(),
-                ];
-            }, AttributeAnalyzer::collect($tokens, $index));
+            /** @var _AttributeItems $elements */
+            $elements = array_map(fn (AttributeAnalysis $attributeAnalysis): array => [
+                'name' => $this->sortAttributes($fullyQualifiedNameAnalyzer, $tokens, $attributeAnalysis->getStartIndex(), $attributeAnalysis->getAttributes()),
+                'start' => $attributeAnalysis->getStartIndex(),
+                'end' => $attributeAnalysis->getEndIndex(),
+            ], AttributeAnalyzer::collect($tokens, $index));
 
             $endIndex = end($elements)['end'];
 
@@ -199,14 +197,14 @@ final class OrderedAttributesFixer extends AbstractFixer implements Configurable
     /**
      * @param _AttributeItems $attributes
      */
-    private function sortAttributes(Tokens $tokens, int $index, array $attributes): string
+    private function sortAttributes(FullyQualifiedNameAnalyzer $fullyQualifiedNameAnalyzer, Tokens $tokens, int $index, array $attributes): string
     {
         if (1 === \count($attributes)) {
-            return $this->getAttributeName($tokens, $attributes[0]['name'], $attributes[0]['start']);
+            return $this->getAttributeName($fullyQualifiedNameAnalyzer, $attributes[0]['name'], $attributes[0]['start']);
         }
 
         foreach ($attributes as &$attribute) {
-            $attribute['name'] = $this->getAttributeName($tokens, $attribute['name'], $attribute['start']);
+            $attribute['name'] = $this->getAttributeName($fullyQualifiedNameAnalyzer, $attribute['name'], $attribute['start']);
         }
 
         $sortedElements = $this->sortElements($attributes);
@@ -220,47 +218,19 @@ final class OrderedAttributesFixer extends AbstractFixer implements Configurable
         return $sortedElements[0]['name'];
     }
 
-    private function getAttributeName(Tokens $tokens, string $name, int $index): string
+    private function getAttributeName(FullyQualifiedNameAnalyzer $fullyQualifiedNameAnalyzer, string $name, int $index): string
     {
         if (self::ORDER_CUSTOM === $this->configuration['sort_algorithm']) {
-            $name = $this->determineAttributeFullyQualifiedName($tokens, $name, $index);
+            return $fullyQualifiedNameAnalyzer->getFullyQualifiedName($name, $index, NamespaceUseAnalysis::TYPE_CLASS);
         }
 
         return ltrim($name, '\\');
     }
 
-    private function determineAttributeFullyQualifiedName(Tokens $tokens, string $name, int $index): string
-    {
-        if ('\\' === $name[0]) {
-            return $name;
-        }
-
-        if (!$tokens[$index]->isGivenKind([T_STRING, T_NS_SEPARATOR])) {
-            $index = $tokens->getNextTokenOfKind($index, [[T_STRING], [T_NS_SEPARATOR]]);
-        }
-
-        [$namespaceAnalysis, $namespaceUseAnalyses] = $this->collectNamespaceAnalysis($tokens, $index);
-        $namespace = $namespaceAnalysis->getFullName();
-        $firstTokenOfName = $tokens[$index]->getContent();
-        $namespaceUseAnalysis = $namespaceUseAnalyses[$firstTokenOfName] ?? false;
-
-        if ($namespaceUseAnalysis instanceof NamespaceUseAnalysis) {
-            $namespace = $namespaceUseAnalysis->getFullName();
-
-            if ($name === $firstTokenOfName) {
-                return $namespace;
-            }
-
-            $name = substr(strstr($name, '\\'), 1);
-        }
-
-        return $namespace.'\\'.$name;
-    }
-
     /**
-     * @param list<array{name: string, start: int, end: int}> $elements
+     * @param _AttributeItems $elements
      *
-     * @return list<array{name: string, start: int, end: int}>
+     * @return _AttributeItems
      */
     private function sortElements(array $elements): array
     {
@@ -274,8 +244,7 @@ final class OrderedAttributesFixer extends AbstractFixer implements Configurable
             if (self::ORDER_CUSTOM === $sortAlgorithm) {
                 return
                     ($this->configuration['order'][$a['name']] ?? PHP_INT_MAX)
-                    <=>
-                    ($this->configuration['order'][$b['name']] ?? PHP_INT_MAX);
+                    <=> ($this->configuration['order'][$b['name']] ?? PHP_INT_MAX);
             }
 
             throw new \InvalidArgumentException(\sprintf('Invalid sort algorithm "%s" provided.', $sortAlgorithm));
@@ -285,7 +254,7 @@ final class OrderedAttributesFixer extends AbstractFixer implements Configurable
     }
 
     /**
-     * @param list<array{name: string, start: int, end: int}> $elements
+     * @param _AttributeItems $elements
      */
     private function sortTokens(Tokens $tokens, int $startIndex, int $endIndex, array $elements, ?Token $delimiter = null): void
     {
@@ -302,24 +271,4 @@ final class OrderedAttributesFixer extends AbstractFixer implements Configurable
 
         $tokens->overrideRange($startIndex, $endIndex, $replaceTokens);
     }
-
-    /**
-     * @return array{NamespaceAnalysis, array<string, NamespaceUseAnalysis>}
-     */
-    private function collectNamespaceAnalysis(Tokens $tokens, int $startIndex): array
-    {
-        $namespaceAnalysis = (new NamespacesAnalyzer())->getNamespaceAt($tokens, $startIndex);
-        $namespaceUseAnalyses = (new NamespaceUsesAnalyzer())->getDeclarationsInNamespace($tokens, $namespaceAnalysis);
-
-        $uses = [];
-        foreach ($namespaceUseAnalyses as $use) {
-            if (!$use->isClass()) {
-                continue;
-            }
-
-            $uses[$use->getShortName()] = $use;
-        }
-
-        return [$namespaceAnalysis, $uses];
-    }
 }

+ 4 - 10
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesFixer.php

@@ -46,14 +46,14 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
  *  allow_single_line_closure?: bool,
  *  position_after_anonymous_constructs?: 'next'|'same',
  *  position_after_control_structures?: 'next'|'same',
- *  position_after_functions_and_oop_constructs?: 'next'|'same'
+ *  position_after_functions_and_oop_constructs?: 'next'|'same',
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
  *  allow_single_line_anonymous_class_with_empty_body: bool,
  *  allow_single_line_closure: bool,
  *  position_after_anonymous_constructs: 'next'|'same',
  *  position_after_control_structures: 'next'|'same',
- *  position_after_functions_and_oop_constructs: 'next'|'same'
+ *  position_after_functions_and_oop_constructs: 'next'|'same',
  * }
  */
 final class BracesFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface, DeprecatedFixerInterface
@@ -71,15 +71,9 @@ final class BracesFixer extends AbstractProxyFixer implements ConfigurableFixerI
      */
     public const LINE_SAME = 'same';
 
-    /**
-     * @var null|BracesPositionFixer
-     */
-    private $bracesPositionFixer;
+    private ?BracesPositionFixer $bracesPositionFixer = null;
 
-    /**
-     * @var null|ControlStructureContinuationPositionFixer
-     */
-    private $controlStructureContinuationPositionFixer;
+    private ?ControlStructureContinuationPositionFixer $controlStructureContinuationPositionFixer = null;
 
     public function getDefinition(): FixerDefinitionInterface
     {

+ 19 - 7
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/BracesPositionFixer.php

@@ -41,7 +41,7 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
  *  anonymous_functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
  *  classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
  *  control_structures_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
- *  functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line'
+ *  functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
  *  allow_single_line_anonymous_functions: bool,
@@ -50,7 +50,7 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
  *  anonymous_functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
  *  classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
  *  control_structures_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
- *  functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line'
+ *  functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
  * }
  */
 final class BracesPositionFixer extends AbstractFixer implements ConfigurableFixerInterface, WhitespacesAwareFixerInterface
@@ -362,13 +362,21 @@ $bar = function () { $result = true;
                     }
                 }
 
-                for (; $openBraceIndex !== $moveBraceToIndex; $openBraceIndex += $delta) {
+                for ($i = $openBraceIndex; $i !== $moveBraceToIndex; $i += $delta) {
                     /** @var Token $siblingToken */
-                    $siblingToken = $tokens[$openBraceIndex + $delta];
-                    $tokens[$openBraceIndex] = $siblingToken;
+                    $siblingToken = $tokens[$i + $delta];
+                    $tokens[$i] = $siblingToken;
                 }
 
-                $tokens[$openBraceIndex] = $movedToken;
+                $tokens[$i] = $movedToken;
+
+                if ($tokens[$openBraceIndex]->isWhitespace() && $tokens[$openBraceIndex + 1]->isWhitespace()) {
+                    $tokens[$openBraceIndex] = new Token([
+                        T_WHITESPACE,
+                        $tokens[$openBraceIndex]->getContent().$tokens[$openBraceIndex + 1]->getContent(),
+                    ]);
+                    $tokens->clearAt($openBraceIndex + 1);
+                }
 
                 $openBraceIndex = $moveBraceToIndex;
             }
@@ -387,9 +395,13 @@ $bar = function () { $result = true;
                 continue;
             }
 
-            for ($prevIndex = $closeBraceIndex - 1; $tokens->isEmptyAt($prevIndex); --$prevIndex);
+            $prevIndex = $closeBraceIndex - 1;
+            while ($tokens->isEmptyAt($prevIndex)) {
+                --$prevIndex;
+            }
 
             $prevToken = $tokens[$prevIndex];
+
             if ($prevToken->isWhitespace() && Preg::match('/\R/', $prevToken->getContent())) {
                 continue;
             }

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/CurlyBracesPositionFixer.php

@@ -36,7 +36,7 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
  *  anonymous_functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
  *  classes_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
  *  control_structures_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
- *  functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line'
+ *  functions_opening_brace?: 'next_line_unless_newline_at_signature_end'|'same_line',
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
  *  allow_single_line_anonymous_functions: bool,
@@ -45,7 +45,7 @@ use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
  *  anonymous_functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
  *  classes_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
  *  control_structures_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
- *  functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line'
+ *  functions_opening_brace: 'next_line_unless_newline_at_signature_end'|'same_line',
  * }
  */
 final class CurlyBracesPositionFixer extends AbstractProxyFixer implements ConfigurableFixerInterface, DeprecatedFixerInterface, WhitespacesAwareFixerInterface

+ 10 - 0
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoMultipleStatementsPerLineFixer.php

@@ -21,6 +21,7 @@ use PhpCsFixer\FixerDefinition\CodeSample;
 use PhpCsFixer\FixerDefinition\FixerDefinition;
 use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
 use PhpCsFixer\Preg;
+use PhpCsFixer\Tokenizer\CT;
 use PhpCsFixer\Tokenizer\Tokens;
 
 /**
@@ -66,6 +67,15 @@ final class NoMultipleStatementsPerLineFixer extends AbstractFixer implements Wh
                 continue;
             }
 
+            if ($tokens[$index]->isGivenKind(CT::T_PROPERTY_HOOK_BRACE_OPEN)) {
+                $index = $tokens->findBlockEnd(
+                    Tokens::BLOCK_TYPE_PROPERTY_HOOK,
+                    $index
+                );
+
+                continue;
+            }
+
             if (!$tokens[$index]->equals(';')) {
                 continue;
             }

+ 3 - 3
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NoTrailingCommaInSinglelineFixer.php

@@ -32,10 +32,10 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  elements?: list<'arguments'|'array'|'array_destructuring'|'group_import'>
+ *  elements?: list<'arguments'|'array'|'array_destructuring'|'group_import'>,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  elements: list<'arguments'|'array'|'array_destructuring'|'group_import'>
+ *  elements: list<'arguments'|'array'|'array_destructuring'|'group_import'>,
  * }
  */
 final class NoTrailingCommaInSinglelineFixer extends AbstractFixer implements ConfigurableFixerInterface
@@ -63,7 +63,7 @@ final class NoTrailingCommaInSinglelineFixer extends AbstractFixer implements Co
 
     protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
     {
-        $elements = ['arguments', 'array_destructuring', 'array', 'group_import'];
+        $elements = ['arguments', 'array', 'array_destructuring', 'group_import'];
 
         return new FixerConfigurationResolver([
             (new FixerOptionBuilder('elements', 'Which elements to fix.'))

+ 10 - 10
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NonPrintableCharacterFixer.php

@@ -35,10 +35,10 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  use_escape_sequences_in_strings?: bool
+ *  use_escape_sequences_in_strings?: bool,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  use_escape_sequences_in_strings: bool
+ *  use_escape_sequences_in_strings: bool,
  * }
  */
 final class NonPrintableCharacterFixer extends AbstractFixer implements ConfigurableFixerInterface
@@ -46,15 +46,10 @@ final class NonPrintableCharacterFixer extends AbstractFixer implements Configur
     /** @use ConfigurableFixerTrait<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration> */
     use ConfigurableFixerTrait;
 
-    /**
-     * @var array<string, array{string, string}>
-     */
-    private array $symbolsReplace;
-
     /**
      * @var list<int>
      */
-    private static array $tokens = [
+    private const TOKENS = [
         T_STRING_VARNAME,
         T_INLINE_HTML,
         T_VARIABLE,
@@ -64,6 +59,11 @@ final class NonPrintableCharacterFixer extends AbstractFixer implements Configur
         T_DOC_COMMENT,
     ];
 
+    /**
+     * @var array<string, array{string, string}>
+     */
+    private array $symbolsReplace;
+
     public function __construct()
     {
         parent::__construct();
@@ -102,7 +102,7 @@ final class NonPrintableCharacterFixer extends AbstractFixer implements Configur
 
     public function isCandidate(Tokens $tokens): bool
     {
-        return $tokens->isAnyTokenKindsFound(self::$tokens);
+        return $tokens->isAnyTokenKindsFound(self::TOKENS);
     }
 
     protected function createConfigurationDefinition(): FixerConfigurationResolverInterface
@@ -171,7 +171,7 @@ final class NonPrintableCharacterFixer extends AbstractFixer implements Configur
                 continue;
             }
 
-            if ($token->isGivenKind(self::$tokens)) {
+            if ($token->isGivenKind(self::TOKENS)) {
                 $newContent = strtr($content, $replacements);
 
                 // variable name cannot contain space

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/NumericLiteralSeparatorFixer.php

@@ -41,11 +41,11 @@ use PhpCsFixer\Tokenizer\Tokens;
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
  *  override_existing?: bool,
- *  strategy?: 'no_separator'|'use_separator'
+ *  strategy?: 'no_separator'|'use_separator',
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
  *  override_existing: bool,
- *  strategy: 'no_separator'|'use_separator'
+ *  strategy: 'no_separator'|'use_separator',
  * }
  */
 final class NumericLiteralSeparatorFixer extends AbstractFixer implements ConfigurableFixerInterface

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/Basic/PsrAutoloadingFixer.php

@@ -40,10 +40,10 @@ use PhpCsFixer\Tokenizer\TokensAnalyzer;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  dir?: null|string
+ *  dir?: null|string,
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  dir: null|string
+ *  dir: null|string,
  * }
  */
 final class PsrAutoloadingFixer extends AbstractFixer implements ConfigurableFixerInterface

+ 2 - 2
vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/ConstantCaseFixer.php

@@ -34,10 +34,10 @@ use PhpCsFixer\Tokenizer\Tokens;
  * @implements ConfigurableFixerInterface<_AutogeneratedInputConfiguration, _AutogeneratedComputedConfiguration>
  *
  * @phpstan-type _AutogeneratedInputConfiguration array{
- *  case?: 'lower'|'upper'
+ *  case?: 'lower'|'upper',
  * }
  * @phpstan-type _AutogeneratedComputedConfiguration array{
- *  case: 'lower'|'upper'
+ *  case: 'lower'|'upper',
  * }
  */
 final class ConstantCaseFixer extends AbstractFixer implements ConfigurableFixerInterface

+ 1 - 6
vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/LowercaseKeywordsFixer.php

@@ -28,11 +28,6 @@ use PhpCsFixer\Tokenizer\Tokens;
  */
 final class LowercaseKeywordsFixer extends AbstractFixer
 {
-    /**
-     * @var list<int>
-     */
-    private static array $excludedTokens = [T_HALT_COMPILER];
-
     public function getDefinition(): FixerDefinitionInterface
     {
         return new FixerDefinition(
@@ -64,7 +59,7 @@ final class LowercaseKeywordsFixer extends AbstractFixer
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
         foreach ($tokens as $index => $token) {
-            if ($token->isKeyword() && !$token->isGivenKind(self::$excludedTokens)) {
+            if ($token->isKeyword() && !$token->isGivenKind([T_HALT_COMPILER])) {
                 $tokens[$index] = new Token([$token->getId(), strtolower($token->getContent())]);
             }
         }

+ 9 - 4
vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/MagicMethodCasingFixer.php

@@ -26,7 +26,7 @@ final class MagicMethodCasingFixer extends AbstractFixer
     /**
      * @var array<string, string>
      */
-    private static array $magicNames = [
+    private const MAGIC_NAMES = [
         '__call' => '__call',
         '__callstatic' => '__callStatic',
         '__clone' => '__clone',
@@ -177,17 +177,22 @@ $foo->__INVOKE(1);
         return $tokens[$tokens->getNextMeaningfulToken($index)]->equals('(');
     }
 
+    /**
+     * @phpstan-assert-if-true key-of<self::MAGIC_NAMES> $name
+     */
     private function isMagicMethodName(string $name): bool
     {
-        return isset(self::$magicNames[$name]);
+        return isset(self::MAGIC_NAMES[$name]);
     }
 
     /**
-     * @param string $name name of a magic method
+     * @param key-of<self::MAGIC_NAMES> $name name of a magic method
+     *
+     * @return value-of<self::MAGIC_NAMES>
      */
     private function getMagicMethodNameInCorrectCasing(string $name): string
     {
-        return self::$magicNames[$name];
+        return self::MAGIC_NAMES[$name];
     }
 
     private function setTokenToCorrectCasing(Tokens $tokens, int $index, string $nameInCorrectCasing): void

+ 26 - 235
vendor/friendsofphp/php-cs-fixer/src/Fixer/Casing/NativeTypeDeclarationCasingFixer.php

@@ -20,76 +20,12 @@ use PhpCsFixer\FixerDefinition\FixerDefinition;
 use PhpCsFixer\FixerDefinition\FixerDefinitionInterface;
 use PhpCsFixer\FixerDefinition\VersionSpecification;
 use PhpCsFixer\FixerDefinition\VersionSpecificCodeSample;
-use PhpCsFixer\Tokenizer\Analyzer\Analysis\TypeAnalysis;
-use PhpCsFixer\Tokenizer\Analyzer\FunctionsAnalyzer;
 use PhpCsFixer\Tokenizer\CT;
 use PhpCsFixer\Tokenizer\Token;
 use PhpCsFixer\Tokenizer\Tokens;
-use PhpCsFixer\Tokenizer\TokensAnalyzer;
 
 final class NativeTypeDeclarationCasingFixer extends AbstractFixer
 {
-    /*
-     * https://wiki.php.net/rfc/typed_class_constants
-     * Supported types
-     * Class constant type declarations support all type declarations supported by PHP,
-     * except `void`, `callable`, `never`.
-     *
-     * array
-     * bool
-     * callable
-     * float
-     * int
-     * iterable
-     * object
-     * mixed
-     * parent
-     * self
-     * string
-     * any class or interface name -> not native, so not applicable for this Fixer
-     * ?type -> not native, `?` has no casing, so not applicable for this Fixer
-     *
-     * Not in the list referenced but supported:
-     * null
-     * static
-     */
-    private const CLASS_CONST_SUPPORTED_HINTS = [
-        'array' => true,
-        'bool' => true,
-        'float' => true,
-        'int' => true,
-        'iterable' => true,
-        'mixed' => true,
-        'null' => true,
-        'object' => true,
-        'parent' => true,
-        'self' => true,
-        'string' => true,
-        'static' => true,
-    ];
-
-    private const CLASS_PROPERTY_SUPPORTED_HINTS = [
-        'array' => true,
-        'bool' => true,
-        'float' => true,
-        'int' => true,
-        'iterable' => true,
-        'mixed' => true,
-        'null' => true,
-        'object' => true,
-        'parent' => true,
-        'self' => true,
-        'static' => true,
-        'string' => true,
-    ];
-
-    private const TYPE_SEPARATION_TYPES = [
-        CT::T_TYPE_ALTERNATION,
-        CT::T_TYPE_INTERSECTION,
-        CT::T_DISJUNCTIVE_NORMAL_FORM_TYPE_PARENTHESIS_OPEN,
-        CT::T_DISJUNCTIVE_NORMAL_FORM_TYPE_PARENTHESIS_CLOSE,
-    ];
-
     /**
      * https://secure.php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration.
      *
@@ -114,22 +50,13 @@ final class NativeTypeDeclarationCasingFixer extends AbstractFixer
      *
      * @var array<string, true>
      */
-    private array $functionTypeHints;
-
-    private FunctionsAnalyzer $functionsAnalyzer;
-
-    /**
-     * @var list<array{int}|string>
-     */
-    private array $beforePropertyTypeTokens;
+    private array $types;
 
     public function __construct()
     {
         parent::__construct();
 
-        $this->beforePropertyTypeTokens = ['{', ';', [T_PRIVATE], [T_PROTECTED], [T_PUBLIC], [T_VAR]];
-
-        $this->functionTypeHints = [
+        $this->types = [
             'array' => true,
             'bool' => true,
             'callable' => true,
@@ -137,29 +64,26 @@ final class NativeTypeDeclarationCasingFixer extends AbstractFixer
             'int' => true,
             'iterable' => true,
             'object' => true,
+            'parent' => true,
             'self' => true,
+            'static' => true,
             'string' => true,
             'void' => true,
         ];
 
         if (\PHP_VERSION_ID >= 8_00_00) {
-            $this->functionTypeHints['false'] = true;
-            $this->functionTypeHints['mixed'] = true;
-            $this->functionTypeHints['null'] = true;
-            $this->functionTypeHints['static'] = true;
+            $this->types['false'] = true;
+            $this->types['mixed'] = true;
+            $this->types['null'] = true;
         }
 
         if (\PHP_VERSION_ID >= 8_01_00) {
-            $this->functionTypeHints['never'] = true;
-
-            $this->beforePropertyTypeTokens[] = [T_READONLY];
+            $this->types['never'] = true;
         }
 
         if (\PHP_VERSION_ID >= 8_02_00) {
-            $this->functionTypeHints['true'] = true;
+            $this->types['true'] = true;
         }
-
-        $this->functionsAnalyzer = new FunctionsAnalyzer();
     }
 
     public function getDefinition(): FixerDefinitionInterface
@@ -194,167 +118,34 @@ final class NativeTypeDeclarationCasingFixer extends AbstractFixer
 
     protected function applyFix(\SplFileInfo $file, Tokens $tokens): void
     {
-        $this->fixFunctions($tokens);
-        $this->fixClassConstantsAndProperties($tokens);
-    }
-
-    private function fixFunctions(Tokens $tokens): void
-    {
-        for ($index = $tokens->count() - 1; $index >= 0; --$index) {
-            if ($tokens[$index]->isGivenKind([T_FUNCTION, T_FN])) {
-                $this->fixFunctionReturnType($tokens, $index);
-                $this->fixFunctionArgumentTypes($tokens, $index);
-            }
-        }
-    }
-
-    private function fixFunctionArgumentTypes(Tokens $tokens, int $index): void
-    {
-        foreach ($this->functionsAnalyzer->getFunctionArguments($tokens, $index) as $argument) {
-            $this->fixArgumentType($tokens, $argument->getTypeAnalysis());
-        }
-    }
-
-    private function fixFunctionReturnType(Tokens $tokens, int $index): void
-    {
-        $this->fixArgumentType($tokens, $this->functionsAnalyzer->getFunctionReturnType($tokens, $index));
-    }
-
-    private function fixArgumentType(Tokens $tokens, ?TypeAnalysis $type = null): void
-    {
-        if (null === $type) {
-            return;
-        }
-
-        for ($index = $type->getStartIndex(); $index <= $type->getEndIndex(); ++$index) {
-            if ($tokens[$tokens->getNextMeaningfulToken($index)]->isGivenKind(T_NS_SEPARATOR)) {
+        foreach ($tokens as $index => $token) {
+            $content = $token->getContent();
+            $lowercaseContent = strtolower($content);
+            if ($content === $lowercaseContent) {
                 continue;
             }
-
-            $this->fixCasing($this->functionTypeHints, $tokens, $index);
-        }
-    }
-
-    private function fixClassConstantsAndProperties(Tokens $tokens): void
-    {
-        $analyzer = new TokensAnalyzer($tokens);
-        $elements = array_reverse($analyzer->getClassyElements(), true);
-
-        foreach ($elements as $index => $element) {
-            if ('const' === $element['type']) {
-                if (\PHP_VERSION_ID >= 8_03_00 && !$this->isConstWithoutType($tokens, $index)) {
-                    foreach ($this->getNativeTypeHintCandidatesForConstant($tokens, $index) as $nativeTypeHintIndex) {
-                        $this->fixCasing($this::CLASS_CONST_SUPPORTED_HINTS, $tokens, $nativeTypeHintIndex);
-                    }
-                }
-
+            if (!isset($this->types[$lowercaseContent])) {
                 continue;
             }
 
-            if ('property' === $element['type']) {
-                foreach ($this->getNativeTypeHintCandidatesForProperty($tokens, $index) as $nativeTypeHintIndex) {
-                    $this->fixCasing($this::CLASS_PROPERTY_SUPPORTED_HINTS, $tokens, $nativeTypeHintIndex);
-                }
+            $prevIndex = $tokens->getPrevMeaningfulToken($index);
+            if ($tokens[$prevIndex]->equals('=') || $tokens[$prevIndex]->isGivenKind([T_CASE, T_OBJECT_OPERATOR, T_DOUBLE_COLON, T_NS_SEPARATOR])) {
+                continue;
             }
-        }
-    }
 
-    /** @return iterable<int> */
-    private function getNativeTypeHintCandidatesForConstant(Tokens $tokens, int $index): iterable
-    {
-        $constNameIndex = $this->getConstNameIndex($tokens, $index);
-        $index = $this->getFirstIndexOfType($tokens, $index);
-
-        do {
-            $typeEnd = $this->getTypeEnd($tokens, $index, $constNameIndex);
-
-            if ($typeEnd === $index) {
-                yield $index;
+            $nextIndex = $tokens->getNextMeaningfulToken($index);
+            if ($tokens[$nextIndex]->equals('=') || $tokens[$nextIndex]->isGivenKind(T_NS_SEPARATOR)) {
+                continue;
             }
 
-            do {
-                $index = $tokens->getNextMeaningfulToken($index);
-            } while ($tokens[$index]->isGivenKind(self::TYPE_SEPARATION_TYPES));
-        } while ($index < $constNameIndex);
-    }
-
-    private function isConstWithoutType(Tokens $tokens, int $index): bool
-    {
-        $index = $tokens->getNextMeaningfulToken($index);
-
-        return $tokens[$index]->isGivenKind(T_STRING) && $tokens[$tokens->getNextMeaningfulToken($index)]->equals('=');
-    }
-
-    private function getConstNameIndex(Tokens $tokens, int $index): int
-    {
-        return $tokens->getPrevMeaningfulToken(
-            $tokens->getNextTokenOfKind($index, ['=']),
-        );
-    }
-
-    /** @return iterable<int> */
-    private function getNativeTypeHintCandidatesForProperty(Tokens $tokens, int $index): iterable
-    {
-        $propertyNameIndex = $index;
-        $index = $tokens->getPrevTokenOfKind($index, $this->beforePropertyTypeTokens);
-
-        $index = $this->getFirstIndexOfType($tokens, $index);
-
-        do {
-            $typeEnd = $this->getTypeEnd($tokens, $index, $propertyNameIndex);
-
-            if ($typeEnd === $index) {
-                yield $index;
+            if (
+                !$tokens[$prevIndex]->isGivenKind([T_CONST, CT::T_NULLABLE_TYPE, CT::T_TYPE_ALTERNATION, CT::T_TYPE_COLON])
+                && !$tokens[$nextIndex]->isGivenKind([T_VARIABLE, CT::T_TYPE_ALTERNATION])
+            ) {
+                continue;
             }
 
-            do {
-                $index = $tokens->getNextMeaningfulToken($index);
-            } while ($tokens[$index]->isGivenKind(self::TYPE_SEPARATION_TYPES));
-        } while ($index < $propertyNameIndex);
-
-        return [];
-    }
-
-    private function getFirstIndexOfType(Tokens $tokens, int $index): int
-    {
-        $index = $tokens->getNextMeaningfulToken($index);
-
-        if ($tokens[$index]->isGivenKind(CT::T_NULLABLE_TYPE)) {
-            $index = $tokens->getNextMeaningfulToken($index);
-        }
-
-        if ($tokens[$index]->isGivenKind(CT::T_DISJUNCTIVE_NORMAL_FORM_TYPE_PARENTHESIS_OPEN)) {
-            $index = $tokens->getNextMeaningfulToken($index);
-        }
-
-        return $index;
-    }
-
-    private function getTypeEnd(Tokens $tokens, int $index, int $upperLimit): int
-    {
-        if (!$tokens[$index]->isGivenKind([T_STRING, T_NS_SEPARATOR])) {
-            return $index; // callable, array, self, static, etc.
-        }
-
-        $endIndex = $index;
-        while ($tokens[$index]->isGivenKind([T_STRING, T_NS_SEPARATOR]) && $index < $upperLimit) {
-            $endIndex = $index;
-            $index = $tokens->getNextMeaningfulToken($index);
-        }
-
-        return $endIndex;
-    }
-
-    /**
-     * @param array<string, true> $supportedTypeHints
-     */
-    private function fixCasing(array $supportedTypeHints, Tokens $tokens, int $index): void
-    {
-        $typeContent = $tokens[$index]->getContent();
-        $typeContentLower = strtolower($typeContent);
-
-        if (isset($supportedTypeHints[$typeContentLower]) && $typeContent !== $typeContentLower) {
-            $tokens[$index] = new Token([$tokens[$index]->getId(), $typeContentLower]);
+            $tokens[$index] = new Token([$token->getId(), $lowercaseContent]);
         }
     }
 }

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio