From 6fe4996ff49e92b16d17244e289d06ec02269020 Mon Sep 17 00:00:00 2001 From: Muir Manders Date: Mon, 3 Aug 2020 11:36:03 -0700 Subject: [PATCH] internal/lsp/source: fix multi return value func completion Fix a minor completion ranking issue: foo := func(int, int) {} foo(123, <>) Previously we were preferring "foo()" at "<>" even though it can't be used. We mistakenly thought we were completing the first param because the *ast.CallExpr appears to only have a single param. Change-Id: Iedbbb1870a4b9eb5d5be4ed266b8bb3e313b496b Reviewed-on: https://go-review.googlesource.com/c/tools/+/246697 Run-TryBot: Muir Manders TryBot-Result: Gobot Gobot Reviewed-by: Rebecca Stambler --- internal/lsp/source/completion.go | 2 +- .../multireturn/{multi_return.go => multi_return.go.in} | 1 + internal/lsp/testdata/lsp/summary.txt.golden | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) rename internal/lsp/testdata/lsp/primarymod/multireturn/{multi_return.go => multi_return.go.in} (95%) diff --git a/internal/lsp/source/completion.go b/internal/lsp/source/completion.go index 25fa744ca5..852d0ec0b1 100644 --- a/internal/lsp/source/completion.go +++ b/internal/lsp/source/completion.go @@ -1661,7 +1661,7 @@ Nodes: // values, in turn getting passed in to the surrounding // call. Record the assignees so we can favor function // calls that return matching values. - if len(node.Args) <= 1 { + if len(node.Args) <= 1 && exprIdx == 0 { for i := 0; i < sig.Params().Len(); i++ { inf.assignees = append(inf.assignees, sig.Params().At(i).Type()) } diff --git a/internal/lsp/testdata/lsp/primarymod/multireturn/multi_return.go b/internal/lsp/testdata/lsp/primarymod/multireturn/multi_return.go.in similarity index 95% rename from internal/lsp/testdata/lsp/primarymod/multireturn/multi_return.go rename to internal/lsp/testdata/lsp/primarymod/multireturn/multi_return.go.in index a706f8073b..712070b2e6 100644 --- a/internal/lsp/testdata/lsp/primarymod/multireturn/multi_return.go +++ b/internal/lsp/testdata/lsp/primarymod/multireturn/multi_return.go.in @@ -23,6 +23,7 @@ func _() { f1(f) //@rank(")", multiF1, multiF2) f2(f) //@rank(")", multiF2, multiF3),rank(")", multiF1, multiF3) f2(1, f) //@rank(")", multiF1, multiF2),rank(")", multiF1, multiF0) + f2(1, ) //@rank(")", multiF1, multiF2),rank(")", multiF1, multiF0) f2Str() //@rank(")", multiF2Str, multiF2) var i int diff --git a/internal/lsp/testdata/lsp/summary.txt.golden b/internal/lsp/testdata/lsp/summary.txt.golden index 77f1e7033e..019516eb3a 100644 --- a/internal/lsp/testdata/lsp/summary.txt.golden +++ b/internal/lsp/testdata/lsp/summary.txt.golden @@ -5,7 +5,7 @@ CompletionSnippetCount = 80 UnimportedCompletionsCount = 6 DeepCompletionsCount = 5 FuzzyCompletionsCount = 8 -RankedCompletionsCount = 120 +RankedCompletionsCount = 122 CaseSensitiveCompletionsCount = 4 DiagnosticsCount = 44 FoldingRangesCount = 2