diff options
| author | sinkuu <sinkuupump@gmail.com> | 2017-02-25 22:05:30 +0900 |
|---|---|---|
| committer | sinkuu <sinkuupump@gmail.com> | 2017-02-25 22:11:54 +0900 |
| commit | 8a64cf7fb72ca93608be19e13dd83c23168b17d7 (patch) | |
| tree | 4bcc4af29089f1d1b0aa19989867094dfab7da51 | |
| parent | 08230775a026c955873ba557e624b7f665661f37 (diff) | |
| download | rust-8a64cf7fb72ca93608be19e13dd83c23168b17d7.tar.gz rust-8a64cf7fb72ca93608be19e13dd83c23168b17d7.zip | |
Fix suggestion span error with a line containing non-ASCIIs
| -rw-r--r-- | src/librustc_errors/lib.rs | 3 | ||||
| -rw-r--r-- | src/test/ui/span/suggestion-non-ascii.rs | 16 | ||||
| -rw-r--r-- | src/test/ui/span/suggestion-non-ascii.stderr | 11 |
3 files changed, 29 insertions, 1 deletions
diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index d7bd5ed23c2..4c889dad8ca 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -90,7 +90,8 @@ impl CodeSuggestion { hi_opt: Option<&Loc>) { let (lo, hi_opt) = (lo.col.to_usize(), hi_opt.map(|hi| hi.col.to_usize())); if let Some(line) = line_opt { - if line.len() > lo { + if let Some(lo) = line.char_indices().map(|(i, _)| i).nth(lo) { + let hi_opt = hi_opt.and_then(|hi| line.char_indices().map(|(i, _)| i).nth(hi)); buf.push_str(match hi_opt { Some(hi) => &line[lo..hi], None => &line[lo..], diff --git a/src/test/ui/span/suggestion-non-ascii.rs b/src/test/ui/span/suggestion-non-ascii.rs new file mode 100644 index 00000000000..67dbe1dc7b5 --- /dev/null +++ b/src/test/ui/span/suggestion-non-ascii.rs @@ -0,0 +1,16 @@ +// Copyright 2017 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 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + + +fn main() { + let tup = (1,); + println!("☃{}", tup[0]); +} + diff --git a/src/test/ui/span/suggestion-non-ascii.stderr b/src/test/ui/span/suggestion-non-ascii.stderr new file mode 100644 index 00000000000..385c211f393 --- /dev/null +++ b/src/test/ui/span/suggestion-non-ascii.stderr @@ -0,0 +1,11 @@ +error: cannot index a value of type `({integer},)` + --> $DIR/suggestion-non-ascii.rs:14:21 + | +14 | println!("☃{}", tup[0]); + | ^^^^^^ + | +help: to access tuple elements, use tuple indexing syntax as shown + | println!("☃{}", tup.0); + +error: aborting due to previous error + |
