Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b3fa374

Browse files
treat TypeAliasImportTag::$importedFrom as a class name string
1 parent 22eb90a commit b3fa374

File tree

5 files changed

+11
-22
lines changed

5 files changed

+11
-22
lines changed

‎src/PhpDoc/PhpDocNodeResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ public function resolveTypeAliasImportTags(PhpDocNode $phpDocNode, NameScope $na
395395
foreach (['@psalm-import-type', '@phpstan-import-type'] as $tagName) {
396396
foreach ($phpDocNode->getTypeAliasImportTagValues($tagName) as $typeAliasImportTagValue) {
397397
$importedAlias = $typeAliasImportTagValue->importedAlias;
398-
$importedFrom = $this->typeNodeResolver->resolve($typeAliasImportTagValue->importedFrom, $nameScope);
398+
$importedFrom = $typeAliasImportTagValue->importedFrom->name;
399399
$importedAs = $typeAliasImportTagValue->importedAs;
400400
$resolved[$importedAs ?? $importedAlias] = new TypeAliasImportTag($importedAlias, $importedFrom, $importedAs);
401401
}

‎src/PhpDoc/Tag/TypeAliasImportTag.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ final class TypeAliasImportTag
77

88
private string $importedAlias;
99

10-
private \PHPStan\Type\Type $importedFrom;
10+
private string $importedFrom;
1111

1212
private ?string $importedAs;
1313

14-
public function __construct(string $importedAlias, \PHPStan\Type\Type $importedFrom, ?string $importedAs)
14+
public function __construct(string $importedAlias, string $importedFrom, ?string $importedAs)
1515
{
1616
$this->importedAlias = $importedAlias;
1717
$this->importedFrom = $importedFrom;
@@ -23,7 +23,7 @@ public function getImportedAlias(): string
2323
return $this->importedAlias;
2424
}
2525

26-
public function getImportedFrom(): \PHPStan\Type\Type
26+
public function getImportedFrom(): string
2727
{
2828
return $this->importedFrom;
2929
}

‎src/Reflection/ClassReflection.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace PHPStan\Reflection;
44

55
use Attribute;
6+
use PHPStan\Analyser\NameScope;
67
use PHPStan\BetterReflection\Reflection\Adapter\ReflectionClass;
78
use PHPStan\Php\PhpVersion;
89
use PHPStan\PhpDoc\ResolvedPhpDocBlock;
@@ -23,7 +24,6 @@
2324
use PHPStan\Type\Generic\TemplateTypeHelper;
2425
use PHPStan\Type\Generic\TemplateTypeMap;
2526
use PHPStan\Type\Generic\TemplateTypeScope;
26-
use PHPStan\Type\ObjectType;
2727
use PHPStan\Type\Type;
2828
use PHPStan\Type\TypeAlias;
2929
use PHPStan\Type\VerbosityLevel;
@@ -776,22 +776,19 @@ public function getTypeAliases(): array
776776
$typeAliasImportTags = $resolvedPhpDoc->getTypeAliasImportTags();
777777
$typeAliasTags = $resolvedPhpDoc->getTypeAliasTags();
778778

779+
$nameScope = $resolvedPhpDoc->getNullableNameScope() ?? new NameScope(null, []);
780+
779781
// prevent circular imports
780782
if (array_key_exists($this->getName(), self::$resolvingTypeAliasImports)) {
781783
throw new \PHPStan\Type\CircularTypeAliasDefinitionException();
782784
}
783785

784786
self::$resolvingTypeAliasImports[$this->getName()] = true;
785787

786-
$importedAliases = array_map(function (TypeAliasImportTag $typeAliasImportTag): ?TypeAlias {
788+
$importedAliases = array_map(function (TypeAliasImportTag $typeAliasImportTag)use ($nameScope): ?TypeAlias {
787789
$importedAlias = $typeAliasImportTag->getImportedAlias();
788-
$importedFrom = $typeAliasImportTag->getImportedFrom();
789-
790-
if (!($importedFrom instanceof ObjectType)) {
791-
return null;
792-
}
790+
$importedFromClassName = $nameScope->resolveStringName($typeAliasImportTag->getImportedFrom());
793791

794-
$importedFromClassName = $importedFrom->getClassName();
795792
if (!$this->reflectionProvider->hasClass($importedFromClassName)) {
796793
return null;
797794
}

‎src/Rules/Classes/LocalTypeAliasesRule.php

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@
1010
use PHPStan\Rules\Rule;
1111
use PHPStan\Rules\RuleErrorBuilder;
1212
use PHPStan\Type\ErrorType;
13-
use PHPStan\Type\ObjectType;
1413
use PHPStan\Type\TypeTraverser;
15-
use PHPStan\Type\VerbosityLevel;
1614

1715
/**
1816
* @implements Rule<InClassNode>
@@ -71,14 +69,8 @@ public function processNode(Node $node, Scope $scope): array
7169
foreach ($phpDoc->getTypeAliasImportTags() as $typeAliasImportTag) {
7270
$aliasName = $typeAliasImportTag->getImportedAs() ?? $typeAliasImportTag->getImportedAlias();
7371
$importedAlias = $typeAliasImportTag->getImportedAlias();
74-
$importedFrom = $typeAliasImportTag->getImportedFrom();
72+
$importedFromClassName = $resolveName($typeAliasImportTag->getImportedFrom());
7573

76-
if (!($importedFrom instanceof ObjectType)) {
77-
$errors[] = RuleErrorBuilder::message(sprintf('Cannot import type alias %s from a non-class type %s.', $importedAlias, $importedFrom->describe(VerbosityLevel::typeOnly())))->build();
78-
continue;
79-
}
80-
81-
$importedFromClassName = $importedFrom->getClassName();
8274
if (!$this->reflectionProvider->hasClass($importedFromClassName)) {
8375
$errors[] = RuleErrorBuilder::message(sprintf('Cannot import type alias %s: class %s does not exist.', $importedAlias, $importedFromClassName))->build();
8476
continue;

‎tests/PHPStan/Rules/Classes/LocalTypeAliasesRuleTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function testRule(): void
4545
22,
4646
],
4747
[
48-
'Cannot import type alias ImportedAliasFromNonClass from a non-class type int.',
48+
'Cannot import type alias ImportedAliasFromNonClass: class LocalTypeAliases\int does not exist.',
4949
37,
5050
],
5151
[

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /