From 905dfae6b1df966523c012a0d1b7d0a74ff6959b Mon Sep 17 00:00:00 2001 From: Virgil Date: Thu, 2 Apr 2026 13:13:18 +0000 Subject: [PATCH] fix(cli): align multi-select empty input with docs Co-Authored-By: Virgil --- pkg/cli/prompt_test.go | 12 ++++++------ pkg/cli/utils.go | 8 +------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/pkg/cli/prompt_test.go b/pkg/cli/prompt_test.go index b873b56..a5d2ddf 100644 --- a/pkg/cli/prompt_test.go +++ b/pkg/cli/prompt_test.go @@ -336,12 +336,12 @@ func TestChooseMulti_Good_Filter(t *testing.T) { assert.Equal(t, []string{"apple", "apricot"}, vals) } -func TestChooseMulti_Bad_FilteredDefaultDoesNotFallBackToFirstVisible(t *testing.T) { - SetStdin(strings.NewReader("ap\n\n2\n")) +func TestChooseMulti_Good_FilteredEmptyReturnsNone(t *testing.T) { + SetStdin(strings.NewReader("ap\n\n")) defer SetStdin(nil) vals := ChooseMulti("Pick", []string{"apple", "banana", "apricot"}, WithDefaultIndex[string](1), Filter[string]()) - assert.Equal(t, []string{"banana"}, vals) + assert.Empty(t, vals) } func TestChoose_Good_ClearFilter(t *testing.T) { @@ -352,12 +352,12 @@ func TestChoose_Good_ClearFilter(t *testing.T) { assert.Equal(t, "banana", val) } -func TestChooseMulti_Good_ClearFilter(t *testing.T) { - SetStdin(strings.NewReader("ap\n\n2\n")) +func TestChooseMulti_Good_EmptyClearsSelection(t *testing.T) { + SetStdin(strings.NewReader("ap\n\n")) defer SetStdin(nil) vals := ChooseMulti("Pick", []string{"apple", "banana", "apricot"}, Filter[string]()) - assert.Equal(t, []string{"banana"}, vals) + assert.Empty(t, vals) } func TestChooseMulti_Good_Commas(t *testing.T) { diff --git a/pkg/cli/utils.go b/pkg/cli/utils.go index e350612..0524fc2 100644 --- a/pkg/cli/utils.go +++ b/pkg/cli/utils.go @@ -469,7 +469,6 @@ func ChooseMulti[T any](prompt string, items []T, opts ...ChooseOption[T]) []T { for i := range items { visible[i] = i } - allVisible := append([]int(nil), visible...) for { renderChoices(prompt, items, visible, cfg.displayFn, -1, cfg.filter) @@ -482,13 +481,8 @@ func ChooseMulti[T any](prompt string, items []T, opts ...ChooseOption[T]) []T { response, _ := reader.ReadString('\n') response = strings.TrimSpace(response) - // Empty response returns no selections + // Empty response returns no selections. if response == "" { - if cfg.filter && len(visible) != len(allVisible) { - visible = append([]int(nil), allVisible...) - promptHint("Filter cleared.") - continue - } return nil }