@@ -23,7 +23,6 @@ use std::rc::Rc;
23
23
use term;
24
24
use std:: collections:: HashMap ;
25
25
use std:: cmp:: min;
26
- use std:: env;
27
26
28
27
/// Emitter trait for emitting errors.
29
28
pub trait Emitter {
@@ -65,8 +64,11 @@ impl Emitter for EmitterWriter {
65
64
}
66
65
}
67
66
68
- self . fix_multispans_in_std_macros ( & mut primary_span, & mut children) ;
67
+ if !db. handler . macro_backtrace {
68
+ self . fix_multispans_in_std_macros ( & mut primary_span, & mut children) ;
69
+ }
69
70
self . emit_messages_default ( & db. level ,
71
+ db. handler . macro_backtrace ,
70
72
& db. styled_message ( ) ,
71
73
& db. code ,
72
74
& primary_span,
@@ -787,23 +789,21 @@ impl EmitterWriter {
787
789
fn fix_multispans_in_std_macros ( & mut self ,
788
790
span : & mut MultiSpan ,
789
791
children : & mut Vec < SubDiagnostic > ) {
790
- if env:: var_os ( "RUST_MACRO_BACKTRACE" ) . is_none ( ) {
791
- let mut spans_updated = self . fix_multispan_in_std_macros ( span) ;
792
- for child in children. iter_mut ( ) {
793
- spans_updated |= self . fix_multispan_in_std_macros ( & mut child. span ) ;
794
- }
795
- if spans_updated {
796
- children. push ( SubDiagnostic {
797
- level : Level :: Note ,
798
- message : vec ! [
799
- ( [ "this error originates in a macro outside of the current crate" ,
800
- "(run with RUST_MACRO_BACKTRACE=1 for more info)" ] . join( " " ) ,
801
- Style :: NoStyle ) ,
802
- ] ,
803
- span : MultiSpan :: new ( ) ,
804
- render_span : None ,
805
- } ) ;
806
- }
792
+ let mut spans_updated = self . fix_multispan_in_std_macros ( span) ;
793
+ for child in children. iter_mut ( ) {
794
+ spans_updated |= self . fix_multispan_in_std_macros ( & mut child. span ) ;
795
+ }
796
+ if spans_updated {
797
+ children. push ( SubDiagnostic {
798
+ level : Level :: Note ,
799
+ message : vec ! [
800
+ ( [ "this error originates in a macro outside of the current crate" ,
801
+ "(run with -Z macro-backtrace for more info)" ] . join( " " ) ,
802
+ Style :: NoStyle ) ,
803
+ ] ,
804
+ span : MultiSpan :: new ( ) ,
805
+ render_span : None ,
806
+ } ) ;
807
807
}
808
808
}
809
809
@@ -888,6 +888,7 @@ impl EmitterWriter {
888
888
msg : & Vec < ( String , Style ) > ,
889
889
code : & Option < DiagnosticId > ,
890
890
level : & Level ,
891
+ macro_backtrace : bool ,
891
892
max_line_num_len : usize ,
892
893
is_secondary : bool )
893
894
-> io:: Result < ( ) > {
@@ -1085,7 +1086,7 @@ impl EmitterWriter {
1085
1086
}
1086
1087
}
1087
1088
1088
- if env :: var_os ( "RUST_MACRO_BACKTRACE" ) . is_some ( ) {
1089
+ if macro_backtrace {
1089
1090
if let Some ( ref primary_span) = msp. primary_span ( ) . as_ref ( ) {
1090
1091
self . render_macro_backtrace_old_school ( primary_span, & mut buffer) ?;
1091
1092
}
@@ -1182,6 +1183,7 @@ impl EmitterWriter {
1182
1183
}
1183
1184
fn emit_messages_default ( & mut self ,
1184
1185
level : & Level ,
1186
+ macro_backtrace : bool ,
1185
1187
message : & Vec < ( String , Style ) > ,
1186
1188
code : & Option < DiagnosticId > ,
1187
1189
span : & MultiSpan ,
@@ -1190,7 +1192,13 @@ impl EmitterWriter {
1190
1192
let max_line_num = self . get_max_line_num ( span, children) ;
1191
1193
let max_line_num_len = max_line_num. to_string ( ) . len ( ) ;
1192
1194
1193
- match self . emit_message_default ( span, message, code, level, max_line_num_len, false ) {
1195
+ match self . emit_message_default ( span,
1196
+ message,
1197
+ code,
1198
+ level,
1199
+ macro_backtrace,
1200
+ max_line_num_len,
1201
+ false ) {
1194
1202
Ok ( ( ) ) => {
1195
1203
if !children. is_empty ( ) {
1196
1204
let mut buffer = StyledBuffer :: new ( ) ;
@@ -1210,6 +1218,7 @@ impl EmitterWriter {
1210
1218
& child. styled_message ( ) ,
1211
1219
& None ,
1212
1220
& child. level ,
1221
+ macro_backtrace,
1213
1222
max_line_num_len,
1214
1223
true ) {
1215
1224
Err ( e) => panic ! ( "failed to emit error: {}" , e) ,
0 commit comments