LSP-server-example

Форк
0
61 строка · 1.3 Кб
1
package handlers
2

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

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

10
const HoverMethod = "textDocument/hover"
11

12
type Hover struct {
13
	fileURIToContents *map[string][]string
14
}
15

16
func NewHover(fileURIToContents *map[string][]string) *Hover {
17
	return &Hover{fileURIToContents: fileURIToContents}
18
}
19

20
func (h Hover) Call(params json.RawMessage) (any, error) {
21
	slog.Info("received hover method")
22
	hParams, err := h.parseParams(params)
23
	if err != nil {
24
		slog.Error("Error to parse hover params")
25
		return nil, err
26
	}
27
	slog.Debug("hover params", slog.Any("params", *hParams))
28

29
	hoverItem := h.createHoverItem(hParams)
30

31
	return hoverItem, nil
32
}
33

34
func (h Hover) createHoverItem(hParams *protocol.HoverParams) *protocol.Hover {
35
	hoverItem := &protocol.Hover{
36
		Contents: protocol.MarkupContent{
37
			Kind:  protocol.Markdown,
38
			Value: "some hover",
39
		},
40
		Range: protocol.Range{
41
			Start: protocol.Position{
42
				Line:      hParams.Position.Line,
43
				Character: hParams.Position.Character,
44
			},
45
			End: protocol.Position{
46
				Line:      hParams.Position.Line,
47
				Character: hParams.Position.Character,
48
			},
49
		},
50
	}
51
	return hoverItem
52
}
53

54
func (h Hover) parseParams(params json.RawMessage) (*protocol.HoverParams, error) {
55
	var hoverParams protocol.HoverParams
56
	if err := json.Unmarshal(params, &hoverParams); err != nil {
57
		return nil, err
58
	}
59

60
	return &hoverParams, nil
61
}
62

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

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

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

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