decrease complexity of NodeScopeResolver

This commit is contained in:
Tomas Votruba 2018-08-10 17:17:09 +02:00
parent 0685ece179
commit 1c38169690
2 changed files with 23 additions and 18 deletions

View File

@ -66,11 +66,6 @@ parameters:
- 'src/Configuration/Rector/Guard/RecipeGuard.php'
- 'src/Configuration/Rector/*Recipe.php'
Symplify\CodingStandard\Sniffs\CleanCode\CognitiveComplexitySniff:
# @todo fix later
- 'packages/NodeTypeResolver/src/NodeTypeResolver.php'
- 'packages/NodeTypeResolver/src/PHPStan/Scope/NodeScopeResolver.php'
Symplify\CodingStandard\Fixer\Naming\PropertyNameMatchingTypeFixer:
- 'packages/NodeTypeResolver/src/PHPStan/Scope/NodeScopeResolver.php'

View File

@ -85,19 +85,7 @@ final class NodeScopeResolver
// the class reflection is resolved AFTER entering to class node
// so we need to get it from the first after this one
if ($node instanceof Class_ || $node instanceof Interface_) {
if (isset($node->namespacedName)) {
$scope = $scope->enterClass($this->broker->getClass((string) $node->namespacedName));
} else {
// possibly anonymous class
$anonymousClassReflection = (new PrivatesAccessor())->getPrivateProperty(
$this->phpStanNodeScopeResolver,
'anonymousClassReflection'
);
if ($anonymousClassReflection) {
$scope = $scope->enterAnonymousClass($anonymousClassReflection);
}
}
$scope = $this->resolveClassOrInterfaceNode($node, $scope);
}
$node->setAttribute(TypeAttribute::SCOPE, $scope);
@ -140,4 +128,26 @@ final class NodeScopeResolver
}
}
}
/**
* @param Class_|Interface_ $classOrInterfaceNode
*/
private function resolveClassOrInterfaceNode(Node $classOrInterfaceNode, Scope $scope): Scope
{
if (isset($classOrInterfaceNode->namespacedName)) {
return $scope->enterClass($this->broker->getClass((string) $classOrInterfaceNode->namespacedName));
}
// possibly anonymous class
$anonymousClassReflection = (new PrivatesAccessor())->getPrivateProperty(
$this->phpStanNodeScopeResolver,
'anonymousClassReflection'
);
if ($anonymousClassReflection) {
return $scope->enterAnonymousClass($anonymousClassReflection);
}
return $scope;
}
}