csskit_lsp/server/
handler.rs

1use crate::jsonrpc::{ErrorCode, Id, Message, Response};
2use lsp_types::{notification::*, request::*};
3use serde_json::Value;
4use tracing::{debug, trace_span};
5
6pub trait Handler: Sized + Send + Sync + 'static {
7	fn invalid_params(&self, id: Id) -> Message {
8		Message::Response(Response::Err(id, ErrorCode::InvalidParams, "InvalidParams".into(), Value::Null))
9	}
10
11	fn method_not_found(&self, id: Id) -> Message {
12		Message::Response(Response::Err(id, ErrorCode::MethodNotFound, "MethodNotFound".into(), Value::Null))
13	}
14
15	fn internal_error(&self, id: Id) -> Message {
16		Message::Response(Response::Err(id, ErrorCode::InternalError, "InternalError".into(), Value::Null))
17	}
18
19	fn initialized(&self) -> bool {
20		false
21	}
22
23	fn handle(&self, message: Message) -> Option<Message> {
24		let span = trace_span!("Handling request", "{:#?}", message);
25		let _ = span.enter();
26		let id = message.id().unwrap_or_default();
27		if message.is_exit_notification() {
28			return None;
29		}
30		let initialize_request = message.is_initialize_request();
31		if !self.initialized() && !initialize_request {
32			debug!("Skipping message {:?} before initialization", message);
33			return None;
34		}
35		match message.method().unwrap_or_default() {
36			ApplyWorkspaceEdit::METHOD => {
37				Some(message.from_value::<lsp_types::ApplyWorkspaceEditParams>().map_or_else(
38					|_| self.invalid_params(id.clone()),
39					|p| Message::from_result(id.clone(), self.apply_workspace_edit(p)),
40				))
41			}
42			CallHierarchyIncomingCalls::METHOD => {
43				Some(message.from_value::<lsp_types::CallHierarchyIncomingCallsParams>().map_or_else(
44					|_| self.invalid_params(id.clone()),
45					|p| Message::from_result(id.clone(), self.call_hierarchy_incoming_calls(p)),
46				))
47			}
48			CallHierarchyOutgoingCalls::METHOD => {
49				Some(message.from_value::<lsp_types::CallHierarchyOutgoingCallsParams>().map_or_else(
50					|_| self.invalid_params(id.clone()),
51					|p| Message::from_result(id.clone(), self.call_hierarchy_outgoing_calls(p)),
52				))
53			}
54			CallHierarchyPrepare::METHOD => {
55				Some(message.from_value::<lsp_types::CallHierarchyPrepareParams>().map_or_else(
56					|_| self.invalid_params(id.clone()),
57					|p| Message::from_result(id.clone(), self.call_hierarchy_prepare(p)),
58				))
59			}
60			CodeActionRequest::METHOD => Some(message.from_value::<lsp_types::CodeActionParams>().map_or_else(
61				|_| self.invalid_params(id.clone()),
62				|p| Message::from_result(id.clone(), self.code_action_request(p)),
63			)),
64			CodeActionResolveRequest::METHOD => Some(message.from_value::<lsp_types::CodeAction>().map_or_else(
65				|_| self.invalid_params(id.clone()),
66				|p| Message::from_result(id.clone(), self.code_action_resolve_request(p)),
67			)),
68			CodeLensRefresh::METHOD => Some(Message::from_result(id.clone(), self.code_lens_refresh())),
69			CodeLensRequest::METHOD => Some(message.from_value::<lsp_types::CodeLensParams>().map_or_else(
70				|_| self.invalid_params(id.clone()),
71				|p| Message::from_result(id.clone(), self.code_lens_request(p)),
72			)),
73			CodeLensResolve::METHOD => Some(message.from_value::<lsp_types::CodeLens>().map_or_else(
74				|_| self.invalid_params(id.clone()),
75				|p| Message::from_result(id.clone(), self.code_lens_resolve(p)),
76			)),
77			ColorPresentationRequest::METHOD => {
78				Some(message.from_value::<lsp_types::ColorPresentationParams>().map_or_else(
79					|_| self.invalid_params(id.clone()),
80					|p| Message::from_result(id.clone(), self.color_presentation_request(p)),
81				))
82			}
83			Completion::METHOD => Some(message.from_value::<lsp_types::CompletionParams>().map_or_else(
84				|_| self.invalid_params(id.clone()),
85				|p| Message::from_result(id.clone(), self.completion(p)),
86			)),
87			DocumentColor::METHOD => Some(message.from_value::<lsp_types::DocumentColorParams>().map_or_else(
88				|_| self.invalid_params(id.clone()),
89				|p| Message::from_result(id.clone(), self.document_color(p)),
90			)),
91			DocumentDiagnosticRequest::METHOD => {
92				Some(message.from_value::<lsp_types::DocumentDiagnosticParams>().map_or_else(
93					|_| self.invalid_params(id.clone()),
94					|p| Message::from_result(id.clone(), self.document_diagnostic_request(p)),
95				))
96			}
97			DocumentHighlightRequest::METHOD => {
98				Some(message.from_value::<lsp_types::DocumentHighlightParams>().map_or_else(
99					|_| self.invalid_params(id.clone()),
100					|p| Message::from_result(id.clone(), self.document_highlight_request(p)),
101				))
102			}
103			DocumentLinkRequest::METHOD => Some(message.from_value::<lsp_types::DocumentLinkParams>().map_or_else(
104				|_| self.invalid_params(id.clone()),
105				|p| Message::from_result(id.clone(), self.document_link_request(p)),
106			)),
107			DocumentLinkResolve::METHOD => Some(message.from_value::<lsp_types::DocumentLink>().map_or_else(
108				|_| self.invalid_params(id.clone()),
109				|p| Message::from_result(id.clone(), self.document_link_resolve(p)),
110			)),
111			DocumentSymbolRequest::METHOD => Some(message.from_value::<lsp_types::DocumentSymbolParams>().map_or_else(
112				|_| self.invalid_params(id.clone()),
113				|p| Message::from_result(id.clone(), self.document_symbol_request(p)),
114			)),
115			ExecuteCommand::METHOD => Some(message.from_value::<lsp_types::ExecuteCommandParams>().map_or_else(
116				|_| self.invalid_params(id.clone()),
117				|p| Message::from_result(id.clone(), self.execute_command(p)),
118			)),
119			FoldingRangeRequest::METHOD => Some(message.from_value::<lsp_types::FoldingRangeParams>().map_or_else(
120				|_| self.invalid_params(id.clone()),
121				|p| Message::from_result(id.clone(), self.folding_range_request(p)),
122			)),
123			Formatting::METHOD => Some(message.from_value::<lsp_types::DocumentFormattingParams>().map_or_else(
124				|_| self.invalid_params(id.clone()),
125				|p| Message::from_result(id.clone(), self.formatting(p)),
126			)),
127			GotoDeclaration::METHOD => Some(message.from_value::<lsp_types::GotoDefinitionParams>().map_or_else(
128				|_| self.invalid_params(id.clone()),
129				|p| Message::from_result(id.clone(), self.goto_declaration(p)),
130			)),
131			GotoDefinition::METHOD => Some(message.from_value::<lsp_types::GotoDefinitionParams>().map_or_else(
132				|_| self.invalid_params(id.clone()),
133				|p| Message::from_result(id.clone(), self.goto_definition(p)),
134			)),
135			GotoImplementation::METHOD => Some(message.from_value::<lsp_types::GotoDefinitionParams>().map_or_else(
136				|_| self.invalid_params(id.clone()),
137				|p| Message::from_result(id.clone(), self.goto_implementation(p)),
138			)),
139			GotoTypeDefinition::METHOD => Some(message.from_value::<lsp_types::GotoDefinitionParams>().map_or_else(
140				|_| self.invalid_params(id.clone()),
141				|p| Message::from_result(id.clone(), self.goto_type_definition(p)),
142			)),
143			HoverRequest::METHOD => Some(message.from_value::<lsp_types::HoverParams>().map_or_else(
144				|_| self.invalid_params(id.clone()),
145				|p| Message::from_result(id.clone(), self.hover_request(p)),
146			)),
147			Initialize::METHOD => Some(message.from_value::<lsp_types::InitializeParams>().map_or_else(
148				|_| self.invalid_params(id.clone()),
149				|p| Message::from_result(id.clone(), self.initialize(p)),
150			)),
151			InlayHintRefreshRequest::METHOD => {
152				Some(Message::from_result(id.clone(), self.inlay_hint_refresh_request()))
153			}
154			InlayHintRequest::METHOD => Some(message.from_value::<lsp_types::InlayHintParams>().map_or_else(
155				|_| self.invalid_params(id.clone()),
156				|p| Message::from_result(id.clone(), self.inlay_hint_request(p)),
157			)),
158			InlayHintResolveRequest::METHOD => Some(message.from_value::<lsp_types::InlayHint>().map_or_else(
159				|_| self.invalid_params(id.clone()),
160				|p| Message::from_result(id.clone(), self.inlay_hint_resolve_request(p)),
161			)),
162			InlineValueRefreshRequest::METHOD => {
163				Some(Message::from_result(id.clone(), self.inline_value_refresh_request()))
164			}
165			InlineValueRequest::METHOD => Some(message.from_value::<lsp_types::InlineValueParams>().map_or_else(
166				|_| self.invalid_params(id.clone()),
167				|p| Message::from_result(id.clone(), self.inline_value_request(p)),
168			)),
169			LinkedEditingRange::METHOD => {
170				Some(message.from_value::<lsp_types::LinkedEditingRangeParams>().map_or_else(
171					|_| self.invalid_params(id.clone()),
172					|p| Message::from_result(id.clone(), self.linked_editing_range(p)),
173				))
174			}
175			MonikerRequest::METHOD => Some(message.from_value::<lsp_types::MonikerParams>().map_or_else(
176				|_| self.invalid_params(id.clone()),
177				|p| Message::from_result(id.clone(), self.moniker_request(p)),
178			)),
179			OnTypeFormatting::METHOD => {
180				Some(message.from_value::<lsp_types::DocumentOnTypeFormattingParams>().map_or_else(
181					|_| self.invalid_params(id.clone()),
182					|p| Message::from_result(id.clone(), self.on_type_formatting(p)),
183				))
184			}
185			PrepareRenameRequest::METHOD => {
186				Some(message.from_value::<lsp_types::TextDocumentPositionParams>().map_or_else(
187					|_| self.invalid_params(id.clone()),
188					|p| Message::from_result(id.clone(), self.prepare_rename_request(p)),
189				))
190			}
191			RangeFormatting::METHOD => {
192				Some(message.from_value::<lsp_types::DocumentRangeFormattingParams>().map_or_else(
193					|_| self.invalid_params(id.clone()),
194					|p| Message::from_result(id.clone(), self.range_formatting(p)),
195				))
196			}
197			References::METHOD => Some(message.from_value::<lsp_types::ReferenceParams>().map_or_else(
198				|_| self.invalid_params(id.clone()),
199				|p| Message::from_result(id.clone(), self.references(p)),
200			)),
201			RegisterCapability::METHOD => Some(message.from_value::<lsp_types::RegistrationParams>().map_or_else(
202				|_| self.invalid_params(id.clone()),
203				|p| Message::from_result(id.clone(), self.register_capability(p)),
204			)),
205			Rename::METHOD => Some(message.from_value::<lsp_types::RenameParams>().map_or_else(
206				|_| self.invalid_params(id.clone()),
207				|p| Message::from_result(id.clone(), self.rename(p)),
208			)),
209			ResolveCompletionItem::METHOD => Some(message.from_value::<lsp_types::CompletionItem>().map_or_else(
210				|_| self.invalid_params(id.clone()),
211				|p| Message::from_result(id.clone(), self.resolve_completion_item(p)),
212			)),
213			SelectionRangeRequest::METHOD => Some(message.from_value::<lsp_types::SelectionRangeParams>().map_or_else(
214				|_| self.invalid_params(id.clone()),
215				|p| Message::from_result(id.clone(), self.selection_range_request(p)),
216			)),
217			SemanticTokensFullDeltaRequest::METHOD => {
218				Some(message.from_value::<lsp_types::SemanticTokensDeltaParams>().map_or_else(
219					|_| self.invalid_params(id.clone()),
220					|p| Message::from_result(id.clone(), self.semantic_tokens_full_delta_request(p)),
221				))
222			}
223			SemanticTokensFullRequest::METHOD => {
224				Some(message.from_value::<lsp_types::SemanticTokensParams>().map_or_else(
225					|_| self.invalid_params(id.clone()),
226					|p| Message::from_result(id.clone(), self.semantic_tokens_full_request(p)),
227				))
228			}
229			SemanticTokensRangeRequest::METHOD => {
230				Some(message.from_value::<lsp_types::SemanticTokensRangeParams>().map_or_else(
231					|_| self.invalid_params(id.clone()),
232					|p| Message::from_result(id.clone(), self.semantic_tokens_range_request(p)),
233				))
234			}
235			SemanticTokensRefresh::METHOD => Some(Message::from_result(id.clone(), self.semantic_tokens_refresh())),
236			ShowDocument::METHOD => Some(message.from_value::<lsp_types::ShowDocumentParams>().map_or_else(
237				|_| self.invalid_params(id.clone()),
238				|p| Message::from_result(id.clone(), self.show_document(p)),
239			)),
240			ShowMessageRequest::METHOD => Some(message.from_value::<lsp_types::ShowMessageParams>().map_or_else(
241				|_| self.invalid_params(id.clone()),
242				|p| Message::from_result(id.clone(), self.show_message_request(p)),
243			)),
244			Shutdown::METHOD => Some(Message::from_result(id.clone(), self.shutdown())),
245			SignatureHelpRequest::METHOD => Some(message.from_value::<lsp_types::SignatureHelpParams>().map_or_else(
246				|_| self.invalid_params(id.clone()),
247				|p| Message::from_result(id.clone(), self.signature_help_request(p)),
248			)),
249			TypeHierarchyPrepare::METHOD => {
250				Some(message.from_value::<lsp_types::TypeHierarchyPrepareParams>().map_or_else(
251					|_| self.invalid_params(id.clone()),
252					|p| Message::from_result(id.clone(), self.type_hierarchy_prepare(p)),
253				))
254			}
255			TypeHierarchySubtypes::METHOD => {
256				Some(message.from_value::<lsp_types::TypeHierarchySubtypesParams>().map_or_else(
257					|_| self.invalid_params(id.clone()),
258					|p| Message::from_result(id.clone(), self.type_hierarchy_subtypes(p)),
259				))
260			}
261			TypeHierarchySupertypes::METHOD => {
262				Some(message.from_value::<lsp_types::TypeHierarchySupertypesParams>().map_or_else(
263					|_| self.invalid_params(id.clone()),
264					|p| Message::from_result(id.clone(), self.type_hierarchy_supertypes(p)),
265				))
266			}
267			UnregisterCapability::METHOD => Some(message.from_value::<lsp_types::UnregistrationParams>().map_or_else(
268				|_| self.invalid_params(id.clone()),
269				|p| Message::from_result(id.clone(), self.unregister_capability(p)),
270			)),
271			WillCreateFiles::METHOD => Some(message.from_value::<lsp_types::CreateFilesParams>().map_or_else(
272				|_| self.invalid_params(id.clone()),
273				|p| Message::from_result(id.clone(), self.will_create_files(p)),
274			)),
275			WillDeleteFiles::METHOD => Some(message.from_value::<lsp_types::DeleteFilesParams>().map_or_else(
276				|_| self.invalid_params(id.clone()),
277				|p| Message::from_result(id.clone(), self.will_delete_files(p)),
278			)),
279			WillRenameFiles::METHOD => Some(message.from_value::<lsp_types::RenameFilesParams>().map_or_else(
280				|_| self.invalid_params(id.clone()),
281				|p| Message::from_result(id.clone(), self.will_rename_files(p)),
282			)),
283			WillSaveWaitUntil::METHOD => {
284				Some(message.from_value::<lsp_types::WillSaveTextDocumentParams>().map_or_else(
285					|_| self.invalid_params(id.clone()),
286					|p| Message::from_result(id.clone(), self.will_save_wait_until(p)),
287				))
288			}
289			WorkDoneProgressCreate::METHOD => {
290				Some(message.from_value::<lsp_types::WorkDoneProgressCreateParams>().map_or_else(
291					|_| self.invalid_params(id.clone()),
292					|p| Message::from_result(id.clone(), self.work_done_progress_create(p)),
293				))
294			}
295			WorkspaceConfiguration::METHOD => Some(message.from_value::<lsp_types::ConfigurationParams>().map_or_else(
296				|_| self.invalid_params(id.clone()),
297				|p| Message::from_result(id.clone(), self.workspace_configuration(p)),
298			)),
299			WorkspaceDiagnosticRefresh::METHOD => {
300				Some(Message::from_result(id.clone(), self.workspace_diagnostic_refresh()))
301			}
302			WorkspaceDiagnosticRequest::METHOD => {
303				Some(message.from_value::<lsp_types::WorkspaceDiagnosticParams>().map_or_else(
304					|_| self.invalid_params(id.clone()),
305					|p| Message::from_result(id.clone(), self.workspace_diagnostic_request(p)),
306				))
307			}
308			WorkspaceFoldersRequest::METHOD => Some(Message::from_result(id.clone(), self.workspace_folders_request())),
309			WorkspaceSymbolRequest::METHOD => {
310				Some(message.from_value::<lsp_types::WorkspaceSymbolParams>().map_or_else(
311					|_| self.invalid_params(id.clone()),
312					|p| Message::from_result(id.clone(), self.workspace_symbol_request(p)),
313				))
314			}
315			WorkspaceSymbolResolve::METHOD => Some(message.from_value::<lsp_types::WorkspaceSymbol>().map_or_else(
316				|_| self.invalid_params(id.clone()),
317				|p| Message::from_result(id.clone(), self.workspace_symbol_resolve(p)),
318			)),
319
320			// Notifications
321			Cancel::METHOD => {
322				message.from_value::<lsp_types::CancelParams>().map(|p| self.on_cancel(p)).ok();
323				None
324			}
325			DidChangeConfiguration::METHOD => {
326				message
327					.from_value::<lsp_types::DidChangeConfigurationParams>()
328					.map(|p| self.on_did_change_configuration(p))
329					.ok();
330				None
331			}
332			DidChangeNotebookDocument::METHOD => {
333				message
334					.from_value::<lsp_types::DidChangeNotebookDocumentParams>()
335					.map(|p| self.on_did_change_notebook_document(p))
336					.ok();
337				None
338			}
339			DidChangeTextDocument::METHOD => {
340				message
341					.from_value::<lsp_types::DidChangeTextDocumentParams>()
342					.map(|p| self.on_did_change_text_document(p))
343					.ok();
344				None
345			}
346			DidChangeWatchedFiles::METHOD => {
347				message
348					.from_value::<lsp_types::DidChangeWatchedFilesParams>()
349					.map(|p| self.on_did_change_watched_files(p))
350					.ok();
351				None
352			}
353			DidChangeWorkspaceFolders::METHOD => {
354				message
355					.from_value::<lsp_types::DidChangeWorkspaceFoldersParams>()
356					.map(|p| self.on_did_change_workspace_folders(p))
357					.ok();
358				None
359			}
360			DidCloseNotebookDocument::METHOD => {
361				message
362					.from_value::<lsp_types::DidCloseNotebookDocumentParams>()
363					.map(|p| self.on_did_close_notebook_document(p))
364					.ok();
365				None
366			}
367			DidCloseTextDocument::METHOD => {
368				message
369					.from_value::<lsp_types::DidCloseTextDocumentParams>()
370					.map(|p| self.on_did_close_text_document(p))
371					.ok();
372				None
373			}
374			DidCreateFiles::METHOD => {
375				message.from_value::<lsp_types::CreateFilesParams>().map(|p| self.on_did_create_files(p)).ok();
376				None
377			}
378			DidDeleteFiles::METHOD => {
379				message.from_value::<lsp_types::DeleteFilesParams>().map(|p| self.on_did_delete_files(p)).ok();
380				None
381			}
382			DidOpenNotebookDocument::METHOD => {
383				message
384					.from_value::<lsp_types::DidOpenNotebookDocumentParams>()
385					.map(|p| self.on_did_open_notebook_document(p))
386					.ok();
387				None
388			}
389			DidOpenTextDocument::METHOD => {
390				message
391					.from_value::<lsp_types::DidOpenTextDocumentParams>()
392					.map(|p| self.on_did_open_text_document(p))
393					.ok();
394				None
395			}
396			DidRenameFiles::METHOD => {
397				message.from_value::<lsp_types::RenameFilesParams>().map(|p| self.on_did_rename_files(p)).ok();
398				None
399			}
400			DidSaveNotebookDocument::METHOD => {
401				message
402					.from_value::<lsp_types::DidSaveNotebookDocumentParams>()
403					.map(|p| self.on_did_save_notebook_document(p))
404					.ok();
405				None
406			}
407			DidSaveTextDocument::METHOD => {
408				message
409					.from_value::<lsp_types::DidSaveTextDocumentParams>()
410					.map(|p| self.on_did_save_text_document(p))
411					.ok();
412				None
413			}
414			Initialized::METHOD => {
415				message.from_value::<lsp_types::InitializedParams>().map(|p| self.on_initialized(p)).ok();
416				None
417			}
418			LogMessage::METHOD => {
419				message.from_value::<lsp_types::LogMessageParams>().map(|p| self.on_log_message(p)).ok();
420				None
421			}
422			LogTrace::METHOD => {
423				message.from_value::<lsp_types::LogTraceParams>().map(|p| self.on_log_trace(p)).ok();
424				None
425			}
426			Progress::METHOD => {
427				message.from_value::<lsp_types::ProgressParams>().map(|p| self.on_progress(p)).ok();
428				None
429			}
430			PublishDiagnostics::METHOD => {
431				message
432					.from_value::<lsp_types::PublishDiagnosticsParams>()
433					.map(|p| self.on_publish_diagnostics(p))
434					.ok();
435				None
436			}
437			SetTrace::METHOD => {
438				message.from_value::<lsp_types::SetTraceParams>().map(|p| self.on_set_trace(p)).ok();
439				None
440			}
441			ShowMessage::METHOD => {
442				message.from_value::<lsp_types::ShowMessageParams>().map(|p| self.on_show_message(p)).ok();
443				None
444			}
445			TelemetryEvent::METHOD => {
446				message
447					.from_value::<lsp_types::OneOf<lsp_types::LSPObject, lsp_types::LSPArray>>()
448					.map(|p| self.on_telemetry_event(p))
449					.ok();
450				None
451			}
452			WillSaveTextDocument::METHOD => {
453				message
454					.from_value::<lsp_types::WillSaveTextDocumentParams>()
455					.map(|p| self.on_will_save_text_document(p))
456					.ok();
457				None
458			}
459			WorkDoneProgressCancel::METHOD => {
460				message
461					.from_value::<lsp_types::WorkDoneProgressCancelParams>()
462					.map(|p| self.on_work_done_progress_cance(p))
463					.ok();
464				None
465			}
466			_ => {
467				if let Message::Request(crate::jsonrpc::Request { id, .. }) = message {
468					Some(self.method_not_found(id.clone()))
469				} else {
470					None
471				}
472			}
473		}
474	}
475
476	// Requests
477
478	fn apply_workspace_edit(
479		&self,
480		_req: lsp_types::ApplyWorkspaceEditParams,
481	) -> Result<lsp_types::ApplyWorkspaceEditResponse, ErrorCode> {
482		Err(ErrorCode::MethodNotFound)
483	}
484
485	fn call_hierarchy_incoming_calls(
486		&self,
487		_req: lsp_types::CallHierarchyIncomingCallsParams,
488	) -> Result<Option<Vec<lsp_types::CallHierarchyIncomingCall>>, ErrorCode> {
489		Err(ErrorCode::MethodNotFound)
490	}
491
492	fn call_hierarchy_outgoing_calls(
493		&self,
494		_req: lsp_types::CallHierarchyOutgoingCallsParams,
495	) -> Result<Option<Vec<lsp_types::CallHierarchyOutgoingCall>>, ErrorCode> {
496		Err(ErrorCode::MethodNotFound)
497	}
498
499	fn call_hierarchy_prepare(
500		&self,
501		_req: lsp_types::CallHierarchyPrepareParams,
502	) -> Result<Option<Vec<lsp_types::CallHierarchyItem>>, ErrorCode> {
503		Err(ErrorCode::MethodNotFound)
504	}
505
506	fn code_action_request(
507		&self,
508		_req: lsp_types::CodeActionParams,
509	) -> Result<Option<lsp_types::CodeActionResponse>, ErrorCode> {
510		Err(ErrorCode::MethodNotFound)
511	}
512
513	fn code_action_resolve_request(&self, _req: lsp_types::CodeAction) -> Result<lsp_types::CodeAction, ErrorCode> {
514		Err(ErrorCode::MethodNotFound)
515	}
516
517	fn code_lens_refresh(&self) -> Result<(), ErrorCode> {
518		Err(ErrorCode::MethodNotFound)
519	}
520
521	fn code_lens_request(
522		&self,
523		_req: lsp_types::CodeLensParams,
524	) -> Result<Option<Vec<lsp_types::CodeLens>>, ErrorCode> {
525		Err(ErrorCode::MethodNotFound)
526	}
527
528	fn code_lens_resolve(&self, _req: lsp_types::CodeLens) -> Result<lsp_types::CodeLens, ErrorCode> {
529		Err(ErrorCode::MethodNotFound)
530	}
531
532	fn color_presentation_request(
533		&self,
534		_req: lsp_types::ColorPresentationParams,
535	) -> Result<Vec<lsp_types::ColorPresentation>, ErrorCode> {
536		Err(ErrorCode::MethodNotFound)
537	}
538
539	fn completion(
540		&self,
541		_req: lsp_types::CompletionParams,
542	) -> Result<Option<lsp_types::CompletionResponse>, ErrorCode> {
543		Err(ErrorCode::MethodNotFound)
544	}
545
546	fn document_color(
547		&self,
548		_req: lsp_types::DocumentColorParams,
549	) -> Result<Vec<lsp_types::ColorInformation>, ErrorCode> {
550		Err(ErrorCode::MethodNotFound)
551	}
552
553	fn document_diagnostic_request(
554		&self,
555		_req: lsp_types::DocumentDiagnosticParams,
556	) -> Result<lsp_types::DocumentDiagnosticReportResult, ErrorCode> {
557		Err(ErrorCode::MethodNotFound)
558	}
559
560	fn document_highlight_request(
561		&self,
562		_req: lsp_types::DocumentHighlightParams,
563	) -> Result<Option<Vec<lsp_types::DocumentHighlight>>, ErrorCode> {
564		Err(ErrorCode::MethodNotFound)
565	}
566
567	fn document_link_request(
568		&self,
569		_req: lsp_types::DocumentLinkParams,
570	) -> Result<Option<Vec<lsp_types::DocumentLink>>, ErrorCode> {
571		Err(ErrorCode::MethodNotFound)
572	}
573
574	fn document_link_resolve(&self, _req: lsp_types::DocumentLink) -> Result<lsp_types::DocumentLink, ErrorCode> {
575		Err(ErrorCode::MethodNotFound)
576	}
577
578	fn document_symbol_request(
579		&self,
580		_req: lsp_types::DocumentSymbolParams,
581	) -> Result<Option<lsp_types::DocumentSymbolResponse>, ErrorCode> {
582		Err(ErrorCode::MethodNotFound)
583	}
584
585	fn execute_command(&self, _req: lsp_types::ExecuteCommandParams) -> Result<Option<Value>, ErrorCode> {
586		Err(ErrorCode::MethodNotFound)
587	}
588
589	fn folding_range_request(
590		&self,
591		_req: lsp_types::FoldingRangeParams,
592	) -> Result<Option<Vec<lsp_types::FoldingRange>>, ErrorCode> {
593		Err(ErrorCode::MethodNotFound)
594	}
595
596	fn formatting(
597		&self,
598		_req: lsp_types::DocumentFormattingParams,
599	) -> Result<Option<Vec<lsp_types::TextEdit>>, ErrorCode> {
600		Err(ErrorCode::MethodNotFound)
601	}
602
603	fn goto_declaration(
604		&self,
605		_req: lsp_types::GotoDefinitionParams,
606	) -> Result<lsp_types::GotoDefinitionResponse, ErrorCode> {
607		Err(ErrorCode::MethodNotFound)
608	}
609
610	fn goto_definition(
611		&self,
612		_req: lsp_types::GotoDefinitionParams,
613	) -> Result<lsp_types::GotoDefinitionResponse, ErrorCode> {
614		Err(ErrorCode::MethodNotFound)
615	}
616
617	fn goto_implementation(
618		&self,
619		_req: lsp_types::GotoDefinitionParams,
620	) -> Result<lsp_types::GotoDefinitionResponse, ErrorCode> {
621		Err(ErrorCode::MethodNotFound)
622	}
623
624	fn goto_type_definition(
625		&self,
626		_req: lsp_types::GotoDefinitionParams,
627	) -> Result<lsp_types::GotoDefinitionResponse, ErrorCode> {
628		Err(ErrorCode::MethodNotFound)
629	}
630
631	fn hover_request(&self, _req: lsp_types::HoverParams) -> Result<Option<lsp_types::Hover>, ErrorCode> {
632		Err(ErrorCode::MethodNotFound)
633	}
634
635	fn initialize(&self, _req: lsp_types::InitializeParams) -> Result<lsp_types::InitializeResult, ErrorCode> {
636		Err(ErrorCode::MethodNotFound)
637	}
638
639	fn inlay_hint_refresh_request(&self) -> Result<(), ErrorCode> {
640		Err(ErrorCode::MethodNotFound)
641	}
642
643	fn inlay_hint_request(
644		&self,
645		_req: lsp_types::InlayHintParams,
646	) -> Result<Option<Vec<lsp_types::InlayHint>>, ErrorCode> {
647		Err(ErrorCode::MethodNotFound)
648	}
649
650	fn inlay_hint_resolve_request(&self, _req: lsp_types::InlayHint) -> Result<lsp_types::InlayHint, ErrorCode> {
651		Err(ErrorCode::MethodNotFound)
652	}
653
654	fn inline_value_refresh_request(&self) -> Result<(), ErrorCode> {
655		Err(ErrorCode::MethodNotFound)
656	}
657
658	fn inline_value_request(
659		&self,
660		_req: lsp_types::InlineValueParams,
661	) -> Result<Option<Vec<lsp_types::InlineValue>>, ErrorCode> {
662		Err(ErrorCode::MethodNotFound)
663	}
664
665	fn linked_editing_range(
666		&self,
667		_req: lsp_types::LinkedEditingRangeParams,
668	) -> Result<Option<lsp_types::LinkedEditingRanges>, ErrorCode> {
669		Err(ErrorCode::MethodNotFound)
670	}
671
672	fn moniker_request(&self, _req: lsp_types::MonikerParams) -> Result<Option<Vec<lsp_types::Moniker>>, ErrorCode> {
673		Err(ErrorCode::MethodNotFound)
674	}
675
676	fn on_type_formatting(
677		&self,
678		_req: lsp_types::DocumentOnTypeFormattingParams,
679	) -> Result<Option<Vec<lsp_types::TextEdit>>, ErrorCode> {
680		Err(ErrorCode::MethodNotFound)
681	}
682
683	fn prepare_rename_request(
684		&self,
685		_req: lsp_types::TextDocumentPositionParams,
686	) -> Result<Option<lsp_types::PrepareRenameResponse>, ErrorCode> {
687		Err(ErrorCode::MethodNotFound)
688	}
689
690	fn range_formatting(
691		&self,
692		_req: lsp_types::DocumentRangeFormattingParams,
693	) -> Result<Option<Vec<lsp_types::TextEdit>>, ErrorCode> {
694		Err(ErrorCode::MethodNotFound)
695	}
696
697	fn references(&self, _req: lsp_types::ReferenceParams) -> Result<Option<Vec<lsp_types::Location>>, ErrorCode> {
698		Err(ErrorCode::MethodNotFound)
699	}
700
701	fn register_capability(&self, _req: lsp_types::RegistrationParams) -> Result<(), ErrorCode> {
702		Err(ErrorCode::MethodNotFound)
703	}
704
705	fn rename(&self, _req: lsp_types::RenameParams) -> Result<Option<lsp_types::WorkspaceEdit>, ErrorCode> {
706		Err(ErrorCode::MethodNotFound)
707	}
708
709	fn resolve_completion_item(&self, _req: lsp_types::CompletionItem) -> Result<lsp_types::CompletionItem, ErrorCode> {
710		Err(ErrorCode::MethodNotFound)
711	}
712
713	fn selection_range_request(
714		&self,
715		_req: lsp_types::SelectionRangeParams,
716	) -> Result<Option<Vec<lsp_types::SelectionRange>>, ErrorCode> {
717		Err(ErrorCode::MethodNotFound)
718	}
719
720	fn semantic_tokens_full_delta_request(
721		&self,
722		_req: lsp_types::SemanticTokensDeltaParams,
723	) -> Result<Option<lsp_types::SemanticTokensFullDeltaResult>, ErrorCode> {
724		Err(ErrorCode::MethodNotFound)
725	}
726
727	fn semantic_tokens_full_request(
728		&self,
729		_req: lsp_types::SemanticTokensParams,
730	) -> Result<Option<lsp_types::SemanticTokensResult>, ErrorCode> {
731		Err(ErrorCode::MethodNotFound)
732	}
733
734	fn semantic_tokens_range_request(
735		&self,
736		_req: lsp_types::SemanticTokensRangeParams,
737	) -> Result<Option<lsp_types::SemanticTokensRangeResult>, ErrorCode> {
738		Err(ErrorCode::MethodNotFound)
739	}
740
741	fn semantic_tokens_refresh(&self) -> Result<(), ErrorCode> {
742		Err(ErrorCode::MethodNotFound)
743	}
744
745	fn show_document(&self, _req: lsp_types::ShowDocumentParams) -> Result<lsp_types::ShowDocumentResult, ErrorCode> {
746		Err(ErrorCode::MethodNotFound)
747	}
748
749	fn show_message_request(
750		&self,
751		_req: lsp_types::ShowMessageParams,
752	) -> Result<Option<lsp_types::MessageActionItem>, ErrorCode> {
753		Err(ErrorCode::MethodNotFound)
754	}
755
756	fn shutdown(&self) -> Result<(), ErrorCode> {
757		Err(ErrorCode::MethodNotFound)
758	}
759
760	fn signature_help_request(
761		&self,
762		_req: lsp_types::SignatureHelpParams,
763	) -> Result<Option<lsp_types::SignatureHelp>, ErrorCode> {
764		Err(ErrorCode::MethodNotFound)
765	}
766
767	fn type_hierarchy_prepare(
768		&self,
769		_req: lsp_types::TypeHierarchyPrepareParams,
770	) -> Result<Option<Vec<lsp_types::TypeHierarchyItem>>, ErrorCode> {
771		Err(ErrorCode::MethodNotFound)
772	}
773
774	fn type_hierarchy_subtypes(
775		&self,
776		_req: lsp_types::TypeHierarchySubtypesParams,
777	) -> Result<Option<Vec<lsp_types::TypeHierarchyItem>>, ErrorCode> {
778		Err(ErrorCode::MethodNotFound)
779	}
780
781	fn type_hierarchy_supertypes(
782		&self,
783		_req: lsp_types::TypeHierarchySupertypesParams,
784	) -> Result<Option<Vec<lsp_types::TypeHierarchyItem>>, ErrorCode> {
785		Err(ErrorCode::MethodNotFound)
786	}
787
788	fn unregister_capability(&self, _req: lsp_types::UnregistrationParams) -> Result<(), ErrorCode> {
789		Err(ErrorCode::MethodNotFound)
790	}
791
792	fn will_create_files(
793		&self,
794		_req: lsp_types::CreateFilesParams,
795	) -> Result<Option<lsp_types::WorkspaceEdit>, ErrorCode> {
796		Err(ErrorCode::MethodNotFound)
797	}
798
799	fn will_delete_files(
800		&self,
801		_req: lsp_types::DeleteFilesParams,
802	) -> Result<Option<lsp_types::WorkspaceEdit>, ErrorCode> {
803		Err(ErrorCode::MethodNotFound)
804	}
805
806	fn will_rename_files(
807		&self,
808		_req: lsp_types::RenameFilesParams,
809	) -> Result<Option<lsp_types::WorkspaceEdit>, ErrorCode> {
810		Err(ErrorCode::MethodNotFound)
811	}
812
813	fn will_save_wait_until(
814		&self,
815		_req: lsp_types::WillSaveTextDocumentParams,
816	) -> Result<Option<Vec<lsp_types::TextEdit>>, ErrorCode> {
817		Err(ErrorCode::MethodNotFound)
818	}
819
820	fn work_done_progress_create(&self, _req: lsp_types::WorkDoneProgressCreateParams) -> Result<(), ErrorCode> {
821		Err(ErrorCode::MethodNotFound)
822	}
823
824	fn workspace_configuration(&self, _req: lsp_types::ConfigurationParams) -> Result<Vec<Value>, ErrorCode> {
825		Err(ErrorCode::MethodNotFound)
826	}
827
828	fn workspace_diagnostic_refresh(&self) -> Result<(), ErrorCode> {
829		Err(ErrorCode::MethodNotFound)
830	}
831
832	fn workspace_diagnostic_request(
833		&self,
834		_req: lsp_types::WorkspaceDiagnosticParams,
835	) -> Result<lsp_types::WorkspaceDiagnosticReportResult, ErrorCode> {
836		Err(ErrorCode::MethodNotFound)
837	}
838
839	fn workspace_folders_request(&self) -> Result<Option<Vec<lsp_types::WorkspaceFolder>>, ErrorCode> {
840		Err(ErrorCode::MethodNotFound)
841	}
842
843	fn workspace_symbol_request(
844		&self,
845		_req: lsp_types::WorkspaceSymbolParams,
846	) -> Result<Option<lsp_types::WorkspaceSymbolResponse>, ErrorCode> {
847		Err(ErrorCode::MethodNotFound)
848	}
849
850	fn workspace_symbol_resolve(
851		&self,
852		_req: lsp_types::WorkspaceSymbol,
853	) -> Result<lsp_types::WorkspaceSymbol, ErrorCode> {
854		Err(ErrorCode::MethodNotFound)
855	}
856
857	// Notifications
858
859	fn on_cancel(&self, _req: lsp_types::CancelParams) {}
860	fn on_did_change_configuration(&self, _req: lsp_types::DidChangeConfigurationParams) {}
861	fn on_did_change_notebook_document(&self, _req: lsp_types::DidChangeNotebookDocumentParams) {}
862	fn on_did_change_text_document(&self, _req: lsp_types::DidChangeTextDocumentParams) {}
863	fn on_did_change_watched_files(&self, _req: lsp_types::DidChangeWatchedFilesParams) {}
864	fn on_did_change_workspace_folders(&self, _req: lsp_types::DidChangeWorkspaceFoldersParams) {}
865	fn on_did_close_notebook_document(&self, _req: lsp_types::DidCloseNotebookDocumentParams) {}
866	fn on_did_close_text_document(&self, _req: lsp_types::DidCloseTextDocumentParams) {}
867	fn on_did_create_files(&self, _req: lsp_types::CreateFilesParams) {}
868	fn on_did_delete_files(&self, _req: lsp_types::DeleteFilesParams) {}
869	fn on_did_open_notebook_document(&self, _req: lsp_types::DidOpenNotebookDocumentParams) {}
870	fn on_did_open_text_document(&self, _req: lsp_types::DidOpenTextDocumentParams) {}
871	fn on_did_rename_files(&self, _req: lsp_types::RenameFilesParams) {}
872	fn on_did_save_notebook_document(&self, _req: lsp_types::DidSaveNotebookDocumentParams) {}
873	fn on_did_save_text_document(&self, _req: lsp_types::DidSaveTextDocumentParams) {}
874	fn on_initialized(&self, _req: lsp_types::InitializedParams) {}
875	fn on_log_message(&self, _req: lsp_types::LogMessageParams) {}
876	fn on_log_trace(&self, _req: lsp_types::LogTraceParams) {}
877	fn on_progress(&self, _req: lsp_types::ProgressParams) {}
878	fn on_publish_diagnostics(&self, _req: lsp_types::PublishDiagnosticsParams) {}
879	fn on_set_trace(&self, _req: lsp_types::SetTraceParams) {}
880	fn on_show_message(&self, _req: lsp_types::ShowMessageParams) {}
881	fn on_telemetry_event(&self, _req: lsp_types::OneOf<lsp_types::LSPObject, lsp_types::LSPArray>) {}
882	fn on_will_save_text_document(&self, _req: lsp_types::WillSaveTextDocumentParams) {}
883	fn on_work_done_progress_cance(&self, _req: lsp_types::WorkDoneProgressCancelParams) {}
884}