diff --git a/internal/lsp/cache/view.go b/internal/lsp/cache/view.go index 6d109f7f..48410a1f 100644 --- a/internal/lsp/cache/view.go +++ b/internal/lsp/cache/view.go @@ -21,9 +21,10 @@ type View struct { files map[source.URI]*File } -func NewView() *View { +func NewView(rootPath string) *View { return &View{ Config: &packages.Config{ + Dir: rootPath, Mode: packages.LoadSyntax, Fset: token.NewFileSet(), Tests: true, diff --git a/internal/lsp/lsp_test.go b/internal/lsp/lsp_test.go index d6938701..613c7684 100644 --- a/internal/lsp/lsp_test.go +++ b/internal/lsp/lsp_test.go @@ -58,7 +58,7 @@ func testLSP(t *testing.T, exporter packagestest.Exporter) { defer exported.Cleanup() s := &server{ - view: cache.NewView(), + view: cache.NewView(exported.Config.Dir), } // Merge the exported.Config with the view.Config. cfg := *exported.Config diff --git a/internal/lsp/server.go b/internal/lsp/server.go index b6259c07..21941d5c 100644 --- a/internal/lsp/server.go +++ b/internal/lsp/server.go @@ -42,13 +42,18 @@ func (s *server) Initialize(ctx context.Context, params *protocol.InitializePara if s.initialized { return nil, jsonrpc2.NewErrorf(jsonrpc2.CodeInvalidRequest, "server already initialized") } - s.view = cache.NewView() s.initialized = true // mark server as initialized now // Check if the client supports snippets in completion items. s.snippetsSupported = params.Capabilities.TextDocument.Completion.CompletionItem.SnippetSupport s.signatureHelpEnabled = true + rootPath, err := source.URI(*params.RootURI).Filename() + if err != nil { + return nil, err + } + s.view = cache.NewView(rootPath) + return &protocol.InitializeResult{ Capabilities: protocol.ServerCapabilities{ CompletionProvider: protocol.CompletionOptions{