Skip to content

Commit 94c011e

Browse files
committed
Fix invalid namespace aliases
1 parent d2473e6 commit 94c011e

File tree

2 files changed

+39
-41
lines changed

2 files changed

+39
-41
lines changed

src/Types/ContextFactory.php

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ private function extractUseStatements(ArrayIterator $tokens) : array
248248
$extractedUseStatements = [];
249249
$groupedNs = '';
250250
$currentNs = '';
251-
$currentAlias = null;
251+
$currentAlias = '';
252252
$state = 'start';
253253

254254
while ($tokens->valid()) {
@@ -261,6 +261,7 @@ private function extractUseStatements(ArrayIterator $tokens) : array
261261
case T_STRING:
262262
case T_NS_SEPARATOR:
263263
$currentNs .= $tokenValue;
264+
$currentAlias = $tokenValue;
264265
break;
265266
case T_CURLY_OPEN:
266267
case '{':
@@ -281,7 +282,7 @@ private function extractUseStatements(ArrayIterator $tokens) : array
281282
case 'start-alias':
282283
switch ($tokenId) {
283284
case T_STRING:
284-
$currentAlias .= $tokenValue;
285+
$currentAlias = $tokenValue;
285286
break;
286287
case self::T_LITERAL_USE_SEPARATOR:
287288
case self::T_LITERAL_END_OF_USE:
@@ -296,15 +297,16 @@ private function extractUseStatements(ArrayIterator $tokens) : array
296297
case T_STRING:
297298
case T_NS_SEPARATOR:
298299
$currentNs .= $tokenValue;
300+
$currentAlias = $tokenValue;
299301
break;
300302
case T_AS:
301303
$state = 'grouped-alias';
302304
break;
303305
case self::T_LITERAL_USE_SEPARATOR:
304-
$state = 'grouped';
305-
$extractedUseStatements[$currentAlias ?: $currentNs] = $currentNs;
306-
$currentNs = $groupedNs;
307-
$currentAlias = null;
306+
$state = 'grouped';
307+
$extractedUseStatements[$currentAlias] = $currentNs;
308+
$currentNs = $groupedNs;
309+
$currentAlias = '';
308310
break;
309311
case self::T_LITERAL_END_OF_USE:
310312
$state = 'end';
@@ -316,13 +318,13 @@ private function extractUseStatements(ArrayIterator $tokens) : array
316318
case 'grouped-alias':
317319
switch ($tokenId) {
318320
case T_STRING:
319-
$currentAlias .= $tokenValue;
321+
$currentAlias = $tokenValue;
320322
break;
321323
case self::T_LITERAL_USE_SEPARATOR:
322-
$state = 'grouped';
323-
$extractedUseStatements[$currentAlias ?: $currentNs] = $currentNs;
324-
$currentNs = $groupedNs;
325-
$currentAlias = null;
324+
$state = 'grouped';
325+
$extractedUseStatements[$currentAlias] = $currentNs;
326+
$currentNs = $groupedNs;
327+
$currentAlias = '';
326328
break;
327329
case self::T_LITERAL_END_OF_USE:
328330
$state = 'end';
@@ -340,7 +342,7 @@ private function extractUseStatements(ArrayIterator $tokens) : array
340342
}
341343

342344
if ($groupedNs !== $currentNs) {
343-
$extractedUseStatements[$currentAlias ?: $currentNs] = $currentNs;
345+
$extractedUseStatements[$currentAlias] = $currentNs;
344346
}
345347

346348
return $extractedUseStatements;

tests/unit/Types/ContextFactoryTest.php

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -49,25 +49,9 @@ public function testReadsNamespaceFromClassReflection() : void
4949
public function testReadsAliasesFromClassReflection() : void
5050
{
5151
$fixture = new ContextFactory();
52-
$expected = [
53-
'm' => m::class,
54-
'DocBlock' => DocBlock::class,
55-
'Tag' => Tag::class,
56-
'phpDocumentor' => 'phpDocumentor',
57-
'TestCase' => TestCase::class,
58-
'Assert' => Assert::class,
59-
'e' => e::class,
60-
ReflectionClass::class => ReflectionClass::class,
61-
'stdClass',
62-
];
6352
$context = $fixture->createFromReflector(new ReflectionClass($this));
6453

65-
$actual = $context->getNamespaceAliases();
66-
67-
// sort so that order differences don't break it
68-
sort($expected);
69-
sort($actual);
70-
$this->assertSame($expected, $actual);
54+
$this->assertNamespaceAliasesFrom($context);
7155
}
7256

7357
/**
@@ -89,20 +73,9 @@ public function testReadsNamespaceFromProvidedNamespaceAndContent() : void
8973
public function testReadsAliasesFromProvidedNamespaceAndContent() : void
9074
{
9175
$fixture = new ContextFactory();
92-
$expected = [
93-
'm' => m::class,
94-
'DocBlock' => DocBlock::class,
95-
'Tag' => Tag::class,
96-
'phpDocumentor' => 'phpDocumentor',
97-
'TestCase' => TestCase::class,
98-
ReflectionClass::class => ReflectionClass::class,
99-
];
10076
$context = $fixture->createForNamespace(__NAMESPACE__, file_get_contents(__FILE__));
10177

102-
$actual = $context->getNamespaceAliases();
103-
104-
// sort so that order differences don't break it
105-
$this->assertSame(sort($expected), sort($actual));
78+
$this->assertNamespaceAliasesFrom($context);
10679
}
10780

10881
/**
@@ -196,6 +169,29 @@ class Bar
196169
$this->assertSame([], $context->getNamespaceAliases());
197170
}
198171

172+
public function assertNamespaceAliasesFrom(Context $context)
173+
{
174+
$expected = [
175+
'm' => m::class,
176+
'DocBlock' => DocBlock::class,
177+
'Tag' => Tag::class,
178+
'phpDocumentor' => 'phpDocumentor',
179+
'TestCase' => TestCase::class,
180+
'Assert' => Assert::class,
181+
'e' => e::class,
182+
ReflectionClass::class => ReflectionClass::class,
183+
'stdClass' => 'stdClass',
184+
];
185+
186+
$actual = $context->getNamespaceAliases();
187+
188+
// sort so that order differences don't break it
189+
asort($expected);
190+
asort($actual);
191+
192+
$this->assertSame($expected, $actual);
193+
}
194+
199195
public function tearDown()
200196
{
201197
m::close();

0 commit comments

Comments
 (0)