LSP-server-example

Форк
0
45 строк · 1.1 Кб
1
package handlers
2

3
import (
4
	"encoding/json"
5
	"log/slog"
6

7
	"lsp-server/internal/protocol"
8
)
9

10
const DidChangeTextDocumentNotification = "textDocument/didChange"
11

12
type DidChange struct {
13
	documentUpdates chan protocol.TextDocumentItem
14
}
15

16
func NewDidChange(documentUpdates chan protocol.TextDocumentItem) *DidChange {
17
	return &DidChange{documentUpdates: documentUpdates}
18
}
19

20
func (d DidChange) Call(params json.RawMessage) error {
21
	slog.Info("received didChange notification")
22
	changeParams, err := d.parseParams(params)
23
	if err != nil {
24
		slog.Error("Error to parse didChange params")
25
		return err
26
	}
27
	slog.Debug("didChange params", slog.Any("params", *changeParams))
28

29
	d.documentUpdates <- protocol.TextDocumentItem{
30
		URI:     changeParams.TextDocument.URI,
31
		Version: changeParams.TextDocument.Version,
32
		Text:    changeParams.ContentChanges[0].Text,
33
	}
34

35
	return nil
36
}
37

38
func (d DidChange) parseParams(params json.RawMessage) (*protocol.DidChangeTextDocumentParams, error) {
39
	var changeParams protocol.DidChangeTextDocumentParams
40
	if err := json.Unmarshal(params, &changeParams); err != nil {
41
		return nil, err
42
	}
43

44
	return &changeParams, nil
45
}
46

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.