diff --git a/pkg/edit/complete/complete_test.go b/pkg/edit/complete/complete_test.go index cdb8f009f..03acd227e 100644 --- a/pkg/edit/complete/complete_test.go +++ b/pkg/edit/complete/complete_test.go @@ -77,7 +77,7 @@ func TestComplete(t *testing.T) { return items }, ArgGenerator: func(args []string) ([]RawItem, error) { - item := noQuoteItem(fmt.Sprintf("%#v", args)) + item := NoQuoteItem(fmt.Sprintf("%#v", args)) return []RawItem{item}, nil }, } diff --git a/pkg/edit/complete/completers.go b/pkg/edit/complete/completers.go index 387648d5e..2068a1497 100644 --- a/pkg/edit/complete/completers.go +++ b/pkg/edit/complete/completers.go @@ -159,10 +159,10 @@ func completeVariable(p np.Path, ev *eval.Evaler, cfg Config) (*context, []RawIt var items []RawItem eachVariableInNs(ev, p, ns, func(varname string) { - items = append(items, noQuoteItem(parse.QuoteVariableName(varname))) + items = append(items, NoQuoteItem(parse.QuoteVariableName(varname))) }) if ns == "" { - items = append(items, noQuoteItem("e:"), noQuoteItem("E:")) + items = append(items, NoQuoteItem("e:"), NoQuoteItem("E:")) } return ctx, items, nil diff --git a/pkg/edit/complete/generators.go b/pkg/edit/complete/generators.go index 66c575463..ac53e356f 100644 --- a/pkg/edit/complete/generators.go +++ b/pkg/edit/complete/generators.go @@ -73,7 +73,7 @@ func generateArgs(args []string, ev *eval.Evaler, p np.Path, cfg Config) ([]RawI ns, _ := eval.SplitIncompleteQNameNs(qname) var items []RawItem eachVariableInNs(ev, p, ns, func(varname string) { - items = append(items, noQuoteItem(sigil+parse.QuoteVariableName(ns+varname))) + items = append(items, NoQuoteItem(sigil+parse.QuoteVariableName(ns+varname))) }) return items, nil case "del": @@ -81,7 +81,7 @@ func generateArgs(args []string, ev *eval.Evaler, p np.Path, cfg Config) ([]RawI // offer builtin variables. var items []RawItem addItem := func(varname string) { - items = append(items, noQuoteItem(parse.QuoteVariableName(varname))) + items = append(items, NoQuoteItem(parse.QuoteVariableName(varname))) } ev.Global().IterateKeysString(addItem) eachDefinedVariable(p[len(p)-1], p[0].Range().From, addItem) diff --git a/pkg/edit/complete/raw_item.go b/pkg/edit/complete/raw_item.go index 943ab658d..254849785 100644 --- a/pkg/edit/complete/raw_item.go +++ b/pkg/edit/complete/raw_item.go @@ -17,13 +17,15 @@ func (p PlainItem) Cook(q parse.PrimaryType) modes.CompletionItem { return modes.CompletionItem{ToInsert: quoted, ToShow: ui.T(s)} } -// noQuoteItem is a RawItem implementation that does not quote when cooked. This -// type is not exposed, since argument generators never need this. -type noQuoteItem string +// NoQuoteItem is a RawItem implementation that does not quote when cooked. The +// caller is responsible for pre-quoting the string (e.g. with +// parse.QuoteVariableName) so that it is valid in the context where it will be +// inserted. +type NoQuoteItem string -func (nq noQuoteItem) String() string { return string(nq) } +func (nq NoQuoteItem) String() string { return string(nq) } -func (nq noQuoteItem) Cook(parse.PrimaryType) modes.CompletionItem { +func (nq NoQuoteItem) Cook(parse.PrimaryType) modes.CompletionItem { s := string(nq) return modes.CompletionItem{ToInsert: s, ToShow: ui.T(s)} } diff --git a/pkg/edit/completion.go b/pkg/edit/completion.go index 72f4d965f..017baf1a5 100644 --- a/pkg/edit/completion.go +++ b/pkg/edit/completion.go @@ -552,11 +552,11 @@ func adaptVariableGenerator(ev *eval.Evaler, v any) complete.VariableGenerator { for v := range ch { switch v := v.(type) { case string: - collect(complete.PlainItem(v)) + collect(complete.NoQuoteItem(parse.QuoteVariableName(v))) case complexItem: collect(complete.ComplexItem(v)) default: - collect(complete.PlainItem(vals.ToString(v))) + collect(complete.NoQuoteItem(parse.QuoteVariableName(vals.ToString(v)))) } } } @@ -565,7 +565,7 @@ func adaptVariableGenerator(ev *eval.Evaler, v any) complete.VariableGenerator { for { line, err := buffered.ReadString('\n') if line != "" { - collect(complete.PlainItem(strutil.ChopLineEnding(line))) + collect(complete.NoQuoteItem(parse.QuoteVariableName(strutil.ChopLineEnding(line)))) } if err != nil { break