diff --git a/src/Capability/Completion/ListCompletionProvider.php b/src/Capability/Completion/ListCompletionProvider.php index 5e066dec..ce5eff8f 100644 --- a/src/Capability/Completion/ListCompletionProvider.php +++ b/src/Capability/Completion/ListCompletionProvider.php @@ -35,9 +35,13 @@ public function getCompletions(string $currentValue): array return $this->values; } - return array_values(array_filter( - $this->values, - static fn (string $value) => str_starts_with($value, $currentValue) - )); + $completions = []; + foreach ($this->values as $value) { + if (str_starts_with($value, $currentValue)) { + $completions[] = $value; + } + } + + return $completions; } } diff --git a/tests/Unit/Capability/Completion/ListCompletionProviderTest.php b/tests/Unit/Capability/Completion/ListCompletionProviderTest.php index 4870d737..729dd2bc 100644 --- a/tests/Unit/Capability/Completion/ListCompletionProviderTest.php +++ b/tests/Unit/Capability/Completion/ListCompletionProviderTest.php @@ -55,4 +55,12 @@ public function testKeysAreDiscarded(): void $this->assertSame(['a', 'b'], $provider->getCompletions('')); } + + public function testPrefixMatchesPreserveOrderAndDuplicates(): void + { + $provider = new ListCompletionProvider(['beta', 'alpine', 'alpha', 'alpine']); + + $this->assertSame(['alpine', 'alpha', 'alpine'], $provider->getCompletions('al')); + $this->assertSame([], $provider->getCompletions('missing')); + } }