From 425b2390b5b7fc9a54c5913ed7a30ebf6e681ff3 Mon Sep 17 00:00:00 2001 From: Phil Nelson Date: Sun, 24 Dec 2017 20:52:49 +1100 Subject: [PATCH] fix(DefinitionResolver): fix crash on unknown foreach type (#562) Fix when unknown type is found in foreach expression --- fixtures/completion/foreach.php | 3 +++ src/DefinitionResolver.php | 1 + tests/Server/TextDocument/CompletionTest.php | 15 +++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/fixtures/completion/foreach.php b/fixtures/completion/foreach.php index df8b6df..b6fa5be 100644 --- a/fixtures/completion/foreach.php +++ b/fixtures/completion/foreach.php @@ -35,3 +35,6 @@ foreach ($array3 as $key => $value) { foreach ($bar->test() as $value) { $ } + +foreach ($unknownArray as $unknown) { + $unkno diff --git a/src/DefinitionResolver.php b/src/DefinitionResolver.php index 905f9d6..a408dd4 100644 --- a/src/DefinitionResolver.php +++ b/src/DefinitionResolver.php @@ -1122,6 +1122,7 @@ class DefinitionResolver if ($collectionType instanceof Types\Array_) { return $collectionType->getValueType(); } + return new Types\Mixed_(); } // PROPERTIES, CONSTS, CLASS CONSTS, ASSIGNMENT EXPRESSIONS diff --git a/tests/Server/TextDocument/CompletionTest.php b/tests/Server/TextDocument/CompletionTest.php index ded5941..80d3026 100644 --- a/tests/Server/TextDocument/CompletionTest.php +++ b/tests/Server/TextDocument/CompletionTest.php @@ -691,6 +691,21 @@ class CompletionTest extends TestCase ), ] ], + 'foreach unknown type' => [ + new Position(39, 10), + [ + new CompletionItem( + '$unknown', + CompletionItemKind::VARIABLE, + 'mixed', + null, + null, + null, + null, + new TextEdit(new Range(new Position(39, 10), new Position(39, 10)), 'wn') + ), + ] + ], ]; }