1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
package lsp
import "encoding/json"
// JSON-RPC 2.0 structures (minimal)
type Request struct {
JSONRPC string `json:"jsonrpc"`
ID json.RawMessage `json:"id,omitempty"`
Method string `json:"method"`
Params json.RawMessage `json:"params,omitempty"`
}
type Response struct {
JSONRPC string `json:"jsonrpc"`
ID json.RawMessage `json:"id,omitempty"`
Result any `json:"result,omitempty"`
Error *RespError `json:"error,omitempty"`
}
type RespError struct {
Code int `json:"code"`
Message string `json:"message"`
}
// LSP responses (subset)
type InitializeResult struct {
Capabilities ServerCapabilities `json:"capabilities"`
ServerInfo *ServerInfo `json:"serverInfo,omitempty"`
}
type ServerInfo struct {
Name string `json:"name"`
Version string `json:"version,omitempty"`
}
type ServerCapabilities struct {
TextDocumentSync any `json:"textDocumentSync,omitempty"`
CompletionProvider *CompletionOptions `json:"completionProvider,omitempty"`
}
type CompletionOptions struct {
ResolveProvider bool `json:"resolveProvider,omitempty"`
TriggerCharacters []string `json:"triggerCharacters,omitempty"`
}
type CompletionList struct {
IsIncomplete bool `json:"isIncomplete"`
Items []CompletionItem `json:"items"`
}
type CompletionItem struct {
Label string `json:"label"`
Kind int `json:"kind,omitempty"`
Detail string `json:"detail,omitempty"`
InsertText string `json:"insertText,omitempty"`
InsertTextFormat int `json:"insertTextFormat,omitempty"`
FilterText string `json:"filterText,omitempty"`
TextEdit *TextEdit `json:"textEdit,omitempty"`
AdditionalTextEdits []TextEdit `json:"additionalTextEdits,omitempty"`
SortText string `json:"sortText,omitempty"`
Documentation string `json:"documentation,omitempty"`
}
// LSP param types (subset)
type TextDocumentItem struct {
URI string `json:"uri"`
LanguageID string `json:"languageId,omitempty"`
Version int `json:"version,omitempty"`
Text string `json:"text"`
}
type VersionedTextDocumentIdentifier struct {
URI string `json:"uri"`
Version int `json:"version,omitempty"`
}
type TextDocumentIdentifier struct {
URI string `json:"uri"`
}
type DidOpenTextDocumentParams struct {
TextDocument TextDocumentItem `json:"textDocument"`
}
type TextDocumentContentChangeEvent struct {
Range any `json:"range,omitempty"`
RangeLength int `json:"rangeLength,omitempty"`
Text string `json:"text"`
}
type DidChangeTextDocumentParams struct {
TextDocument VersionedTextDocumentIdentifier `json:"textDocument"`
ContentChanges []TextDocumentContentChangeEvent `json:"contentChanges"`
}
type DidCloseTextDocumentParams struct {
TextDocument TextDocumentIdentifier `json:"textDocument"`
}
type Position struct {
Line int `json:"line"`
Character int `json:"character"`
}
type CompletionParams struct {
TextDocument TextDocumentIdentifier `json:"textDocument"`
Position Position `json:"position"`
Context any `json:"context,omitempty"`
}
// Range defines a text range in a document.
type Range struct {
Start Position `json:"start"`
End Position `json:"end"`
}
// TextEdit represents a textual edit applicable to a document.
type TextEdit struct {
Range Range `json:"range"`
NewText string `json:"newText"`
}
|