From 76687ed82ce1b42e6b05720560882eee27baf350 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 22 Jul 2024 07:16:14 +0700 Subject: [PATCH 1/2] [TypeDeclaration] Skip possible void and return by docblock on ReturnTypeFromMockObjectRector --- .../Fixture/skip_possible_void.php.inc | 17 +++++++++++++++++ .../Fixture/skip_return_by_docblock.php.inc | 17 +++++++++++++++++ .../ReturnTypeFromMockObjectRector.php | 10 +++++----- 3 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector/Fixture/skip_possible_void.php.inc create mode 100644 rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector/Fixture/skip_return_by_docblock.php.inc diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector/Fixture/skip_possible_void.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector/Fixture/skip_possible_void.php.inc new file mode 100644 index 0000000000..f1ddcd42b8 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector/Fixture/skip_possible_void.php.inc @@ -0,0 +1,17 @@ +createMock('SomeType'); + } + } +} \ No newline at end of file diff --git a/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector/Fixture/skip_return_by_docblock.php.inc b/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector/Fixture/skip_return_by_docblock.php.inc new file mode 100644 index 0000000000..72347d99d6 --- /dev/null +++ b/rules-tests/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector/Fixture/skip_return_by_docblock.php.inc @@ -0,0 +1,17 @@ +expr instanceof Expr) { + if (! $this->returnAnalyzer->hasOnlyReturnWithExpr($node, $returns)) { return null; } - $returnType = $this->getType($soleReturn->expr); + $returnType = $this->nodeTypeResolver->getNativeType($returns[0]->expr); if (! $this->isMockObjectType($returnType)) { return null; } From 94cfbb871b62d0e062c1aae95a36cbc4b0889bf7 Mon Sep 17 00:00:00 2001 From: Abdul Malik Ikhsan Date: Mon, 22 Jul 2024 07:18:04 +0700 Subject: [PATCH 2/2] fix --- .../Rector/ClassMethod/ReturnTypeFromMockObjectRector.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php index 8282c3a54f..037b76df7c 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromMockObjectRector.php @@ -5,6 +5,7 @@ namespace Rector\TypeDeclaration\Rector\ClassMethod; use PhpParser\Node; +use PhpParser\Node\Expr; use PhpParser\Node\Name\FullyQualified; use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Analyser\Scope; @@ -106,7 +107,10 @@ public function refactorWithScope(Node $node, Scope $scope): ?Node return null; } - $returnType = $this->nodeTypeResolver->getNativeType($returns[0]->expr); + /** @var Expr $expr */ + $expr = $returns[0]->expr; + $returnType = $this->nodeTypeResolver->getNativeType($expr); + if (! $this->isMockObjectType($returnType)) { return null; }