Mountain/Track/Effect/CreateEffectForRequest/
LanguageFeatures.rs1use std::sync::Arc;
17
18use CommonLibrary::{
19 Environment::Requires::Requires,
20 LanguageFeature::{
21 DTO::ProviderType::ProviderType,
22 LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry,
23 },
24};
25use serde_json::{Value, json};
26use tauri::Runtime;
27
28use crate::Track::Effect::{
29 CreateEffectForRequest::Utilities::Params::{obj_str, obj_val},
30 MappedEffectType::MappedEffect,
31};
32
33fn CreateProviderEffect(Parameters:Value, ProviderKind:ProviderType) -> Option<Result<MappedEffect, String>> {
34 crate::effect!(run_time, {
35 let provider:Arc<dyn LanguageFeatureProviderRegistry> = run_time.Environment.Require();
36
37 let id = obj_str(&Parameters, "handle").to_string();
38
39 let selector = obj_val(&Parameters, "language_selector");
40
41 let extension_id = obj_val(&Parameters, "extension_id");
42
43 let options = Parameters.get("options").cloned();
44
45 provider
46 .RegisterProvider(id, ProviderKind, selector, extension_id, options)
47 .await
48 .map(|handle| json!(handle))
49 .map_err(|e| e.to_string())
50 })
51}
52
53pub fn CreateEffect<R:Runtime>(MethodName:&str, Parameters:Value) -> Option<Result<MappedEffect, String>> {
54 match MethodName {
55 "register_hover_provider" => CreateProviderEffect(Parameters, ProviderType::Hover),
56
57 "register_completion_item_provider" => CreateProviderEffect(Parameters, ProviderType::Completion),
58
59 "register_definition_provider" => CreateProviderEffect(Parameters, ProviderType::Definition),
60
61 "register_reference_provider" => CreateProviderEffect(Parameters, ProviderType::References),
62
63 "register_code_actions_provider" => CreateProviderEffect(Parameters, ProviderType::CodeAction),
64
65 "register_document_highlight_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentHighlight),
66
67 "register_document_symbol_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentSymbol),
68
69 "register_workspace_symbol_provider" => CreateProviderEffect(Parameters, ProviderType::WorkspaceSymbol),
70
71 "register_rename_provider" => CreateProviderEffect(Parameters, ProviderType::Rename),
72
73 "register_document_formatting_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentFormatting),
74
75 "register_document_range_formatting_provider" => {
76 CreateProviderEffect(Parameters, ProviderType::DocumentRangeFormatting)
77 },
78
79 "register_on_type_formatting_provider" => CreateProviderEffect(Parameters, ProviderType::OnTypeFormatting),
80
81 "register_signature_help_provider" => CreateProviderEffect(Parameters, ProviderType::SignatureHelp),
82
83 "register_code_lens_provider" => CreateProviderEffect(Parameters, ProviderType::CodeLens),
84
85 "register_folding_range_provider" => CreateProviderEffect(Parameters, ProviderType::FoldingRange),
86
87 "register_selection_range_provider" => CreateProviderEffect(Parameters, ProviderType::SelectionRange),
88
89 "register_semantic_tokens_provider" => CreateProviderEffect(Parameters, ProviderType::SemanticTokens),
90
91 "register_inlay_hints_provider" => CreateProviderEffect(Parameters, ProviderType::InlayHint),
92
93 "register_type_hierarchy_provider" => CreateProviderEffect(Parameters, ProviderType::TypeHierarchy),
94
95 "register_call_hierarchy_provider" => CreateProviderEffect(Parameters, ProviderType::CallHierarchy),
96
97 "register_linked_editing_range_provider" => CreateProviderEffect(Parameters, ProviderType::LinkedEditingRange),
98
99 "register_document_link_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentLink),
100
101 "register_color_provider" => CreateProviderEffect(Parameters, ProviderType::Color),
102
103 "register_implementation_provider" => CreateProviderEffect(Parameters, ProviderType::Implementation),
104
105 "register_type_definition_provider" => CreateProviderEffect(Parameters, ProviderType::TypeDefinition),
106
107 "register_declaration_provider" => CreateProviderEffect(Parameters, ProviderType::Declaration),
108
109 "register_evaluatable_expression_provider" => {
110 CreateProviderEffect(Parameters, ProviderType::EvaluatableExpression)
111 },
112
113 "register_inline_values_provider" => CreateProviderEffect(Parameters, ProviderType::InlineValues),
114
115 "register_inline_completion_item_provider" => CreateProviderEffect(Parameters, ProviderType::InlineCompletion),
119
120 "register_inline_edit_provider" => CreateProviderEffect(Parameters, ProviderType::InlineEdit),
121
122 "register_multi_document_highlight_provider" => {
123 CreateProviderEffect(Parameters, ProviderType::MultiDocumentHighlight)
124 },
125
126 "register_mapped_edits_provider" => CreateProviderEffect(Parameters, ProviderType::MappedEdits),
127
128 "register_document_paste_edit_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentPasteEdit),
129
130 "register_document_drop_edit_provider" => CreateProviderEffect(Parameters, ProviderType::DocumentDropEdit),
131
132 _ => None,
133 }
134}