@@ -39,6 +39,16 @@ pub enum ColorConfig {
39
39
Never ,
40
40
}
41
41
42
+ impl ColorConfig {
43
+ fn use_color ( & self ) -> bool {
44
+ match * self {
45
+ ColorConfig :: Always => true ,
46
+ ColorConfig :: Never => false ,
47
+ ColorConfig :: Auto => stderr_isatty ( ) ,
48
+ }
49
+ }
50
+ }
51
+
42
52
// A basic emitter for when we don't have access to a codemap or registry. Used
43
53
// for reporting very early errors, etc.
44
54
pub struct BasicEmitter {
@@ -64,24 +74,12 @@ impl Emitter for BasicEmitter {
64
74
}
65
75
66
76
impl BasicEmitter {
67
- // TODO refactor
68
77
pub fn stderr ( color_config : ColorConfig ) -> BasicEmitter {
69
- let stderr = io:: stderr ( ) ;
70
-
71
- let use_color = match color_config {
72
- ColorConfig :: Always => true ,
73
- ColorConfig :: Never => false ,
74
- ColorConfig :: Auto => stderr_isatty ( ) ,
75
- } ;
76
-
77
- if use_color {
78
- let dst = match term:: stderr ( ) {
79
- Some ( t) => Terminal ( t) ,
80
- None => Raw ( Box :: new ( stderr) ) ,
81
- } ;
78
+ if color_config. use_color ( ) {
79
+ let dst = Destination :: from_stderr ( ) ;
82
80
BasicEmitter { dst : dst }
83
81
} else {
84
- BasicEmitter { dst : Raw ( Box :: new ( stderr) ) }
82
+ BasicEmitter { dst : Raw ( Box :: new ( io :: stderr ( ) ) ) }
85
83
}
86
84
}
87
85
}
@@ -139,22 +137,11 @@ impl EmitterWriter {
139
137
registry : Option < diagnostics:: registry:: Registry > ,
140
138
code_map : Rc < codemap:: CodeMap > )
141
139
-> EmitterWriter {
142
- let stderr = io:: stderr ( ) ;
143
-
144
- let use_color = match color_config {
145
- ColorConfig :: Always => true ,
146
- ColorConfig :: Never => false ,
147
- ColorConfig :: Auto => stderr_isatty ( ) ,
148
- } ;
149
-
150
- if use_color {
151
- let dst = match term:: stderr ( ) {
152
- Some ( t) => Terminal ( t) ,
153
- None => Raw ( Box :: new ( stderr) ) ,
154
- } ;
140
+ if color_config. use_color ( ) {
141
+ let dst = Destination :: from_stderr ( ) ;
155
142
EmitterWriter { dst : dst, registry : registry, cm : code_map }
156
143
} else {
157
- EmitterWriter { dst : Raw ( Box :: new ( stderr) ) , registry : registry, cm : code_map }
144
+ EmitterWriter { dst : Raw ( Box :: new ( io :: stderr ( ) ) ) , registry : registry, cm : code_map }
158
145
}
159
146
}
160
147
@@ -476,22 +463,18 @@ impl EmitterWriter {
476
463
477
464
loop {
478
465
let span_name_span = self . cm . with_expn_info ( span. expn_id , |expn_info| {
479
- match expn_info {
480
- Some ( ei) => {
481
- let ( pre, post) = match ei. callee . format {
482
- codemap:: MacroAttribute ( ..) => ( "#[" , "]" ) ,
483
- codemap:: MacroBang ( ..) => ( "" , "!" ) ,
484
- } ;
485
- let macro_decl_name = format ! ( "in this expansion of {}{}{}" ,
486
- pre,
487
- ei. callee. name( ) ,
488
- post) ;
489
- let def_site_span = ei. callee . span ;
490
- Some ( ( ei. call_site , macro_decl_name, def_site_span) )
491
- }
492
- // TODO map
493
- None => None ,
494
- }
466
+ expn_info. map ( |ei| {
467
+ let ( pre, post) = match ei. callee . format {
468
+ codemap:: MacroAttribute ( ..) => ( "#[" , "]" ) ,
469
+ codemap:: MacroBang ( ..) => ( "" , "!" ) ,
470
+ } ;
471
+ let macro_decl_name = format ! ( "in this expansion of {}{}{}" ,
472
+ pre,
473
+ ei. callee. name( ) ,
474
+ post) ;
475
+ let def_site_span = ei. callee . span ;
476
+ ( ei. call_site , macro_decl_name, def_site_span)
477
+ } )
495
478
} ) ;
496
479
let ( macro_decl_name, def_site_span) = match span_name_span {
497
480
None => break ,
@@ -573,6 +556,13 @@ enum Destination {
573
556
}
574
557
575
558
impl Destination {
559
+ fn from_stderr ( ) -> Destination {
560
+ match term:: stderr ( ) {
561
+ Some ( t) => Terminal ( t) ,
562
+ None => Raw ( Box :: new ( io:: stderr ( ) ) ) ,
563
+ }
564
+ }
565
+
576
566
fn print_maybe_styled ( & mut self ,
577
567
args : fmt:: Arguments ,
578
568
color : term:: Attr ,
0 commit comments