#![allow(async_fn_in_trait)]
use lsp_types::{
DidOpenTextDocumentParams, InitializeParams, InitializeResult, InitializedParams,
ServerCapabilities, TextDocumentSyncCapability, TextDocumentSyncKind,
};
use tokio_util::sync::CancellationToken;
use crate::context::Context;
use crate::error::LspError;
pub trait LanguageServer: Send + Sync + 'static {
const TEXT_DOCUMENT_SYNC: TextDocumentSyncKind = TextDocumentSyncKind::INCREMENTAL;
fn server_capabilities(&self) -> ServerCapabilities {
ServerCapabilities {
text_document_sync: Some(TextDocumentSyncCapability::Kind(Self::TEXT_DOCUMENT_SYNC)),
..ServerCapabilities::default()
}
}
async fn initialize(
&self,
_ctx: &Context,
_params: InitializeParams,
_ct: CancellationToken,
) -> Result<InitializeResult, LspError> {
Ok(InitializeResult {
capabilities: self.server_capabilities(),
server_info: None,
})
}
async fn initialized(&self, _ctx: &Context, _params: InitializedParams) {}
async fn shutdown(&self, _ctx: &Context, _ct: CancellationToken) -> Result<(), LspError> {
Ok(())
}
async fn exit(&self, _ctx: &Context) {}
async fn text_document_did_open(&self, _ctx: &Context, _params: DidOpenTextDocumentParams) {}
}