Merge pull request '[agent/codex:gpt-5.4-mini] Read ~/spec/code/core/go/cli/RFC.md fully. Find features des...' (#92) from agent/read---spec-code-core-go-cli-rfc-md-full into dev
All checks were successful
Security Scan / security (push) Successful in 27s

This commit is contained in:
Virgil 2026-04-02 13:14:35 +00:00
commit d93504e94a
2 changed files with 7 additions and 13 deletions

View file

@ -336,12 +336,12 @@ func TestChooseMulti_Good_Filter(t *testing.T) {
assert.Equal(t, []string{"apple", "apricot"}, vals) assert.Equal(t, []string{"apple", "apricot"}, vals)
} }
func TestChooseMulti_Bad_FilteredDefaultDoesNotFallBackToFirstVisible(t *testing.T) { func TestChooseMulti_Good_FilteredEmptyReturnsNone(t *testing.T) {
SetStdin(strings.NewReader("ap\n\n2\n")) SetStdin(strings.NewReader("ap\n\n"))
defer SetStdin(nil) defer SetStdin(nil)
vals := ChooseMulti("Pick", []string{"apple", "banana", "apricot"}, WithDefaultIndex[string](1), Filter[string]()) 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) { func TestChoose_Good_ClearFilter(t *testing.T) {
@ -352,12 +352,12 @@ func TestChoose_Good_ClearFilter(t *testing.T) {
assert.Equal(t, "banana", val) assert.Equal(t, "banana", val)
} }
func TestChooseMulti_Good_ClearFilter(t *testing.T) { func TestChooseMulti_Good_EmptyClearsSelection(t *testing.T) {
SetStdin(strings.NewReader("ap\n\n2\n")) SetStdin(strings.NewReader("ap\n\n"))
defer SetStdin(nil) defer SetStdin(nil)
vals := ChooseMulti("Pick", []string{"apple", "banana", "apricot"}, Filter[string]()) 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) { func TestChooseMulti_Good_Commas(t *testing.T) {

View file

@ -469,7 +469,6 @@ func ChooseMulti[T any](prompt string, items []T, opts ...ChooseOption[T]) []T {
for i := range items { for i := range items {
visible[i] = i visible[i] = i
} }
allVisible := append([]int(nil), visible...)
for { for {
renderChoices(prompt, items, visible, cfg.displayFn, -1, cfg.filter) 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, _ := reader.ReadString('\n')
response = strings.TrimSpace(response) response = strings.TrimSpace(response)
// Empty response returns no selections // Empty response returns no selections.
if response == "" { if response == "" {
if cfg.filter && len(visible) != len(allVisible) {
visible = append([]int(nil), allVisible...)
promptHint("Filter cleared.")
continue
}
return nil return nil
} }