use lsp_types::{ClientCapabilities, DidChangeConfigurationParams, ServerCapabilities};
use crate::{context::ServerContextSnapshot, handlers::initialized::get_client_config};
use super::RegisterCapabilities;
pub async fn on_did_change_configuration(
context: ServerContextSnapshot,
params: DidChangeConfigurationParams,
) -> Option<()> {
let pretty_json = serde_json::to_string_pretty(¶ms).ok()?;
log::info!("on_did_change_configuration: {}", pretty_json);
let (client_id, supports_config_request) = {
let workspace_manager = context.workspace_manager().read().await;
let client_id = workspace_manager.client_config.client_id;
let supports_config_request = context.lsp_features().supports_config_request();
(client_id, supports_config_request)
};
log::info!("change config client_id: {:?}", client_id);
let new_client_config = get_client_config(&context, client_id, supports_config_request).await;
{
let mut workspace_manager = context.workspace_manager().write().await;
if workspace_manager.client_config == new_client_config {
log::info!("skip workspace reload; client config unchanged");
return Some(());
}
workspace_manager.client_config = new_client_config;
log::info!("reloading workspace folders");
workspace_manager.add_reload_workspace_task(context.workspace_manager_arc());
}
Some(())
}
pub struct ConfigurationCapabilities;
impl RegisterCapabilities for ConfigurationCapabilities {
fn register_capabilities(_: &mut ServerCapabilities, _: &ClientCapabilities) {}
}