diff --git a/internal/lsp/source/completion_format.go b/internal/lsp/source/completion_format.go index 046480fc..ce6f2f9e 100644 --- a/internal/lsp/source/completion_format.go +++ b/internal/lsp/source/completion_format.go @@ -110,7 +110,15 @@ func (c *completer) formatBuiltin(obj types.Object, score float64) CompletionIte case *types.Const: item.Kind = ConstantCompletionItem case *types.Builtin: - fn := c.view.BuiltinPackage().Scope.Lookup(obj.Name()) + item.Kind = FunctionCompletionItem + builtinPkg := c.view.BuiltinPackage() + if builtinPkg == nil || builtinPkg.Scope == nil { + break + } + fn := builtinPkg.Scope.Lookup(obj.Name()) + if fn == nil { + break + } decl, ok := fn.Decl.(*ast.FuncDecl) if !ok { break @@ -119,7 +127,6 @@ func (c *completer) formatBuiltin(obj types.Object, score float64) CompletionIte results, writeResultParens := c.formatFieldList(decl.Type.Results) item.Label, item.Detail = formatFunction(obj.Name(), params, results, writeResultParens) item.Snippet, item.PlaceholderSnippet = c.functionCallSnippets(obj.Name(), params) - item.Kind = FunctionCompletionItem case *types.TypeName: if types.IsInterface(obj.Type()) { item.Kind = InterfaceCompletionItem diff --git a/internal/lsp/source/completion_snippet.go b/internal/lsp/source/completion_snippet.go index 1f2c1533..2ebdbd8d 100644 --- a/internal/lsp/source/completion_snippet.go +++ b/internal/lsp/source/completion_snippet.go @@ -31,7 +31,7 @@ func (c *completer) structFieldSnippets(label, detail string) (*snippet.Builder, if i >= len(lit.Elts) { return nil, nil } - // If the expression is not an identifer, it is not a struct field name. + // If the expression is not an identifier, it is not a struct field name. if _, ok := lit.Elts[i].(*ast.Ident); !ok { return nil, nil }