From 9fc00b0a7ff6189dbfbf7326432f0857c366fd6a Mon Sep 17 00:00:00 2001 From: Rebecca Stambler Date: Thu, 2 Apr 2020 13:31:57 -0400 Subject: [PATCH] internal/lsp: fix panic in builtin completions Fixes golang/go#38091 Change-Id: I88ac6d3413de3dd9d235e2f2fca9b4a3f7127e0a Reviewed-on: https://go-review.googlesource.com/c/tools/+/227026 Run-TryBot: Rebecca Stambler Reviewed-by: Rohan Challa TryBot-Result: Gobot Gobot --- internal/lsp/source/completion_builtin.go | 3 +++ internal/lsp/testdata/lsp/primarymod/append/append.go | 1 + internal/lsp/testdata/lsp/primarymod/append/append2.go.in | 5 +++++ internal/lsp/testdata/lsp/summary.txt.golden | 2 +- 4 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 internal/lsp/testdata/lsp/primarymod/append/append2.go.in diff --git a/internal/lsp/source/completion_builtin.go b/internal/lsp/source/completion_builtin.go index d65eb8f4f4..fb247ab0e0 100644 --- a/internal/lsp/source/completion_builtin.go +++ b/internal/lsp/source/completion_builtin.go @@ -59,6 +59,9 @@ func (c *completer) builtinArgType(obj types.Object, call *ast.CallExpr, parentI switch obj.Name() { case "append": + if parentInf.objType == nil { + break + } inf.objType = parentInf.objType // Check if we are completing the variadic append() param. diff --git a/internal/lsp/testdata/lsp/primarymod/append/append.go b/internal/lsp/testdata/lsp/primarymod/append/append.go index 6c6bfb797e..68cae673cb 100644 --- a/internal/lsp/testdata/lsp/primarymod/append/append.go +++ b/internal/lsp/testdata/lsp/primarymod/append/append.go @@ -17,3 +17,4 @@ func _() { // Don't add "..." to append() argument. bar(append()) //@snippet("))", appendStrings, "aStrings", "aStrings") } +} diff --git a/internal/lsp/testdata/lsp/primarymod/append/append2.go.in b/internal/lsp/testdata/lsp/primarymod/append/append2.go.in new file mode 100644 index 0000000000..15bd357b2d --- /dev/null +++ b/internal/lsp/testdata/lsp/primarymod/append/append2.go.in @@ -0,0 +1,5 @@ +package append + +func _() { + _ = append(a, struct) //@complete(")") +} \ No newline at end of file diff --git a/internal/lsp/testdata/lsp/summary.txt.golden b/internal/lsp/testdata/lsp/summary.txt.golden index bea9c712e2..bd3db88221 100644 --- a/internal/lsp/testdata/lsp/summary.txt.golden +++ b/internal/lsp/testdata/lsp/summary.txt.golden @@ -1,6 +1,6 @@ -- summary -- CodeLensCount = 2 -CompletionsCount = 237 +CompletionsCount = 238 CompletionSnippetCount = 75 UnimportedCompletionsCount = 11 DeepCompletionsCount = 5