aboutsummaryrefslogtreecommitdiff
path: root/crates/libsyntax2/src/ast/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/libsyntax2/src/ast/mod.rs')
-rw-r--r--crates/libsyntax2/src/ast/mod.rs24
1 files changed, 15 insertions, 9 deletions
diff --git a/crates/libsyntax2/src/ast/mod.rs b/crates/libsyntax2/src/ast/mod.rs
index 0b6868547..a6da82957 100644
--- a/crates/libsyntax2/src/ast/mod.rs
+++ b/crates/libsyntax2/src/ast/mod.rs
@@ -36,7 +36,13 @@ pub trait ArgListOwner<'a>: AstNode<'a> {
36} 36}
37 37
38pub trait FnDefOwner<'a>: AstNode<'a> { 38pub trait FnDefOwner<'a>: AstNode<'a> {
39 fn functions(self) -> AstNodeChildren<'a, FnDef<'a>> { 39 fn functions(self) -> AstChildren<'a, FnDef<'a>> {
40 children(self)
41 }
42}
43
44pub trait ModuleItemOwner<'a>: AstNode<'a> {
45 fn items(self) -> AstChildren<'a, ModuleItem<'a>> {
40 children(self) 46 children(self)
41 } 47 }
42} 48}
@@ -52,7 +58,7 @@ pub trait TypeParamsOwner<'a>: AstNode<'a> {
52} 58}
53 59
54pub trait AttrsOwner<'a>: AstNode<'a> { 60pub trait AttrsOwner<'a>: AstNode<'a> {
55 fn attrs(self) -> AstNodeChildren<'a, Attr<'a>> { 61 fn attrs(self) -> AstChildren<'a, Attr<'a>> {
56 children(self) 62 children(self)
57 } 63 }
58} 64}
@@ -158,7 +164,7 @@ impl<'a> IfExpr<'a> {
158 pub fn else_branch(self) -> Option<Block<'a>> { 164 pub fn else_branch(self) -> Option<Block<'a>> {
159 self.blocks().nth(1) 165 self.blocks().nth(1)
160 } 166 }
161 fn blocks(self) -> AstNodeChildren<'a, Block<'a>> { 167 fn blocks(self) -> AstChildren<'a, Block<'a>> {
162 children(self) 168 children(self)
163 } 169 }
164} 170}
@@ -167,27 +173,27 @@ fn child_opt<'a, P: AstNode<'a>, C: AstNode<'a>>(parent: P) -> Option<C> {
167 children(parent).next() 173 children(parent).next()
168} 174}
169 175
170fn children<'a, P: AstNode<'a>, C: AstNode<'a>>(parent: P) -> AstNodeChildren<'a, C> { 176fn children<'a, P: AstNode<'a>, C: AstNode<'a>>(parent: P) -> AstChildren<'a, C> {
171 AstNodeChildren::new(parent.syntax()) 177 AstChildren::new(parent.syntax())
172} 178}
173 179
174 180
175#[derive(Debug)] 181#[derive(Debug)]
176pub struct AstNodeChildren<'a, N> { 182pub struct AstChildren<'a, N> {
177 inner: SyntaxNodeChildren<RefRoot<'a>>, 183 inner: SyntaxNodeChildren<RefRoot<'a>>,
178 ph: PhantomData<N>, 184 ph: PhantomData<N>,
179} 185}
180 186
181impl<'a, N> AstNodeChildren<'a, N> { 187impl<'a, N> AstChildren<'a, N> {
182 fn new(parent: SyntaxNodeRef<'a>) -> Self { 188 fn new(parent: SyntaxNodeRef<'a>) -> Self {
183 AstNodeChildren { 189 AstChildren {
184 inner: parent.children(), 190 inner: parent.children(),
185 ph: PhantomData, 191 ph: PhantomData,
186 } 192 }
187 } 193 }
188} 194}
189 195
190impl<'a, N: AstNode<'a>> Iterator for AstNodeChildren<'a, N> { 196impl<'a, N: AstNode<'a>> Iterator for AstChildren<'a, N> {
191 type Item = N; 197 type Item = N;
192 fn next(&mut self) -> Option<N> { 198 fn next(&mut self) -> Option<N> {
193 loop { 199 loop {