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 <rstambler@golang.org>
Reviewed-by: Rohan Challa <rohan@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/internal/lsp/source/completion_builtin.go b/internal/lsp/source/completion_builtin.go
index d65eb8f..fb247ab 100644
--- a/internal/lsp/source/completion_builtin.go
+++ b/internal/lsp/source/completion_builtin.go
@@ -59,6 +59,9 @@
 
 	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 6c6bfb7..68cae67 100644
--- a/internal/lsp/testdata/lsp/primarymod/append/append.go
+++ b/internal/lsp/testdata/lsp/primarymod/append/append.go
@@ -17,3 +17,4 @@
 	// 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 0000000..15bd357
--- /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 bea9c71..bd3db88 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