Skip to content

Commit 83e3125

Browse files
committed
Merge pull request #9 from asgrim/ignore-class-trait-usage
Ignore any tokens within classes when looking for namespaces
2 parents 14bb2da + 0c11dd9 commit 83e3125

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/Types/ContextFactory.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,26 @@ public function createForNamespace($namespace, $fileContents)
7070
case T_NAMESPACE:
7171
$currentNamespace = $this->parseNamespace($tokens);
7272
break;
73+
case T_CLASS:
74+
// Fast-forward the iterator through the class so that any
75+
// T_USE tokens found within are skipped - these are not
76+
// valid namespace use statements so should be ignored.
77+
$braceLevel = 0;
78+
$firstBraceFound = false;
79+
while ($tokens->valid() && ($braceLevel > 0 || !$firstBraceFound)) {
80+
if ($tokens->current() === '{') {
81+
if (!$firstBraceFound) {
82+
$firstBraceFound = true;
83+
}
84+
$braceLevel++;
85+
}
86+
87+
if ($tokens->current() === '}') {
88+
$braceLevel--;
89+
}
90+
$tokens->next();
91+
}
92+
break;
7393
case T_USE:
7494
if ($currentNamespace === $namespace) {
7595
$useStatements = array_merge($useStatements, $this->parseUseStatement($tokens));

tests/unit/Types/ContextFactoryTest.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,26 @@ public function testReadsAliasesFromProvidedNamespaceAndContent()
8888

8989
$this->assertSame($expected, $context->getNamespaceAliases());
9090
}
91+
92+
public function testTraitUseIsNotDetectedAsNamespaceUse()
93+
{
94+
$fixture = new ContextFactory();
95+
96+
$php = "<?php
97+
namespace Foo;
98+
99+
trait FooTrait {}
100+
101+
class FooClass {
102+
use FooTrait;
103+
}
104+
";
105+
106+
$fixture = new ContextFactory();
107+
$context = $fixture->createForNamespace('Foo', $php);
108+
109+
$this->assertSame([], $context->getNamespaceAliases());
110+
}
91111
}
92112
}
93113

0 commit comments

Comments
 (0)