LSP-server-example

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

3
import (
4
	"encoding/json"
5
	"log/slog"
6
	"lsp-server/internal/protocol"
7
)
8

9
const (
10
	TextDocumentSyncKindNone protocol.TextDocumentSyncKind = iota
11
	TextDocumentSyncKindFull
12
	TextDocumentSyncKindIncremental
13
)
14

15
const InitializeMethod = "initialize"
16

17
type Initialize struct {
18
}
19

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

29
	result := protocol.InitializeResult{
30
		Capabilities: protocol.ServerCapabilities{
31
			TextDocumentSync:   TextDocumentSyncKindFull,
32
			HoverProvider:      &protocol.Or_ServerCapabilities_hoverProvider{},
33
			CompletionProvider: &protocol.CompletionOptions{},
34
		},
35
	}
36

37
	return result, nil
38
}
39

40
func (i Initialize) parseParams(params json.RawMessage) (*protocol.InitializedParams, error) {
41
	var initializeParams protocol.InitializedParams
42
	if err := json.Unmarshal(params, &initializeParams); err != nil {
43
		return nil, err
44
	}
45

46
	return &initializeParams, nil
47
}
48

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

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

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

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