internal/lsp: return errors when we can't find a package
This will allow us to surface these errors as diagnostics.
Change-Id: Ic8ad11ba43c08be6f391c0e2aa95015183461133
Reviewed-on: https://go-review.googlesource.com/c/tools/+/173780
Reviewed-by: Ian Cottrell <iancottrell@google.com>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
diff --git a/internal/lsp/cache/check.go b/internal/lsp/cache/check.go
index f7b1b3e..0f99248 100644
--- a/internal/lsp/cache/check.go
+++ b/internal/lsp/cache/check.go
@@ -91,7 +91,13 @@
if err == nil {
err = fmt.Errorf("no packages found for %s", f.filename)
}
- return nil, err
+ // Return this error as a diagnostic to the user.
+ return []packages.Error{
+ {
+ Msg: err.Error(),
+ Kind: packages.ListError,
+ },
+ }, err
}
for _, pkg := range pkgs {
// If the package comes back with errors from `go list`, don't bother
diff --git a/internal/lsp/cache/file.go b/internal/lsp/cache/file.go
index 0c9b0b2..d7429c9 100644
--- a/internal/lsp/cache/file.go
+++ b/internal/lsp/cache/file.go
@@ -89,8 +89,7 @@
f.view.mu.Lock()
defer f.view.mu.Unlock()
if f.pkg == nil || len(f.view.contentChanges) > 0 {
- errs, err := f.view.parse(ctx, f)
- if err != nil {
+ if errs, err := f.view.parse(ctx, f); err != nil {
// Create diagnostics for errors if we are able to.
if len(errs) > 0 {
return &Package{errors: errs}