From f46e4245211d896a6356e27715f723d3d3de94f9 Mon Sep 17 00:00:00 2001 From: Rebecca Stambler Date: Mon, 2 Nov 2020 15:52:24 -0500 Subject: [PATCH] internal/lsp/cache: handle nil pointer exception in missing module error Fixes golang/go#42349 Change-Id: I171495005298b8f55ae75ded5c2f40e457748082 Reviewed-on: https://go-review.googlesource.com/c/tools/+/267118 Trust: Rebecca Stambler Run-TryBot: Rebecca Stambler gopls-CI: kokoro Reviewed-by: Robert Findley TryBot-Result: Go Bot --- internal/lsp/cache/mod_tidy.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/internal/lsp/cache/mod_tidy.go b/internal/lsp/cache/mod_tidy.go index e4934f4e6d..cfe299bbdc 100644 --- a/internal/lsp/cache/mod_tidy.go +++ b/internal/lsp/cache/mod_tidy.go @@ -415,10 +415,15 @@ func directnessError(m *protocol.ColumnMapper, req *modfile.Require, computeEdit } func missingModuleError(snapshot source.Snapshot, pm *source.ParsedModule, req *modfile.Require) (source.Error, error) { - start, end := pm.File.Module.Syntax.Span() - rng, err := rangeFromPositions(pm.Mapper, start, end) - if err != nil { - return source.Error{}, err + var rng protocol.Range + // Default to the start of the file if there is no module declaration. + if pm.File != nil && pm.File.Module != nil && pm.File.Module.Syntax != nil { + start, end := pm.File.Module.Syntax.Span() + var err error + rng, err = rangeFromPositions(pm.Mapper, start, end) + if err != nil { + return source.Error{}, err + } } args, err := source.MarshalArgs(pm.Mapper.URI, []string{req.Mod.Path + "@" + req.Mod.Version}) if err != nil {