about summary refs log tree commit diff
diff options
context:
space:
mode:
authorkjeremy <kjeremy@gmail.com>2020-07-20 17:25:48 -0400
committerkjeremy <kjeremy@gmail.com>2020-07-20 17:42:48 -0400
commitadc4bb54062bd0bdff8bfaecce238990f4225bac (patch)
treeaebb71b2cfd4528f487edeae75685610cf205d1f
parent76c1fac9c3ed9fa3f784e5cdde7dd770c9fac6c1 (diff)
downloadrust-adc4bb54062bd0bdff8bfaecce238990f4225bac.tar.gz
rust-adc4bb54062bd0bdff8bfaecce238990f4225bac.zip
Allow client to respond to workspace/configuration with null values
This is allowed per the spec if the client doesn't know about the configuration
we've requested.
-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 68b2a2abdd0..3a0aa418331 100644
--- a/crates/rust-analyzer/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
@@ -177,6 +177,11 @@ impl Config {
 
     pub fn update(&mut self, json: serde_json::Value) {
         log::info!("Config::update({:#})", json);
+
+        if json.is_null() {
+            return;
+        }
+
         let data = ConfigData::from_json(json);
 
         self.with_sysroot = data.withSysroot;
diff --git a/crates/rust-analyzer/src/main_loop.rs b/crates/rust-analyzer/src/main_loop.rs
index a41f7f56466..bb7c4c0c64f 100644
--- a/crates/rust-analyzer/src/main_loop.rs
+++ b/crates/rust-analyzer/src/main_loop.rs
@@ -468,6 +468,8 @@ impl GlobalState {
                             }
                             (None, Some(mut configs)) => {
                                 if let Some(json) = configs.get_mut(0) {
+                                    // Note that json can be null according to the spec if the client can't
+                                    // provide a configuration. This is handled in Config::update below.
                                     let mut config = this.config.clone();
                                     config.update(json.take());
                                     this.update_configuration(config);