Skip to content

Commit 0171b9c

Browse files
committed
try support didchangeConfiguration
1 parent f3c9932 commit 0171b9c

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

crates/emmylua_ls/src/context/config_manager.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,31 @@ impl ConfigManager {
8484
log::info!("update code style: {:?}", file_normalized);
8585
update_code_style(&parent_dir, &file_normalized);
8686
}
87+
88+
pub async fn reload_workspace(&self) -> Option<()> {
89+
let config_root: Option<PathBuf> = match self.workspace_folders.first() {
90+
Some(root) => Some(PathBuf::from(root)),
91+
None => None,
92+
};
93+
94+
let emmyrc = load_emmy_config(config_root, self.client_config.clone());
95+
let analysis = self.analysis.clone();
96+
let client = self.client.clone();
97+
let workspace_folders = self.workspace_folders.clone();
98+
let status_bar = self.status_bar.clone();
99+
let client_id = self.client_config.client_id;
100+
init_analysis(
101+
analysis,
102+
client,
103+
&status_bar,
104+
workspace_folders,
105+
emmyrc,
106+
client_id,
107+
)
108+
.await;
109+
110+
Some(())
111+
}
87112
}
88113

89114
pub fn load_emmy_config(config_root: Option<PathBuf>, client_config: ClientConfig) -> Arc<Emmyrc> {

crates/emmylua_ls/src/handlers/configuration/mod.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use lsp_types::{
22
ClientCapabilities, DidChangeConfigurationParams, ServerCapabilities
33
};
44

5-
use crate::context::ServerContextSnapshot;
5+
use crate::{context::ServerContextSnapshot, handlers::initialized::get_client_config};
66

77
pub async fn on_did_change_configuration(
88
context: ServerContextSnapshot,
@@ -11,12 +11,18 @@ pub async fn on_did_change_configuration(
1111
let pretty_json = serde_json::to_string_pretty(&params).ok()?;
1212
log::info!("on_did_change_configuration: {}", pretty_json);
1313

14-
let config = context.config_manager.read().await;
15-
if config.client_config.client_id.is_vscode() {
14+
let config_manager = context.config_manager.read().await;
15+
if config_manager.client_config.client_id.is_vscode() {
1616
return Some(());
1717
}
18+
let client_id = config_manager.client_config.client_id;
19+
drop(config_manager);
1820

19-
// I don't know what to do here
21+
let new_client_config = get_client_config(&context, client_id).await;
22+
let mut config_manager = context.config_manager.write().await;
23+
config_manager.client_config = new_client_config;
24+
25+
config_manager.reload_workspace().await;
2026
Some(())
2127
}
2228

crates/emmylua_ls/src/handlers/initialized/mod.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ use crate::{
1414
handlers::text_document::register_files_watch,
1515
logger::init_logger,
1616
};
17-
use client_config::get_client_config;
18-
pub use client_config::ClientConfig;
17+
pub use client_config::{get_client_config, ClientConfig};
1918
use code_analysis::{uri_to_file_path, EmmyLuaAnalysis, Emmyrc, FileId, Profile};
2019
use codestyle::load_editorconfig;
2120
use collect_files::collect_files;

0 commit comments

Comments
 (0)