From bcb2d7b23b503b49605793dbdb9ac29fbf8ef1c9 Mon Sep 17 00:00:00 2001 From: Matheus Alcantara Date: Mon, 1 Mar 2021 14:52:43 +0000 Subject: [PATCH] internal/lsp: fix bad completion for variadic functions Add variadic completion in functions only if snippets is enabled. Fixes golang/go#42691 Change-Id: I0aebe86b5a58d2f7491f0b340ad14b15c184eeb1 GitHub-Last-Rev: 04b2ad0d1eb5be80fdb34bfaf3fc6eda0362f3f2 GitHub-Pull-Request: golang/tools#280 Reviewed-on: https://go-review.googlesource.com/c/tools/+/295950 Reviewed-by: Rebecca Stambler Trust: Rebecca Stambler Trust: Hyang-Ah Hana Kim Run-TryBot: Rebecca Stambler gopls-CI: kokoro TryBot-Result: Go Bot --- internal/lsp/source/completion/completion.go | 2 ++ internal/lsp/source/completion/format.go | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/lsp/source/completion/completion.go b/internal/lsp/source/completion/completion.go index 4689b76d00..de6e53fbe4 100644 --- a/internal/lsp/source/completion/completion.go +++ b/internal/lsp/source/completion/completion.go @@ -95,6 +95,7 @@ type completionOptions struct { fullDocumentation bool placeholders bool literal bool + snippets bool matcher source.Matcher budget time.Duration } @@ -519,6 +520,7 @@ func Completion(ctx context.Context, snapshot source.Snapshot, fh source.FileHan placeholders: opts.UsePlaceholders, literal: opts.LiteralCompletions && opts.InsertTextFormat == protocol.SnippetTextFormat, budget: opts.CompletionBudget, + snippets: opts.InsertTextFormat == protocol.SnippetTextFormat, }, // default to a matcher that always matches matcher: prefixMatcher(""), diff --git a/internal/lsp/source/completion/format.go b/internal/lsp/source/completion/format.go index bf47a1d840..ec6706073a 100644 --- a/internal/lsp/source/completion/format.go +++ b/internal/lsp/source/completion/format.go @@ -150,9 +150,8 @@ func (c *completer) item(ctx context.Context, cand candidate) (CompletionItem, e prefix = typeName + "(" + prefix suffix = ")" } - - // Add variadic "..." if we are filling in a variadic param. - if cand.variadic { + // Add variadic "..." only if snippets if enabled or cand is not a function + if cand.variadic && (c.opts.snippets || !cand.expandFuncCall) { suffix += "..." }