use std::collections::HashMap;
use std::time::Duration;
use serde::Deserialize;
use crate::context::ServerContextSnapshot;
use crate::util::time_cancel_token;
use super::ClientConfig;
use super::default_config::get_client_config_default;
#[derive(Debug, Deserialize)]
struct VscodeFilesConfig {
exclude: Option<HashMap<String, bool>>,
}
pub async fn get_client_config_vscode(
context: &ServerContextSnapshot,
config: &mut ClientConfig,
) -> Option<()> {
get_client_config_default(context, config, None).await;
let params = lsp_types::ConfigurationParams {
items: vec![lsp_types::ConfigurationItem {
scope_uri: None,
section: Some("files".to_string()),
}],
};
let cancel_token = time_cancel_token(Duration::from_secs(5));
let files_configs = context
.client()
.get_configuration::<VscodeFilesConfig>(params, cancel_token)
.await?;
for files_config in files_configs {
let Some(exclude) = files_config.exclude else {
continue;
};
for (pattern, hidden) in exclude {
if hidden && !config.exclude.contains(&pattern) {
config.exclude.push(pattern);
}
}
}
Some(())
}