Mountain/Track/Effect/CreateEffectForRequest/
LanguageFeatures.rs1#![allow(non_snake_case, unused_variables, dead_code, unused_imports)]
2
3use std::{future::Future, pin::Pin, sync::Arc};
19
20use CommonLibrary::{
21 Environment::Requires::Requires,
22 LanguageFeature::{
23 DTO::ProviderType::ProviderType,
24 LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry,
25 },
26};
27use serde_json::{Value, json};
28use tauri::Runtime;
29
30use crate::{RunTime::ApplicationRunTime::ApplicationRunTime, Track::Effect::MappedEffectType::MappedEffect};
31
32fn CreateProviderEffect(Parameters:Value, ProviderKind:ProviderType) -> Option<Result<MappedEffect, String>> {
33 let effect =
34 move |run_time:Arc<ApplicationRunTime>| -> Pin<Box<dyn Future<Output = Result<Value, String>> + Send>> {
35 Box::pin(async move {
36 let provider:Arc<dyn LanguageFeatureProviderRegistry> = run_time.Environment.Require();
37 let id = Parameters.get("handle").and_then(Value::as_str).unwrap_or("").to_string();
38 let selector = Parameters.get("language_selector").cloned().unwrap_or_default();
39 let extension_id = Parameters.get("extension_id").cloned().unwrap_or_default();
40 let options = Parameters.get("options").cloned();
41 provider
42 .RegisterProvider(id, ProviderKind, selector, extension_id, options)
43 .await
44 .map(|handle| json!(handle))
45 .map_err(|e| e.to_string())
46 })
47 };
48
49 Some(Ok(Box::new(effect)))
50}
51
52pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
53 match MethodName {
54 "register_hover_provider" => CreateProviderEffect(Parameters, ProviderType::Hover),
55 "register_completion_item_provider" => CreateProviderEffect(Parameters, ProviderType::Completion),
56 "register_definition_provider" => CreateProviderEffect(Parameters, ProviderType::Definition),
57 "register_reference_provider" => CreateProviderEffect(Parameters, ProviderType::References),
58 "register_code_actions_provider" => CreateProviderEffect(Parameters, ProviderType::CodeAction),
59 "register_document_highlight_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentHighlight),
60 "register_document_symbol_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentSymbol),
61 "register_workspace_symbol_provider" => CreateProviderEffect(Parameters, ProviderType::WorkspaceSymbol),
62 "register_rename_provider" => CreateProviderEffect(Parameters, ProviderType::Rename),
63 "register_document_formatting_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentFormatting),
64 "register_document_range_formatting_provider" => {
65 CreateProviderEffect(Parameters, ProviderType::DocumentRangeFormatting)
66 },
67 "register_on_type_formatting_provider" => CreateProviderEffect(Parameters, ProviderType::OnTypeFormatting),
68 "register_signature_help_provider" => CreateProviderEffect(Parameters, ProviderType::SignatureHelp),
69 "register_code_lens_provider" => CreateProviderEffect(Parameters, ProviderType::CodeLens),
70 "register_folding_range_provider" => CreateProviderEffect(Parameters, ProviderType::FoldingRange),
71 "register_selection_range_provider" => CreateProviderEffect(Parameters, ProviderType::SelectionRange),
72 "register_semantic_tokens_provider" => CreateProviderEffect(Parameters, ProviderType::SemanticTokens),
73 "register_inlay_hints_provider" => CreateProviderEffect(Parameters, ProviderType::InlayHint),
74 "register_type_hierarchy_provider" => CreateProviderEffect(Parameters, ProviderType::TypeHierarchy),
75 "register_call_hierarchy_provider" => CreateProviderEffect(Parameters, ProviderType::CallHierarchy),
76 "register_linked_editing_range_provider" => CreateProviderEffect(Parameters, ProviderType::LinkedEditingRange),
77 "register_document_link_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentLink),
78 "register_color_provider" => CreateProviderEffect(Parameters, ProviderType::Color),
79 "register_implementation_provider" => CreateProviderEffect(Parameters, ProviderType::Implementation),
80 "register_type_definition_provider" => CreateProviderEffect(Parameters, ProviderType::TypeDefinition),
81 "register_declaration_provider" => CreateProviderEffect(Parameters, ProviderType::Declaration),
82 "register_evaluatable_expression_provider" => {
83 CreateProviderEffect(Parameters, ProviderType::EvaluatableExpression)
84 },
85 "register_inline_values_provider" => CreateProviderEffect(Parameters, ProviderType::InlineValues),
86 _ => None,
87 }
88}