From 01f55a6c794c909bfcf5600f3d95b77cc9ce31df Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Sun, 16 Aug 2020 12:35:08 -0400 Subject: [PATCH] Ensure correct ordering of notifications --- internal/buffer/buffer.go | 4 ++-- internal/lsp/notifications.go | 8 ++++---- internal/lsp/server.go | 9 +++++++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/internal/buffer/buffer.go b/internal/buffer/buffer.go index bd0285e1..39333e63 100644 --- a/internal/buffer/buffer.go +++ b/internal/buffer/buffer.go @@ -161,7 +161,7 @@ func (b *SharedBuffer) lspDidChange(start, end Loc, text string) { } if b.HasLSP() { - b.Server.DidChange(b.AbsPath, &b.version, []lspt.TextDocumentContentChangeEvent{change}) + b.Server.DidChange(b.AbsPath, b.version, []lspt.TextDocumentContentChangeEvent{change}) } } @@ -428,7 +428,7 @@ func (b *Buffer) lspInit() { if len(bytes) == 0 { bytes = []byte{'\n'} } - b.Server.DidOpen(b.AbsPath, ft, string(bytes), &b.version) + b.Server.DidOpen(b.AbsPath, ft, string(bytes), b.version) } } } diff --git a/internal/lsp/notifications.go b/internal/lsp/notifications.go index 20c75b05..6ae2ff93 100644 --- a/internal/lsp/notifications.go +++ b/internal/lsp/notifications.go @@ -5,11 +5,11 @@ import ( "go.lsp.dev/uri" ) -func (s *Server) DidOpen(filename, language, text string, version *uint64) { +func (s *Server) DidOpen(filename, language, text string, version uint64) { doc := lsp.TextDocumentItem{ URI: uri.File(filename), LanguageID: lsp.LanguageIdentifier(language), - Version: float64(*version), // not sure why this is a float on go.lsp.dev + Version: float64(version), // not sure why this is a float on go.lsp.dev Text: text, } @@ -31,12 +31,12 @@ func (s *Server) DidSave(filename string) { go s.sendNotification(lsp.MethodTextDocumentDidSave, params) } -func (s *Server) DidChange(filename string, version *uint64, changes []lsp.TextDocumentContentChangeEvent) { +func (s *Server) DidChange(filename string, version uint64, changes []lsp.TextDocumentContentChangeEvent) { doc := lsp.VersionedTextDocumentIdentifier{ TextDocumentIdentifier: lsp.TextDocumentIdentifier{ URI: uri.File(filename), }, - Version: version, + Version: &version, } params := lsp.DidChangeTextDocumentParams{ diff --git a/internal/lsp/server.go b/internal/lsp/server.go index d5df791f..68b6c4c7 100644 --- a/internal/lsp/server.go +++ b/internal/lsp/server.go @@ -266,8 +266,8 @@ func (s *Server) sendNotification(method string, params interface{}) error { } s.lock.Lock() - defer s.lock.Unlock() - return s.sendMessage(m) + go s.sendMessageUnlock(m) + return nil } func (s *Server) sendRequest(method string, params interface{}) ([]byte, error) { @@ -315,3 +315,8 @@ func (s *Server) sendMessage(m interface{}) error { _, err = s.stdin.Write(msg) return err } + +func (s *Server) sendMessageUnlock(m interface{}) error { + defer s.lock.Unlock() + return s.sendMessage(m) +}