aboutsummaryrefslogtreecommitdiff
path: root/gen/src/error.rs
diff options
context:
space:
mode:
authorDavid Tolnay <dtolnay@gmail.com>2020-05-22 01:17:52 -0700
committerDavid Tolnay <dtolnay@gmail.com>2020-05-22 01:27:30 -0700
commitef8fd19a3bbb5098ea13021073daf9a840c6bcc1 (patch)
treee8b97ff298cfdcbf40a713119f3b067b446dd8e7 /gen/src/error.rs
parentecafa897c1f54cbc69c79ae045fe4150d8e8af44 (diff)
downloadcxx-ef8fd19a3bbb5098ea13021073daf9a840c6bcc1.tar.gz
Account for character based offsets in proc-macro2
Diffstat (limited to 'gen/src/error.rs')
-rw-r--r--gen/src/error.rs15
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);