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 df4d3ac

Browse files
Fully qualified namespace not checked in note visitors - #59
1 parent 8f2fff5 commit df4d3ac

File tree

6 files changed

+48
-6
lines changed

6 files changed

+48
-6
lines changed

‎src/NodeVisitor/ClassExtends.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ public function afterTraverse(array $nodes): ?array
5757

5858
private function checkExtendsExists(Stmt\Class_ $node): bool
5959
{
60-
$exists = $this->extends === (string) $node->extends;
60+
$exists = $this->extends === ($node->extends instanceof Name\FullyQualified
61+
? '\\' . $node->extends->toString()
62+
: (string) $node->extends);
6163

6264
if (false === $exists && null !== $node->extends) {
6365
throw new LogicException(\sprintf(

‎src/NodeVisitor/ClassImplements.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
namespace OpenCodeModeling\CodeAst\NodeVisitor;
1212

1313
use PhpParser\Node\Name;
14+
use PhpParser\Node\Name\FullyQualified;
1415
use PhpParser\Node\Stmt;
1516
use PhpParser\Node\Stmt\Namespace_;
1617
use PhpParser\NodeVisitorAbstract;
@@ -74,7 +75,9 @@ private function filterImplements(array $nodes): array
7475
if ($stmt instanceof Stmt\Class_) {
7576
foreach ($stmt->implements as $implementName) {
7677
$implements = \array_filter($implements, static function (string $implement) use ($implementName) {
77-
return $implement !== (string) $implementName;
78+
return $implement !== ($implementName instanceof FullyQualified
79+
? '\\' . $implementName->toString()
80+
: (string) $implementName);
7881
});
7982
}
8083
}

‎src/NodeVisitor/ClassUseTrait.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,9 @@ private function filterTraits(array $nodes): array
7373
foreach ($classStmt->traits as $trait) {
7474
$useTraits = \array_filter($useTraits,
7575
static function (string $implement) use ($trait) {
76-
return $implement !== (string) $trait;
76+
return $implement !== ($trait instanceof Name\FullyQualified
77+
? '\\' . $trait->toString()
78+
: (string) $trait);
7779
});
7880
}
7981
}

‎tests/Builder/ClassBuilderTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ final class TestClass extends BaseClass implements \Iterator, Bar
7676
EOF;
7777

7878
$this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
79+
$this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($this->parser->parse($expected))));
7980
}
8081

8182
/**

‎tests/NodeVisitor/ClassExtendsTest.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,38 @@ class TestClass extends MyBaseClass
170170
$this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
171171
}
172172

173+
/**
174+
* @test
175+
*/
176+
public function it_checks_class_extends_with_fully_qualified_namespace_for_existing_file(): void
177+
{
178+
$code = <<<EOF
179+
<?php
180+
181+
namespace My\Awesome\Service;
182+
183+
class TestClass extends \MyBaseClass {}
184+
EOF;
185+
186+
$ast = $this->parser->parse($code);
187+
188+
$nodeTraverser = new NodeTraverser();
189+
$nodeTraverser->addVisitor(new ClassFile(new ClassGenerator('TestClass')));
190+
$nodeTraverser->addVisitor(new ClassExtends('\\MyBaseClass'));
191+
192+
$expected = <<<EOF
193+
<?php
194+
195+
namespace My\Awesome\Service;
196+
197+
class TestClass extends \MyBaseClass
198+
{
199+
}
200+
EOF;
201+
202+
$this->assertSame($expected, $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
203+
}
204+
173205
/**
174206
* @test
175207
*/

‎tests/NodeVisitor/ClassUseTraitTest.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function it_add_namespace_imports_in_correct_order(): void
4343
$ast = $this->parser->parse($this->classCode());
4444

4545
$nodeTraverser = new NodeTraverser();
46-
$nodeTraverser->addVisitor(new ClassUseTrait('MyService\Foo', 'MyService\Bar'));
46+
$nodeTraverser->addVisitor(new ClassUseTrait('\MyService\Foo', 'MyService\Bar', 'MyService\FooBar'));
4747

4848
$this->assertSame($this->expectedClassCode(), $this->printer->prettyPrintFile($nodeTraverser->traverse($ast)));
4949
}
@@ -59,7 +59,8 @@ private function classCode(): string
5959
6060
class TestClass
6161
{
62-
use MyService\Foo;
62+
use \MyService\Foo;
63+
use MyService\FooBar;
6364
6465
public function testMethod()
6566
{
@@ -79,7 +80,8 @@ private function expectedClassCode(): string
7980
class TestClass
8081
{
8182
use MyService\Bar;
82-
use MyService\Foo;
83+
use \MyService\Foo;
84+
use MyService\FooBar;
8385
public function testMethod()
8486
{
8587
}

0 commit comments

Comments
(0)

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