Skip to content

Commit 592d3d1

Browse files
jiripudilondrejmirtes
authored andcommitted
This wasn't that unnecessary after all
1 parent 72305ce commit 592d3d1

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

src/Analyser/NameScope.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,23 @@ class NameScope
2323
/** @var array<string, true> */
2424
private array $typeAliasesMap;
2525

26+
private bool $bypassTypeAliases;
27+
2628
/**
2729
* @param string|null $namespace
2830
* @param array<string, string> $uses alias(string) => fullName(string)
2931
* @param string|null $className
3032
* @param array<string, true> $typeAliasesMap
3133
*/
32-
public function __construct(?string $namespace, array $uses, ?string $className = null, ?string $functionName = null, ?TemplateTypeMap $templateTypeMap = null, array $typeAliasesMap = [])
34+
public function __construct(?string $namespace, array $uses, ?string $className = null, ?string $functionName = null, ?TemplateTypeMap $templateTypeMap = null, array $typeAliasesMap = [], bool $bypassTypeAliases = false)
3335
{
3436
$this->namespace = $namespace;
3537
$this->uses = $uses;
3638
$this->className = $className;
3739
$this->functionName = $functionName;
3840
$this->templateTypeMap = $templateTypeMap ?? TemplateTypeMap::createEmpty();
3941
$this->typeAliasesMap = $typeAliasesMap;
42+
$this->bypassTypeAliases = $bypassTypeAliases;
4043
}
4144

4245
public function getNamespace(): ?string
@@ -148,6 +151,16 @@ public function unsetTemplateType(string $name): self
148151
);
149152
}
150153

154+
public function bypassTypeAliases(): self
155+
{
156+
return new self($this->namespace, $this->uses, $this->className, $this->functionName, $this->templateTypeMap, $this->typeAliasesMap, true);
157+
}
158+
159+
public function shouldBypassTypeAliases(): bool
160+
{
161+
return $this->bypassTypeAliases;
162+
}
163+
151164
public function hasTypeAlias(string $alias): bool
152165
{
153166
return array_key_exists($alias, $this->typeAliasesMap);

src/PhpDoc/TypeNodeResolver.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,11 @@ private function resolveIdentifierTypeNode(IdentifierTypeNode $typeNode, NameSco
294294
}
295295
}
296296

297-
$typeAlias = $this->getTypeAliasResolver()->resolveTypeAlias($typeNode->name, $nameScope);
298-
if ($typeAlias !== null) {
299-
return $typeAlias;
297+
if (!$nameScope->shouldBypassTypeAliases()) {
298+
$typeAlias = $this->getTypeAliasResolver()->resolveTypeAlias($typeNode->name, $nameScope);
299+
if ($typeAlias !== null) {
300+
return $typeAlias;
301+
}
300302
}
301303

302304
$templateType = $nameScope->resolveTemplateTypeName($typeNode->name);

src/Rules/Classes/LocalTypeAliasesRule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ private function isAliasNameValid(string $aliasName, ?NameScope $nameScope): boo
156156
return true;
157157
}
158158

159-
$aliasNameResolvedType = $this->typeNodeResolver->resolve(new IdentifierTypeNode($aliasName), $nameScope);
159+
$aliasNameResolvedType = $this->typeNodeResolver->resolve(new IdentifierTypeNode($aliasName), $nameScope->bypassTypeAliases());
160160
return ($aliasNameResolvedType instanceof ObjectType && !in_array($aliasName, ['self', 'parent'], true))
161161
|| $aliasNameResolvedType instanceof TemplateType; // aliases take precedence over type parameters, this is reported by other rules using TemplateTypeCheck
162162
}

0 commit comments

Comments
 (0)