diff options
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/diagnostic.rs | 22 | ||||
| -rw-r--r-- | src/libsyntax/parse/mod.rs | 4 |
2 files changed, 20 insertions, 6 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index 73027013090..94132988d97 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -49,6 +49,13 @@ impl RenderSpan { } } +#[deriving(Clone)] +pub enum ColorConfig { + Auto, + Always, + Never +} + pub trait Emitter { fn emit(&mut self, cmsp: Option<(&codemap::CodeMap, Span)>, msg: &str, lvl: Level); @@ -176,8 +183,8 @@ pub fn mk_span_handler(handler: Handler, cm: codemap::CodeMap) -> SpanHandler { } } -pub fn default_handler() -> Handler { - mk_handler(box EmitterWriter::stderr()) +pub fn default_handler(color_config: ColorConfig) -> Handler { + mk_handler(box EmitterWriter::stderr(color_config)) } pub fn mk_handler(e: Box<Emitter:Send>) -> Handler { @@ -257,9 +264,16 @@ enum Destination { } impl EmitterWriter { - pub fn stderr() -> EmitterWriter { + pub fn stderr(color_config: ColorConfig) -> EmitterWriter { let stderr = io::stderr(); - if stderr.get_ref().isatty() { + + let use_color = match color_config { + Always => true, + Never => false, + Auto => stderr.get_ref().isatty() + }; + + if use_color { let dst = match term::Terminal::new(stderr.unwrap()) { Ok(t) => Terminal(t), Err(..) => Raw(box io::stderr()), diff --git a/src/libsyntax/parse/mod.rs b/src/libsyntax/parse/mod.rs index 28f235a3da0..d8a9f69e293 100644 --- a/src/libsyntax/parse/mod.rs +++ b/src/libsyntax/parse/mod.rs @@ -13,7 +13,7 @@ use ast; use codemap::{Span, CodeMap, FileMap}; -use diagnostic::{SpanHandler, mk_span_handler, default_handler}; +use diagnostic::{SpanHandler, mk_span_handler, default_handler, Auto}; use parse::attr::ParserAttr; use parse::parser::Parser; @@ -41,7 +41,7 @@ pub struct ParseSess { pub fn new_parse_sess() -> ParseSess { ParseSess { - span_diagnostic: mk_span_handler(default_handler(), CodeMap::new()), + span_diagnostic: mk_span_handler(default_handler(Auto), CodeMap::new()), included_mod_stack: RefCell::new(Vec::new()), } } |
