diff options
| author | Jonathan Turner <jturner@mozilla.com> | 2016-07-06 12:08:16 -0400 |
|---|---|---|
| committer | Jonathan Turner <jturner@mozilla.com> | 2016-07-14 07:57:46 -0400 |
| commit | 55f06883b83bb652d7a8f036c15136abeb933048 (patch) | |
| tree | 910d93e4b74a1265957a19bb46134b0a56b3f501 /src | |
| parent | 8f044fae36b73ec4593c127ec2a7c28716208591 (diff) | |
| download | rust-55f06883b83bb652d7a8f036c15136abeb933048.tar.gz rust-55f06883b83bb652d7a8f036c15136abeb933048.zip | |
Remove emit from emitter, leaving emit_struct
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/session/mod.rs | 10 | ||||
| -rw-r--r-- | src/librustc_driver/lib.rs | 34 | ||||
| -rw-r--r-- | src/librustc_errors/emitter.rs | 16 | ||||
| -rw-r--r-- | src/librustc_errors/lib.rs | 57 | ||||
| -rw-r--r-- | src/libsyntax/json.rs | 25 |
5 files changed, 71 insertions, 71 deletions
diff --git a/src/librustc/session/mod.rs b/src/librustc/session/mod.rs index 3939f5f5880..fa9bc7c8368 100644 --- a/src/librustc/session/mod.rs +++ b/src/librustc/session/mod.rs @@ -576,7 +576,7 @@ unsafe fn configure_llvm(sess: &Session) { } pub fn early_error(output: config::ErrorOutputType, msg: &str) -> ! { - let mut emitter: Box<Emitter> = match output { + let emitter: Box<Emitter> = match output { config::ErrorOutputType::HumanReadable(color_config) => { Box::new(EmitterWriter::stderr(color_config, None, @@ -585,12 +585,13 @@ pub fn early_error(output: config::ErrorOutputType, msg: &str) -> ! { } config::ErrorOutputType::Json => Box::new(JsonEmitter::basic()), }; - emitter.emit(&MultiSpan::new(), msg, None, errors::Level::Fatal); + let handler = errors::Handler::with_emitter(true, false, emitter); + handler.emit(&MultiSpan::new(), msg, errors::Level::Fatal); panic!(errors::FatalError); } pub fn early_warn(output: config::ErrorOutputType, msg: &str) { - let mut emitter: Box<Emitter> = match output { + let emitter: Box<Emitter> = match output { config::ErrorOutputType::HumanReadable(color_config) => { Box::new(EmitterWriter::stderr(color_config, None, @@ -599,7 +600,8 @@ pub fn early_warn(output: config::ErrorOutputType, msg: &str) { } config::ErrorOutputType::Json => Box::new(JsonEmitter::basic()), }; - emitter.emit(&MultiSpan::new(), msg, None, errors::Level::Warning); + let handler = errors::Handler::with_emitter(true, false, emitter); + handler.emit(&MultiSpan::new(), msg, errors::Level::Warning); } // Err(0) means compilation was stopped, but no errors were found. diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 695e9062db3..0a8df923b84 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -139,13 +139,15 @@ pub fn run(args: Vec<String>) -> isize { match session { Some(sess) => sess.fatal(&abort_msg(err_count)), None => { - let mut emitter = + let emitter = errors::emitter::EmitterWriter::stderr(errors::ColorConfig::Auto, None, None, FormatMode::EnvironmentSelected); - emitter.emit(&MultiSpan::new(), &abort_msg(err_count), None, - errors::Level::Fatal); + let handler = errors::Handler::with_emitter(true, false, Box::new(emitter)); + handler.emit(&MultiSpan::new(), + &abort_msg(err_count), + errors::Level::Fatal); exit_on_err(); } } @@ -377,7 +379,7 @@ fn handle_explain(code: &str, fn check_cfg(sopts: &config::Options, output: ErrorOutputType) { - let mut emitter: Box<Emitter> = match output { + let emitter: Box<Emitter> = match output { config::ErrorOutputType::HumanReadable(color_config) => { Box::new(errors::emitter::EmitterWriter::stderr(color_config, None, @@ -386,17 +388,17 @@ fn check_cfg(sopts: &config::Options, } config::ErrorOutputType::Json => Box::new(json::JsonEmitter::basic()), }; + let handler = errors::Handler::with_emitter(true, false, emitter); let mut saw_invalid_predicate = false; for item in sopts.cfg.iter() { match item.node { ast::MetaItemKind::List(ref pred, _) => { saw_invalid_predicate = true; - emitter.emit(&MultiSpan::new(), + handler.emit(&MultiSpan::new(), &format!("invalid predicate in --cfg command line argument: `{}`", pred), - None, - errors::Level::Fatal); + errors::Level::Fatal); } _ => {}, } @@ -1053,30 +1055,34 @@ pub fn monitor<F: FnOnce() + Send + 'static>(f: F) { if let Err(value) = thread.unwrap().join() { // Thread panicked without emitting a fatal diagnostic if !value.is::<errors::FatalError>() { - let mut emitter = - errors::emitter::EmitterWriter::stderr(errors::ColorConfig::Auto, + let emitter = + Box::new(errors::emitter::EmitterWriter::stderr(errors::ColorConfig::Auto, None, None, - FormatMode::EnvironmentSelected); + FormatMode::EnvironmentSelected)); + let handler = errors::Handler::with_emitter(true, false, emitter); // a .span_bug or .bug call has already printed what // it wants to print. if !value.is::<errors::ExplicitBug>() { - emitter.emit(&MultiSpan::new(), "unexpected panic", None, errors::Level::Bug); + handler.emit(&MultiSpan::new(), + "unexpected panic", + errors::Level::Bug); } let xs = ["the compiler unexpectedly panicked. this is a bug.".to_string(), format!("we would appreciate a bug report: {}", BUG_REPORT_URL)]; for note in &xs { - emitter.emit(&MultiSpan::new(), ¬e[..], None, errors::Level::Note) + handler.emit(&MultiSpan::new(), + ¬e[..], + errors::Level::Note); } if match env::var_os("RUST_BACKTRACE") { Some(val) => &val != "0", None => false, } { - emitter.emit(&MultiSpan::new(), + handler.emit(&MultiSpan::new(), "run with `RUST_BACKTRACE=1` for a backtrace", - None, errors::Level::Note); } diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index 75c35869e9e..ab331239cdb 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -28,9 +28,6 @@ use term; /// Emitter trait for emitting errors. Do not implement this directly: /// implement `CoreEmitter` instead. pub trait Emitter { - /// Emit a standalone diagnostic message. - fn emit(&mut self, span: &MultiSpan, msg: &str, code: Option<&str>, lvl: Level); - /// Emit a structured diagnostic. fn emit_struct(&mut self, db: &DiagnosticBuilder); } @@ -46,19 +43,6 @@ pub trait CoreEmitter { } impl<T: CoreEmitter> Emitter for T { - fn emit(&mut self, - msp: &MultiSpan, - msg: &str, - code: Option<&str>, - lvl: Level) { - self.emit_message(&FullSpan(msp.clone()), - msg, - code, - lvl, - true, - true); - } - fn emit_struct(&mut self, db: &DiagnosticBuilder) { let old_school = check_old_skool(); let db_span = FullSpan(db.span.clone()); diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index 100e79b1954..e3e63341ee9 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -359,11 +359,20 @@ impl<'a> DiagnosticBuilder<'a> { fn new(handler: &'a Handler, level: Level, message: &str) -> DiagnosticBuilder<'a> { + DiagnosticBuilder::new_with_code(handler, level, None, message) + } + + /// Convenience function for internal use, clients should use one of the + /// struct_* methods on Handler. + fn new_with_code(handler: &'a Handler, + level: Level, + code: Option<String>, + message: &str) -> DiagnosticBuilder<'a> { DiagnosticBuilder { handler: handler, level: level, message: message.to_owned(), - code: None, + code: code, span: MultiSpan::new(), children: vec![], } @@ -397,10 +406,10 @@ impl<'a> fmt::Debug for DiagnosticBuilder<'a> { impl<'a> Drop for DiagnosticBuilder<'a> { fn drop(&mut self) { if !panicking() && !self.cancelled() { - self.handler.emit.borrow_mut().emit(&MultiSpan::new(), - "Error constructed but not emitted", - None, - Bug); + let mut db = DiagnosticBuilder::new(self.handler, + Bug, + "Error constructed but not emitted"); + db.emit(); panic!(); } } @@ -588,7 +597,7 @@ impl Handler { self.bump_err_count(); } pub fn span_note_without_error<S: Into<MultiSpan>>(&self, sp: S, msg: &str) { - self.emit.borrow_mut().emit(&sp.into(), msg, None, Note); + self.emit(&sp.into(), msg, Note); } pub fn span_unimpl<S: Into<MultiSpan>>(&self, sp: S, msg: &str) -> ! { self.span_bug(sp, &format!("unimplemented {}", msg)); @@ -597,7 +606,10 @@ impl Handler { if self.treat_err_as_bug { self.bug(msg); } - self.emit.borrow_mut().emit(&MultiSpan::new(), msg, None, Fatal); + let mut db = DiagnosticBuilder::new(self, + Fatal, + msg); + db.emit(); self.bump_err_count(); FatalError } @@ -605,17 +617,29 @@ impl Handler { if self.treat_err_as_bug { self.bug(msg); } - self.emit.borrow_mut().emit(&MultiSpan::new(), msg, None, Error); + let mut db = DiagnosticBuilder::new(self, + Error, + msg); + db.emit(); self.bump_err_count(); } pub fn warn(&self, msg: &str) { - self.emit.borrow_mut().emit(&MultiSpan::new(), msg, None, Warning); + let mut db = DiagnosticBuilder::new(self, + Warning, + msg); + db.emit(); } pub fn note_without_error(&self, msg: &str) { - self.emit.borrow_mut().emit(&MultiSpan::new(), msg, None, Note); + let mut db = DiagnosticBuilder::new(self, + Note, + msg); + db.emit(); } pub fn bug(&self, msg: &str) -> ! { - self.emit.borrow_mut().emit(&MultiSpan::new(), msg, None, Bug); + let mut db = DiagnosticBuilder::new(self, + Bug, + msg); + db.emit(); panic!(ExplicitBug); } pub fn unimpl(&self, msg: &str) -> ! { @@ -661,7 +685,9 @@ impl Handler { msg: &str, lvl: Level) { if lvl == Warning && !self.can_emit_warnings { return } - self.emit.borrow_mut().emit(&msp, msg, None, lvl); + let mut db = DiagnosticBuilder::new(self, lvl, msg); + db.set_span(msp.clone()); + db.emit(); if !self.continue_after_error.get() { self.abort_if_errors(); } } pub fn emit_with_code(&self, @@ -670,7 +696,12 @@ impl Handler { code: &str, lvl: Level) { if lvl == Warning && !self.can_emit_warnings { return } - self.emit.borrow_mut().emit(&msp, msg, Some(code), lvl); + let mut db = DiagnosticBuilder::new_with_code(self, + lvl, + Some(code.to_owned()), + msg); + db.set_span(msp.clone()); + db.emit(); if !self.continue_after_error.get() { self.abort_if_errors(); } } } diff --git a/src/libsyntax/json.rs b/src/libsyntax/json.rs index dc9a5ee4664..20908453e73 100644 --- a/src/libsyntax/json.rs +++ b/src/libsyntax/json.rs @@ -22,7 +22,7 @@ use codemap::CodeMap; use syntax_pos::{self, MacroBacktrace, Span, SpanLabel, MultiSpan}; use errors::registry::Registry; -use errors::{Level, DiagnosticBuilder, SubDiagnostic, RenderSpan, CodeSuggestion, CodeMapper}; +use errors::{DiagnosticBuilder, SubDiagnostic, RenderSpan, CodeSuggestion, CodeMapper}; use errors::emitter::Emitter; use std::rc::Rc; @@ -53,13 +53,6 @@ impl JsonEmitter { } impl Emitter for JsonEmitter { - fn emit(&mut self, span: &MultiSpan, msg: &str, code: Option<&str>, level: Level) { - let data = Diagnostic::new(span, msg, code, level, self); - if let Err(e) = writeln!(&mut self.dst, "{}", as_json(&data)) { - panic!("failed to print diagnostics: {:?}", e); - } - } - fn emit_struct(&mut self, db: &DiagnosticBuilder) { let data = Diagnostic::from_diagnostic_builder(db, self); if let Err(e) = writeln!(&mut self.dst, "{}", as_json(&data)) { @@ -146,22 +139,6 @@ struct DiagnosticCode { } impl<'a> Diagnostic<'a> { - fn new(msp: &MultiSpan, - msg: &'a str, - code: Option<&str>, - level: Level, - je: &JsonEmitter) - -> Diagnostic<'a> { - Diagnostic { - message: msg, - code: DiagnosticCode::map_opt_string(code.map(|c| c.to_owned()), je), - level: level.to_str(), - spans: DiagnosticSpan::from_multispan(msp, je), - children: vec![], - rendered: None, - } - } - fn from_diagnostic_builder<'c>(db: &'c DiagnosticBuilder, je: &JsonEmitter) -> Diagnostic<'c> { |
