Common/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}