diff --git a/src/ComposerRequireChecker/NodeVisitor/DefinedSymbolCollector.php b/src/ComposerRequireChecker/NodeVisitor/DefinedSymbolCollector.php index f8a4c45e..988a221d 100644 --- a/src/ComposerRequireChecker/NodeVisitor/DefinedSymbolCollector.php +++ b/src/ComposerRequireChecker/NodeVisitor/DefinedSymbolCollector.php @@ -42,6 +42,7 @@ public function getDefinedSymbols(): array public function enterNode(Node $node): Node { $this->recordClassDefinition($node); + $this->recordEnumDefinition($node); $this->recordInterfaceDefinition($node); $this->recordTraitDefinition($node); $this->recordFunctionDefinition($node); @@ -60,6 +61,15 @@ private function recordClassDefinition(Node $node): void $this->recordDefinitionOf($node); } + private function recordEnumDefinition(Node $node): void + { + if (! ($node instanceof Node\Stmt\Enum_)) { + return; + } + + $this->recordDefinitionOf($node); + } + private function recordInterfaceDefinition(Node $node): void { if (! ($node instanceof Node\Stmt\Interface_)) { diff --git a/test/ComposerRequireCheckerTest/Cli/CheckCommandTest.php b/test/ComposerRequireCheckerTest/Cli/CheckCommandTest.php index 5b5d19c9..ec9a4249 100644 --- a/test/ComposerRequireCheckerTest/Cli/CheckCommandTest.php +++ b/test/ComposerRequireCheckerTest/Cli/CheckCommandTest.php @@ -207,4 +207,20 @@ public function testNoUnknownComposerSymbolFound(): void $this->commandTester->getDisplay() ); } + + /** + * @requires PHP >= 8.1.0 + */ + public function testNoUnknownEnumSymbolsFound(): void + { + $this->commandTester->execute([ + 'composer-json' => dirname(__DIR__, 2) . '/fixtures/noUnknownEnumSymbols/composer.json', + ]); + + self::assertSame(Command::SUCCESS, $this->commandTester->getStatusCode()); + self::assertStringContainsString( + 'There were no unknown symbols found.', + $this->commandTester->getDisplay() + ); + } } diff --git a/test/ComposerRequireCheckerTest/NodeVisitor/DefinedSymbolCollectorTest.php b/test/ComposerRequireCheckerTest/NodeVisitor/DefinedSymbolCollectorTest.php index 4df61516..c76c4bfe 100644 --- a/test/ComposerRequireCheckerTest/NodeVisitor/DefinedSymbolCollectorTest.php +++ b/test/ComposerRequireCheckerTest/NodeVisitor/DefinedSymbolCollectorTest.php @@ -12,6 +12,7 @@ use PhpParser\Node\Scalar\String_; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Const_; +use PhpParser\Node\Stmt\Enum_; use PhpParser\Node\Stmt\Function_; use PhpParser\Node\Stmt\Interface_; use PhpParser\Node\Stmt\Trait_; @@ -74,6 +75,14 @@ public function testRecordClassDefinition(): void $this->assertContains('Foo', $this->collector->getDefinedSymbols()); } + public function testRecordEnumDefinition(): void + { + $node = new Enum_(new Identifier('Foo')); + $this->traverser->traverse([$node]); + + $this->assertContains('Foo', $this->collector->getDefinedSymbols()); + } + public function testRecordInterfaceDefinition(): void { $node = new Interface_(new Identifier('Foo')); diff --git a/test/fixtures/noUnknownEnumSymbols/composer.json b/test/fixtures/noUnknownEnumSymbols/composer.json new file mode 100644 index 00000000..65aeb1d4 --- /dev/null +++ b/test/fixtures/noUnknownEnumSymbols/composer.json @@ -0,0 +1,11 @@ +{ + "name": "example/library", + "require": { + "php": "8.1.*" + }, + "autoload": { + "psr-4": { + "Example\\Library\\": "src/" + } + } +} diff --git a/test/fixtures/noUnknownEnumSymbols/src/SomeClass.php b/test/fixtures/noUnknownEnumSymbols/src/SomeClass.php new file mode 100644 index 00000000..0f8672e8 --- /dev/null +++ b/test/fixtures/noUnknownEnumSymbols/src/SomeClass.php @@ -0,0 +1,10 @@ +