diff --git a/src/librustc_errors/styled_buffer.rs b/src/librustc_errors/styled_buffer.rs index f1f2e6c55e977..ceb94f27dc3ce 100644 --- a/src/librustc_errors/styled_buffer.rs +++ b/src/librustc_errors/styled_buffer.rs @@ -26,14 +26,11 @@ impl StyledBuffer { } } - pub fn copy_tabs(&mut self, row: usize) { - if row < self.text.len() { - for i in row + 1..self.text.len() { - for j in 0..self.text[i].len() { - if self.text[row].len() > j && self.text[row][j] == '\t' && - self.text[i][j] == ' ' { - self.text[i][j] = '\t'; - } + fn replace_tabs(&mut self) { + for line in self.text.iter_mut() { + for c in line.iter_mut() { + if *c == '\t' { + *c = ' '; } } } @@ -43,8 +40,8 @@ impl StyledBuffer { let mut output: Vec> = vec![]; let mut styled_vec: Vec = vec![]; - // before we render, do a little patch-up work to support tabs - self.copy_tabs(3); + // before we render, replace tabs with spaces + self.replace_tabs(); for (row, row_style) in self.text.iter().zip(&self.styles) { let mut current_style = Style::NoStyle; diff --git a/src/test/ui/codemap_tests/tab.rs b/src/test/ui/codemap_tests/tab.rs index 0672b5508b607..146ad2283c2fc 100644 --- a/src/test/ui/codemap_tests/tab.rs +++ b/src/test/ui/codemap_tests/tab.rs @@ -13,3 +13,7 @@ fn main() { bar; } + +fn foo() { + "bar boo" +} diff --git a/src/test/ui/codemap_tests/tab.stderr b/src/test/ui/codemap_tests/tab.stderr index 657deca4e6d49..b3fa9b128c5eb 100644 --- a/src/test/ui/codemap_tests/tab.stderr +++ b/src/test/ui/codemap_tests/tab.stderr @@ -1,8 +1,19 @@ error[E0425]: cannot find value `bar` in this scope --> $DIR/tab.rs:14:2 | -14 | \tbar; - | \t^^^ not found in this scope +14 | bar; + | ^^^ not found in this scope -error: aborting due to previous error +error[E0308]: mismatched types + --> $DIR/tab.rs:18:2 + | +17 | fn foo() { + | - help: try adding a return type: `-> &'static str ` +18 | "bar boo" + | ^^^^^^^^^^^ expected (), found reference + | + = note: expected type `()` + found type `&'static str` + +error: aborting due to 2 previous errors diff --git a/src/test/ui/codemap_tests/tab_2.rs b/src/test/ui/codemap_tests/tab_2.rs new file mode 100644 index 0000000000000..d26d7974d85ad --- /dev/null +++ b/src/test/ui/codemap_tests/tab_2.rs @@ -0,0 +1,15 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-tidy-tab + +fn main() { + """; +} diff --git a/src/test/ui/codemap_tests/tab_2.stderr b/src/test/ui/codemap_tests/tab_2.stderr new file mode 100644 index 0000000000000..a2b3ca7e4d4fd --- /dev/null +++ b/src/test/ui/codemap_tests/tab_2.stderr @@ -0,0 +1,10 @@ +error: unterminated double quote string + --> $DIR/tab_2.rs:14:7 + | +14 | """; + | _______^ +15 | | } + | |__^ + +error: aborting due to previous error + diff --git a/src/test/ui/codemap_tests/tab_3.rs b/src/test/ui/codemap_tests/tab_3.rs new file mode 100644 index 0000000000000..9b3513d5116f2 --- /dev/null +++ b/src/test/ui/codemap_tests/tab_3.rs @@ -0,0 +1,19 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// ignore-tidy-tab + +fn main() { + let some_vec = vec!["hi"]; + some_vec.into_iter(); + { + println!("{:?}", some_vec); + } +} diff --git a/src/test/ui/codemap_tests/tab_3.stderr b/src/test/ui/codemap_tests/tab_3.stderr new file mode 100644 index 0000000000000..f19f5f20d23ec --- /dev/null +++ b/src/test/ui/codemap_tests/tab_3.stderr @@ -0,0 +1,13 @@ +error[E0382]: use of moved value: `some_vec` + --> $DIR/tab_3.rs:17:20 + | +15 | some_vec.into_iter(); + | -------- value moved here +16 | { +17 | println!("{:?}", some_vec); + | ^^^^^^^^ value used here after move + | + = note: move occurs because `some_vec` has type `std::vec::Vec<&str>`, which does not implement the `Copy` trait + +error: aborting due to previous error +