internal/lsp: fix nil pointer exception in document symbols

Change-Id: I168bf7b995aa0b609de67999879addad250eff11
Reviewed-on: https://go-review.googlesource.com/c/tools/+/170006
Reviewed-by: Ian Cottrell <iancottrell@google.com>
diff --git a/internal/lsp/source/symbols.go b/internal/lsp/source/symbols.go
index d645e33..f95d3f3 100644
--- a/internal/lsp/source/symbols.go
+++ b/internal/lsp/source/symbols.go
@@ -46,15 +46,21 @@
 	for _, decl := range file.Decls {
 		switch decl := decl.(type) {
 		case *ast.FuncDecl:
-			symbols = append(symbols, funcSymbol(decl, info.ObjectOf(decl.Name), fset, q))
+			if obj := info.ObjectOf(decl.Name); obj != nil {
+				symbols = append(symbols, funcSymbol(decl, obj, fset, q))
+			}
 		case *ast.GenDecl:
 			for _, spec := range decl.Specs {
 				switch spec := spec.(type) {
 				case *ast.TypeSpec:
-					symbols = append(symbols, typeSymbol(spec, info.ObjectOf(spec.Name), fset, q))
+					if obj := info.ObjectOf(spec.Name); obj != nil {
+						symbols = append(symbols, typeSymbol(spec, obj, fset, q))
+					}
 				case *ast.ValueSpec:
 					for _, name := range spec.Names {
-						symbols = append(symbols, varSymbol(decl, name, info.ObjectOf(name), fset, q))
+						if obj := info.ObjectOf(name); obj != nil {
+							symbols = append(symbols, varSymbol(decl, name, obj, fset, q))
+						}
 					}
 				}
 			}