internal/lsp: add an implementation for textDocument/didSave
This change marks the overlay for a saved file as "on disk". This will reduce the number of overlays we provide to go/packages, which can be expensive. Updates golang/go#31796, golang/go#32457 Change-Id: I8e69503ab80bba29caf4e42491d87e643bf17f1a Reviewed-on: https://go-review.googlesource.com/c/tools/+/181123 Reviewed-by: Ian Cottrell <iancottrell@google.com> Reviewed-by: Peter Weinberger <pjw@google.com>
This commit is contained in:
parent
eacb66d2a7
commit
e6ce0ddf03
|
@ -42,6 +42,10 @@ type overlay struct {
|
||||||
uri span.URI
|
uri span.URI
|
||||||
data []byte
|
data []byte
|
||||||
hash string
|
hash string
|
||||||
|
|
||||||
|
// onDisk is true if a file has been saved on disk,
|
||||||
|
// and therefore does not need to be part of the overlay sent to go/packages.
|
||||||
|
onDisk bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *session) Shutdown(ctx context.Context) {
|
func (s *session) Shutdown(ctx context.Context) {
|
||||||
|
@ -181,6 +185,12 @@ func (s *session) DidOpen(uri span.URI) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *session) DidSave(uri span.URI) {
|
func (s *session) DidSave(uri span.URI) {
|
||||||
|
s.overlayMu.Lock()
|
||||||
|
defer s.overlayMu.Unlock()
|
||||||
|
|
||||||
|
if overlay, ok := s.overlays[uri]; ok {
|
||||||
|
overlay.onDisk = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *session) DidClose(uri span.URI) {
|
func (s *session) DidClose(uri span.URI) {
|
||||||
|
@ -236,6 +246,9 @@ func (s *session) buildOverlay() map[string][]byte {
|
||||||
|
|
||||||
overlays := make(map[string][]byte)
|
overlays := make(map[string][]byte)
|
||||||
for uri, overlay := range s.overlays {
|
for uri, overlay := range s.overlays {
|
||||||
|
if overlay.onDisk {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if filename, err := uri.Filename(); err == nil {
|
if filename, err := uri.Filename(); err == nil {
|
||||||
overlays[filename] = overlay.data
|
overlays[filename] = overlay.data
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,9 +100,8 @@ func (s *Server) applyChanges(ctx context.Context, params *protocol.DidChangeTex
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) didSave(ctx context.Context, params *protocol.DidSaveTextDocumentParams) error {
|
func (s *Server) didSave(ctx context.Context, params *protocol.DidSaveTextDocumentParams) error {
|
||||||
uri := span.NewURI(params.TextDocument.URI)
|
s.session.DidSave(span.NewURI(params.TextDocument.URI))
|
||||||
s.session.DidSave(uri)
|
return nil
|
||||||
return nil // ignore
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) didClose(ctx context.Context, params *protocol.DidCloseTextDocumentParams) error {
|
func (s *Server) didClose(ctx context.Context, params *protocol.DidCloseTextDocumentParams) error {
|
||||||
|
|
Loading…
Reference in New Issue