Skip to content

Commit 46f5a7f

Browse files
committed
go/packages: ignore no packages error from (*snapshot).load in (*session).NewView
Treat it as okay if no packages are found when loading all the packages in a workspace. Users may open workspaces that don't have any Go files, either because they are workspaces for other languages, or because no Go files have been created yet. Fixes #35455 Change-Id: I60912472ec8930649996edc150d1d19cd74a0a2e Reviewed-on: https://go-review.googlesource.com/c/tools/+/206140 Run-TryBot: Michael Matloob <[email protected]> Reviewed-by: Rebecca Stambler <[email protected]>
1 parent b93886d commit 46f5a7f

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

internal/lsp/cache/load.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ type metadata struct {
3333
config *packages.Config
3434
}
3535

36+
var errNoPackagesFound = errors.New("no packages found for query")
37+
3638
func (s *snapshot) load(ctx context.Context, scope source.Scope) ([]*metadata, error) {
3739
uri := scope.URI()
3840
var query string
@@ -62,11 +64,10 @@ func (s *snapshot) load(ctx context.Context, scope source.Scope) ([]*metadata, e
6264
return nil, errors.Errorf("no metadata for %s: %v", uri, err)
6365
}
6466
log.Print(ctx, "go/packages.Load", tag.Of("packages", len(pkgs)))
65-
if len(pkgs) == 0 {
67+
if _, ok := scope.(source.FileURI); len(pkgs) == 0 && ok {
6668
if err == nil {
67-
err = errors.Errorf("go/packages.Load: no packages found for %s", query)
69+
err = errNoPackagesFound
6870
}
69-
// Return this error as a diagnostic to the user.
7071
return nil, err
7172
}
7273
m, prevMissingImports, err := s.updateMetadata(ctx, scope, pkgs, cfg)

internal/lsp/cache/session.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,10 @@ func (s *session) NewView(ctx context.Context, name string, folder span.URI, opt
126126
v.snapshotMu.Lock()
127127
defer v.snapshotMu.Unlock() // The code after the snapshot is used isn't expensive.
128128
m, err := v.snapshot.load(ctx, source.DirectoryURI(folder))
129-
if err != nil {
129+
if err != nil && err != errNoPackagesFound {
130130
return nil, err
131131
}
132+
132133
// Prepare CheckPackageHandles for every package that's been loaded.
133134
// (*snapshot).CheckPackageHandle makes the assumption that every package that's
134135
// been loaded has an existing checkPackageHandle.

0 commit comments

Comments
 (0)