diff options
Diffstat (limited to 'crates/libsyntax2/src')
-rw-r--r-- | crates/libsyntax2/src/ast/mod.rs | 9 | ||||
-rw-r--r-- | crates/libsyntax2/src/yellow/syntax.rs | 10 |
2 files changed, 18 insertions, 1 deletions
diff --git a/crates/libsyntax2/src/ast/mod.rs b/crates/libsyntax2/src/ast/mod.rs index d53b12ab8..9b9200f99 100644 --- a/crates/libsyntax2/src/ast/mod.rs +++ b/crates/libsyntax2/src/ast/mod.rs | |||
@@ -118,3 +118,12 @@ impl <R: TreeRoot> ImplItem<R> { | |||
118 | (first, second) | 118 | (first, second) |
119 | } | 119 | } |
120 | } | 120 | } |
121 | |||
122 | impl <R: TreeRoot> Module<R> { | ||
123 | pub fn has_semi(&self) -> bool { | ||
124 | match self.syntax_ref().last_child() { | ||
125 | None => false, | ||
126 | Some(node) => node.kind() == SEMI, | ||
127 | } | ||
128 | } | ||
129 | } | ||
diff --git a/crates/libsyntax2/src/yellow/syntax.rs b/crates/libsyntax2/src/yellow/syntax.rs index b264e008a..bb390751a 100644 --- a/crates/libsyntax2/src/yellow/syntax.rs +++ b/crates/libsyntax2/src/yellow/syntax.rs | |||
@@ -89,7 +89,15 @@ impl<R: TreeRoot> SyntaxNode<R> { | |||
89 | } | 89 | } |
90 | 90 | ||
91 | pub fn first_child(&self) -> Option<SyntaxNode<R>> { | 91 | pub fn first_child(&self) -> Option<SyntaxNode<R>> { |
92 | self.children().next() | 92 | let red = self.red().get_child(0)?; |
93 | Some(SyntaxNode { root: self.root.clone(), red }) | ||
94 | } | ||
95 | |||
96 | pub fn last_child(&self) -> Option<SyntaxNode<R>> { | ||
97 | let n = self.red().n_children(); | ||
98 | let n = n.checked_sub(1)?; | ||
99 | let red = self.red().get_child(n)?; | ||
100 | Some(SyntaxNode { root: self.root.clone(), red }) | ||
93 | } | 101 | } |
94 | 102 | ||
95 | pub fn next_sibling(&self) -> Option<SyntaxNode<R>> { | 103 | pub fn next_sibling(&self) -> Option<SyntaxNode<R>> { |