@@ -25,47 +25,29 @@ use std::io;
25
25
use std:: rc:: Rc ;
26
26
use term;
27
27
28
- /// Emitter trait for emitting errors. Do not implement this directly:
29
- /// implement `CoreEmitter` instead.
28
+ /// Emitter trait for emitting errors.
30
29
pub trait Emitter {
31
30
/// Emit a structured diagnostic.
32
31
fn emit ( & mut self , db : & DiagnosticBuilder ) ;
33
32
}
34
33
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 {
46
35
fn emit ( & mut self , db : & DiagnosticBuilder ) {
47
- let old_school = check_old_skool ( ) ;
48
- let db_span = FullSpan ( db. span . clone ( ) ) ;
49
36
self . emit_message ( & FullSpan ( db. span . clone ( ) ) ,
50
37
& db. message ,
51
38
db. code . as_ref ( ) . map ( |s| & * * s) ,
52
39
db. level ,
53
40
true ,
54
41
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 ( ) ) ) ;
60
42
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 ( ) ) ) ;
69
51
let ( render_span, show_snippet) = match render_span. span ( ) . primary_span ( ) {
70
52
None => ( db_span. clone ( ) , false ) ,
71
53
_ => ( render_span, true )
@@ -77,6 +59,19 @@ impl<T: CoreEmitter> Emitter for T {
77
59
false ,
78
60
show_snippet) ;
79
61
}
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
+ }
80
75
}
81
76
}
82
77
}
@@ -114,21 +109,6 @@ pub struct EmitterWriter {
114
109
format_mode : FormatMode
115
110
}
116
111
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
-
132
112
/// Do not use this for messages that end in `\n` – use `println_maybe_styled` instead. See
133
113
/// `EmitterWriter::print_maybe_styled` for details.
134
114
macro_rules! print_maybe_styled {
@@ -177,6 +157,19 @@ impl EmitterWriter {
177
157
format_mode : format_mode. clone ( ) }
178
158
}
179
159
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
+
180
173
fn emit_message_ ( & mut self ,
181
174
rsp : & RenderSpan ,
182
175
msg : & str ,
0 commit comments