CommonLibrary/LanguageFeature/ProvideCompletions.rs
1//! # ProvideCompletions Effect
2//!
3//! Defines the `ActionEffect` for requesting completion items at a specific
4//! document position.
5
6use std::sync::Arc;
7
8use serde_json::Value;
9use url::Url;
10
11use super::{
12 DTO::{CompletionContextDTO::CompletionContextDTO, CompletionListDTO::CompletionListDTO, PositionDTO::PositionDTO},
13 LanguageFeatureProviderRegistry::LanguageFeatureProviderRegistry,
14};
15use crate::{Effect::ActionEffect::ActionEffect, Error::CommonError::CommonError};
16
17/// Creates an effect that, when executed, will request code completion items
18/// for a given position in a document.
19pub fn ProvideCompletions(
20 DocumentURI:Url,
21
22 PositionDTO:PositionDTO,
23
24 ContextDTO:CompletionContextDTO,
25
26 CancellationTokenValue:Option<Value>,
27) -> ActionEffect<Arc<dyn LanguageFeatureProviderRegistry>, CommonError, Option<CompletionListDTO>> {
28 ActionEffect::New(Arc::new(move |Registry:Arc<dyn LanguageFeatureProviderRegistry>| {
29 let URIClone = DocumentURI.clone();
30
31 // PositionDTO is Copy
32 let PositionClone = PositionDTO;
33
34 let ContextClone = ContextDTO.clone();
35
36 let TokenClone = CancellationTokenValue.clone();
37
38 Box::pin(async move {
39 Registry
40 .ProvideCompletions(URIClone, PositionClone, ContextClone, TokenClone)
41 .await
42 })
43 }))
44}