Skip to content

Commit e237151

Browse files
committed
A little more refactoring inside emitter.rs
1 parent 7a03349 commit e237151

File tree

1 file changed

+35
-45
lines changed

1 file changed

+35
-45
lines changed

src/libsyntax/errors/emitter.rs

+35-45
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ pub enum ColorConfig {
3939
Never,
4040
}
4141

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+
4252
// A basic emitter for when we don't have access to a codemap or registry. Used
4353
// for reporting very early errors, etc.
4454
pub struct BasicEmitter {
@@ -64,24 +74,12 @@ impl Emitter for BasicEmitter {
6474
}
6575

6676
impl BasicEmitter {
67-
// TODO refactor
6877
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();
8280
BasicEmitter { dst: dst }
8381
} else {
84-
BasicEmitter { dst: Raw(Box::new(stderr)) }
82+
BasicEmitter { dst: Raw(Box::new(io::stderr())) }
8583
}
8684
}
8785
}
@@ -139,22 +137,11 @@ impl EmitterWriter {
139137
registry: Option<diagnostics::registry::Registry>,
140138
code_map: Rc<codemap::CodeMap>)
141139
-> 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();
155142
EmitterWriter { dst: dst, registry: registry, cm: code_map }
156143
} 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 }
158145
}
159146
}
160147

@@ -476,22 +463,18 @@ impl EmitterWriter {
476463

477464
loop {
478465
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+
})
495478
});
496479
let (macro_decl_name, def_site_span) = match span_name_span {
497480
None => break,
@@ -573,6 +556,13 @@ enum Destination {
573556
}
574557

575558
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+
576566
fn print_maybe_styled(&mut self,
577567
args: fmt::Arguments,
578568
color: term::Attr,

0 commit comments

Comments
 (0)