Account for character based offsets in proc-macro2
diff --git a/gen/build/Cargo.toml b/gen/build/Cargo.toml
index 98b3497..a5878b9 100644
--- a/gen/build/Cargo.toml
+++ b/gen/build/Cargo.toml
@@ -13,7 +13,7 @@
anyhow = "1.0"
cc = "1.0.49"
codespan-reporting = "0.9"
-proc-macro2 = { version = "1.0.12", features = ["span-locations"] }
+proc-macro2 = { version = "1.0.14", features = ["span-locations"] }
quote = "1.0"
syn = { version = "1.0.20", features = ["full"] }
diff --git a/gen/cmd/Cargo.toml b/gen/cmd/Cargo.toml
index ddf27c5..919d5c8 100644
--- a/gen/cmd/Cargo.toml
+++ b/gen/cmd/Cargo.toml
@@ -16,7 +16,7 @@
[dependencies]
anyhow = "1.0"
codespan-reporting = "0.9"
-proc-macro2 = { version = "1.0.12", features = ["span-locations"] }
+proc-macro2 = { version = "1.0.14", features = ["span-locations"] }
quote = "1.0"
structopt = "0.3"
syn = { version = "1.0.20", features = ["full"] }
diff --git a/gen/src/error.rs b/gen/src/error.rs
index b91c166..51dbbe7 100644
--- a/gen/src/error.rs
+++ b/gen/src/error.rs
@@ -88,17 +88,26 @@
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);