LSP-server-example

Форк
0
40 строк · 963.0 Байт
1
package handlers
2

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

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

10
const DidOpenTextDocumentNotification = "textDocument/didOpen"
11

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

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

20
func (d DidOpen) Call(params json.RawMessage) error {
21
	slog.Info("received didOpen notification")
22
	openParams, err := d.parseParams(params)
23
	if err != nil {
24
		slog.Error("Error to parse didOpen params")
25
		return err
26
	}
27
	slog.Debug("didOpen params", slog.Any("params", *openParams))
28
	d.documentUpdates <- openParams.TextDocument
29

30
	return nil
31
}
32

33
func (d DidOpen) parseParams(params json.RawMessage) (*protocol.DidOpenTextDocumentParams, error) {
34
	var openParams protocol.DidOpenTextDocumentParams
35
	if err := json.Unmarshal(params, &openParams); err != nil {
36
		return nil, err
37
	}
38

39
	return &openParams, nil
40
}
41

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

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

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

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