diff --git a/src/NodeVisitor/FunctionVisitor.php b/src/NodeVisitor/FunctionVisitor.php index 975bf378..b7be4b4e 100644 --- a/src/NodeVisitor/FunctionVisitor.php +++ b/src/NodeVisitor/FunctionVisitor.php @@ -112,7 +112,7 @@ public function hasMetFunctionRequirements(): bool */ public function getMissingRequirements(): array { - return array_filter($this->requiredFunctions, function ($function) { + return array_values(array_filter($this->requiredFunctions, function ($function) { foreach ($this->getRequiredUsages() as $usage) { if (!$usage->name instanceof Node\Name) { continue; @@ -123,6 +123,6 @@ public function getMissingRequirements(): array } } return true; - }); + })); } } diff --git a/test/NodeVisitor/FunctionVisitorTest.php b/test/NodeVisitor/FunctionVisitorTest.php index 8c2aaec4..472791ee 100644 --- a/test/NodeVisitor/FunctionVisitorTest.php +++ b/test/NodeVisitor/FunctionVisitorTest.php @@ -50,4 +50,15 @@ public function testBannedUsagesAreNotRecorded(): void $this->assertFalse($visitor->hasUsedBannedFunctions()); $this->assertSame([], $visitor->getBannedUsages()); } + + public function testLeaveNodeWithMultipleRequirements(): void + { + $node = new FuncCall(new Name('file')); + $visitor = new FunctionVisitor(['file', 'file_get_contents'], []); + $visitor->leaveNode($node); + + $this->assertSame([$node], $visitor->getRequiredUsages()); + $this->assertFalse($visitor->hasMetFunctionRequirements()); + $this->assertSame(['file_get_contents'], $visitor->getMissingRequirements()); + } }