use crate::lsp::LSP;
use std::env;
use tower_lsp::jsonrpc::Result;
use tower_lsp::lsp_types::*;
impl LSP {
pub async fn handle_initialize(&self, _params: InitializeParams) -> Result<InitializeResult> {
self.client
.log_message(MessageType::INFO, "Ersa LSP initializing...")
.await;
Ok(InitializeResult {
capabilities: ServerCapabilities {
text_document_sync: Some(TextDocumentSyncCapability::Options(
TextDocumentSyncOptions {
open_close: Some(true),
change: Some(TextDocumentSyncKind::FULL),
will_save: None,
will_save_wait_until: None,
save: Some(TextDocumentSyncSaveOptions::Supported(true)),
},
)),
hover_provider: Some(HoverProviderCapability::Simple(true)),
completion_provider: Some(CompletionOptions {
trigger_characters: None,
all_commit_characters: None,
resolve_provider: Some(false),
work_done_progress_options: WorkDoneProgressOptions::default(),
completion_item: None,
}),
definition_provider: Some(OneOf::Left(true)),
references_provider: Some(OneOf::Left(true)),
document_symbol_provider: Some(OneOf::Left(true)),
document_highlight_provider: Some(OneOf::Left(true)),
rename_provider: Some(OneOf::Left(true)),
folding_range_provider: Some(FoldingRangeProviderCapability::Simple(true)),
signature_help_provider: Some(SignatureHelpOptions {
trigger_characters: Some(vec!["(".to_string(), ",".to_string()]),
retrigger_characters: None,
work_done_progress_options: WorkDoneProgressOptions::default(),
}),
semantic_tokens_provider: Some(
SemanticTokensServerCapabilities::SemanticTokensOptions(
SemanticTokensOptions {
work_done_progress_options: WorkDoneProgressOptions::default(),
legend: SemanticTokensLegend {
token_types: vec![
SemanticTokenType::FUNCTION,
SemanticTokenType::VARIABLE,
SemanticTokenType::ENUM_MEMBER,
SemanticTokenType::PARAMETER,
],
token_modifiers: vec![
SemanticTokenModifier::DECLARATION,
SemanticTokenModifier::READONLY,
],
},
range: Some(false),
full: Some(SemanticTokensFullOptions::Bool(true)),
},
),
),
document_formatting_provider: Some(OneOf::Left(true)),
inlay_hint_provider: Some(OneOf::Left(true)),
diagnostic_provider: Some(DiagnosticServerCapabilities::Options(
DiagnosticOptions {
identifier: Some("ersa_lsp".to_string()),
inter_file_dependencies: false,
workspace_diagnostics: false,
work_done_progress_options: WorkDoneProgressOptions::default(),
},
)),
code_lens_provider: Some(CodeLensOptions {
resolve_provider: Some(false),
}),
..Default::default()
},
server_info: Some(ServerInfo {
name: "ersa_lsp".to_string(),
version: Some(env!("CARGO_PKG_VERSION").to_string()),
}),
})
}
pub async fn handle_initialized(&self, _: InitializedParams) {
self.client
.log_message(MessageType::INFO, "Ersa LSP initialized successfully.")
.await;
}
pub async fn handle_shutdown(&self) -> Result<()> {
self.log("Ersa LSP shutting down.").await;
Ok(())
}
}