Skip to content

Commit a019c2c

Browse files
author
Jonathan Turner
committed
Remove CoreEmitter and focus on Emitter
1 parent a6e7239 commit a019c2c

File tree

3 files changed

+58
-68
lines changed

3 files changed

+58
-68
lines changed

src/librustc_driver/test.rs

+8-11
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ use syntax::ast;
3333
use syntax::abi::Abi;
3434
use syntax::codemap::CodeMap;
3535
use errors;
36-
use errors::emitter::{CoreEmitter, Emitter};
37-
use errors::{Level, RenderSpan};
36+
use errors::emitter::Emitter;
37+
use errors::{Level, RenderSpan, DiagnosticBuilder};
3838
use syntax::parse::token;
3939
use syntax::feature_gate::UnstableFeatures;
4040
use syntax_pos::DUMMY_SP;
@@ -76,15 +76,12 @@ fn remove_message(e: &mut ExpectErrorEmitter, msg: &str, lvl: Level) {
7676
}
7777
}
7878

79-
impl CoreEmitter for ExpectErrorEmitter {
80-
fn emit_message(&mut self,
81-
_sp: &RenderSpan,
82-
msg: &str,
83-
_: Option<&str>,
84-
lvl: Level,
85-
_is_header: bool,
86-
_show_snippet: bool) {
87-
remove_message(self, msg, lvl);
79+
impl Emitter for ExpectErrorEmitter {
80+
fn emit(&mut self, db: &DiagnosticBuilder) {
81+
remove_message(self, db.message, lvl);
82+
for child in &db.children {
83+
remove_message(self, &child.message, child.level);
84+
}
8885
}
8986
}
9087

src/librustc_errors/emitter.rs

+36-43
Original file line numberDiff line numberDiff line change
@@ -25,47 +25,29 @@ use std::io;
2525
use std::rc::Rc;
2626
use term;
2727

28-
/// Emitter trait for emitting errors. Do not implement this directly:
29-
/// implement `CoreEmitter` instead.
28+
/// Emitter trait for emitting errors.
3029
pub trait Emitter {
3130
/// Emit a structured diagnostic.
3231
fn emit(&mut self, db: &DiagnosticBuilder);
3332
}
3433

35-
pub trait CoreEmitter {
36-
fn emit_message(&mut self,
37-
rsp: &RenderSpan,
38-
msg: &str,
39-
code: Option<&str>,
40-
lvl: Level,
41-
is_header: bool,
42-
show_snippet: bool);
43-
}
44-
45-
impl<T: CoreEmitter> Emitter for T {
34+
impl Emitter for EmitterWriter {
4635
fn emit(&mut self, db: &DiagnosticBuilder) {
47-
let old_school = check_old_skool();
48-
let db_span = FullSpan(db.span.clone());
4936
self.emit_message(&FullSpan(db.span.clone()),
5037
&db.message,
5138
db.code.as_ref().map(|s| &**s),
5239
db.level,
5340
true,
5441
true);
55-
for child in &db.children {
56-
let render_span = child.render_span
57-
.clone()
58-
.unwrap_or_else(
59-
|| FullSpan(child.span.clone()));
6042

61-
if !old_school {
62-
self.emit_message(&render_span,
63-
&child.message,
64-
None,
65-
child.level,
66-
false,
67-
true);
68-
} else {
43+
if check_old_skool() {
44+
let db_span = FullSpan(db.span.clone());
45+
46+
for child in &db.children {
47+
let render_span = child.render_span
48+
.clone()
49+
.unwrap_or_else(
50+
|| FullSpan(child.span.clone()));
6951
let (render_span, show_snippet) = match render_span.span().primary_span() {
7052
None => (db_span.clone(), false),
7153
_ => (render_span, true)
@@ -77,6 +59,19 @@ impl<T: CoreEmitter> Emitter for T {
7759
false,
7860
show_snippet);
7961
}
62+
} else {
63+
for child in &db.children {
64+
let render_span = child.render_span
65+
.clone()
66+
.unwrap_or_else(
67+
|| FullSpan(child.span.clone()));
68+
self.emit_message(&render_span,
69+
&child.message,
70+
None,
71+
child.level,
72+
false,
73+
true);
74+
}
8075
}
8176
}
8277
}
@@ -114,21 +109,6 @@ pub struct EmitterWriter {
114109
format_mode: FormatMode
115110
}
116111

117-
impl CoreEmitter for EmitterWriter {
118-
fn emit_message(&mut self,
119-
rsp: &RenderSpan,
120-
msg: &str,
121-
code: Option<&str>,
122-
lvl: Level,
123-
is_header: bool,
124-
show_snippet: bool) {
125-
match self.emit_message_(rsp, msg, code, lvl, is_header, show_snippet) {
126-
Ok(()) => { }
127-
Err(e) => panic!("failed to emit error: {}", e)
128-
}
129-
}
130-
}
131-
132112
/// Do not use this for messages that end in `\n` – use `println_maybe_styled` instead. See
133113
/// `EmitterWriter::print_maybe_styled` for details.
134114
macro_rules! print_maybe_styled {
@@ -177,6 +157,19 @@ impl EmitterWriter {
177157
format_mode: format_mode.clone() }
178158
}
179159

160+
fn emit_message(&mut self,
161+
rsp: &RenderSpan,
162+
msg: &str,
163+
code: Option<&str>,
164+
lvl: Level,
165+
is_header: bool,
166+
show_snippet: bool) {
167+
match self.emit_message_(rsp, msg, code, lvl, is_header, show_snippet) {
168+
Ok(()) => { }
169+
Err(e) => panic!("failed to emit error: {}", e)
170+
}
171+
}
172+
180173
fn emit_message_(&mut self,
181174
rsp: &RenderSpan,
182175
msg: &str,

src/librustc_trans/back/write.rs

+14-14
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ use llvm::SMDiagnosticRef;
1919
use {CrateTranslation, ModuleTranslation};
2020
use util::common::time;
2121
use util::common::path2cstr;
22-
use errors::{self, Handler, Level, RenderSpan};
23-
use errors::emitter::CoreEmitter;
22+
use errors::{self, Handler, Level, DiagnosticBuilder};
23+
use errors::emitter::Emitter;
2424
use syntax_pos::MultiSpan;
2525

2626
use std::collections::HashMap;
@@ -100,23 +100,23 @@ impl SharedEmitter {
100100
}
101101
}
102102

103-
impl CoreEmitter for SharedEmitter {
104-
fn emit_message(&mut self,
105-
_rsp: &RenderSpan,
106-
msg: &str,
107-
code: Option<&str>,
108-
lvl: Level,
109-
_is_header: bool,
110-
_show_snippet: bool) {
103+
impl Emitter for SharedEmitter {
104+
fn emit(&mut self, db: &DiagnosticBuilder) {
111105
self.buffer.lock().unwrap().push(Diagnostic {
112-
msg: msg.to_string(),
113-
code: code.map(|s| s.to_string()),
114-
lvl: lvl,
106+
msg: db.message.to_string(),
107+
code: db.code.clone(),
108+
lvl: db.level,
115109
});
110+
for child in &db.children {
111+
self.buffer.lock().unwrap().push(Diagnostic {
112+
msg: child.message.to_string(),
113+
code: None,
114+
lvl: child.level,
115+
});
116+
}
116117
}
117118
}
118119

119-
120120
// On android, we by default compile for armv7 processors. This enables
121121
// things like double word CAS instructions (rather than emulating them)
122122
// which are *far* more efficient. This is obviously undesirable in some

0 commit comments

Comments
 (0)