Fix for issue 2174
The function that formats and prints the squigly line that hilights errors counted tabs as spaces, which resulted in incorrect error messages when tabs were used for indentation. This change compares the highlight line with the previous line and inserts a tab instead of a space whenever such a tab exists on the previous line. Note that error messages will still highlight incorrectly when the previous line include characters that require more than one utf8 code point, as mentioned in issue 3260.
This commit is contained in:
parent
0c2b4edff5
commit
fd98ea8129
1 changed files with 16 additions and 4 deletions
|
@ -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");
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue