From c0bd80db57e6ee45503c3f2bd60d6d996739d9e0 Mon Sep 17 00:00:00 2001 From: maruware Date: Fri, 13 Mar 2026 02:16:35 +0900 Subject: [PATCH] fix: Enhance GET operation to suggest SELECT --- completer.go | 32 +++++++++++++++++++++++++++++++- completer_test.go | 20 ++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/completer.go b/completer.go index 0a04cd7..4c9b91b 100644 --- a/completer.go +++ b/completer.go @@ -237,7 +237,8 @@ func (c *Completer) parseGetOperation() ([]prompt.Suggest, error) { docPath := normalizeFirestorePath(c.curToken.Literal) parts := strings.Split(docPath, "/") if len(parts)%2 == 0 { - return []prompt.Suggest{}, nil + // complete doc path, suggest SELECT + return []prompt.Suggest{selectSuggestion}, nil } var baseDoc string if len(parts) == 1 { @@ -258,6 +259,35 @@ func (c *Completer) parseGetOperation() ([]prompt.Suggest, error) { return prompt.FilterHasPrefix(suggestions, c.curToken.Literal, false), nil } + c.nextToken() + + if c.curTokenIs(EOF) { + return []prompt.Suggest{selectSuggestion}, nil + } + + if c.curTokenIs(IDENT) { + return prompt.FilterHasPrefix([]prompt.Suggest{selectSuggestion}, c.curToken.Literal, true), nil + } + + if c.curTokenIs(SELECT) { + c.nextToken() + + if c.curTokenIs(EOF) { + return []prompt.Suggest{}, nil + } + + // skip select fields + for !c.curTokenIs(EOF) { + if c.curTokenIs(COMMA) { + c.nextToken() + } else { + c.nextToken() + } + } + + return []prompt.Suggest{}, nil + } + return []prompt.Suggest{}, nil } diff --git a/completer_test.go b/completer_test.go index cd673ba..7316d06 100644 --- a/completer_test.go +++ b/completer_test.go @@ -139,6 +139,26 @@ func TestCompleter(t *testing.T) { input: `GET user/1/p`, want: []prompt.Suggest{newCollectionSuggestion("user/1", "posts")}, }, + { + desc: "get with doc path suggest select", + input: `GET user/1 `, + want: []prompt.Suggest{selectSuggestion}, + }, + { + desc: "middle of get select", + input: `GET user/1 S`, + want: []prompt.Suggest{selectSuggestion}, + }, + { + desc: "get with select and no field", + input: `GET user/1 SELECT `, + want: []prompt.Suggest{}, + }, + { + desc: "get with select and field", + input: `GET user/1 SELECT name`, + want: []prompt.Suggest{}, + }, { desc: "middle of count", input: `CO`,