diff options
| author | bors <bors@rust-lang.org> | 2017-11-06 12:18:12 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-11-06 12:18:12 +0000 |
| commit | 74be072068737ae3ef30be66e34c1569cf652652 (patch) | |
| tree | defd4700386fe213eecc1ab1e7e4003365b84cdb /src/libsyntax | |
| parent | 19402f11e12042367f2b711155cdde61a608b660 (diff) | |
| parent | 6d6fb2ef97b81cd5fd39c86b881879d16ecd31c0 (diff) | |
| download | rust-74be072068737ae3ef30be66e34c1569cf652652.tar.gz rust-74be072068737ae3ef30be66e34c1569cf652652.zip | |
Auto merge of #45737 - oli-obk:json, r=petrochenkov
Pretty print json in ui tests I found the json output in one line to not be useful for reviewing r? @petrochenkov
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/json.rs | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/libsyntax/json.rs b/src/libsyntax/json.rs index 31fe0c234e8..74a762f2f62 100644 --- a/src/libsyntax/json.rs +++ b/src/libsyntax/json.rs @@ -30,36 +30,41 @@ use std::rc::Rc; use std::io::{self, Write}; use std::vec; -use rustc_serialize::json::as_json; +use rustc_serialize::json::{as_json, as_pretty_json}; pub struct JsonEmitter { dst: Box<Write + Send>, registry: Option<Registry>, cm: Rc<CodeMapper + 'static>, + pretty: bool, } impl JsonEmitter { pub fn stderr(registry: Option<Registry>, - code_map: Rc<CodeMap>) -> JsonEmitter { + code_map: Rc<CodeMap>, + pretty: bool) -> JsonEmitter { JsonEmitter { dst: Box::new(io::stderr()), registry, cm: code_map, + pretty, } } - pub fn basic() -> JsonEmitter { + pub fn basic(pretty: bool) -> JsonEmitter { let file_path_mapping = FilePathMapping::empty(); - JsonEmitter::stderr(None, Rc::new(CodeMap::new(file_path_mapping))) + JsonEmitter::stderr(None, Rc::new(CodeMap::new(file_path_mapping)), pretty) } pub fn new(dst: Box<Write + Send>, registry: Option<Registry>, - code_map: Rc<CodeMap>) -> JsonEmitter { + code_map: Rc<CodeMap>, + pretty: bool) -> JsonEmitter { JsonEmitter { dst, registry, cm: code_map, + pretty, } } } @@ -67,7 +72,12 @@ impl JsonEmitter { impl Emitter for JsonEmitter { fn emit(&mut self, db: &DiagnosticBuilder) { let data = Diagnostic::from_diagnostic_builder(db, self); - if let Err(e) = writeln!(&mut self.dst, "{}", as_json(&data)) { + let result = if self.pretty { + writeln!(&mut self.dst, "{}", as_pretty_json(&data)) + } else { + writeln!(&mut self.dst, "{}", as_json(&data)) + }; + if let Err(e) = result { panic!("failed to print diagnostics: {:?}", e); } } @@ -85,9 +95,7 @@ struct Diagnostic { spans: Vec<DiagnosticSpan>, /// Associated diagnostic messages. children: Vec<Diagnostic>, - /// The message as rustc would render it. Currently this is only - /// `Some` for "suggestions", but eventually it will include all - /// snippets. + /// The message as rustc would render it. Currently this is always `None` rendered: Option<String>, } @@ -110,9 +118,7 @@ struct DiagnosticSpan { /// Label that should be placed at this location (if any) label: Option<String>, /// If we are suggesting a replacement, this will contain text - /// that should be sliced in atop this span. You may prefer to - /// load the fully rendered version from the parent `Diagnostic`, - /// however. + /// that should be sliced in atop this span. suggested_replacement: Option<String>, /// Macro invocations that created the code at this span, if any. expansion: Option<Box<DiagnosticSpanMacroExpansion>>, |
