Introduce SyntaxErrorKind and TextRange in SyntaxError

This commit is contained in:
Adolfo Ochagavía 2018-11-04 16:45:22 +01:00
parent 576b9a0727
commit 3b42ddae60
10 changed files with 159 additions and 68 deletions

View file

@ -4,7 +4,7 @@ use std::fmt::Write;
/// Parse a file and create a string representation of the resulting parse tree.
pub fn dump_tree(syntax: SyntaxNodeRef) -> String {
let mut errors: Vec<_> = syntax.root_data().to_vec();
errors.sort_by_key(|e| e.offset);
errors.sort_by_key(|e| e.range.start());
let mut err_pos = 0;
let mut level = 0;
let mut buf = String::new();
@ -23,9 +23,9 @@ pub fn dump_tree(syntax: SyntaxNodeRef) -> String {
writeln!(buf, "{:?}", node).unwrap();
if node.first_child().is_none() {
let off = node.range().end();
while err_pos < errors.len() && errors[err_pos].offset <= off {
while err_pos < errors.len() && errors[err_pos].range.start() <= off {
indent!();
writeln!(buf, "err: `{}`", errors[err_pos].msg).unwrap();
writeln!(buf, "err: `{}`", errors[err_pos].kind).unwrap();
err_pos += 1;
}
}
@ -37,7 +37,7 @@ pub fn dump_tree(syntax: SyntaxNodeRef) -> String {
assert_eq!(level, 0);
for err in errors[err_pos..].iter() {
writeln!(buf, "err: `{}`", err.msg).unwrap();
writeln!(buf, "err: `{}`", err.kind).unwrap();
}
buf