@@ -4,17 +4,64 @@ use {SyntaxKind, Token};
4
4
mod parser;
5
5
mod grammar;
6
6
7
+ /// `Parser` produces a flat list of `Event`s.
8
+ /// They are converted to a tree-structure in
9
+ /// a separate pass, via `TreeBuilder`.
7
10
#[ derive( Debug ) ]
8
11
pub ( crate ) enum Event {
12
+ /// This event signifies the start of the node.
13
+ /// It should be either abandoned (in which case the
14
+ /// `kind` is `TOMBSTONE`, and the event is ignored),
15
+ /// or completed via a `Finish` event.
16
+ ///
17
+ /// All tokens between a `Start` and a `Finish` would
18
+ /// become the children of the respective node.
19
+ ///
20
+ /// For left-recursive syntactic constructs, the parser produces
21
+ /// a child node before it sees a parent. `forward_parent`
22
+ /// exists to allow to tweak parent-child relationships.
23
+ ///
24
+ /// Consider this path
25
+ ///
26
+ /// foo::bar
27
+ ///
28
+ /// The events for it would look like this:
29
+ ///
30
+ ///
31
+ /// START(PATH) IDENT('foo') FINISH START(PATH) COLONCOLON IDENT('bar') FINISH
32
+ /// | /\
33
+ /// | |
34
+ /// +------forward-parent------+
35
+ ///
36
+ /// And the tree would look like this
37
+ ///
38
+ /// +--PATH---------+
39
+ /// | | |
40
+ /// | | |
41
+ /// | '::' 'bar'
42
+ /// |
43
+ /// PATH
44
+ /// |
45
+ /// 'foo'
46
+ ///
47
+ /// See also `CompleteMarker::precede`.
9
48
Start {
10
49
kind : SyntaxKind ,
11
50
forward_parent : Option < u32 > ,
12
51
} ,
52
+
53
+ /// Complete the previous `Start` event
13
54
Finish ,
55
+
56
+ /// Produce a single leaf-element.
57
+ /// `n_raw_tokens` is used to glue complex contextual tokens.
58
+ /// For example, lexer tokenizes `>>` as `>`, `>`, and
59
+ /// `n_raw_tokens = 2` is used to produced a single `>>`.
14
60
Token {
15
61
kind : SyntaxKind ,
16
62
n_raw_tokens : u8 ,
17
63
} ,
64
+
18
65
Error {
19
66
message : String ,
20
67
} ,
0 commit comments