1use crate::jsonrpc::{ErrorCode, Id, Message, Notification, Request, ResponseError};
2use lsp_types::{
3 notification::{Notification as _, *},
4 request::{Request as _, *},
5};
6use serde_json::{Value, from_value};
7use tracing::{debug, trace_span, warn};
8
9fn respond<R: lsp_types::request::Request>(
12 id: Id,
13 params: Value,
14 answer: impl FnOnce(R::Params) -> Result<R::Result, ResponseError>,
15) -> Message {
16 match from_value(params) {
17 Ok(params) => Message::from_result(id, answer(params)),
18 Err(error) => {
19 Message::from_result(id, Err::<(), _>(ResponseError::new(ErrorCode::InvalidParams, error.to_string())))
20 }
21 }
22}
23
24fn notified<N: lsp_types::notification::Notification>(params: Value, receive: impl FnOnce(N::Params)) {
26 match from_value(params) {
27 Ok(params) => receive(params),
28 Err(error) => warn!("Ignoring {} with invalid params: {error}", N::METHOD),
29 }
30}
31
32fn answer<H: Handler>(handler: &H, id: Id, method: &str, params: Value) -> Message {
33 match method {
34 ApplyWorkspaceEdit::METHOD => respond::<ApplyWorkspaceEdit>(id, params, |p| handler.apply_workspace_edit(p)),
35 CallHierarchyIncomingCalls::METHOD => {
36 respond::<CallHierarchyIncomingCalls>(id, params, |p| handler.call_hierarchy_incoming_calls(p))
37 }
38 CallHierarchyOutgoingCalls::METHOD => {
39 respond::<CallHierarchyOutgoingCalls>(id, params, |p| handler.call_hierarchy_outgoing_calls(p))
40 }
41 CallHierarchyPrepare::METHOD => {
42 respond::<CallHierarchyPrepare>(id, params, |p| handler.call_hierarchy_prepare(p))
43 }
44 CodeActionRequest::METHOD => respond::<CodeActionRequest>(id, params, |p| handler.code_action_request(p)),
45 CodeActionResolveRequest::METHOD => {
46 respond::<CodeActionResolveRequest>(id, params, |p| handler.code_action_resolve_request(p))
47 }
48 CodeLensRefresh::METHOD => respond::<CodeLensRefresh>(id, Value::Null, |()| handler.code_lens_refresh()),
49 CodeLensRequest::METHOD => respond::<CodeLensRequest>(id, params, |p| handler.code_lens_request(p)),
50 CodeLensResolve::METHOD => respond::<CodeLensResolve>(id, params, |p| handler.code_lens_resolve(p)),
51 ColorPresentationRequest::METHOD => {
52 respond::<ColorPresentationRequest>(id, params, |p| handler.color_presentation_request(p))
53 }
54 Completion::METHOD => respond::<Completion>(id, params, |p| handler.completion(p)),
55 DocumentColor::METHOD => respond::<DocumentColor>(id, params, |p| handler.document_color(p)),
56 DocumentDiagnosticRequest::METHOD => {
57 respond::<DocumentDiagnosticRequest>(id, params, |p| handler.document_diagnostic_request(p))
58 }
59 DocumentHighlightRequest::METHOD => {
60 respond::<DocumentHighlightRequest>(id, params, |p| handler.document_highlight_request(p))
61 }
62 DocumentLinkRequest::METHOD => respond::<DocumentLinkRequest>(id, params, |p| handler.document_link_request(p)),
63 DocumentLinkResolve::METHOD => respond::<DocumentLinkResolve>(id, params, |p| handler.document_link_resolve(p)),
64 DocumentSymbolRequest::METHOD => {
65 respond::<DocumentSymbolRequest>(id, params, |p| handler.document_symbol_request(p))
66 }
67 ExecuteCommand::METHOD => respond::<ExecuteCommand>(id, params, |p| handler.execute_command(p)),
68 FoldingRangeRequest::METHOD => respond::<FoldingRangeRequest>(id, params, |p| handler.folding_range_request(p)),
69 Formatting::METHOD => respond::<Formatting>(id, params, |p| handler.formatting(p)),
70 GotoDeclaration::METHOD => respond::<GotoDeclaration>(id, params, |p| handler.goto_declaration(p)),
71 GotoDefinition::METHOD => respond::<GotoDefinition>(id, params, |p| handler.goto_definition(p)),
72 GotoImplementation::METHOD => respond::<GotoImplementation>(id, params, |p| handler.goto_implementation(p)),
73 GotoTypeDefinition::METHOD => respond::<GotoTypeDefinition>(id, params, |p| handler.goto_type_definition(p)),
74 HoverRequest::METHOD => respond::<HoverRequest>(id, params, |p| handler.hover_request(p)),
75 Initialize::METHOD => respond::<Initialize>(id, params, |p| handler.initialize(p)),
76 InlayHintRefreshRequest::METHOD => {
77 respond::<InlayHintRefreshRequest>(id, Value::Null, |()| handler.inlay_hint_refresh_request())
78 }
79 InlayHintRequest::METHOD => respond::<InlayHintRequest>(id, params, |p| handler.inlay_hint_request(p)),
80 InlayHintResolveRequest::METHOD => {
81 respond::<InlayHintResolveRequest>(id, params, |p| handler.inlay_hint_resolve_request(p))
82 }
83 InlineValueRefreshRequest::METHOD => {
84 respond::<InlineValueRefreshRequest>(id, Value::Null, |()| handler.inline_value_refresh_request())
85 }
86 InlineValueRequest::METHOD => respond::<InlineValueRequest>(id, params, |p| handler.inline_value_request(p)),
87 LinkedEditingRange::METHOD => respond::<LinkedEditingRange>(id, params, |p| handler.linked_editing_range(p)),
88 MonikerRequest::METHOD => respond::<MonikerRequest>(id, params, |p| handler.moniker_request(p)),
89 OnTypeFormatting::METHOD => respond::<OnTypeFormatting>(id, params, |p| handler.on_type_formatting(p)),
90 PrepareRenameRequest::METHOD => {
91 respond::<PrepareRenameRequest>(id, params, |p| handler.prepare_rename_request(p))
92 }
93 RangeFormatting::METHOD => respond::<RangeFormatting>(id, params, |p| handler.range_formatting(p)),
94 References::METHOD => respond::<References>(id, params, |p| handler.references(p)),
95 RegisterCapability::METHOD => respond::<RegisterCapability>(id, params, |p| handler.register_capability(p)),
96 Rename::METHOD => respond::<Rename>(id, params, |p| handler.rename(p)),
97 ResolveCompletionItem::METHOD => {
98 respond::<ResolveCompletionItem>(id, params, |p| handler.resolve_completion_item(p))
99 }
100 SelectionRangeRequest::METHOD => {
101 respond::<SelectionRangeRequest>(id, params, |p| handler.selection_range_request(p))
102 }
103 SemanticTokensFullDeltaRequest::METHOD => {
104 respond::<SemanticTokensFullDeltaRequest>(id, params, |p| handler.semantic_tokens_full_delta_request(p))
105 }
106 SemanticTokensFullRequest::METHOD => {
107 respond::<SemanticTokensFullRequest>(id, params, |p| handler.semantic_tokens_full_request(p))
108 }
109 SemanticTokensRangeRequest::METHOD => {
110 respond::<SemanticTokensRangeRequest>(id, params, |p| handler.semantic_tokens_range_request(p))
111 }
112 SemanticTokensRefresh::METHOD => {
113 respond::<SemanticTokensRefresh>(id, Value::Null, |()| handler.semantic_tokens_refresh())
114 }
115 ShowDocument::METHOD => respond::<ShowDocument>(id, params, |p| handler.show_document(p)),
116 ShowMessageRequest::METHOD => respond::<ShowMessageRequest>(id, params, |p| handler.show_message_request(p)),
117 Shutdown::METHOD => respond::<Shutdown>(id, Value::Null, |()| handler.shutdown()),
118 SignatureHelpRequest::METHOD => {
119 respond::<SignatureHelpRequest>(id, params, |p| handler.signature_help_request(p))
120 }
121 TypeHierarchyPrepare::METHOD => {
122 respond::<TypeHierarchyPrepare>(id, params, |p| handler.type_hierarchy_prepare(p))
123 }
124 TypeHierarchySubtypes::METHOD => {
125 respond::<TypeHierarchySubtypes>(id, params, |p| handler.type_hierarchy_subtypes(p))
126 }
127 TypeHierarchySupertypes::METHOD => {
128 respond::<TypeHierarchySupertypes>(id, params, |p| handler.type_hierarchy_supertypes(p))
129 }
130 UnregisterCapability::METHOD => {
131 respond::<UnregisterCapability>(id, params, |p| handler.unregister_capability(p))
132 }
133 WillCreateFiles::METHOD => respond::<WillCreateFiles>(id, params, |p| handler.will_create_files(p)),
134 WillDeleteFiles::METHOD => respond::<WillDeleteFiles>(id, params, |p| handler.will_delete_files(p)),
135 WillRenameFiles::METHOD => respond::<WillRenameFiles>(id, params, |p| handler.will_rename_files(p)),
136 WillSaveWaitUntil::METHOD => respond::<WillSaveWaitUntil>(id, params, |p| handler.will_save_wait_until(p)),
137 WorkDoneProgressCreate::METHOD => {
138 respond::<WorkDoneProgressCreate>(id, params, |p| handler.work_done_progress_create(p))
139 }
140 WorkspaceConfiguration::METHOD => {
141 respond::<WorkspaceConfiguration>(id, params, |p| handler.workspace_configuration(p))
142 }
143 WorkspaceDiagnosticRefresh::METHOD => {
144 respond::<WorkspaceDiagnosticRefresh>(id, Value::Null, |()| handler.workspace_diagnostic_refresh())
145 }
146 WorkspaceDiagnosticRequest::METHOD => {
147 respond::<WorkspaceDiagnosticRequest>(id, params, |p| handler.workspace_diagnostic_request(p))
148 }
149 WorkspaceFoldersRequest::METHOD => {
150 respond::<WorkspaceFoldersRequest>(id, Value::Null, |()| handler.workspace_folders_request())
151 }
152 WorkspaceSymbolRequest::METHOD => {
153 respond::<WorkspaceSymbolRequest>(id, params, |p| handler.workspace_symbol_request(p))
154 }
155 WorkspaceSymbolResolve::METHOD => {
156 respond::<WorkspaceSymbolResolve>(id, params, |p| handler.workspace_symbol_resolve(p))
157 }
158 _ => Message::from_result(id, Err::<(), _>(ErrorCode::MethodNotFound.into())),
159 }
160}
161
162fn receive<H: Handler>(handler: &H, method: &str, params: Value) {
163 match method {
164 Cancel::METHOD => notified::<Cancel>(params, |p| handler.on_cancel(p)),
165 DidChangeConfiguration::METHOD => {
166 notified::<DidChangeConfiguration>(params, |p| handler.on_did_change_configuration(p))
167 }
168 DidChangeNotebookDocument::METHOD => {
169 notified::<DidChangeNotebookDocument>(params, |p| handler.on_did_change_notebook_document(p))
170 }
171 DidChangeTextDocument::METHOD => {
172 notified::<DidChangeTextDocument>(params, |p| handler.on_did_change_text_document(p))
173 }
174 DidChangeWatchedFiles::METHOD => {
175 notified::<DidChangeWatchedFiles>(params, |p| handler.on_did_change_watched_files(p))
176 }
177 DidChangeWorkspaceFolders::METHOD => {
178 notified::<DidChangeWorkspaceFolders>(params, |p| handler.on_did_change_workspace_folders(p))
179 }
180 DidCloseNotebookDocument::METHOD => {
181 notified::<DidCloseNotebookDocument>(params, |p| handler.on_did_close_notebook_document(p))
182 }
183 DidCloseTextDocument::METHOD => {
184 notified::<DidCloseTextDocument>(params, |p| handler.on_did_close_text_document(p))
185 }
186 DidCreateFiles::METHOD => notified::<DidCreateFiles>(params, |p| handler.on_did_create_files(p)),
187 DidDeleteFiles::METHOD => notified::<DidDeleteFiles>(params, |p| handler.on_did_delete_files(p)),
188 DidOpenNotebookDocument::METHOD => {
189 notified::<DidOpenNotebookDocument>(params, |p| handler.on_did_open_notebook_document(p))
190 }
191 DidOpenTextDocument::METHOD => {
192 notified::<DidOpenTextDocument>(params, |p| handler.on_did_open_text_document(p))
193 }
194 DidRenameFiles::METHOD => notified::<DidRenameFiles>(params, |p| handler.on_did_rename_files(p)),
195 DidSaveNotebookDocument::METHOD => {
196 notified::<DidSaveNotebookDocument>(params, |p| handler.on_did_save_notebook_document(p))
197 }
198 DidSaveTextDocument::METHOD => {
199 notified::<DidSaveTextDocument>(params, |p| handler.on_did_save_text_document(p))
200 }
201 Initialized::METHOD => notified::<Initialized>(params, |p| handler.on_initialized(p)),
202 LogMessage::METHOD => notified::<LogMessage>(params, |p| handler.on_log_message(p)),
203 LogTrace::METHOD => notified::<LogTrace>(params, |p| handler.on_log_trace(p)),
204 Progress::METHOD => notified::<Progress>(params, |p| handler.on_progress(p)),
205 PublishDiagnostics::METHOD => notified::<PublishDiagnostics>(params, |p| handler.on_publish_diagnostics(p)),
206 SetTrace::METHOD => notified::<SetTrace>(params, |p| handler.on_set_trace(p)),
207 ShowMessage::METHOD => notified::<ShowMessage>(params, |p| handler.on_show_message(p)),
208 TelemetryEvent::METHOD => notified::<TelemetryEvent>(params, |p| handler.on_telemetry_event(p)),
209 WillSaveTextDocument::METHOD => {
210 notified::<WillSaveTextDocument>(params, |p| handler.on_will_save_text_document(p))
211 }
212 WorkDoneProgressCancel::METHOD => {
213 notified::<WorkDoneProgressCancel>(params, |p| handler.on_work_done_progress_cance(p))
214 }
215 _ => debug!("Ignoring unhandled notification {method}"),
216 }
217}
218
219pub trait Handler: Sized + Send + Sync + 'static {
220 fn initialized(&self) -> bool {
221 false
222 }
223
224 fn handle(&self, message: Message) -> Option<Message> {
225 let span = trace_span!("Handling request", "{:#?}", message);
226 let _entered = span.enter();
227 if message.is_exit_notification() {
228 return None;
229 }
230 if !self.initialized() && !message.is_initialize_request() {
231 debug!("Skipping message {:?} before initialization", message);
232 return None;
233 }
234 match message {
235 Message::Request(Request { id, method, params }) => Some(answer(self, id, &method, params)),
236 Message::Notification(Notification { method, params }) => {
237 receive(self, &method, params);
238 None
239 }
240 Message::Response(_) => None,
241 }
242 }
243
244 fn apply_workspace_edit(
247 &self,
248 _req: lsp_types::ApplyWorkspaceEditParams,
249 ) -> Result<lsp_types::ApplyWorkspaceEditResponse, ResponseError> {
250 Err(ErrorCode::MethodNotFound.into())
251 }
252
253 fn call_hierarchy_incoming_calls(
254 &self,
255 _req: lsp_types::CallHierarchyIncomingCallsParams,
256 ) -> Result<Option<Vec<lsp_types::CallHierarchyIncomingCall>>, ResponseError> {
257 Err(ErrorCode::MethodNotFound.into())
258 }
259
260 fn call_hierarchy_outgoing_calls(
261 &self,
262 _req: lsp_types::CallHierarchyOutgoingCallsParams,
263 ) -> Result<Option<Vec<lsp_types::CallHierarchyOutgoingCall>>, ResponseError> {
264 Err(ErrorCode::MethodNotFound.into())
265 }
266
267 fn call_hierarchy_prepare(
268 &self,
269 _req: lsp_types::CallHierarchyPrepareParams,
270 ) -> Result<Option<Vec<lsp_types::CallHierarchyItem>>, ResponseError> {
271 Err(ErrorCode::MethodNotFound.into())
272 }
273
274 fn code_action_request(
275 &self,
276 _req: lsp_types::CodeActionParams,
277 ) -> Result<Option<lsp_types::CodeActionResponse>, ResponseError> {
278 Err(ErrorCode::MethodNotFound.into())
279 }
280
281 fn code_action_resolve_request(&self, _req: lsp_types::CodeAction) -> Result<lsp_types::CodeAction, ResponseError> {
282 Err(ErrorCode::MethodNotFound.into())
283 }
284
285 fn code_lens_refresh(&self) -> Result<(), ResponseError> {
286 Err(ErrorCode::MethodNotFound.into())
287 }
288
289 fn code_lens_request(
290 &self,
291 _req: lsp_types::CodeLensParams,
292 ) -> Result<Option<Vec<lsp_types::CodeLens>>, ResponseError> {
293 Err(ErrorCode::MethodNotFound.into())
294 }
295
296 fn code_lens_resolve(&self, _req: lsp_types::CodeLens) -> Result<lsp_types::CodeLens, ResponseError> {
297 Err(ErrorCode::MethodNotFound.into())
298 }
299
300 fn color_presentation_request(
301 &self,
302 _req: lsp_types::ColorPresentationParams,
303 ) -> Result<Vec<lsp_types::ColorPresentation>, ResponseError> {
304 Err(ErrorCode::MethodNotFound.into())
305 }
306
307 fn completion(
308 &self,
309 _req: lsp_types::CompletionParams,
310 ) -> Result<Option<lsp_types::CompletionResponse>, ResponseError> {
311 Err(ErrorCode::MethodNotFound.into())
312 }
313
314 fn document_color(
315 &self,
316 _req: lsp_types::DocumentColorParams,
317 ) -> Result<Vec<lsp_types::ColorInformation>, ResponseError> {
318 Err(ErrorCode::MethodNotFound.into())
319 }
320
321 fn document_diagnostic_request(
322 &self,
323 _req: lsp_types::DocumentDiagnosticParams,
324 ) -> Result<lsp_types::DocumentDiagnosticReportResult, ResponseError> {
325 Err(ErrorCode::MethodNotFound.into())
326 }
327
328 fn document_highlight_request(
329 &self,
330 _req: lsp_types::DocumentHighlightParams,
331 ) -> Result<Option<Vec<lsp_types::DocumentHighlight>>, ResponseError> {
332 Err(ErrorCode::MethodNotFound.into())
333 }
334
335 fn document_link_request(
336 &self,
337 _req: lsp_types::DocumentLinkParams,
338 ) -> Result<Option<Vec<lsp_types::DocumentLink>>, ResponseError> {
339 Err(ErrorCode::MethodNotFound.into())
340 }
341
342 fn document_link_resolve(&self, _req: lsp_types::DocumentLink) -> Result<lsp_types::DocumentLink, ResponseError> {
343 Err(ErrorCode::MethodNotFound.into())
344 }
345
346 fn document_symbol_request(
347 &self,
348 _req: lsp_types::DocumentSymbolParams,
349 ) -> Result<Option<lsp_types::DocumentSymbolResponse>, ResponseError> {
350 Err(ErrorCode::MethodNotFound.into())
351 }
352
353 fn execute_command(&self, _req: lsp_types::ExecuteCommandParams) -> Result<Option<Value>, ResponseError> {
354 Err(ErrorCode::MethodNotFound.into())
355 }
356
357 fn folding_range_request(
358 &self,
359 _req: lsp_types::FoldingRangeParams,
360 ) -> Result<Option<Vec<lsp_types::FoldingRange>>, ResponseError> {
361 Err(ErrorCode::MethodNotFound.into())
362 }
363
364 fn formatting(
365 &self,
366 _req: lsp_types::DocumentFormattingParams,
367 ) -> Result<Option<Vec<lsp_types::TextEdit>>, ResponseError> {
368 Err(ErrorCode::MethodNotFound.into())
369 }
370
371 fn goto_declaration(
372 &self,
373 _req: lsp_types::GotoDefinitionParams,
374 ) -> Result<Option<lsp_types::GotoDefinitionResponse>, ResponseError> {
375 Err(ErrorCode::MethodNotFound.into())
376 }
377
378 fn goto_definition(
379 &self,
380 _req: lsp_types::GotoDefinitionParams,
381 ) -> Result<Option<lsp_types::GotoDefinitionResponse>, ResponseError> {
382 Err(ErrorCode::MethodNotFound.into())
383 }
384
385 fn goto_implementation(
386 &self,
387 _req: lsp_types::GotoDefinitionParams,
388 ) -> Result<Option<lsp_types::GotoDefinitionResponse>, ResponseError> {
389 Err(ErrorCode::MethodNotFound.into())
390 }
391
392 fn goto_type_definition(
393 &self,
394 _req: lsp_types::GotoDefinitionParams,
395 ) -> Result<Option<lsp_types::GotoDefinitionResponse>, ResponseError> {
396 Err(ErrorCode::MethodNotFound.into())
397 }
398
399 fn hover_request(&self, _req: lsp_types::HoverParams) -> Result<Option<lsp_types::Hover>, ResponseError> {
400 Err(ErrorCode::MethodNotFound.into())
401 }
402
403 fn initialize(&self, _req: lsp_types::InitializeParams) -> Result<lsp_types::InitializeResult, ResponseError> {
404 Err(ErrorCode::MethodNotFound.into())
405 }
406
407 fn inlay_hint_refresh_request(&self) -> Result<(), ResponseError> {
408 Err(ErrorCode::MethodNotFound.into())
409 }
410
411 fn inlay_hint_request(
412 &self,
413 _req: lsp_types::InlayHintParams,
414 ) -> Result<Option<Vec<lsp_types::InlayHint>>, ResponseError> {
415 Err(ErrorCode::MethodNotFound.into())
416 }
417
418 fn inlay_hint_resolve_request(&self, _req: lsp_types::InlayHint) -> Result<lsp_types::InlayHint, ResponseError> {
419 Err(ErrorCode::MethodNotFound.into())
420 }
421
422 fn inline_value_refresh_request(&self) -> Result<(), ResponseError> {
423 Err(ErrorCode::MethodNotFound.into())
424 }
425
426 fn inline_value_request(
427 &self,
428 _req: lsp_types::InlineValueParams,
429 ) -> Result<Option<Vec<lsp_types::InlineValue>>, ResponseError> {
430 Err(ErrorCode::MethodNotFound.into())
431 }
432
433 fn linked_editing_range(
434 &self,
435 _req: lsp_types::LinkedEditingRangeParams,
436 ) -> Result<Option<lsp_types::LinkedEditingRanges>, ResponseError> {
437 Err(ErrorCode::MethodNotFound.into())
438 }
439
440 fn moniker_request(
441 &self,
442 _req: lsp_types::MonikerParams,
443 ) -> Result<Option<Vec<lsp_types::Moniker>>, ResponseError> {
444 Err(ErrorCode::MethodNotFound.into())
445 }
446
447 fn on_type_formatting(
448 &self,
449 _req: lsp_types::DocumentOnTypeFormattingParams,
450 ) -> Result<Option<Vec<lsp_types::TextEdit>>, ResponseError> {
451 Err(ErrorCode::MethodNotFound.into())
452 }
453
454 fn prepare_rename_request(
455 &self,
456 _req: lsp_types::TextDocumentPositionParams,
457 ) -> Result<Option<lsp_types::PrepareRenameResponse>, ResponseError> {
458 Err(ErrorCode::MethodNotFound.into())
459 }
460
461 fn range_formatting(
462 &self,
463 _req: lsp_types::DocumentRangeFormattingParams,
464 ) -> Result<Option<Vec<lsp_types::TextEdit>>, ResponseError> {
465 Err(ErrorCode::MethodNotFound.into())
466 }
467
468 fn references(&self, _req: lsp_types::ReferenceParams) -> Result<Option<Vec<lsp_types::Location>>, ResponseError> {
469 Err(ErrorCode::MethodNotFound.into())
470 }
471
472 fn register_capability(&self, _req: lsp_types::RegistrationParams) -> Result<(), ResponseError> {
473 Err(ErrorCode::MethodNotFound.into())
474 }
475
476 fn rename(&self, _req: lsp_types::RenameParams) -> Result<Option<lsp_types::WorkspaceEdit>, ResponseError> {
477 Err(ErrorCode::MethodNotFound.into())
478 }
479
480 fn resolve_completion_item(
481 &self,
482 _req: lsp_types::CompletionItem,
483 ) -> Result<lsp_types::CompletionItem, ResponseError> {
484 Err(ErrorCode::MethodNotFound.into())
485 }
486
487 fn selection_range_request(
488 &self,
489 _req: lsp_types::SelectionRangeParams,
490 ) -> Result<Option<Vec<lsp_types::SelectionRange>>, ResponseError> {
491 Err(ErrorCode::MethodNotFound.into())
492 }
493
494 fn semantic_tokens_full_delta_request(
495 &self,
496 _req: lsp_types::SemanticTokensDeltaParams,
497 ) -> Result<Option<lsp_types::SemanticTokensFullDeltaResult>, ResponseError> {
498 Err(ErrorCode::MethodNotFound.into())
499 }
500
501 fn semantic_tokens_full_request(
502 &self,
503 _req: lsp_types::SemanticTokensParams,
504 ) -> Result<Option<lsp_types::SemanticTokensResult>, ResponseError> {
505 Err(ErrorCode::MethodNotFound.into())
506 }
507
508 fn semantic_tokens_range_request(
509 &self,
510 _req: lsp_types::SemanticTokensRangeParams,
511 ) -> Result<Option<lsp_types::SemanticTokensRangeResult>, ResponseError> {
512 Err(ErrorCode::MethodNotFound.into())
513 }
514
515 fn semantic_tokens_refresh(&self) -> Result<(), ResponseError> {
516 Err(ErrorCode::MethodNotFound.into())
517 }
518
519 fn show_document(
520 &self,
521 _req: lsp_types::ShowDocumentParams,
522 ) -> Result<lsp_types::ShowDocumentResult, ResponseError> {
523 Err(ErrorCode::MethodNotFound.into())
524 }
525
526 fn show_message_request(
527 &self,
528 _req: lsp_types::ShowMessageRequestParams,
529 ) -> Result<Option<lsp_types::MessageActionItem>, ResponseError> {
530 Err(ErrorCode::MethodNotFound.into())
531 }
532
533 fn shutdown(&self) -> Result<(), ResponseError> {
534 Ok(())
535 }
536
537 fn signature_help_request(
538 &self,
539 _req: lsp_types::SignatureHelpParams,
540 ) -> Result<Option<lsp_types::SignatureHelp>, ResponseError> {
541 Err(ErrorCode::MethodNotFound.into())
542 }
543
544 fn type_hierarchy_prepare(
545 &self,
546 _req: lsp_types::TypeHierarchyPrepareParams,
547 ) -> Result<Option<Vec<lsp_types::TypeHierarchyItem>>, ResponseError> {
548 Err(ErrorCode::MethodNotFound.into())
549 }
550
551 fn type_hierarchy_subtypes(
552 &self,
553 _req: lsp_types::TypeHierarchySubtypesParams,
554 ) -> Result<Option<Vec<lsp_types::TypeHierarchyItem>>, ResponseError> {
555 Err(ErrorCode::MethodNotFound.into())
556 }
557
558 fn type_hierarchy_supertypes(
559 &self,
560 _req: lsp_types::TypeHierarchySupertypesParams,
561 ) -> Result<Option<Vec<lsp_types::TypeHierarchyItem>>, ResponseError> {
562 Err(ErrorCode::MethodNotFound.into())
563 }
564
565 fn unregister_capability(&self, _req: lsp_types::UnregistrationParams) -> Result<(), ResponseError> {
566 Err(ErrorCode::MethodNotFound.into())
567 }
568
569 fn will_create_files(
570 &self,
571 _req: lsp_types::CreateFilesParams,
572 ) -> Result<Option<lsp_types::WorkspaceEdit>, ResponseError> {
573 Err(ErrorCode::MethodNotFound.into())
574 }
575
576 fn will_delete_files(
577 &self,
578 _req: lsp_types::DeleteFilesParams,
579 ) -> Result<Option<lsp_types::WorkspaceEdit>, ResponseError> {
580 Err(ErrorCode::MethodNotFound.into())
581 }
582
583 fn will_rename_files(
584 &self,
585 _req: lsp_types::RenameFilesParams,
586 ) -> Result<Option<lsp_types::WorkspaceEdit>, ResponseError> {
587 Err(ErrorCode::MethodNotFound.into())
588 }
589
590 fn will_save_wait_until(
591 &self,
592 _req: lsp_types::WillSaveTextDocumentParams,
593 ) -> Result<Option<Vec<lsp_types::TextEdit>>, ResponseError> {
594 Err(ErrorCode::MethodNotFound.into())
595 }
596
597 fn work_done_progress_create(&self, _req: lsp_types::WorkDoneProgressCreateParams) -> Result<(), ResponseError> {
598 Err(ErrorCode::MethodNotFound.into())
599 }
600
601 fn workspace_configuration(&self, _req: lsp_types::ConfigurationParams) -> Result<Vec<Value>, ResponseError> {
602 Err(ErrorCode::MethodNotFound.into())
603 }
604
605 fn workspace_diagnostic_refresh(&self) -> Result<(), ResponseError> {
606 Err(ErrorCode::MethodNotFound.into())
607 }
608
609 fn workspace_diagnostic_request(
610 &self,
611 _req: lsp_types::WorkspaceDiagnosticParams,
612 ) -> Result<lsp_types::WorkspaceDiagnosticReportResult, ResponseError> {
613 Err(ErrorCode::MethodNotFound.into())
614 }
615
616 fn workspace_folders_request(&self) -> Result<Option<Vec<lsp_types::WorkspaceFolder>>, ResponseError> {
617 Err(ErrorCode::MethodNotFound.into())
618 }
619
620 fn workspace_symbol_request(
621 &self,
622 _req: lsp_types::WorkspaceSymbolParams,
623 ) -> Result<Option<lsp_types::WorkspaceSymbolResponse>, ResponseError> {
624 Err(ErrorCode::MethodNotFound.into())
625 }
626
627 fn workspace_symbol_resolve(
628 &self,
629 _req: lsp_types::WorkspaceSymbol,
630 ) -> Result<lsp_types::WorkspaceSymbol, ResponseError> {
631 Err(ErrorCode::MethodNotFound.into())
632 }
633
634 fn on_cancel(&self, _req: lsp_types::CancelParams) {}
637 fn on_did_change_configuration(&self, _req: lsp_types::DidChangeConfigurationParams) {}
638 fn on_did_change_notebook_document(&self, _req: lsp_types::DidChangeNotebookDocumentParams) {}
639 fn on_did_change_text_document(&self, _req: lsp_types::DidChangeTextDocumentParams) {}
640 fn on_did_change_watched_files(&self, _req: lsp_types::DidChangeWatchedFilesParams) {}
641 fn on_did_change_workspace_folders(&self, _req: lsp_types::DidChangeWorkspaceFoldersParams) {}
642 fn on_did_close_notebook_document(&self, _req: lsp_types::DidCloseNotebookDocumentParams) {}
643 fn on_did_close_text_document(&self, _req: lsp_types::DidCloseTextDocumentParams) {}
644 fn on_did_create_files(&self, _req: lsp_types::CreateFilesParams) {}
645 fn on_did_delete_files(&self, _req: lsp_types::DeleteFilesParams) {}
646 fn on_did_open_notebook_document(&self, _req: lsp_types::DidOpenNotebookDocumentParams) {}
647 fn on_did_open_text_document(&self, _req: lsp_types::DidOpenTextDocumentParams) {}
648 fn on_did_rename_files(&self, _req: lsp_types::RenameFilesParams) {}
649 fn on_did_save_notebook_document(&self, _req: lsp_types::DidSaveNotebookDocumentParams) {}
650 fn on_did_save_text_document(&self, _req: lsp_types::DidSaveTextDocumentParams) {}
651 fn on_initialized(&self, _req: lsp_types::InitializedParams) {}
652 fn on_log_message(&self, _req: lsp_types::LogMessageParams) {}
653 fn on_log_trace(&self, _req: lsp_types::LogTraceParams) {}
654 fn on_progress(&self, _req: lsp_types::ProgressParams) {}
655 fn on_publish_diagnostics(&self, _req: lsp_types::PublishDiagnosticsParams) {}
656 fn on_set_trace(&self, _req: lsp_types::SetTraceParams) {}
657 fn on_show_message(&self, _req: lsp_types::ShowMessageParams) {}
658 fn on_telemetry_event(&self, _req: lsp_types::OneOf<lsp_types::LSPObject, lsp_types::LSPArray>) {}
659 fn on_will_save_text_document(&self, _req: lsp_types::WillSaveTextDocumentParams) {}
660 fn on_work_done_progress_cance(&self, _req: lsp_types::WorkDoneProgressCancelParams) {}
661}