use crate::error::AcpError;
use super::types::{
LspCodeAction, LspDiagnostic, LspDocumentSymbol, LspHoverResult, LspLocation, LspRange,
LspSymbolInformation,
};
pub trait LspProvider: Send + Sync {
fn hover(
&self,
uri: &str,
line: u32,
character: u32,
) -> impl std::future::Future<Output = Result<LspHoverResult, AcpError>>;
fn definition(
&self,
uri: &str,
line: u32,
character: u32,
) -> impl std::future::Future<Output = Result<Vec<LspLocation>, AcpError>>;
fn references(
&self,
uri: &str,
line: u32,
character: u32,
include_declaration: bool,
) -> impl std::future::Future<Output = Result<Vec<LspLocation>, AcpError>>;
fn diagnostics(
&self,
uri: &str,
) -> impl std::future::Future<Output = Result<Vec<LspDiagnostic>, AcpError>>;
fn document_symbols(
&self,
uri: &str,
) -> impl std::future::Future<Output = Result<Vec<LspDocumentSymbol>, AcpError>>;
fn workspace_symbol(
&self,
query: &str,
) -> impl std::future::Future<Output = Result<Vec<LspSymbolInformation>, AcpError>>;
fn code_actions(
&self,
uri: &str,
range: &LspRange,
diagnostics: &[LspDiagnostic],
) -> impl std::future::Future<Output = Result<Vec<LspCodeAction>, AcpError>>;
fn name(&self) -> &'static str;
fn is_available(&self) -> bool;
}