From c04a2ccb3525ee55ab2484f0390eff2a047eecce Mon Sep 17 00:00:00 2001 From: Philipp Hansch Date: Fri, 31 May 2019 21:15:59 +0200 Subject: [PATCH] Add new error-format value to use annotate-snippet output --- src/librustc/session/config.rs | 10 +++++ src/librustc/session/mod.rs | 39 +++++++++++++------- src/test/ui/annotate-snippet/missing-type.rs | 5 +++ 3 files changed, 40 insertions(+), 14 deletions(-) create mode 100644 src/test/ui/annotate-snippet/missing-type.rs diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index d8efa17defe..6a35906d20c 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -2002,6 +2002,9 @@ pub fn build_session_options_and_crate_config( match matches.opt_str("error-format").as_ref().map(|s| &s[..]) { None | Some("human") => ErrorOutputType::HumanReadable(HumanReadableErrorType::Default(color)), + Some("human-annotate-rs") => { + ErrorOutputType::HumanReadable(HumanReadableErrorType::AnnotateRs(color)) + }, Some("json") => ErrorOutputType::Json { pretty: false, json_rendered }, Some("pretty-json") => ErrorOutputType::Json { pretty: true, json_rendered }, Some("short") => ErrorOutputType::HumanReadable(HumanReadableErrorType::Short(color)), @@ -2038,6 +2041,13 @@ pub fn build_session_options_and_crate_config( "--error-format=pretty-json is unstable", ); } + if let ErrorOutputType::HumanReadable(HumanReadableErrorType::AnnotateRs(_)) = + error_format { + early_error( + ErrorOutputType::Json { pretty: false, json_rendered }, + "--error-format=human-annotate-rs is unstable", + ); + } } if debugging_opts.pgo_gen.enabled() && debugging_opts.pgo_use.is_some() { diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index 40af5b45f9c..b3a9d764b1d 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -23,6 +23,8 @@ use errors::{DiagnosticBuilder, DiagnosticId, Applicability}; use errors::emitter::{Emitter, EmitterWriter}; +use errors::emitter::HumanReadableErrorType; +use errors::annotate_rs_emitter::{AnnotateRsEmitterWriter}; use syntax::ast::{self, NodeId}; use syntax::edition::Edition; use syntax::feature_gate::{self, AttributeType}; @@ -1031,22 +1033,31 @@ fn default_emitter( match (sopts.error_format, emitter_dest) { (config::ErrorOutputType::HumanReadable(kind), dst) => { let (short, color_config) = kind.unzip(); - let emitter = match dst { - None => EmitterWriter::stderr( - color_config, - Some(source_map.clone()), - short, - sopts.debugging_opts.teach, - ), - Some(dst) => EmitterWriter::new( - dst, + + if let HumanReadableErrorType::AnnotateRs(_) = kind { + let emitter = AnnotateRsEmitterWriter::new( Some(source_map.clone()), short, - false, // no teach messages when writing to a buffer - false, // no colors when writing to a buffer - ), - }; - Box::new(emitter.ui_testing(sopts.debugging_opts.ui_testing)) + ); + Box::new(emitter.ui_testing(sopts.debugging_opts.ui_testing)) + } else { + let emitter = match dst { + None => EmitterWriter::stderr( + color_config, + Some(source_map.clone()), + short, + sopts.debugging_opts.teach, + ), + Some(dst) => EmitterWriter::new( + dst, + Some(source_map.clone()), + short, + false, // no teach messages when writing to a buffer + false, // no colors when writing to a buffer + ), + }; + Box::new(emitter.ui_testing(sopts.debugging_opts.ui_testing)) + } }, (config::ErrorOutputType::Json { pretty, json_rendered }, None) => Box::new( JsonEmitter::stderr( diff --git a/src/test/ui/annotate-snippet/missing-type.rs b/src/test/ui/annotate-snippet/missing-type.rs new file mode 100644 index 00000000000..e52a81ec161 --- /dev/null +++ b/src/test/ui/annotate-snippet/missing-type.rs @@ -0,0 +1,5 @@ +// compile-flags: --error-format human-annotate-rs + +pub fn main() { + let x: Iter; +} -- 2.44.0