From 0714162e0c840229ab7ca587d6c0be8edf82ce0a Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Thu, 2 Jul 2026 14:47:10 +0200 Subject: [PATCH] Fix AddMissingVarNameFixer to handle intersection types in @var The type char class in VAR_WITHOUT_NAME_REGEX lacked '&', so inline @var with an intersection type (e.g. MockObject&AbstractIntegration) was skipped and never got its variable name filled in. --- .../Commenting/AddMissingVarNameFixer.php | 2 +- ...ersection_type_with_docblock_below.php.inc | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 packages/coding-standard/tests/Fixer/Commenting/AddMissingVarNameFixer/Fixture/intersection_type_with_docblock_below.php.inc diff --git a/packages/coding-standard/src/Fixer/Commenting/AddMissingVarNameFixer.php b/packages/coding-standard/src/Fixer/Commenting/AddMissingVarNameFixer.php index 5a4373010e..272ac63a45 100644 --- a/packages/coding-standard/src/Fixer/Commenting/AddMissingVarNameFixer.php +++ b/packages/coding-standard/src/Fixer/Commenting/AddMissingVarNameFixer.php @@ -20,7 +20,7 @@ final class AddMissingVarNameFixer extends AbstractDocBlockFixer /** * @see https://regex101.com/r/s1UkZs/1 */ - private const string VAR_WITHOUT_NAME_REGEX = '#^(?\/\*\* @(?:psalm-|phpstan-)?var )(?[\\\\\w\|\[\]-]+)(?\s+\*\/)$#'; + private const string VAR_WITHOUT_NAME_REGEX = '#^(?\/\*\* @(?:psalm-|phpstan-)?var )(?[\\\\\w\|\[\]&-]+)(?\s+\*\/)$#'; public function getDefinition(): FixerDefinitionInterface { diff --git a/packages/coding-standard/tests/Fixer/Commenting/AddMissingVarNameFixer/Fixture/intersection_type_with_docblock_below.php.inc b/packages/coding-standard/tests/Fixer/Commenting/AddMissingVarNameFixer/Fixture/intersection_type_with_docblock_below.php.inc new file mode 100644 index 0000000000..ceb003a032 --- /dev/null +++ b/packages/coding-standard/tests/Fixer/Commenting/AddMissingVarNameFixer/Fixture/intersection_type_with_docblock_below.php.inc @@ -0,0 +1,21 @@ + +----- +