]> git.lizzy.rs Git - rust.git/commitdiff
Better handling of tab in error
authorSeo Sanghyeon <sanxiyn@gmail.com>
Mon, 9 May 2016 14:09:25 +0000 (23:09 +0900)
committerSeo Sanghyeon <sanxiyn@gmail.com>
Thu, 12 May 2016 07:28:13 +0000 (16:28 +0900)
src/libsyntax/errors/snippet/mod.rs
src/libsyntax/errors/snippet/test.rs

index 237e6823e0f8752b6693fd8d90b4887c4479f25b..0699c6f4ac2a988c764b2106a4750a7f80634751 100644 (file)
@@ -312,9 +312,15 @@ fn putc(&mut self, line: usize, col: usize, chr: char, style: Style) {
             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);
index 5a888b488191ba0ea07b45b8e0f65796b796fc8b..62ce3fa9dd5e9038608254681cfa5c098feb72ed 100644 (file)
@@ -79,6 +79,30 @@ fn make_string(lines: &[RenderedLine]) -> String {
          .collect()
 }
 
+#[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#"