@@ -189,30 +189,36 @@ fn diagnosticcolor(lvl: level) -> u8 {
189
189
}
190
190
}
191
191
192
- fn print_diagnostic ( topic : & str , lvl : level , msg : & str ) {
193
- let t = term:: Terminal :: new ( io:: stderr ( ) ) ;
194
-
192
+ fn print_maybe_colored ( msg : & str , color : u8 ) {
195
193
let stderr = io:: stderr ( ) ;
196
194
197
- if !topic. is_empty ( ) {
198
- stderr. write_str ( fmt ! ( "%s " , topic) ) ;
199
- }
195
+ let t = term:: Terminal :: new ( stderr) ;
200
196
201
197
match t {
202
198
Ok ( term) => {
203
199
if stderr. get_type ( ) == io:: Screen {
204
- term. fg ( diagnosticcolor ( lvl ) ) ;
205
- stderr. write_str ( fmt ! ( "%s: " , diagnosticstr ( lvl ) ) ) ;
200
+ term. fg ( color ) ;
201
+ stderr. write_str ( msg ) ;
206
202
term. reset ( ) ;
207
- stderr. write_str ( fmt ! ( "%s\n " , msg) ) ;
208
203
} else {
209
- stderr. write_str ( fmt ! ( "%s: %s \n " , diagnosticstr ( lvl ) , msg) ) ;
204
+ stderr. write_str ( msg) ;
210
205
}
211
206
} ,
212
- _ => stderr. write_str ( fmt ! ( "%s: %s \n " , diagnosticstr ( lvl ) , msg) )
207
+ _ => stderr. write_str ( msg)
213
208
}
214
209
}
215
210
211
+ fn print_diagnostic ( topic : & str , lvl : level , msg : & str ) {
212
+ let stderr = io:: stderr ( ) ;
213
+
214
+ if !topic. is_empty ( ) {
215
+ stderr. write_str ( fmt ! ( "%s " , topic) ) ;
216
+ }
217
+
218
+ print_maybe_colored ( fmt ! ( "%s: " , diagnosticstr( lvl) ) , diagnosticcolor ( lvl) ) ;
219
+ stderr. write_str ( fmt ! ( "%s\n " , msg) ) ;
220
+ }
221
+
216
222
pub fn collect ( messages : @mut ~[ ~str ] )
217
223
-> @fn ( Option < ( @codemap:: CodeMap , span ) > , & str , level ) {
218
224
let f: @fn ( Option < ( @codemap:: CodeMap , span ) > , & str , level ) =
@@ -292,14 +298,15 @@ fn highlight_lines(cm: @codemap::CodeMap,
292
298
_ => " " // -squigly-line as well (instead of a
293
299
}; // space). This way the squigly-line will
294
300
} // usually appear in the correct position.
295
- s += " ^";
301
+ io::stderr().write_str(s);
302
+ let mut s = ~" ^";
296
303
let hi = cm. lookup_char_pos( sp. hi) ;
297
304
if hi. col != lo. col {
298
305
// the ^ already takes up one space
299
306
let num_squiglies = hi. col. to_uint( ) -lo. col. to_uint( ) -1 u;
300
307
for num_squiglies. times( ) { s += "~" ; }
301
308
}
302
- io :: stderr ( ) . write_str ( s + "\n " ) ;
309
+ print_maybe_colored ( s + "\n " , term :: color_bright_green ) ;
303
310
}
304
311
}
305
312
0 commit comments