From ae6af2ec27b2127b5e698065893896a7de9fd078 Mon Sep 17 00:00:00 2001 From: Caleb White Date: Wed, 21 Jan 2026 11:57:30 -0600 Subject: [PATCH 1/2] tests: create failing test --- .../Fixture/skip_mixed_passed_to_round.php.inc | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 rules-tests/TypeDeclaration/Rector/StmtsAwareInterface/SafeDeclareStrictTypesRector/Fixture/skip_mixed_passed_to_round.php.inc diff --git a/rules-tests/TypeDeclaration/Rector/StmtsAwareInterface/SafeDeclareStrictTypesRector/Fixture/skip_mixed_passed_to_round.php.inc b/rules-tests/TypeDeclaration/Rector/StmtsAwareInterface/SafeDeclareStrictTypesRector/Fixture/skip_mixed_passed_to_round.php.inc new file mode 100644 index 00000000000..f740e6efb86 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/StmtsAwareInterface/SafeDeclareStrictTypesRector/Fixture/skip_mixed_passed_to_round.php.inc @@ -0,0 +1,8 @@ + Date: Wed, 21 Jan 2026 11:57:30 -0600 Subject: [PATCH 2/2] fix: use strict mixed in StrictTypeSafetyChecker --- phpstan.neon | 3 +++ .../NodeAnalyzer/StrictTypeSafetyChecker.php | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/phpstan.neon b/phpstan.neon index 006290f3913..45b7b6f6f54 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -68,6 +68,9 @@ parameters: # phpstan class constant value - identifier: phpstanApi.classConstant + # phpstan class construction + - identifier: phpstanApi.constructor + # phpstan instanceof - identifier: phpstanApi.instanceofAssumption diff --git a/rules/TypeDeclaration/NodeAnalyzer/StrictTypeSafetyChecker.php b/rules/TypeDeclaration/NodeAnalyzer/StrictTypeSafetyChecker.php index 8e567e196d3..1a7e787db3f 100644 --- a/rules/TypeDeclaration/NodeAnalyzer/StrictTypeSafetyChecker.php +++ b/rules/TypeDeclaration/NodeAnalyzer/StrictTypeSafetyChecker.php @@ -18,6 +18,7 @@ use PHPStan\Reflection\Php\PhpPropertyReflection; use PHPStan\Type\MixedType; use PHPStan\Type\NeverType; +use PHPStan\Type\StrictMixedType; use PHPStan\Type\Type; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\NodeTypeResolver\PHPStan\ParametersAcceptorSelectorVariantsWrapper; @@ -197,6 +198,11 @@ private function isPropertyAssignSafe(Assign $assign): bool private function isTypeSafeForStrictMode(Type $declaredType, Type $valueType): bool { + // need to be strict with mixed to avoid false positives + if ($valueType instanceof MixedType) { + $valueType = new StrictMixedType(); + } + return $declaredType->accepts($valueType, strictTypes: true) ->yes(); }