From b022800c5a818cfc27eb9fc1782cf4622a005e26 Mon Sep 17 00:00:00 2001 From: Peter Orosz Date: Thu, 9 Apr 2026 12:40:00 +0200 Subject: [PATCH 1/5] DE-161039 fix: PHP 8.4 backwards-compatible rector fixes Apply NullToStrictStringFuncCallArgRector to add explicit (string) casts for nullable string parameters deprecated in PHP 8.1+. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Commenting/CreateMockFunctionReturnTypeOrderSniff.php | 2 +- .../Sniffs/ForbiddenElseStatementSniff.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php b/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php index 604f6ed..d0c80e3 100644 --- a/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php +++ b/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php @@ -81,7 +81,7 @@ public function process(File $phpcsFile, $stackPtr): void $returnType = $tokens[$returnTypePtr]['content']; - if (preg_match('~^MockInterface&(\w+)$~', $returnType, $matches) !== 1) { + if (preg_match('~^MockInterface&(\w+)$~', (string) $returnType, $matches) !== 1) { return; } diff --git a/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php b/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php index 3e6df88..d2ea490 100644 --- a/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php +++ b/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php @@ -37,7 +37,7 @@ public function process(File $phpcsFile, $stackPtr): void { $tokens = $phpcsFile->getTokens(); - $statement = strtolower($tokens[$stackPtr]['content']); + $statement = strtolower((string) $tokens[$stackPtr]['content']); $error = 'Use of ' . $statement . ' is forbidden. See: https://github.com/BrandEmbassy/developers-manifest/issues/365.'; From d9c420183afcf65e99f312754055ff9a3a8784ac Mon Sep 17 00:00:00 2001 From: Peter Orosz Date: Thu, 9 Apr 2026 12:43:12 +0200 Subject: [PATCH 2/5] DE-161039 fix: fix ECS cast spacing and update PHPStan baseline - Remove space after (string) cast to match CastSpacesFixer rule - Update PHPStan baseline: replace old argument.type ignores with cast.string ignores for the same files Co-Authored-By: Claude Opus 4.6 (1M context) --- phpstan-baseline.neon | 8 ++++---- .../Commenting/CreateMockFunctionReturnTypeOrderSniff.php | 2 +- .../Sniffs/ForbiddenElseStatementSniff.php | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 73d88e3..73f4339 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -31,8 +31,8 @@ parameters: path: src/BrandEmbassyCodingStandard/Sniffs/Classes/TraitUseSpacingSniffTest.php - - message: '#^Parameter \#2 \$subject of function preg_match expects string, mixed given\.$#' - identifier: argument.type + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php @@ -43,8 +43,8 @@ parameters: path: src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php - - message: '#^Parameter \#1 \$string of function strtolower expects string, mixed given\.$#' - identifier: argument.type + message: '#^Cannot cast mixed to string\.$#' + identifier: cast.string count: 1 path: src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php diff --git a/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php b/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php index d0c80e3..8b6d70b 100644 --- a/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php +++ b/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php @@ -81,7 +81,7 @@ public function process(File $phpcsFile, $stackPtr): void $returnType = $tokens[$returnTypePtr]['content']; - if (preg_match('~^MockInterface&(\w+)$~', (string) $returnType, $matches) !== 1) { + if (preg_match('~^MockInterface&(\w+)$~', (string)$returnType, $matches) !== 1) { return; } diff --git a/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php b/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php index d2ea490..4038ded 100644 --- a/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php +++ b/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php @@ -37,7 +37,7 @@ public function process(File $phpcsFile, $stackPtr): void { $tokens = $phpcsFile->getTokens(); - $statement = strtolower((string) $tokens[$stackPtr]['content']); + $statement = strtolower((string)$tokens[$stackPtr]['content']); $error = 'Use of ' . $statement . ' is forbidden. See: https://github.com/BrandEmbassy/developers-manifest/issues/365.'; From e7ce5e222a6ac947c62fcae3d19d6a7a4b9f558d Mon Sep 17 00:00:00 2001 From: Peter Orosz Date: Thu, 9 Apr 2026 12:46:31 +0200 Subject: [PATCH 3/5] fix: use assert(is_string) instead of (string) cast for token content Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Commenting/CreateMockFunctionReturnTypeOrderSniff.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php b/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php index 8b6d70b..31517ff 100644 --- a/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php +++ b/src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php @@ -5,6 +5,8 @@ use PHP_CodeSniffer\Files\File; use PHP_CodeSniffer\Sniffs\Sniff; use SlevomatCodingStandard\Helpers\TokenHelper; +use function assert; +use function is_string; use function preg_match; use const T_FUNCTION; @@ -80,8 +82,9 @@ public function process(File $phpcsFile, $stackPtr): void } $returnType = $tokens[$returnTypePtr]['content']; + assert(is_string($returnType)); - if (preg_match('~^MockInterface&(\w+)$~', (string)$returnType, $matches) !== 1) { + if (preg_match('~^MockInterface&(\w+)$~', $returnType, $matches) !== 1) { return; } From e1a943416dc39bb6408b67f239cc61e5e1901b33 Mon Sep 17 00:00:00 2001 From: Peter Orosz Date: Thu, 9 Apr 2026 12:46:35 +0200 Subject: [PATCH 4/5] fix: use assert(is_string) instead of (string) cast for token content Co-Authored-By: Claude Opus 4.6 (1M context) --- .../Sniffs/ForbiddenElseStatementSniff.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php b/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php index 4038ded..7948427 100644 --- a/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php +++ b/src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php @@ -4,6 +4,8 @@ use PHP_CodeSniffer\Files\File; use PHP_CodeSniffer\Sniffs\Sniff; +use function assert; +use function is_string; use function strtolower; use const T_ELSE; use const T_ELSEIF; @@ -37,7 +39,9 @@ public function process(File $phpcsFile, $stackPtr): void { $tokens = $phpcsFile->getTokens(); - $statement = strtolower((string)$tokens[$stackPtr]['content']); + $content = $tokens[$stackPtr]['content']; + assert(is_string($content)); + $statement = strtolower($content); $error = 'Use of ' . $statement . ' is forbidden. See: https://github.com/BrandEmbassy/developers-manifest/issues/365.'; From fa819b35a75e8fca78208391fb0f0d5c130707af Mon Sep 17 00:00:00 2001 From: Peter Orosz Date: Thu, 9 Apr 2026 12:46:57 +0200 Subject: [PATCH 5/5] fix: remove cast.string baseline entries, no longer needed with assert Co-Authored-By: Claude Opus 4.6 (1M context) --- phpstan-baseline.neon | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 73f4339..688e49e 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -30,24 +30,12 @@ parameters: count: 3 path: src/BrandEmbassyCodingStandard/Sniffs/Classes/TraitUseSpacingSniffTest.php - - - message: '#^Cannot cast mixed to string\.$#' - identifier: cast.string - count: 1 - path: src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php - - message: '#^Parameter \#4 \$startPointer of static method SlevomatCodingStandard\\Helpers\\TokenHelper\:\:findNextContent\(\) expects int, mixed given\.$#' identifier: argument.type count: 1 path: src/BrandEmbassyCodingStandard/Sniffs/Commenting/CreateMockFunctionReturnTypeOrderSniff.php - - - message: '#^Cannot cast mixed to string\.$#' - identifier: cast.string - count: 1 - path: src/BrandEmbassyCodingStandard/Sniffs/ForbiddenElseStatementSniff.php - - message: '#^Binary operation "\-" between mixed and 1 results in an error\.$#' identifier: binaryOp.invalid