diff options
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/diagnostic.rs | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index 76ede098ac3..094082f41e7 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -191,19 +191,27 @@ fn diagnosticcolor(lvl: level) -> u8 { } fn print_diagnostic(topic: &str, lvl: level, msg: &str) { - let use_color = term::color_supported() && - io::stderr().get_type() == io::Screen; + let term = term::Terminal::new(io::stderr()); + + let stderr = io::stderr(); + if !topic.is_empty() { - io::stderr().write_str(fmt!("%s ", topic)); - } - if use_color { - term::fg(io::stderr(), diagnosticcolor(lvl)); + stderr.write_str(fmt!("%s ", topic)); } - io::stderr().write_str(fmt!("%s:", diagnosticstr(lvl))); - if use_color { - term::reset(io::stderr()); + + match term { + Ok(t) => { + if stderr.get_type() == io::Screen { + t.fg(diagnosticcolor(lvl)); + stderr.write_str(fmt!("%s: ", diagnosticstr(lvl))); + t.reset(); + stderr.write_str(fmt!("%s\n", msg)); + } + } + Err(_) => { + stderr.write_str(fmt!("%s: %s\n", diagnosticstr(lvl), msg)); + } } - io::stderr().write_str(fmt!(" %s\n", msg)); } pub fn collect(messages: @mut ~[~str]) |
