all repos

clerk @ f9a2588

missing tooling for ledger/hledger

clerk/internal/lsp/textdocument_sync.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
lsp server, 20 days ago
1
package lsp
2
3
import (
4
	"context"
5
6
	"go.lsp.dev/protocol"
7
	"go.lsp.dev/uri"
8
)
9
10
func (s *server) DidOpen(ctx context.Context, params *protocol.DidOpenTextDocumentParams) error {
11
	s.mu.Lock()
12
	s.docs[params.TextDocument.URI] = docState{
13
		text:       params.TextDocument.Text,
14
		version:    params.TextDocument.Version,
15
		languageID: params.TextDocument.LanguageID,
16
	}
17
	s.mu.Unlock()
18
	return nil
19
}
20
21
func (s *server) DidChange(ctx context.Context, params *protocol.DidChangeTextDocumentParams) error {
22
	s.mu.Lock()
23
	defer s.mu.Unlock()
24
25
	state, ok := s.docs[params.TextDocument.URI]
26
	if !ok {
27
		return nil
28
	}
29
30
	state.version = params.TextDocument.Version
31
	for _, ch := range params.ContentChanges {
32
		switch ev := ch.(type) {
33
		case *protocol.TextDocumentContentChangeWholeDocument:
34
			state.text = ev.Text
35
		case *protocol.TextDocumentContentChangePartial:
36
			// TODO: incremental edit — apply range replacement
37
			_ = ev
38
		}
39
	}
40
	s.docs[params.TextDocument.URI] = state
41
	return nil
42
}
43
44
func (s *server) DidClose(ctx context.Context, params *protocol.DidCloseTextDocumentParams) error {
45
	s.mu.Lock()
46
	defer s.mu.Unlock()
47
	delete(s.docs, params.TextDocument.URI)
48
	return nil
49
}
50
51
func (s *server) DidSave(ctx context.Context, params *protocol.DidSaveTextDocumentParams) error {
52
	return nil
53
}
54
55
func (s *server) GetText(uri uri.URI) (string, bool) {
56
	s.mu.RLock()
57
	defer s.mu.RUnlock()
58
	state, ok := s.docs[uri]
59
	return state.text, ok
60
}