diff options
| author | bors <bors@rust-lang.org> | 2016-05-13 06:26:15 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2016-05-13 06:26:15 -0700 |
| commit | edb6f83b89fc74afd6edce0bc98ea4f98a884455 (patch) | |
| tree | 589a6db0c946d4b2354203d9466c89496dc78300 /src/libsyntax/errors | |
| parent | a581c82bdc2c13a398b091878d7353bc3d097d59 (diff) | |
| parent | c3310327552163e2d19bea1f38287dab22d38028 (diff) | |
| download | rust-edb6f83b89fc74afd6edce0bc98ea4f98a884455.tar.gz rust-edb6f83b89fc74afd6edce0bc98ea4f98a884455.zip | |
Auto merge of #33513 - sanxiyn:tab-in-error, r=nikomatsakis
Better handling of tab in error cc #33240.
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() { |
