diff options
author | Aleksey Kladov <[email protected]> | 2018-01-07 10:09:13 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-01-07 10:09:13 +0000 |
commit | 18f9e50b2d1aaf91992be9fd2f2a7e1866a943d3 (patch) | |
tree | e984c18fb8fa2e81950a582672077f966ce570e3 /tests | |
parent | efcfaae34ac7a54e858aad82e6503a7c69d6c550 (diff) |
Error placement
Diffstat (limited to 'tests')
-rw-r--r-- | tests/data/parser/err/0000_struct_field_missing_comma.txt | 6 | ||||
-rw-r--r-- | tests/parser.rs | 20 |
2 files changed, 19 insertions, 7 deletions
diff --git a/tests/data/parser/err/0000_struct_field_missing_comma.txt b/tests/data/parser/err/0000_struct_field_missing_comma.txt index e2e99bb63..55a4ad915 100644 --- a/tests/data/parser/err/0000_struct_field_missing_comma.txt +++ b/tests/data/parser/err/0000_struct_field_missing_comma.txt | |||
@@ -1,5 +1,5 @@ | |||
1 | FILE@[0; 34) | 1 | FILE@[0; 34) |
2 | STRUCT_ITEM@[0; 34) err: `expected COMMA` | 2 | STRUCT_ITEM@[0; 34) |
3 | STRUCT_KW@[0; 6) | 3 | STRUCT_KW@[0; 6) |
4 | WHITESPACE@[6; 7) | 4 | WHITESPACE@[6; 7) |
5 | IDENT@[7; 8) | 5 | IDENT@[7; 8) |
@@ -12,9 +12,11 @@ FILE@[0; 34) | |||
12 | WHITESPACE@[17; 18) | 12 | WHITESPACE@[17; 18) |
13 | IDENT@[18; 21) | 13 | IDENT@[18; 21) |
14 | WHITESPACE@[21; 26) | 14 | WHITESPACE@[21; 26) |
15 | err: `expected COMMA` | ||
15 | STRUCT_FIELD@[26; 33) | 16 | STRUCT_FIELD@[26; 33) |
16 | IDENT@[26; 27) | 17 | IDENT@[26; 27) |
17 | COLON@[27; 28) | 18 | COLON@[27; 28) |
18 | WHITESPACE@[28; 29) | 19 | WHITESPACE@[28; 29) |
19 | IDENT@[29; 32) | 20 | IDENT@[29; 32) |
20 | WHITESPACE@[32; \ No newline at end of file | 21 | WHITESPACE@[32; 33) |
22 | R_CURLY@[33; 34) | ||
diff --git a/tests/parser.rs b/tests/parser.rs index 206da2a64..43d04e491 100644 --- a/tests/parser.rs +++ b/tests/parser.rs | |||
@@ -7,7 +7,7 @@ use std::path::{PathBuf, Path}; | |||
7 | use std::fs::read_dir; | 7 | use std::fs::read_dir; |
8 | use std::fmt::Write; | 8 | use std::fmt::Write; |
9 | 9 | ||
10 | use libsyntax2::{tokenize, parse, Token, Node, File, FileBuilder}; | 10 | use libsyntax2::{tokenize, parse, Node, File}; |
11 | 11 | ||
12 | #[test] | 12 | #[test] |
13 | fn parser_tests() { | 13 | fn parser_tests() { |
@@ -70,14 +70,24 @@ fn dump_tree(file: &File) -> String { | |||
70 | 70 | ||
71 | fn go(node: Node, buff: &mut String, level: usize) { | 71 | fn go(node: Node, buff: &mut String, level: usize) { |
72 | buff.push_str(&String::from(" ").repeat(level)); | 72 | buff.push_str(&String::from(" ").repeat(level)); |
73 | write!(buff, "{:?}", node).unwrap(); | 73 | write!(buff, "{:?}\n", node).unwrap(); |
74 | for err in node.errors() { | 74 | let my_errors = node.errors().filter(|e| e.after_child().is_none()); |
75 | write!(buff, " err: `{}`", err.message()).unwrap(); | 75 | let parent_errors = node.parent().into_iter() |
76 | .flat_map(|n| n.errors()) | ||
77 | .filter(|e| e.after_child() == Some(node)); | ||
78 | |||
79 | for err in my_errors { | ||
80 | buff.push_str(&String::from(" ").repeat(level)); | ||
81 | write!(buff, "err: `{}`\n", err.message()).unwrap(); | ||
76 | } | 82 | } |
77 | write!(buff, "\n").unwrap(); | ||
78 | 83 | ||
79 | for child in node.children() { | 84 | for child in node.children() { |
80 | go(child, buff, level + 1) | 85 | go(child, buff, level + 1) |
81 | } | 86 | } |
87 | |||
88 | for err in parent_errors { | ||
89 | buff.push_str(&String::from(" ").repeat(level)); | ||
90 | write!(buff, "err: `{}`\n", err.message()).unwrap(); | ||
91 | } | ||
82 | } | 92 | } |
83 | } | 93 | } |