languageserver_types/
request.rs1use super::*;
2
3pub trait Request {
4 type Params;
5 type Result;
6 const METHOD: &'static str;
7}
8
9#[macro_export]
10macro_rules! lsp_request {
11 ("initialize") => {
12 $crate::request::Initialize
13 };
14 ("shutdown") => {
15 $crate::request::Shutdown
16 };
17
18 ("window/showMessageRequest") => {
19 $crate::request::ShowMessageRequest
20 };
21
22 ("client/registerCapability") => {
23 $crate::request::RegisterCapability
24 };
25 ("client/unregisterCapability") => {
26 $crate::request::UnregisterCapability
27 };
28
29 ("workspace/symbol") => {
30 $crate::request::WorkspaceSymbol
31 };
32 ("workspace/executeCommand") => {
33 $crate::request::ExecuteCommand
34 };
35
36 ("textDocument/completion") => {
37 $crate::request::Completion
38 };
39 ("completionItem/resolve") => {
40 $crate::request::ResolveCompletionItem
41 };
42 ("textDocument/hover") => {
43 $crate::request::HoverRequest
44 };
45 ("textDocument/signatureHelp") => {
46 $crate::request::SignatureHelpRequest
47 };
48 ("textDocument/declaration") => {
49 $crate::request::GotoDeclaration
50 };
51 ("textDocument/definition") => {
52 $crate::request::GotoDefinition
53 };
54 ("textDocument/references") => {
55 $crate::request::References
56 };
57 ("textDocument/documentHighlight") => {
58 $crate::request::DocumentHighlightRequest
59 };
60 ("textDocument/documentSymbol") => {
61 $crate::request::DocumentSymbolRequest
62 };
63 ("textDocument/codeAction") => {
64 $crate::request::CodeActionRequest
65 };
66 ("textDocument/codeLens") => {
67 $crate::request::CodeLensRequest
68 };
69 ("codeLens/resolve") => {
70 $crate::request::CodeLensResolve
71 };
72 ("textDocument/documentLink") => {
73 $crate::request::DocumentLinkRequest
74 };
75 ("documentLink/resolve") => {
76 $crate::request::DocumentLinkResolve
77 };
78 ("workspace/applyEdit") => {
79 $crate::request::ApplyWorkspaceEdit
80 };
81 ("textDocument/rangeFormatting") => {
82 $crate::request::RangeFormatting
83 };
84 ("textDocument/onTypeFormatting") => {
85 $crate::request::OnTypeFormatting
86 };
87 ("textDocument/formatting") => {
88 $crate::request::Formatting
89 };
90 ("textDocument/rename") => {
91 $crate::request::Rename
92 };
93 ("textDocument/documentColor") => {
94 $crate::request::DocumentColor
95 };
96 ("textDocument/colorPresentation") => {
97 $crate::request::ColorPresentationRequest
98 };
99 ("textDocument/foldingRange") => {
100 $crate::request::FoldingRangeRequest
101 };
102 ("textDocument/prepareRename") => {
103 $crate::request::PrepareRenameRequest
104 };
105 ("textDocument/implementation") => {
106 $crate::request::GotoImplementation
107 };
108 ("textDocument/typeDefinition") => {
109 $crate::request::GotoTypeDefinition
110 };
111 ("workspace/workspaceFolders") => {
112 $crate::request::WorkspaceFoldersRequest
113 };
114}
115
116#[derive(Debug)]
126pub enum Initialize {}
127
128impl Request for Initialize {
129 type Params = InitializeParams;
130 type Result = InitializeResult;
131 const METHOD: &'static str = "initialize";
132}
133
134#[derive(Debug)]
140pub enum Shutdown {}
141
142impl Request for Shutdown {
143 type Params = ();
144 type Result = ();
145 const METHOD: &'static str = "shutdown";
146}
147
148#[derive(Debug)]
154pub enum ShowMessageRequest {}
155
156impl Request for ShowMessageRequest {
157 type Params = ShowMessageRequestParams;
158 type Result = Option<MessageActionItem>;
159 const METHOD: &'static str = "window/showMessageRequest";
160}
161
162#[derive(Debug)]
166pub enum RegisterCapability {}
167
168impl Request for RegisterCapability {
169 type Params = RegistrationParams;
170 type Result = ();
171 const METHOD: &'static str = "client/registerCapability";
172}
173
174#[derive(Debug)]
177pub enum UnregisterCapability {}
178
179impl Request for UnregisterCapability {
180 type Params = UnregistrationParams;
181 type Result = ();
182 const METHOD: &'static str = "client/unregisterCapability";
183}
184
185#[derive(Debug)]
199pub enum Completion {}
200
201impl Request for Completion {
202 type Params = CompletionParams;
203 type Result = Option<CompletionResponse>;
204 const METHOD: &'static str = "textDocument/completion";
205}
206
207#[derive(Debug)]
209pub enum ResolveCompletionItem {}
210
211impl Request for ResolveCompletionItem {
212 type Params = CompletionItem;
213 type Result = CompletionItem;
214 const METHOD: &'static str = "completionItem/resolve";
215}
216
217#[derive(Debug)]
220pub enum HoverRequest {}
221
222impl Request for HoverRequest {
223 type Params = TextDocumentPositionParams;
224 type Result = Option<Hover>;
225 const METHOD: &'static str = "textDocument/hover";
226}
227
228#[derive(Debug)]
231pub enum SignatureHelpRequest {}
232
233impl Request for SignatureHelpRequest {
234 type Params = TextDocumentPositionParams;
235 type Result = Option<SignatureHelp>;
236 const METHOD: &'static str = "textDocument/signatureHelp";
237}
238
239#[derive(Debug)]
240pub enum GotoDeclaration {}
241
242impl Request for GotoDeclaration {
245 type Params = TextDocumentPositionParams;
246 type Result = Option<GotoDefinitionResponse>;
247 const METHOD: &'static str = "textDocument/declaration";
248}
249
250#[derive(Debug)]
253pub enum GotoDefinition {}
254
255impl Request for GotoDefinition {
256 type Params = TextDocumentPositionParams;
257 type Result = Option<GotoDefinitionResponse>;
258 const METHOD: &'static str = "textDocument/definition";
259}
260
261 #[derive(Debug, PartialEq, Serialize, Deserialize)]
263#[serde(untagged)]
264pub enum GotoDefinitionResponse {
265 Scalar(Location),
266 Array(Vec<Location>),
267 Link(Vec<LocationLink>)
268}
269
270#[derive(Debug)]
273pub enum References {}
274
275impl Request for References {
276 type Params = ReferenceParams;
277 type Result = Option<Vec<Location>>;
278 const METHOD: &'static str = "textDocument/references";
279}
280
281#[derive(Debug)]
285pub enum GotoTypeDefinition {}
286
287pub type GotoTypeDefinitionResponse = GotoDefinitionResponse;
288
289impl Request for GotoTypeDefinition {
290 type Params = TextDocumentPositionParams;
291 type Result = Option<GotoTypeDefinitionResponse>;
292 const METHOD: &'static str = "textDocument/typeDefinition";
293}
294
295#[derive(Debug)]
299pub enum GotoImplementation {}
300
301pub type GotoImplementationResponse = GotoDefinitionResponse;
302
303impl Request for GotoImplementation {
304 type Params = TextDocumentPositionParams;
305 type Result = Option<GotoImplementationResponse>;
306 const METHOD: &'static str = "textDocument/implementation";
307}
308
309#[derive(Debug)]
319pub enum DocumentHighlightRequest {}
320
321impl Request for DocumentHighlightRequest {
322 type Params = TextDocumentPositionParams;
323 type Result = Option<Vec<DocumentHighlight>>;
324 const METHOD: &'static str = "textDocument/documentHighlight";
325}
326
327#[derive(Debug)]
332pub enum DocumentSymbolRequest {}
333
334impl Request for DocumentSymbolRequest {
335 type Params = DocumentSymbolParams;
336 type Result = Option<DocumentSymbolResponse>;
337 const METHOD: &'static str = "textDocument/documentSymbol";
338}
339
340#[derive(Debug)]
345pub enum WorkspaceSymbol {}
346
347impl Request for WorkspaceSymbol {
348 type Params = WorkspaceSymbolParams;
349 type Result = Option<Vec<SymbolInformation>>;
350 const METHOD: &'static str = "workspace/symbol";
351}
352
353#[derive(Debug)]
355pub enum ExecuteCommand {}
356
357impl Request for ExecuteCommand {
358 type Params = ExecuteCommandParams;
359 type Result = Option<Value>;
360 const METHOD: &'static str = "workspace/executeCommand";
361}
362
363#[derive(Debug)]
366pub enum ApplyWorkspaceEdit {}
367
368impl Request for ApplyWorkspaceEdit {
369 type Params = ApplyWorkspaceEditParams;
370 type Result = ApplyWorkspaceEditResponse;
371 const METHOD: &'static str = "workspace/applyEdit";
372}
373
374#[derive(Debug)]
380pub enum CodeActionRequest {}
381
382impl Request for CodeActionRequest {
383 type Params = CodeActionParams;
384 type Result = Option<CodeActionResponse>;
385 const METHOD: &'static str = "textDocument/codeAction";
386}
387
388#[derive(Debug)]
392pub enum CodeLensRequest {}
393
394impl Request for CodeLensRequest {
395 type Params = CodeLensParams;
396 type Result = Option<Vec<CodeLens>>;
397 const METHOD: &'static str = "textDocument/codeLens";
398}
399
400#[derive(Debug)]
405pub enum CodeLensResolve {}
406
407impl Request for CodeLensResolve {
408 type Params = CodeLens;
409 type Result = CodeLens;
410 const METHOD: &'static str = "codeLens/resolve";
411}
412
413#[derive(Debug)]
415pub enum DocumentLinkRequest {}
416
417impl Request for DocumentLinkRequest {
418 type Params = DocumentLinkParams;
419 type Result = Option<Vec<DocumentLink>>;
420 const METHOD: &'static str = "textDocument/documentLink";
421}
422
423#[derive(Debug)]
428pub enum DocumentLinkResolve {}
429
430impl Request for DocumentLinkResolve {
431 type Params = DocumentLink;
432 type Result = DocumentLink;
433 const METHOD: &'static str = "documentLink/resolve";
434}
435
436#[derive(Debug)]
440pub enum Formatting {}
441
442impl Request for Formatting {
443 type Params = DocumentFormattingParams;
444 type Result = Option<Vec<TextEdit>>;
445 const METHOD: &'static str = "textDocument/formatting";
446}
447
448#[derive(Debug)]
450pub enum RangeFormatting {}
451
452impl Request for RangeFormatting {
453 type Params = DocumentRangeFormattingParams;
454 type Result = Option<Vec<TextEdit>>;
455 const METHOD: &'static str = "textDocument/rangeFormatting";
456}
457
458#[derive(Debug)]
463pub enum OnTypeFormatting {}
464
465impl Request for OnTypeFormatting {
466 type Params = DocumentOnTypeFormattingParams;
467 type Result = Option<Vec<TextEdit>>;
468 const METHOD: &'static str = "textDocument/onTypeFormatting";
469}
470
471#[derive(Debug)]
475pub enum Rename {}
476
477impl Request for Rename {
478 type Params = RenameParams;
479 type Result = Option<WorkspaceEdit>;
480 const METHOD: &'static str = "textDocument/rename";
481}
482
483#[derive(Debug)]
486pub enum DocumentColor {}
487
488impl Request for DocumentColor {
489 type Params = DocumentColorParams;
490 type Result = Vec<ColorInformation>;
491 const METHOD: &'static str = "textDocument/documentColor";
492}
493
494#[derive(Debug)]
497pub enum ColorPresentationRequest {}
498
499impl Request for ColorPresentationRequest {
500 type Params = ColorPresentationParams;
501 type Result = Vec<ColorPresentation>;
502 const METHOD: &'static str = "textDocument/colorPresentation";
503}
504
505#[derive(Debug)]
507pub enum FoldingRangeRequest {}
508
509impl Request for FoldingRangeRequest {
510 type Params = FoldingRangeParams;
511 type Result = Option<Vec<FoldingRange>>;
512 const METHOD: &'static str = "textDocument/foldingRange";
513}
514
515#[derive(Debug)]
518pub enum PrepareRenameRequest {}
519
520impl Request for PrepareRenameRequest {
521 type Params = TextDocumentPositionParams;
522 type Result = Option<PrepareRenameResponse>;
523 const METHOD: &'static str = "textDocument/prepareRename";
524}
525
526#[derive(Debug)]
530pub enum WorkspaceFoldersRequest {}
531
532impl Request for WorkspaceFoldersRequest {
533 type Params = ();
534 type Result = Option<Vec<WorkspaceFolder>>;
535 const METHOD: &'static str = "workspace/workspaceFolders";
536}
537
538#[cfg(test)]
539mod test {
540 use super::*;
541
542 fn fake_call<R>()
543 where
544 R: Request,
545 R::Params: serde::Serialize,
546 R::Result: serde::de::DeserializeOwned,
547 {
548 }
549
550 macro_rules! check_macro {
551 ($name:tt) => {
552 assert_eq!(<lsp_request!($name) as Request>::METHOD, $name);
554 fake_call::<lsp_request!($name)>();
556 };
557 }
558
559 #[test]
560 fn check_macro_definitions() {
561 check_macro!("initialize");
562 check_macro!("shutdown");
563 check_macro!("window/showMessageRequest");
564 check_macro!("client/registerCapability");
565 check_macro!("client/unregisterCapability");
566 check_macro!("workspace/symbol");
567 check_macro!("workspace/executeCommand");
568 check_macro!("textDocument/completion");
569 check_macro!("completionItem/resolve");
570 check_macro!("textDocument/hover");
571 check_macro!("textDocument/signatureHelp");
572 check_macro!("textDocument/declaration");
573 check_macro!("textDocument/definition");
574 check_macro!("textDocument/references");
575 check_macro!("textDocument/documentHighlight");
576 check_macro!("textDocument/documentSymbol");
577 check_macro!("textDocument/codeAction");
578 check_macro!("textDocument/codeLens");
579 check_macro!("codeLens/resolve");
580 check_macro!("textDocument/documentLink");
581 check_macro!("documentLink/resolve");
582 check_macro!("workspace/applyEdit");
583 check_macro!("textDocument/rangeFormatting");
584 check_macro!("textDocument/onTypeFormatting");
585 check_macro!("textDocument/formatting");
586 check_macro!("textDocument/rename");
587 check_macro!("textDocument/documentColor");
588 check_macro!("textDocument/colorPresentation");
589 check_macro!("textDocument/foldingRange");
590 check_macro!("textDocument/prepareRename");
591 check_macro!("workspace/workspaceFolders");
592 check_macro!("textDocument/implementation");
593 check_macro!("textDocument/typeDefinition");
594 }
595}