diff options
| author | bors <bors@rust-lang.org> | 2013-02-09 14:13:59 -0800 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-02-09 14:13:59 -0800 |
| commit | 7fe6b1b6cfcdf52fd99f02b1d999c480e134e30f (patch) | |
| tree | 3ba42db1623a0a7b8035992ab8a5539e3052370d /src/libsyntax | |
| parent | 19dfec2aaf746535de1521f68421f9980dbf25de (diff) | |
| parent | 8d0c1cb406156379570b6a3c9911db758995fa4e (diff) | |
auto merge of #4853 : Thiez/rust/incoming, r=catamorphism
A simple fix for issue 2174.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/diagnostic.rs | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index cd42fc7a953..51ef085839d 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -250,7 +250,7 @@ fn highlight_lines(cm: @codemap::CodeMap, io::stderr().write_str(out); } - + // FIXME (#3260) // If there's one line at fault we can easily point to the problem if vec::len(lines.lines) == 1u { let lo = cm.lookup_char_pos(sp.lo); @@ -263,14 +263,26 @@ fn highlight_lines(cm: @codemap::CodeMap, // indent past |name:## | and the 0-offset column location let mut left = str::len(fm.name) + digits + lo.col.to_uint() + 3u; let mut s = ~""; - while left > 0u { str::push_char(&mut s, ' '); left -= 1u; } - + // Skip is the number of characters we need to skip because they are + // part of the 'filename:line ' part of the previous line. + let skip = str::len(fm.name) + digits + 3u; + for skip.times() { + s += ~" "; + } + let orig = fm.get_line(lines.lines[0] as int); + for uint::range(0u,left-skip) |pos| { + let curChar = (orig[pos] as char); + s += match curChar { // Whenever a tab occurs on the previous + '\t' => "\t", // line, we insert one on the error-point- + _ => " " // -squigly-line as well (instead of a + }; // space). This way the squigly-line will + } // usually appear in the correct position. s += ~"^"; let hi = cm.lookup_char_pos(sp.hi); if hi.col != lo.col { // the ^ already takes up one space - let mut width = hi.col.to_uint() - lo.col.to_uint() - 1u; - while width > 0u { str::push_char(&mut s, '~'); width -= 1u; } + let num_squiglies = hi.col.to_uint()-lo.col.to_uint()-1u; + for num_squiglies.times() { s += ~"~"; } } io::stderr().write_str(s + ~"\n"); } |
