aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/rust-analyzer/src/config.rs5
-rw-r--r--crates/rust-analyzer/src/main_loop.rs2
2 files changed, 7 insertions, 0 deletions
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs
index fec4feee5..8947ccf07 100644
--- a/crates/rust-analyzer/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
@@ -178,6 +178,11 @@ impl Config {
178 178
179 pub fn update(&mut self, json: serde_json::Value) { 179 pub fn update(&mut self, json: serde_json::Value) {
180 log::info!("Config::update({:#})", json); 180 log::info!("Config::update({:#})", json);
181
182 if json.is_null() || json.as_object().map_or(false, |it| it.is_empty()) {
183 return;
184 }
185
181 let data = ConfigData::from_json(json); 186 let data = ConfigData::from_json(json);
182 187
183 self.with_sysroot = data.withSysroot; 188 self.with_sysroot = data.withSysroot;
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index a41f7f564..bb7c4c0c6 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -468,6 +468,8 @@ impl GlobalState {
468 } 468 }
469 (None, Some(mut configs)) => { 469 (None, Some(mut configs)) => {
470 if let Some(json) = configs.get_mut(0) { 470 if let Some(json) = configs.get_mut(0) {
471 // Note that json can be null according to the spec if the client can't
472 // provide a configuration. This is handled in Config::update below.
471 let mut config = this.config.clone(); 473 let mut config = this.config.clone();
472 config.update(json.take()); 474 config.update(json.take());
473 this.update_configuration(config); 475 this.update_configuration(config);