about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorIgor Matuszewski <Xanewok@gmail.com>2019-04-17 21:34:35 +0200
committerIgor Matuszewski <Xanewok@gmail.com>2019-04-21 12:45:16 +0200
commit25451967ee217b0d8a6db6195b84444f71f89d70 (patch)
tree778c9f1f8568bc4eb3c3d6a737d8afe08120d81c /src
parent4d9c6cd7226e1839a195f1b6e7d40a3ccf9bb062 (diff)
downloadrust-25451967ee217b0d8a6db6195b84444f71f89d70.tar.gz
rust-25451967ee217b0d8a6db6195b84444f71f89d70.zip
save-analysis: Use serde instead of libserialize to dump JSON data
Diffstat (limited to 'src')
-rw-r--r--src/librustc_save_analysis/Cargo.toml3
-rw-r--r--src/librustc_save_analysis/json_dumper.rs6
-rw-r--r--src/librustc_save_analysis/lib.rs9
3 files changed, 10 insertions, 8 deletions
diff --git a/src/librustc_save_analysis/Cargo.toml b/src/librustc_save_analysis/Cargo.toml
index 8bb2e722b57..aee827776fc 100644
--- a/src/librustc_save_analysis/Cargo.toml
+++ b/src/librustc_save_analysis/Cargo.toml
@@ -16,9 +16,8 @@ rustc_data_structures = { path = "../librustc_data_structures" }
 rustc_codegen_utils = { path = "../librustc_codegen_utils" }
 rustc_target = { path = "../librustc_target" }
 rustc_typeck = { path = "../librustc_typeck" }
+serde_json = "1"
 syntax = { path = "../libsyntax" }
 syntax_pos = { path = "../libsyntax_pos" }
 rls-data = "0.18.1"
 rls-span = "0.4"
-# FIXME(#40527) should move rustc serialize out of tree
-rustc-serialize = "0.3"
diff --git a/src/librustc_save_analysis/json_dumper.rs b/src/librustc_save_analysis/json_dumper.rs
index 1840cf652e1..82b78369e13 100644
--- a/src/librustc_save_analysis/json_dumper.rs
+++ b/src/librustc_save_analysis/json_dumper.rs
@@ -1,7 +1,5 @@
 use std::io::Write;
 
-use rustc_serialize::json::as_json;
-
 use rls_data::config::Config;
 use rls_data::{self, Analysis, CompilationOptions, CratePreludeData, Def, DefKind, Impl, Import,
                MacroRef, Ref, RefKind, Relation};
@@ -31,8 +29,8 @@ pub struct WriteOutput<'b, W: Write> {
 
 impl<'b, W: Write> DumpOutput for WriteOutput<'b, W> {
     fn dump(&mut self, result: &Analysis) {
-        if write!(self.output, "{}", as_json(&result)).is_err() {
-            error!("Error writing output");
+        if let Err(e) = serde_json::to_writer(self.output.by_ref(), result) {
+            error!("Can't serialize save-analysis: {:?}", e);
         }
     }
 }
diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs
index d901fb2bff8..c173d51fd40 100644
--- a/src/librustc_save_analysis/lib.rs
+++ b/src/librustc_save_analysis/lib.rs
@@ -1141,10 +1141,15 @@ fn find_config(supplied: Option<Config>) -> Config {
     if let Some(config) = supplied {
         return config;
     }
+
     match env::var_os("RUST_SAVE_ANALYSIS_CONFIG") {
-        Some(config_string) => rustc_serialize::json::decode(config_string.to_str().unwrap())
-            .expect("Could not deserialize save-analysis config"),
         None => Config::default(),
+        Some(config) => config.to_str()
+            .ok_or(())
+            .map_err(|_| error!("`RUST_SAVE_ANALYSIS_CONFIG` isn't UTF-8"))
+            .and_then(|cfg|  serde_json::from_str(cfg)
+                .map_err(|_| error!("Could not deserialize save-analysis config"))
+            ).unwrap_or_default()
     }
 }