diff options
| author | Seo Sanghyeon <sanxiyn@gmail.com> | 2016-05-09 23:09:25 +0900 |
|---|---|---|
| committer | Seo Sanghyeon <sanxiyn@gmail.com> | 2016-05-12 16:28:13 +0900 |
| commit | c3310327552163e2d19bea1f38287dab22d38028 (patch) | |
| tree | 5da7f4050f730500336b3cc35d0cf2262e593153 /src/libsyntax/errors | |
| parent | 50909f2d5036e59871f779500dd722a62421c13c (diff) | |
| download | rust-c3310327552163e2d19bea1f38287dab22d38028.tar.gz rust-c3310327552163e2d19bea1f38287dab22d38028.zip | |
Better handling of tab in error
Diffstat (limited to 'src/libsyntax/errors')
| -rw-r--r-- | src/libsyntax/errors/snippet/mod.rs | 10 | ||||
| -rw-r--r-- | src/libsyntax/errors/snippet/test.rs | 24 |
2 files changed, 32 insertions, 2 deletions
diff --git a/src/libsyntax/errors/snippet/mod.rs b/src/libsyntax/errors/snippet/mod.rs index 237e6823e0f..0699c6f4ac2 100644 --- a/src/libsyntax/errors/snippet/mod.rs +++ b/src/libsyntax/errors/snippet/mod.rs @@ -312,9 +312,15 @@ impl StyledBuffer { self.text[line][col] = chr; self.styles[line][col] = style; } else { - while self.text[line].len() < col { - self.text[line].push(' '); + let mut i = self.text[line].len(); + while i < col { + let s = match self.text[0].get(i) { + Some(&'\t') => '\t', + _ => ' ' + }; + self.text[line].push(s); self.styles[line].push(Style::NoStyle); + i += 1; } self.text[line].push(chr); self.styles[line].push(style); diff --git a/src/libsyntax/errors/snippet/test.rs b/src/libsyntax/errors/snippet/test.rs index 5a888b48819..62ce3fa9dd5 100644 --- a/src/libsyntax/errors/snippet/test.rs +++ b/src/libsyntax/errors/snippet/test.rs @@ -80,6 +80,30 @@ fn make_string(lines: &[RenderedLine]) -> String { } #[test] +fn tab() { + let file_text = " +fn foo() { +\tbar; +} +"; + + let cm = Rc::new(CodeMap::new()); + let foo = cm.new_filemap_and_lines("foo.rs", file_text); + let span_bar = cm.span_substr(&foo, file_text, "bar", 0); + + let mut snippet = SnippetData::new(cm, Some(span_bar)); + snippet.push(span_bar, true, None); + + let lines = snippet.render_lines(); + let text = make_string(&lines); + assert_eq!(&text[..], &" + --> foo.rs:3:2 +3 |> \tbar; + |> \t^^^ +"[1..]); +} + +#[test] fn one_line() { let file_text = r#" fn foo() { |
