Skip to main content

pkl_lsp_core/
protocol.rs

1use serde::{Deserialize, Serialize};
2
3use crate::index::TextRange;
4
5#[allow(dead_code)]
6pub mod completion_kind {
7    pub const CLASS: u32 = 7;
8    pub const FUNCTION: u32 = 3;
9    pub const FIELD: u32 = 5;
10    pub const VARIABLE: u32 = 6;
11    pub const MODULE: u32 = 9;
12    pub const PROPERTY: u32 = 10;
13    pub const VALUE: u32 = 12;
14    pub const KEYWORD: u32 = 14;
15    pub const SNIPPET: u32 = 15;
16    pub const REFERENCE: u32 = 18;
17    pub const TYPE_PARAMETER: u32 = 25;
18}
19
20#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
21#[serde(rename_all = "camelCase")]
22pub struct CompletionItem {
23    pub label: String,
24    pub kind: Option<u32>,
25    pub detail: Option<String>,
26    pub documentation: Option<String>,
27    pub sort_text: Option<String>,
28    pub filter_text: Option<String>,
29    pub insert_text: Option<String>,
30    pub insert_text_format: Option<u32>,
31    pub text_edit: Option<TextEdit>,
32}
33
34#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
35pub struct CompletionList {
36    pub items: Vec<CompletionItem>,
37}
38
39#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
40pub struct Hover {
41    pub contents: String,
42    pub range: Option<TextRange>,
43}
44
45#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
46#[serde(rename_all = "camelCase")]
47pub struct DocumentSymbol {
48    pub name: String,
49    pub detail: Option<String>,
50    pub kind: u32,
51    pub range: TextRange,
52    pub selection_range: TextRange,
53    pub children: Option<Vec<DocumentSymbol>>,
54}
55
56#[allow(dead_code)]
57pub mod symbol_kind {
58    pub const MODULE: u32 = 2;
59    pub const NAMESPACE: u32 = 3;
60    pub const CLASS: u32 = 5;
61    pub const PROPERTY: u32 = 7;
62    pub const EVENT: u32 = 24;
63    pub const TYPE_PARAMETER: u32 = 26;
64    pub const FUNCTION: u32 = 12;
65    pub const VARIABLE: u32 = 13;
66}
67
68#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
69pub struct Diagnostic {
70    pub range: TextRange,
71    pub severity: Option<u32>,
72    pub source: Option<String>,
73    pub message: String,
74}
75
76pub mod diagnostic_severity {
77    pub const ERROR: u32 = 1;
78}
79
80#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
81pub struct Location {
82    pub uri: String,
83    pub range: TextRange,
84}
85
86#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
87#[serde(rename_all = "camelCase")]
88pub struct TextEdit {
89    pub range: TextRange,
90    pub new_text: String,
91}
92
93#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
94pub struct WorkspaceEdit {
95    pub changes: Vec<DocumentEdit>,
96}
97
98#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
99pub struct DocumentEdit {
100    pub uri: String,
101    pub edits: Vec<TextEdit>,
102}
103
104#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
105#[serde(rename_all = "camelCase")]
106pub struct WorkspaceSymbol {
107    pub name: String,
108    pub kind: u32,
109    pub location: Location,
110    pub container_name: Option<String>,
111}
112
113#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
114#[serde(rename_all = "camelCase")]
115pub struct DocumentHighlight {
116    pub range: TextRange,
117    pub kind: Option<u32>,
118}
119
120#[allow(dead_code)]
121pub mod document_highlight_kind {
122    pub const TEXT: u32 = 1;
123    pub const READ: u32 = 2;
124    pub const WRITE: u32 = 3;
125}
126
127#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
128#[serde(rename_all = "camelCase")]
129pub struct FoldingRange {
130    pub start_line: u32,
131    pub start_character: Option<u32>,
132    pub end_line: u32,
133    pub end_character: Option<u32>,
134    pub kind: Option<String>,
135}
136
137#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
138pub struct SelectionRange {
139    pub range: TextRange,
140    pub parent: Option<Box<SelectionRange>>,
141}
142
143#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
144#[serde(rename_all = "camelCase")]
145pub struct SemanticToken {
146    pub line: u32,
147    pub start: u32,
148    pub length: u32,
149    pub token_type: u32,
150    pub modifiers: u32,
151}
152
153#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
154pub struct SemanticTokens {
155    pub data: Vec<SemanticToken>,
156}
157
158#[allow(dead_code)]
159pub mod semantic_token_type {
160    pub const NAMESPACE: u32 = 0;
161    pub const TYPE: u32 = 1;
162    pub const CLASS: u32 = 2;
163    pub const PARAMETER: u32 = 3;
164    pub const VARIABLE: u32 = 4;
165    pub const PROPERTY: u32 = 5;
166    pub const FUNCTION: u32 = 6;
167    pub const KEYWORD: u32 = 7;
168    pub const COMMENT: u32 = 8;
169    pub const STRING: u32 = 9;
170    pub const NUMBER: u32 = 10;
171    pub const OPERATOR: u32 = 11;
172    pub const MACRO: u32 = 12;
173}
174
175#[allow(dead_code)]
176pub mod semantic_token_modifier {
177    pub const DECLARATION: u32 = 1;
178    pub const DEFINITION: u32 = 1 << 1;
179    pub const READONLY: u32 = 1 << 2;
180    pub const DEPRECATED: u32 = 1 << 3;
181}
182
183#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
184#[serde(rename_all = "camelCase")]
185pub struct PrepareRename {
186    pub range: TextRange,
187    pub placeholder: String,
188}
189
190#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
191#[serde(rename_all = "camelCase")]
192pub struct CodeAction {
193    pub title: String,
194    pub kind: Option<String>,
195}
196
197#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
198pub struct SignatureHelp {
199    pub signatures: Vec<SignatureInformation>,
200    pub active_signature: Option<u32>,
201    pub active_parameter: Option<u32>,
202}
203
204#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
205#[serde(rename_all = "camelCase")]
206pub struct SignatureInformation {
207    pub label: String,
208    pub documentation: Option<String>,
209    pub parameters: Vec<ParameterInformation>,
210}
211
212#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
213pub struct ParameterInformation {
214    pub label: String,
215    pub documentation: Option<String>,
216}
217
218#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
219#[serde(rename_all = "camelCase")]
220pub struct InlayHint {
221    pub position: crate::index::TextPosition,
222    pub label: String,
223    pub kind: Option<u32>,
224}