1pub mod Auth;
10
11pub mod GenericNotification;
12
13pub mod GenericRequest;
14
15pub mod Command;
16
17pub mod Debug;
18
19pub mod Extension;
20
21pub mod FileSystem;
22
23pub mod Initialization;
24
25pub mod Output;
26
27pub mod Provider;
28
29pub mod Save;
30
31pub mod SCM;
32
33pub mod Secret;
34
35pub mod Task;
36
37pub mod Terminal;
38
39pub mod TreeView;
40
41pub mod Window;
42
43pub mod Workspace;
44
45use std::{
46 collections::HashMap,
47 sync::Arc,
48 time::{SystemTime, UNIX_EPOCH},
49};
50
51use async_trait::async_trait;
52use CommonLibrary::{
53 Command::CommandExecutor::CommandExecutor,
54 LanguageFeature::{
55 DTO::{PositionDTO::PositionDTO, ProviderType::ProviderType},
56 LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry,
57 },
58 Secret::SecretProvider::SecretProvider,
59 Terminal::TerminalProvider::TerminalProvider,
60 UserInterface::{
61 DTO::{
62 InputBoxOptionsDTO::InputBoxOptionsDTO,
63 QuickPickItemDTO::QuickPickItemDTO,
64 QuickPickOptionsDTO::QuickPickOptionsDTO,
65 },
66 UserInterfaceProvider::UserInterfaceProvider,
67 },
68};
69use serde_json::json;
70use tokio::sync::RwLock;
71use tonic::{Request, Response, Status};
72use url::Url;
73use ::Vine::Generated::cocoon_service_server::CocoonService;
74use ::Vine::Generated::{
75 AppendOutputRequest,
78 ApplyEditRequest,
79 ApplyEditResponse,
80 Argument,
81 CancelOperationRequest,
82
83 ClearOutputRequest,
84 CloseTerminalRequest,
85 CodeAction,
86
87 CompletionItem,
88 CopyFileRequest,
89 CreateDirectoryRequest,
90 CreateOutputChannelRequest,
91 CreateOutputChannelResponse,
92 CreateStatusBarItemRequest,
93 CreateStatusBarItemResponse,
94 CreateWebviewPanelRequest,
95 CreateWebviewPanelResponse,
96 DebugConfiguration,
97 DeleteFileRequest,
98 DeleteSecretRequest,
99 DisposeOutputRequest,
100 DisposeWebviewPanelRequest,
101 Empty,
103 ExecuteCommandRequest,
104 ExecuteCommandResponse,
105 ExecuteTaskRequest,
106 ExecuteTaskResponse,
107 ExtensionInfo,
108 FindFilesRequest,
110 FindFilesResponse,
111 FindTextInFilesRequest,
112 FindTextInFilesResponse,
113 GenericNotification as GenericNotificationMsg,
114 GenericRequest as GenericRequestMsg,
116 GenericResponse,
117 GetAllExtensionsResponse,
118 GetAuthenticationSessionRequest,
119 GetAuthenticationSessionResponse,
120 GetConfigurationRequest,
121 GetConfigurationResponse,
122 GetExtensionRequest,
123 GetExtensionResponse,
124 GetSecretRequest,
126 GetSecretResponse,
127 GetTreeChildrenRequest,
128 GetTreeChildrenResponse,
129 GitExecRequest,
130 GitExecResponse,
131
132 InitExtensionHostRequest,
134
135 Location,
136 OnDidReceiveMessageRequest,
137
138 OpenDocumentRequest,
139 OpenDocumentResponse,
140 OpenExternalRequest,
141 OpenTerminalRequest,
143 ParticipateInSaveRequest,
145 ParticipateInSaveResponse,
146 Position,
147 PostWebviewMessageRequest,
148 ProvideCallHierarchyRequest,
149 ProvideCallHierarchyResponse,
150 ProvideCodeActionsRequest,
151 ProvideCodeActionsResponse,
152 ProvideCodeLensesRequest,
153 ProvideCodeLensesResponse,
154 ProvideCompletionItemsRequest,
155 ProvideCompletionItemsResponse,
156 ProvideDefinitionRequest,
157 ProvideDefinitionResponse,
158 ProvideDocumentFormattingRequest,
159 ProvideDocumentFormattingResponse,
160 ProvideDocumentHighlightsRequest,
161 ProvideDocumentHighlightsResponse,
162 ProvideDocumentRangeFormattingRequest,
163 ProvideDocumentRangeFormattingResponse,
164 ProvideDocumentSymbolsRequest,
165 ProvideDocumentSymbolsResponse,
166 ProvideFoldingRangesRequest,
167 ProvideFoldingRangesResponse,
168 ProvideHoverRequest,
169 ProvideHoverResponse,
170 ProvideInlayHintsRequest,
171 ProvideInlayHintsResponse,
172 ProvideInlineCompletionRequest,
173 ProvideInlineCompletionResponse,
174 ProvideLinkedEditingRangesRequest,
175 ProvideLinkedEditingRangesResponse,
176 ProvideOnTypeFormattingRequest,
177 ProvideOnTypeFormattingResponse,
178 ProvideReferencesRequest,
179 ProvideReferencesResponse,
180 ProvideRenameEditsRequest,
181 ProvideRenameEditsResponse,
182 ProvideSelectionRangesRequest,
183 ProvideSelectionRangesResponse,
184 ProvideSemanticTokensRequest,
185 ProvideSemanticTokensResponse,
186 ProvideSignatureHelpRequest,
187 ProvideSignatureHelpResponse,
188 ProvideTypeHierarchyRequest,
189 ProvideTypeHierarchyResponse,
190 ProvideWorkspaceSymbolsRequest,
191 ProvideWorkspaceSymbolsResponse,
192 Range,
193 ReadFileRequest,
195 ReadFileResponse,
196 ReaddirRequest,
197 ReaddirResponse,
198 RegisterAuthenticationProviderRequest,
199 RegisterCommandRequest,
201 RegisterDebugAdapterRequest,
203 RegisterOnTypeFormattingProviderRequest,
204 RegisterProviderRequest,
206 RegisterScmProviderRequest,
208 RegisterSemanticTokensProviderRequest,
209 RegisterSignatureHelpProviderRequest,
210 RegisterTaskProviderRequest,
211 RegisterTreeViewProviderRequest,
213 RenameFileRequest,
214 ReportProgressRequest,
215 ResizeTerminalRequest,
216 RpcError,
217 SaveAllRequest,
218 SaveAllResponse,
219 SetStatusBarTextRequest,
220 SetWebviewHtmlRequest,
221 ShowInputBoxRequest,
222 ShowInputBoxResponse,
223 ShowMessageRequest,
224 ShowMessageResponse,
225 ShowOutputRequest,
226 ShowProgressRequest,
227 ShowProgressResponse,
228 ShowQuickPickRequest,
229 ShowQuickPickResponse,
230 ShowTextDocumentRequest,
232 ShowTextDocumentResponse,
233 SourceControlResourceState,
234 StartDebuggingRequest,
235 StartDebuggingResponse,
236
237 StatRequest,
238 StatResponse,
239 StopDebuggingRequest,
240 StoreSecretRequest,
241 TerminalClosedNotification,
242 TerminalDataNotification,
243
244 TerminalInputRequest,
245 TerminalOpenedNotification,
246 TerminalProcessIdNotification,
247 TerminateTaskRequest,
248 TextDocumentSaveReason,
249 TextEdit,
250 TextEditForSave,
251
252 TextMatch,
253 TreeItem,
254
255 UnregisterCommandRequest,
256
257 UpdateConfigurationRequest,
258 UpdateScmGroupRequest,
259 UpdateWorkspaceFoldersRequest,
260
261 Uri,
262 ViewColumn,
263
264 WatchFileRequest,
265
266 WorkspaceFolder,
267 WriteFileRequest,
268
269 on_did_receive_message_request,
270 post_webview_message_request,
271};
272
273use crate::{
274 ApplicationState::DTO::{
275 ProviderRegistrationDTO::ProviderRegistrationDTO,
276 WorkspaceFolderStateDTO::WorkspaceFolderStateDTO,
277 },
278 Environment::MountainEnvironment::MountainEnvironment,
279};
280use crate::dev_log;
282
283#[derive(Clone)]
288pub struct CocoonServiceImpl {
289 environment:Arc<MountainEnvironment>,
291
292 ActiveOperations:Arc<RwLock<HashMap<u64, tokio_util::sync::CancellationToken>>>,
295}
296
297impl CocoonServiceImpl {
298 pub fn new(environment:Arc<MountainEnvironment>) -> Self {
306 dev_log!("cocoon", "[CocoonService] New instance created");
307
308 Self { environment, ActiveOperations:Arc::new(RwLock::new(HashMap::new())) }
309 }
310
311 pub async fn RegisterOperation(&self, request_id:u64) -> tokio_util::sync::CancellationToken {
319 let token = tokio_util::sync::CancellationToken::new();
320
321 self.ActiveOperations.write().await.insert(request_id, token.clone());
322
323 dev_log!("cocoon", "[CocoonService] Registered operation {} for cancellation", request_id);
324
325 token
326 }
327
328 pub async fn UnregisterOperation(&self, request_id:u64) {
333 self.ActiveOperations.write().await.remove(&request_id);
334
335 dev_log!("cocoon", "[CocoonService] Unregistered operation {}", request_id);
336 }
337
338 fn RegisterProvider(&self, handle:u32, provider_type:ProviderType, language_selector:&str, extension_id:&str) {
349 let dto = ProviderRegistrationDTO {
354 Handle:handle,
355
356 ProviderType:provider_type,
357
358 Selector:json!([{ "language": language_selector }]),
359
360 SideCarIdentifier:"cocoon-main".to_string(),
361
362 ExtensionIdentifier:json!(extension_id),
363
364 Options:None,
365 };
366
367 self.environment
368 .ApplicationState
369 .Extension
370 .ProviderRegistration
371 .RegisterProvider(handle, dto);
372
373 dev_log!(
374 "cocoon",
375 "[CocoonService] Provider {:?} registered: handle={}, language={}",
376 provider_type,
377 handle,
378 language_selector
379 );
380 }
381
382 fn UriToPath(uri_opt:Option<&Uri>) -> Option<std::path::PathBuf> {
387 let value = uri_opt?.value.as_str();
388
389 if value.is_empty() {
390 return None;
391 }
392
393 let path_str = if let Some(Stripped) = value.strip_prefix("file://") {
395 Stripped
396 } else if value.starts_with('/') || (value.len() > 1 && value.as_bytes()[1] == b':') {
397 value
399 } else {
400 value
402 };
403
404 Some(std::path::PathBuf::from(path_str))
405 }
406}
407
408#[async_trait]
409
410impl CocoonService for CocoonServiceImpl {
411 type OpenChannelFromMountainStream = std::pin::Pin<
417 Box<
418 dyn tonic::codegen::tokio_stream::Stream<Item = Result<::Vine::Generated::Envelope, tonic::Status>>
419 + Send
420 + 'static,
421 >,
422 >;
423
424 async fn open_channel_from_mountain(
425 &self,
426
427 _request:tonic::Request<tonic::Streaming<::Vine::Generated::Envelope>>,
428 ) -> Result<tonic::Response<Self::OpenChannelFromMountainStream>, tonic::Status> {
429 Err(tonic::Status::unimplemented(
430 "OpenChannelFromMountain: streaming multiplexer not yet wired (Patch 14); use unary endpoints",
431 ))
432 }
433
434 async fn process_mountain_request(
437 &self,
438
439 request:Request<GenericRequestMsg>,
440 ) -> Result<Response<GenericResponse>, Status> {
441 return GenericRequest::Dispatcher::Fn(self, request).await;
442 }
443
444 async fn send_mountain_notification(
447 &self,
448
449 request:Request<GenericNotificationMsg>,
450 ) -> Result<Response<Empty>, Status> {
451 return GenericNotification::Dispatcher::Fn(self, request).await;
452 }
453
454 async fn cancel_operation(&self, request:Request<CancelOperationRequest>) -> Result<Response<Empty>, Status> {
455 Initialization::CancelOperation::Fn(self, request.into_inner()).await
456 }
457
458 async fn initial_handshake(&self, request:Request<Empty>) -> Result<Response<Empty>, Status> {
459 Initialization::InitialHandshake::Fn(self, request.into_inner()).await
460 }
461
462 async fn init_extension_host(&self, request:Request<InitExtensionHostRequest>) -> Result<Response<Empty>, Status> {
463 Initialization::InitExtensionHost::Fn(self, request.into_inner()).await
464 }
465
466 async fn register_command(&self, request:Request<RegisterCommandRequest>) -> Result<Response<Empty>, Status> {
467 Command::RegisterCommand::Fn(self, request.into_inner()).await
468 }
469
470 async fn execute_contributed_command(
471 &self,
472
473 request:Request<ExecuteCommandRequest>,
474 ) -> Result<Response<ExecuteCommandResponse>, Status> {
475 Command::ExecuteContributedCommand::Fn(self, request.into_inner()).await
476 }
477
478 async fn unregister_command(&self, request:Request<UnregisterCommandRequest>) -> Result<Response<Empty>, Status> {
479 Command::UnregisterCommand::Fn(self, request.into_inner()).await
480 }
481
482 async fn register_hover_provider(
483 &self,
484
485 request:Request<RegisterProviderRequest>,
486 ) -> Result<Response<Empty>, Status> {
487 Provider::RegisterHoverProvider::Fn(self, request.into_inner()).await
488 }
489
490 async fn provide_hover(
491 &self,
492
493 request:Request<ProvideHoverRequest>,
494 ) -> Result<Response<ProvideHoverResponse>, Status> {
495 Provider::ProvideHover::Fn(self, request.into_inner()).await
496 }
497
498 async fn register_completion_item_provider(
499 &self,
500
501 request:Request<RegisterProviderRequest>,
502 ) -> Result<Response<Empty>, Status> {
503 Provider::RegisterCompletionItemProvider::Fn(self, request.into_inner()).await
504 }
505
506 async fn provide_completion_items(
507 &self,
508
509 request:Request<ProvideCompletionItemsRequest>,
510 ) -> Result<Response<ProvideCompletionItemsResponse>, Status> {
511 Provider::ProvideCompletionItems::Fn(self, request.into_inner()).await
512 }
513
514 async fn register_definition_provider(
515 &self,
516
517 request:Request<RegisterProviderRequest>,
518 ) -> Result<Response<Empty>, Status> {
519 Provider::RegisterDefinitionProvider::Fn(self, request.into_inner()).await
520 }
521
522 async fn provide_definition(
523 &self,
524
525 request:Request<ProvideDefinitionRequest>,
526 ) -> Result<Response<ProvideDefinitionResponse>, Status> {
527 Provider::ProvideDefinition::Fn(self, request.into_inner()).await
528 }
529
530 async fn register_reference_provider(
531 &self,
532
533 request:Request<RegisterProviderRequest>,
534 ) -> Result<Response<Empty>, Status> {
535 Provider::RegisterReferenceProvider::Fn(self, request.into_inner()).await
536 }
537
538 async fn provide_references(
539 &self,
540
541 request:Request<ProvideReferencesRequest>,
542 ) -> Result<Response<ProvideReferencesResponse>, Status> {
543 Provider::ProvideReferences::Fn(self, request.into_inner()).await
544 }
545
546 async fn register_code_actions_provider(
547 &self,
548
549 request:Request<RegisterProviderRequest>,
550 ) -> Result<Response<Empty>, Status> {
551 Provider::RegisterCodeActionsProvider::Fn(self, request.into_inner()).await
552 }
553
554 async fn provide_code_actions(
555 &self,
556
557 request:Request<ProvideCodeActionsRequest>,
558 ) -> Result<Response<ProvideCodeActionsResponse>, Status> {
559 Provider::ProvideCodeActions::Fn(self, request.into_inner()).await
560 }
561
562 async fn show_text_document(
563 &self,
564
565 request:Request<ShowTextDocumentRequest>,
566 ) -> Result<Response<ShowTextDocumentResponse>, Status> {
567 Window::ShowTextDocument::Fn(self, request.into_inner()).await
568 }
569
570 async fn show_information_message(
571 &self,
572
573 request:Request<ShowMessageRequest>,
574 ) -> Result<Response<ShowMessageResponse>, Status> {
575 Window::ShowInformationMessage::Fn(self, request.into_inner()).await
576 }
577
578 async fn show_warning_message(
579 &self,
580
581 request:Request<ShowMessageRequest>,
582 ) -> Result<Response<ShowMessageResponse>, Status> {
583 Window::ShowWarningMessage::Fn(self, request.into_inner()).await
584 }
585
586 async fn show_error_message(
587 &self,
588
589 request:Request<ShowMessageRequest>,
590 ) -> Result<Response<ShowMessageResponse>, Status> {
591 Window::ShowErrorMessage::Fn(self, request.into_inner()).await
592 }
593
594 async fn create_status_bar_item(
595 &self,
596
597 request:Request<CreateStatusBarItemRequest>,
598 ) -> Result<Response<CreateStatusBarItemResponse>, Status> {
599 Window::CreateStatusBarItem::Fn(self, request.into_inner()).await
600 }
601
602 async fn set_status_bar_text(&self, request:Request<SetStatusBarTextRequest>) -> Result<Response<Empty>, Status> {
603 Window::SetStatusBarText::Fn(self, request.into_inner()).await
604 }
605
606 async fn create_webview_panel(
607 &self,
608
609 request:Request<CreateWebviewPanelRequest>,
610 ) -> Result<Response<CreateWebviewPanelResponse>, Status> {
611 Window::CreateWebviewPanel::Fn(self, request.into_inner()).await
612 }
613
614 async fn set_webview_html(&self, request:Request<SetWebviewHtmlRequest>) -> Result<Response<Empty>, Status> {
615 Window::SetWebviewHtml::Fn(self, request.into_inner()).await
616 }
617
618 async fn on_did_receive_message(
619 &self,
620
621 request:Request<OnDidReceiveMessageRequest>,
622 ) -> Result<Response<Empty>, Status> {
623 Window::OnDidReceiveMessage::Fn(self, request.into_inner()).await
624 }
625
626 async fn post_webview_message(
627 &self,
628
629 request:Request<PostWebviewMessageRequest>,
630 ) -> Result<Response<Empty>, Status> {
631 Window::PostWebviewMessage::Fn(self, request.into_inner()).await
632 }
633
634 async fn dispose_webview_panel(
635 &self,
636
637 request:Request<DisposeWebviewPanelRequest>,
638 ) -> Result<Response<Empty>, Status> {
639 Window::DisposeWebviewPanel::Fn(self, request.into_inner()).await
640 }
641
642 async fn read_file(&self, request:Request<ReadFileRequest>) -> Result<Response<ReadFileResponse>, Status> {
643 FileSystem::ReadFile::Fn(self, request.into_inner()).await
644 }
645
646 async fn write_file(&self, request:Request<WriteFileRequest>) -> Result<Response<Empty>, Status> {
647 FileSystem::WriteFile::Fn(self, request.into_inner()).await
648 }
649
650 async fn stat(&self, request:Request<StatRequest>) -> Result<Response<StatResponse>, Status> {
651 FileSystem::Stat::Fn(self, request.into_inner()).await
652 }
653
654 async fn readdir(&self, request:Request<ReaddirRequest>) -> Result<Response<ReaddirResponse>, Status> {
655 FileSystem::Readdir::Fn(self, request.into_inner()).await
656 }
657
658 async fn watch_file(&self, request:Request<WatchFileRequest>) -> Result<Response<Empty>, Status> {
659 FileSystem::WatchFile::Fn(self, request.into_inner()).await
660 }
661
662 async fn find_files(&self, request:Request<FindFilesRequest>) -> Result<Response<FindFilesResponse>, Status> {
663 FileSystem::FindFiles::Fn(self, request.into_inner()).await
664 }
665
666 async fn find_text_in_files(
667 &self,
668
669 request:Request<FindTextInFilesRequest>,
670 ) -> Result<Response<FindTextInFilesResponse>, Status> {
671 FileSystem::FindTextInFiles::Fn(self, request.into_inner()).await
672 }
673
674 async fn delete_file(&self, request:Request<DeleteFileRequest>) -> Result<Response<Empty>, Status> {
675 FileSystem::DeleteFile::Fn(self, request.into_inner()).await
676 }
677
678 async fn rename_file(&self, request:Request<RenameFileRequest>) -> Result<Response<Empty>, Status> {
679 FileSystem::RenameFile::Fn(self, request.into_inner()).await
680 }
681
682 async fn copy_file(&self, request:Request<CopyFileRequest>) -> Result<Response<Empty>, Status> {
683 FileSystem::CopyFile::Fn(self, request.into_inner()).await
684 }
685
686 async fn create_directory(&self, request:Request<CreateDirectoryRequest>) -> Result<Response<Empty>, Status> {
687 FileSystem::CreateDirectory::Fn(self, request.into_inner()).await
688 }
689
690 async fn open_document(
691 &self,
692
693 request:Request<OpenDocumentRequest>,
694 ) -> Result<Response<OpenDocumentResponse>, Status> {
695 Workspace::OpenDocument::Fn(self, request.into_inner()).await
696 }
697
698 async fn save_all(&self, request:Request<SaveAllRequest>) -> Result<Response<SaveAllResponse>, Status> {
699 Workspace::SaveAll::Fn(self, request.into_inner()).await
700 }
701
702 async fn apply_edit(&self, request:Request<ApplyEditRequest>) -> Result<Response<ApplyEditResponse>, Status> {
703 Workspace::ApplyEdit::Fn(self, request.into_inner()).await
704 }
705
706 async fn update_configuration(
707 &self,
708
709 request:Request<UpdateConfigurationRequest>,
710 ) -> Result<Response<Empty>, Status> {
711 Workspace::UpdateConfiguration::Fn(self, request.into_inner()).await
712 }
713
714 async fn update_workspace_folders(
715 &self,
716
717 request:Request<UpdateWorkspaceFoldersRequest>,
718 ) -> Result<Response<Empty>, Status> {
719 Workspace::UpdateWorkspaceFolders::Fn(self, request.into_inner()).await
720 }
721
722 async fn open_terminal(&self, request:Request<OpenTerminalRequest>) -> Result<Response<Empty>, Status> {
723 Terminal::OpenTerminal::Fn(self, request.into_inner()).await
724 }
725
726 async fn terminal_input(&self, request:Request<TerminalInputRequest>) -> Result<Response<Empty>, Status> {
727 Terminal::TerminalInput::Fn(self, request.into_inner()).await
728 }
729
730 async fn close_terminal(&self, request:Request<CloseTerminalRequest>) -> Result<Response<Empty>, Status> {
731 Terminal::CloseTerminal::Fn(self, request.into_inner()).await
732 }
733
734 async fn accept_terminal_opened(
735 &self,
736
737 request:Request<TerminalOpenedNotification>,
738 ) -> Result<Response<Empty>, Status> {
739 Terminal::AcceptTerminalOpened::Fn(self, request.into_inner()).await
740 }
741
742 async fn accept_terminal_closed(
743 &self,
744
745 request:Request<TerminalClosedNotification>,
746 ) -> Result<Response<Empty>, Status> {
747 Terminal::AcceptTerminalClosed::Fn(self, request.into_inner()).await
748 }
749
750 async fn accept_terminal_process_id(
751 &self,
752
753 request:Request<TerminalProcessIdNotification>,
754 ) -> Result<Response<Empty>, Status> {
755 Terminal::AcceptTerminalProcessId::Fn(self, request.into_inner()).await
756 }
757
758 async fn accept_terminal_process_data(
759 &self,
760
761 request:Request<TerminalDataNotification>,
762 ) -> Result<Response<Empty>, Status> {
763 Terminal::AcceptTerminalProcessData::Fn(self, request.into_inner()).await
764 }
765
766 async fn resize_terminal(&self, request:Request<ResizeTerminalRequest>) -> Result<Response<Empty>, Status> {
767 Terminal::ResizeTerminal::Fn(self, request.into_inner()).await
768 }
769
770 async fn register_tree_view_provider(
771 &self,
772
773 request:Request<RegisterTreeViewProviderRequest>,
774 ) -> Result<Response<Empty>, Status> {
775 TreeView::RegisterTreeViewProvider::Fn(self, request.into_inner()).await
776 }
777
778 async fn get_tree_children(
779 &self,
780
781 request:Request<GetTreeChildrenRequest>,
782 ) -> Result<Response<GetTreeChildrenResponse>, Status> {
783 TreeView::GetTreeChildren::Fn(self, request.into_inner()).await
784 }
785
786 async fn register_scm_provider(
787 &self,
788
789 request:Request<RegisterScmProviderRequest>,
790 ) -> Result<Response<Empty>, Status> {
791 SCM::RegisterScmProvider::Fn(self, request.into_inner()).await
792 }
793
794 async fn update_scm_group(&self, request:Request<UpdateScmGroupRequest>) -> Result<Response<Empty>, Status> {
795 SCM::UpdateScmGroup::Fn(self, request.into_inner()).await
796 }
797
798 async fn git_exec(&self, request:Request<GitExecRequest>) -> Result<Response<GitExecResponse>, Status> {
799 SCM::GitExec::Fn(self, request.into_inner()).await
800 }
801
802 async fn register_debug_adapter(
803 &self,
804
805 request:Request<RegisterDebugAdapterRequest>,
806 ) -> Result<Response<Empty>, Status> {
807 Debug::RegisterDebugAdapter::Fn(self, request.into_inner()).await
808 }
809
810 async fn start_debugging(
811 &self,
812
813 request:Request<StartDebuggingRequest>,
814 ) -> Result<Response<StartDebuggingResponse>, Status> {
815 Debug::StartDebugging::Fn(self, request.into_inner()).await
816 }
817
818 async fn stop_debugging(&self, request:Request<StopDebuggingRequest>) -> Result<Response<Empty>, Status> {
819 Debug::StopDebugging::Fn(self, request.into_inner()).await
820 }
821
822 async fn participate_in_save(
823 &self,
824
825 request:Request<ParticipateInSaveRequest>,
826 ) -> Result<Response<ParticipateInSaveResponse>, Status> {
827 Save::Fn(self, request.into_inner()).await
828 }
829
830 async fn get_secret(&self, request:Request<GetSecretRequest>) -> Result<Response<GetSecretResponse>, Status> {
831 Secret::GetSecret::Fn(self, request.into_inner()).await
832 }
833
834 async fn store_secret(&self, request:Request<StoreSecretRequest>) -> Result<Response<Empty>, Status> {
835 Secret::StoreSecret::Fn(self, request.into_inner()).await
836 }
837
838 async fn delete_secret(&self, request:Request<DeleteSecretRequest>) -> Result<Response<Empty>, Status> {
839 Secret::DeleteSecret::Fn(self, request.into_inner()).await
840 }
841
842 async fn register_document_highlight_provider(
843 &self,
844
845 request:Request<RegisterProviderRequest>,
846 ) -> Result<Response<Empty>, Status> {
847 Provider::RegisterDocumentHighlightProvider::Fn(self, request.into_inner()).await
848 }
849
850 async fn provide_document_highlights(
851 &self,
852
853 request:Request<ProvideDocumentHighlightsRequest>,
854 ) -> Result<Response<ProvideDocumentHighlightsResponse>, Status> {
855 Provider::ProvideDocumentHighlights::Fn(self, request.into_inner()).await
856 }
857
858 async fn register_document_symbol_provider(
859 &self,
860
861 request:Request<RegisterProviderRequest>,
862 ) -> Result<Response<Empty>, Status> {
863 Provider::RegisterDocumentSymbolProvider::Fn(self, request.into_inner()).await
864 }
865
866 async fn provide_document_symbols(
867 &self,
868
869 request:Request<ProvideDocumentSymbolsRequest>,
870 ) -> Result<Response<ProvideDocumentSymbolsResponse>, Status> {
871 Provider::ProvideDocumentSymbols::Fn(self, request.into_inner()).await
872 }
873
874 async fn register_workspace_symbol_provider(
875 &self,
876
877 request:Request<RegisterProviderRequest>,
878 ) -> Result<Response<Empty>, Status> {
879 Provider::RegisterWorkspaceSymbolProvider::Fn(self, request.into_inner()).await
880 }
881
882 async fn provide_workspace_symbols(
883 &self,
884
885 request:Request<ProvideWorkspaceSymbolsRequest>,
886 ) -> Result<Response<ProvideWorkspaceSymbolsResponse>, Status> {
887 Provider::ProvideWorkspaceSymbols::Fn(self, request.into_inner()).await
888 }
889
890 async fn register_rename_provider(
891 &self,
892
893 request:Request<RegisterProviderRequest>,
894 ) -> Result<Response<Empty>, Status> {
895 Provider::RegisterRenameProvider::Fn(self, request.into_inner()).await
896 }
897
898 async fn provide_rename_edits(
899 &self,
900
901 request:Request<ProvideRenameEditsRequest>,
902 ) -> Result<Response<ProvideRenameEditsResponse>, Status> {
903 Provider::ProvideRenameEdits::Fn(self, request.into_inner()).await
904 }
905
906 async fn register_document_formatting_provider(
907 &self,
908
909 request:Request<RegisterProviderRequest>,
910 ) -> Result<Response<Empty>, Status> {
911 Provider::RegisterDocumentFormattingProvider::Fn(self, request.into_inner()).await
912 }
913
914 async fn provide_document_formatting(
915 &self,
916
917 request:Request<ProvideDocumentFormattingRequest>,
918 ) -> Result<Response<ProvideDocumentFormattingResponse>, Status> {
919 Provider::ProvideDocumentFormatting::Fn(self, request.into_inner()).await
920 }
921
922 async fn register_document_range_formatting_provider(
923 &self,
924
925 request:Request<RegisterProviderRequest>,
926 ) -> Result<Response<Empty>, Status> {
927 Provider::RegisterDocumentRangeFormattingProvider::Fn(self, request.into_inner()).await
928 }
929
930 async fn provide_document_range_formatting(
931 &self,
932
933 request:Request<ProvideDocumentRangeFormattingRequest>,
934 ) -> Result<Response<ProvideDocumentRangeFormattingResponse>, Status> {
935 Provider::ProvideDocumentRangeFormatting::Fn(self, request.into_inner()).await
936 }
937
938 async fn register_on_type_formatting_provider(
939 &self,
940
941 request:Request<RegisterOnTypeFormattingProviderRequest>,
942 ) -> Result<Response<Empty>, Status> {
943 Provider::RegisterOnTypeFormattingProvider::Fn(self, request.into_inner()).await
944 }
945
946 async fn provide_on_type_formatting(
947 &self,
948
949 request:Request<ProvideOnTypeFormattingRequest>,
950 ) -> Result<Response<ProvideOnTypeFormattingResponse>, Status> {
951 Provider::ProvideOnTypeFormatting::Fn(self, request.into_inner()).await
952 }
953
954 async fn register_signature_help_provider(
955 &self,
956
957 request:Request<RegisterSignatureHelpProviderRequest>,
958 ) -> Result<Response<Empty>, Status> {
959 Provider::RegisterSignatureHelpProvider::Fn(self, request.into_inner()).await
960 }
961
962 async fn provide_signature_help(
963 &self,
964
965 request:Request<ProvideSignatureHelpRequest>,
966 ) -> Result<Response<ProvideSignatureHelpResponse>, Status> {
967 Provider::ProvideSignatureHelp::Fn(self, request.into_inner()).await
968 }
969
970 async fn register_code_lens_provider(
971 &self,
972
973 request:Request<RegisterProviderRequest>,
974 ) -> Result<Response<Empty>, Status> {
975 Provider::RegisterCodeLensProvider::Fn(self, request.into_inner()).await
976 }
977
978 async fn provide_code_lenses(
979 &self,
980
981 request:Request<ProvideCodeLensesRequest>,
982 ) -> Result<Response<ProvideCodeLensesResponse>, Status> {
983 Provider::ProvideCodeLenses::Fn(self, request.into_inner()).await
984 }
985
986 async fn register_folding_range_provider(
987 &self,
988
989 request:Request<RegisterProviderRequest>,
990 ) -> Result<Response<Empty>, Status> {
991 Provider::RegisterFoldingRangeProvider::Fn(self, request.into_inner()).await
992 }
993
994 async fn provide_folding_ranges(
995 &self,
996
997 request:Request<ProvideFoldingRangesRequest>,
998 ) -> Result<Response<ProvideFoldingRangesResponse>, Status> {
999 Provider::ProvideFoldingRanges::Fn(self, request.into_inner()).await
1000 }
1001
1002 async fn register_selection_range_provider(
1003 &self,
1004
1005 request:Request<RegisterProviderRequest>,
1006 ) -> Result<Response<Empty>, Status> {
1007 Provider::RegisterSelectionRangeProvider::Fn(self, request.into_inner()).await
1008 }
1009
1010 async fn provide_selection_ranges(
1011 &self,
1012
1013 request:Request<ProvideSelectionRangesRequest>,
1014 ) -> Result<Response<ProvideSelectionRangesResponse>, Status> {
1015 Provider::ProvideSelectionRanges::Fn(self, request.into_inner()).await
1016 }
1017
1018 async fn register_semantic_tokens_provider(
1019 &self,
1020
1021 request:Request<RegisterSemanticTokensProviderRequest>,
1022 ) -> Result<Response<Empty>, Status> {
1023 Provider::RegisterSemanticTokensProvider::Fn(self, request.into_inner()).await
1024 }
1025
1026 async fn provide_semantic_tokens_full(
1027 &self,
1028
1029 request:Request<ProvideSemanticTokensRequest>,
1030 ) -> Result<Response<ProvideSemanticTokensResponse>, Status> {
1031 Provider::ProvideSemanticTokensFull::Fn(self, request.into_inner()).await
1032 }
1033
1034 async fn register_inlay_hints_provider(
1035 &self,
1036
1037 request:Request<RegisterProviderRequest>,
1038 ) -> Result<Response<Empty>, Status> {
1039 Provider::RegisterInlayHintsProvider::Fn(self, request.into_inner()).await
1040 }
1041
1042 async fn provide_inlay_hints(
1043 &self,
1044
1045 request:Request<ProvideInlayHintsRequest>,
1046 ) -> Result<Response<ProvideInlayHintsResponse>, Status> {
1047 Provider::ProvideInlayHints::Fn(self, request.into_inner()).await
1048 }
1049
1050 async fn register_type_hierarchy_provider(
1051 &self,
1052
1053 request:Request<RegisterProviderRequest>,
1054 ) -> Result<Response<Empty>, Status> {
1055 Provider::RegisterTypeHierarchyProvider::Fn(self, request.into_inner()).await
1056 }
1057
1058 async fn provide_type_hierarchy_supertypes(
1059 &self,
1060
1061 request:Request<ProvideTypeHierarchyRequest>,
1062 ) -> Result<Response<ProvideTypeHierarchyResponse>, Status> {
1063 Provider::ProvideTypeHierarchySupertypes::Fn(self, request.into_inner()).await
1064 }
1065
1066 async fn provide_type_hierarchy_subtypes(
1067 &self,
1068
1069 request:Request<ProvideTypeHierarchyRequest>,
1070 ) -> Result<Response<ProvideTypeHierarchyResponse>, Status> {
1071 Provider::ProvideTypeHierarchySubtypes::Fn(self, request.into_inner()).await
1072 }
1073
1074 async fn register_call_hierarchy_provider(
1075 &self,
1076
1077 request:Request<RegisterProviderRequest>,
1078 ) -> Result<Response<Empty>, Status> {
1079 Provider::RegisterCallHierarchyProvider::Fn(self, request.into_inner()).await
1080 }
1081
1082 async fn provide_call_hierarchy_incoming_calls(
1083 &self,
1084
1085 request:Request<ProvideCallHierarchyRequest>,
1086 ) -> Result<Response<ProvideCallHierarchyResponse>, Status> {
1087 Provider::ProvideCallHierarchyIncomingCalls::Fn(self, request.into_inner()).await
1088 }
1089
1090 async fn provide_call_hierarchy_outgoing_calls(
1091 &self,
1092
1093 request:Request<ProvideCallHierarchyRequest>,
1094 ) -> Result<Response<ProvideCallHierarchyResponse>, Status> {
1095 Provider::ProvideCallHierarchyOutgoingCalls::Fn(self, request.into_inner()).await
1096 }
1097
1098 async fn register_linked_editing_range_provider(
1099 &self,
1100
1101 request:Request<RegisterProviderRequest>,
1102 ) -> Result<Response<Empty>, Status> {
1103 Provider::RegisterLinkedEditingRangeProvider::Fn(self, request.into_inner()).await
1104 }
1105
1106 async fn provide_linked_editing_ranges(
1107 &self,
1108
1109 request:Request<ProvideLinkedEditingRangesRequest>,
1110 ) -> Result<Response<ProvideLinkedEditingRangesResponse>, Status> {
1111 Provider::ProvideLinkedEditingRanges::Fn(self, request.into_inner()).await
1112 }
1113
1114 async fn register_inline_completion_item_provider(
1115 &self,
1116
1117 request:Request<RegisterProviderRequest>,
1118 ) -> Result<Response<Empty>, Status> {
1119 let Inner = request.into_inner();
1125
1126 let Handle = Inner.handle;
1127
1128 let Selector = Inner.language_selector.clone();
1129
1130 let ExtId = Inner.extension_id.clone();
1131
1132 self.RegisterProvider(Handle, ProviderType::InlineCompletion, &Selector, &ExtId);
1133
1134 Ok(Response::new(Empty {}))
1135 }
1136
1137 async fn provide_inline_completion_items(
1138 &self,
1139
1140 request:Request<ProvideInlineCompletionRequest>,
1141 ) -> Result<Response<ProvideInlineCompletionResponse>, Status> {
1142 Provider::ProvideInlineCompletionItems::Fn(self, request.into_inner()).await
1143 }
1144
1145 async fn show_quick_pick(
1146 &self,
1147
1148 request:Request<ShowQuickPickRequest>,
1149 ) -> Result<Response<ShowQuickPickResponse>, Status> {
1150 Window::ShowQuickPick::Fn(self, request.into_inner()).await
1151 }
1152
1153 async fn show_input_box(
1154 &self,
1155
1156 request:Request<ShowInputBoxRequest>,
1157 ) -> Result<Response<ShowInputBoxResponse>, Status> {
1158 Window::ShowInputBox::Fn(self, request.into_inner()).await
1159 }
1160
1161 async fn show_progress(
1162 &self,
1163
1164 request:Request<ShowProgressRequest>,
1165 ) -> Result<Response<ShowProgressResponse>, Status> {
1166 Window::ShowProgress::Fn(self, request.into_inner()).await
1167 }
1168
1169 async fn report_progress(&self, request:Request<ReportProgressRequest>) -> Result<Response<Empty>, Status> {
1170 Window::ReportProgress::Fn(self, request.into_inner()).await
1171 }
1172
1173 async fn open_external(&self, request:Request<OpenExternalRequest>) -> Result<Response<Empty>, Status> {
1174 Window::OpenExternal::Fn(self, request.into_inner()).await
1175 }
1176
1177 async fn create_output_channel(
1178 &self,
1179
1180 request:Request<CreateOutputChannelRequest>,
1181 ) -> Result<Response<CreateOutputChannelResponse>, Status> {
1182 Output::CreateOutputChannel::Fn(self, request.into_inner()).await
1183 }
1184
1185 async fn append_output(&self, request:Request<AppendOutputRequest>) -> Result<Response<Empty>, Status> {
1186 Output::AppendOutput::Fn(self, request.into_inner()).await
1187 }
1188
1189 async fn clear_output(&self, request:Request<ClearOutputRequest>) -> Result<Response<Empty>, Status> {
1190 Output::ClearOutput::Fn(self, request.into_inner()).await
1191 }
1192
1193 async fn show_output(&self, request:Request<ShowOutputRequest>) -> Result<Response<Empty>, Status> {
1194 Output::ShowOutput::Fn(self, request.into_inner()).await
1195 }
1196
1197 async fn dispose_output(&self, request:Request<DisposeOutputRequest>) -> Result<Response<Empty>, Status> {
1198 Output::DisposeOutput::Fn(self, request.into_inner()).await
1199 }
1200
1201 async fn register_task_provider(
1202 &self,
1203
1204 request:Request<RegisterTaskProviderRequest>,
1205 ) -> Result<Response<Empty>, Status> {
1206 Task::RegisterTaskProvider::Fn(self, request.into_inner()).await
1207 }
1208
1209 async fn execute_task(&self, request:Request<ExecuteTaskRequest>) -> Result<Response<ExecuteTaskResponse>, Status> {
1210 Task::ExecuteTask::Fn(self, request.into_inner()).await
1211 }
1212
1213 async fn terminate_task(&self, request:Request<TerminateTaskRequest>) -> Result<Response<Empty>, Status> {
1214 Task::TerminateTask::Fn(self, request.into_inner()).await
1215 }
1216
1217 async fn get_authentication_session(
1218 &self,
1219
1220 request:Request<GetAuthenticationSessionRequest>,
1221 ) -> Result<Response<GetAuthenticationSessionResponse>, Status> {
1222 Auth::GetAuthenticationSession::Fn(self, request.into_inner()).await
1223 }
1224
1225 async fn register_authentication_provider(
1226 &self,
1227
1228 request:Request<RegisterAuthenticationProviderRequest>,
1229 ) -> Result<Response<Empty>, Status> {
1230 Auth::RegisterAuthenticationProvider::Fn(self, request.into_inner()).await
1231 }
1232
1233 async fn get_extension(
1234 &self,
1235
1236 request:Request<GetExtensionRequest>,
1237 ) -> Result<Response<GetExtensionResponse>, Status> {
1238 Extension::GetExtension::Fn(self, request.into_inner()).await
1239 }
1240
1241 async fn get_all_extensions(&self, request:Request<Empty>) -> Result<Response<GetAllExtensionsResponse>, Status> {
1242 Extension::GetAllExtensions::Fn(self, request.into_inner()).await
1243 }
1244
1245 async fn get_configuration(
1246 &self,
1247
1248 request:Request<GetConfigurationRequest>,
1249 ) -> Result<Response<GetConfigurationResponse>, Status> {
1250 Extension::GetConfiguration::Fn(self, request.into_inner()).await
1251 }
1252}