aboutsummaryrefslogtreecommitdiff
path: root/src/parser/event_parser/grammar/paths.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/event_parser/grammar/paths.rs')
-rw-r--r--src/parser/event_parser/grammar/paths.rs22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/parser/event_parser/grammar/paths.rs b/src/parser/event_parser/grammar/paths.rs
index d6887a9ba..62d1a3bb2 100644
--- a/src/parser/event_parser/grammar/paths.rs
+++ b/src/parser/event_parser/grammar/paths.rs
@@ -1,7 +1,11 @@
1use super::*; 1use super::*;
2 2
3pub (crate) fn is_path_start(p: &Parser) -> bool {
4 AnyOf(&[IDENT, SELF_KW, SUPER_KW, COLONCOLON]).is_ahead(p)
5}
6
3pub(crate) fn use_path(p: &mut Parser) { 7pub(crate) fn use_path(p: &mut Parser) {
4 if !AnyOf(&[IDENT, SELF_KW, SUPER_KW, COLONCOLON]).is_ahead(p) { 8 if !is_path_start(p) {
5 return; 9 return;
6 } 10 }
7 let mut prev = p.mark(); 11 let mut prev = p.mark();
@@ -10,11 +14,17 @@ pub(crate) fn use_path(p: &mut Parser) {
10 }); 14 });
11 many(p, |p| { 15 many(p, |p| {
12 let curr = p.mark(); 16 let curr = p.mark();
13 node_if(p, COLONCOLON, PATH, |p| { 17 if p.current() == COLONCOLON && !items::is_use_tree_start(p.raw_lookahead(1)) {
14 path_segment(p, false); 18 node(p, PATH, |p| {
15 p.forward_parent(prev, curr); 19 p.bump();
16 prev = curr; 20 path_segment(p, false);
17 }) 21 p.forward_parent(prev, curr);
22 prev = curr;
23 });
24 true
25 } else {
26 false
27 }
18 }); 28 });
19} 29}
20 30