Skip to content

Commit 1722e78

Browse files
committed
---
yaml --- r: 277537 b: refs/heads/try c: 1067850 h: refs/heads/master i: 277535: 20ba911
1 parent 0d7159c commit 1722e78

File tree

6 files changed

+93
-114
lines changed

6 files changed

+93
-114
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 6dbb0e86aec11050480beb76eade6fb805010ba7
33
refs/heads/snap-stage3: 235d77457d80b549dad3ac36d94f235208a1eafb
4-
refs/heads/try: 9d022f299359c341d2f57ab5425855556fc83937
4+
refs/heads/try: 1067850e6a8664eaabd59c3893aa5a762bdf2339
55
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
66
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
77
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try/src/librustc_driver/test.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ use std::cell::RefCell;
3434
use std::rc::Rc;
3535
use syntax::ast;
3636
use syntax::abi::Abi;
37-
use syntax::codemap::{MultiSpan, CodeMap, DUMMY_SP};
37+
use syntax::codemap::{CodeMap, DUMMY_SP};
3838
use syntax::errors;
39-
use syntax::errors::emitter::Emitter;
39+
use syntax::errors::emitter::{CoreEmitter, Emitter};
4040
use syntax::errors::{Level, RenderSpan};
4141
use syntax::parse::token;
4242
use syntax::feature_gate::UnstableFeatures;
@@ -78,12 +78,13 @@ fn remove_message(e: &mut ExpectErrorEmitter, msg: &str, lvl: Level) {
7878
}
7979
}
8080

81-
impl Emitter for ExpectErrorEmitter {
82-
fn emit(&mut self,
83-
_sp: Option<&MultiSpan>,
84-
msg: &str,
85-
_: Option<&str>,
86-
lvl: Level) {
81+
impl CoreEmitter for ExpectErrorEmitter {
82+
fn emit_message(&mut self,
83+
_sp: &RenderSpan,
84+
msg: &str,
85+
_: Option<&str>,
86+
lvl: Level,
87+
_is_header: bool) {
8788
remove_message(self, msg, lvl);
8889
}
8990
}

branches/try/src/librustc_trans/back/write.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ use {CrateTranslation, ModuleTranslation};
2020
use util::common::time;
2121
use util::common::path2cstr;
2222
use syntax::codemap::MultiSpan;
23-
use syntax::errors::{self, Handler, Level};
24-
use syntax::errors::emitter::RudimentaryEmitter;
23+
use syntax::errors::{self, Handler, Level, RenderSpan};
24+
use syntax::errors::emitter::CoreEmitter;
2525

2626
use std::collections::HashMap;
2727
use std::ffi::{CStr, CString};
@@ -100,11 +100,13 @@ impl SharedEmitter {
100100
}
101101
}
102102

103-
impl RudimentaryEmitter for SharedEmitter {
104-
fn emit_rudimentary(&mut self,
105-
msg: &str,
106-
code: Option<&str>,
107-
lvl: Level) {
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) {
108110
self.buffer.lock().unwrap().push(Diagnostic {
109111
msg: msg.to_string(),
110112
code: code.map(|s| s.to_string()),

branches/try/src/libsyntax/errors/emitter.rs

Lines changed: 73 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ use std::io;
2424
use std::rc::Rc;
2525
use term;
2626

27+
/// Emitter trait for emitting errors. Do not implement this directly:
28+
/// implement `CoreEmitter` instead.
2729
pub trait Emitter {
2830
/// Emit a standalone diagnostic message.
2931
fn emit(&mut self, span: &MultiSpan, msg: &str, code: Option<&str>, lvl: Level);
@@ -32,27 +34,44 @@ pub trait Emitter {
3234
fn emit_struct(&mut self, db: &DiagnosticBuilder);
3335
}
3436

35-
/// A core trait that can only handle very simple messages: those
36-
/// without spans or any real structure. Used only in specific contexts.
37-
pub trait RudimentaryEmitter {
38-
fn emit_rudimentary(&mut self, msg: &str, code: Option<&str>, lvl: Level);
37+
pub trait CoreEmitter {
38+
fn emit_message(&mut self,
39+
rsp: &RenderSpan,
40+
msg: &str,
41+
code: Option<&str>,
42+
lvl: Level,
43+
is_header: bool);
3944
}
4045

41-
impl<T: RudimentaryEmitter> Emitter for T {
46+
impl<T: CoreEmitter> Emitter for T {
4247
fn emit(&mut self,
4348
msp: &MultiSpan,
4449
msg: &str,
4550
code: Option<&str>,
4651
lvl: Level) {
47-
assert!(msp.primary_span().is_none(), "Rudimenatry emitters can't handle spans");
48-
self.emit_rudimentary(msg, code, lvl);
52+
self.emit_message(&FullSpan(msp.clone()),
53+
msg,
54+
code,
55+
lvl,
56+
true);
4957
}
5058

5159
fn emit_struct(&mut self, db: &DiagnosticBuilder) {
52-
self.emit(&db.span, &db.message, db.code.as_ref().map(|s| &**s), db.level);
60+
self.emit_message(&FullSpan(db.span.clone()),
61+
&db.message,
62+
db.code.as_ref().map(|s| &**s),
63+
db.level,
64+
true);
5365
for child in &db.children {
54-
assert!(child.render_span.is_none(), "Rudimentary emitters can't handle render spans");
55-
self.emit(&child.span, &child.message, None, child.level);
66+
let render_span = child.render_span
67+
.clone()
68+
.unwrap_or_else(
69+
|| FullSpan(child.span.clone()));
70+
self.emit_message(&render_span,
71+
&child.message,
72+
None,
73+
child.level,
74+
false);
5675
}
5776
}
5877
}
@@ -83,11 +102,14 @@ pub struct BasicEmitter {
83102
dst: Destination,
84103
}
85104

86-
impl RudimentaryEmitter for BasicEmitter {
87-
fn emit_rudimentary(&mut self,
88-
msg: &str,
89-
code: Option<&str>,
90-
lvl: Level) {
105+
impl CoreEmitter for BasicEmitter {
106+
fn emit_message(&mut self,
107+
_rsp: &RenderSpan,
108+
msg: &str,
109+
code: Option<&str>,
110+
lvl: Level,
111+
_is_header: bool) {
112+
// we ignore the span as we have no access to a codemap at this point
91113
if let Err(e) = print_diagnostic(&mut self.dst, "", lvl, msg, code) {
92114
panic!("failed to print diagnostics: {:?}", e);
93115
}
@@ -112,28 +134,16 @@ pub struct EmitterWriter {
112134
first: bool,
113135
}
114136

115-
impl Emitter for EmitterWriter {
116-
fn emit(&mut self,
117-
msp: &MultiSpan,
118-
msg: &str,
119-
code: Option<&str>,
120-
lvl: Level) {
121-
self.emit_multispan(msp, msg, code, lvl, true);
122-
}
123-
124-
fn emit_struct(&mut self, db: &DiagnosticBuilder) {
125-
self.emit_multispan(&db.span, &db.message,
126-
db.code.as_ref().map(|s| &**s), db.level, true);
127-
128-
for child in &db.children {
129-
match child.render_span {
130-
Some(ref sp) =>
131-
self.emit_renderspan(sp, &child.message,
132-
child.level),
133-
None =>
134-
self.emit_multispan(&child.span,
135-
&child.message, None, child.level, false),
136-
}
137+
impl CoreEmitter for EmitterWriter {
138+
fn emit_message(&mut self,
139+
rsp: &RenderSpan,
140+
msg: &str,
141+
code: Option<&str>,
142+
lvl: Level,
143+
is_header: bool) {
144+
match self.emit_message_(rsp, msg, code, lvl, is_header) {
145+
Ok(()) => { }
146+
Err(e) => panic!("failed to emit error: {}", e)
137147
}
138148
}
139149
}
@@ -173,83 +183,56 @@ impl EmitterWriter {
173183
EmitterWriter { dst: Raw(dst), registry: registry, cm: code_map, first: true }
174184
}
175185

176-
fn emit_multispan(&mut self,
177-
span: &MultiSpan,
178-
msg: &str,
179-
code: Option<&str>,
180-
lvl: Level,
181-
is_header: bool) {
186+
fn emit_message_(&mut self,
187+
rsp: &RenderSpan,
188+
msg: &str,
189+
code: Option<&str>,
190+
lvl: Level,
191+
is_header: bool)
192+
-> io::Result<()> {
182193
if is_header {
183194
if self.first {
184195
self.first = false;
185196
} else {
186-
match write!(self.dst, "\n") {
187-
Ok(_) => { }
188-
Err(e) => {
189-
panic!("failed to print diagnostics: {:?}", e)
190-
}
191-
}
197+
write!(self.dst, "\n")?;
192198
}
193199
}
194200

195-
let error = match span.primary_span() {
196-
Some(COMMAND_LINE_SP) => {
197-
self.emit_(&FileLine(span.clone()), msg, code, lvl)
198-
}
199-
Some(DUMMY_SP) | None => {
200-
print_diagnostic(&mut self.dst, "", lvl, msg, code)
201-
}
202-
Some(_) => {
203-
self.emit_(&FullSpan(span.clone()), msg, code, lvl)
204-
}
205-
};
206-
207-
if let Err(e) = error {
208-
panic!("failed to print diagnostics: {:?}", e);
209-
}
210-
}
211-
212-
fn emit_renderspan(&mut self, sp: &RenderSpan, msg: &str, lvl: Level) {
213-
if let Err(e) = self.emit_(sp, msg, None, lvl) {
214-
panic!("failed to print diagnostics: {:?}", e);
215-
}
216-
}
217-
218-
fn emit_(&mut self,
219-
rsp: &RenderSpan,
220-
msg: &str,
221-
code: Option<&str>,
222-
lvl: Level)
223-
-> io::Result<()> {
224-
let msp = rsp.span();
225-
let primary_span = msp.primary_span();
226-
227201
match code {
228202
Some(code) if self.registry.as_ref()
229-
.and_then(|registry| registry.find_description(code)).is_some() =>
230-
{
203+
.and_then(|registry| registry.find_description(code))
204+
.is_some() => {
231205
let code_with_explain = String::from("--explain ") + code;
232206
print_diagnostic(&mut self.dst, "", lvl, msg, Some(&code_with_explain))?
233207
}
234-
_ => print_diagnostic(&mut self.dst, "", lvl, msg, code)?
208+
_ => {
209+
print_diagnostic(&mut self.dst, "", lvl, msg, code)?
210+
}
235211
}
236212

213+
// Watch out for various nasty special spans; don't try to
214+
// print any filename or anything for those.
215+
match rsp.span().primary_span() {
216+
Some(COMMAND_LINE_SP) | Some(DUMMY_SP) => {
217+
return Ok(());
218+
}
219+
_ => { }
220+
}
221+
222+
// Otherwise, print out the snippet etc as needed.
237223
match *rsp {
238-
FullSpan(_) => {
224+
FullSpan(ref msp) => {
239225
self.highlight_lines(msp, lvl)?;
240-
if let Some(primary_span) = primary_span {
226+
if let Some(primary_span) = msp.primary_span() {
241227
self.print_macro_backtrace(primary_span)?;
242228
}
243229
}
244230
Suggestion(ref suggestion) => {
245231
self.highlight_suggestion(suggestion)?;
246-
if let Some(primary_span) = primary_span {
232+
if let Some(primary_span) = rsp.span().primary_span() {
247233
self.print_macro_backtrace(primary_span)?;
248234
}
249235
}
250-
FileLine(..) => {
251-
// no source text in this case!
252-
}
253236
}
254237

255238
Ok(())

branches/try/src/libsyntax/errors/json.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,6 @@ impl DiagnosticSpan {
294294

295295
fn from_render_span(rsp: &RenderSpan, je: &JsonEmitter) -> Vec<DiagnosticSpan> {
296296
match *rsp {
297-
RenderSpan::FileLine(ref msp) |
298297
RenderSpan::FullSpan(ref msp) =>
299298
DiagnosticSpan::from_multispan(msp, je),
300299
RenderSpan::Suggestion(ref suggestion) =>
@@ -356,7 +355,6 @@ impl DiagnosticCode {
356355
impl JsonEmitter {
357356
fn render(&self, render_span: &RenderSpan) -> Option<String> {
358357
match *render_span {
359-
RenderSpan::FileLine(_) |
360358
RenderSpan::FullSpan(_) => {
361359
None
362360
}

branches/try/src/libsyntax/errors/mod.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,6 @@ pub enum RenderSpan {
3838
/// of hypothetical source code, where each `String` is spliced
3939
/// into the lines in place of the code covered by each span.
4040
Suggestion(CodeSuggestion),
41-
42-
/// A FileLine renders with just a line for the message prefixed
43-
/// by file:linenum.
44-
FileLine(MultiSpan),
4541
}
4642

4743
#[derive(Clone)]
@@ -54,8 +50,7 @@ impl RenderSpan {
5450
fn span(&self) -> &MultiSpan {
5551
match *self {
5652
FullSpan(ref msp) |
57-
Suggestion(CodeSuggestion { ref msp, .. }) |
58-
FileLine(ref msp) =>
53+
Suggestion(CodeSuggestion { ref msp, .. }) =>
5954
msp
6055
}
6156
}

0 commit comments

Comments
 (0)