diff options
author | David Tolnay <dtolnay@gmail.com> | 2020-05-22 01:17:52 -0700 |
---|---|---|
committer | David Tolnay <dtolnay@gmail.com> | 2020-05-22 01:27:30 -0700 |
commit | ef8fd19a3bbb5098ea13021073daf9a840c6bcc1 (patch) | |
tree | e8b97ff298cfdcbf40a713119f3b067b446dd8e7 /gen/src/error.rs | |
parent | ecafa897c1f54cbc69c79ae045fe4150d8e8af44 (diff) | |
download | cxx-ef8fd19a3bbb5098ea13021073daf9a840c6bcc1.tar.gz |
Account for character based offsets in proc-macro2
Diffstat (limited to 'gen/src/error.rs')
-rw-r--r-- | gen/src/error.rs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gen/src/error.rs b/gen/src/error.rs index b91c166b..51dbbe71 100644 --- a/gen/src/error.rs +++ b/gen/src/error.rs @@ -88,17 +88,26 @@ fn display_syn_error(stderr: &mut dyn WriteColor, path: &Path, source: &str, err for _ in 1..start.line { start_offset += source[start_offset..].find('\n').unwrap() + 1; } - start_offset += start.column; + let start_column = source[start_offset..] + .chars() + .take(start.column) + .map(char::len_utf8) + .sum::<usize>(); + start_offset += start_column; let mut end_offset = start_offset; if start.line == end.line { - end_offset -= start.column; + end_offset -= start_column; } else { for _ in 0..end.line - start.line { end_offset += source[end_offset..].find('\n').unwrap() + 1; } } - end_offset += end.column; + end_offset += source[end_offset..] + .chars() + .take(end.column) + .map(char::len_utf8) + .sum::<usize>(); let mut files = SimpleFiles::new(); let file = files.add(path.to_string_lossy(), source); |