diff options
Diffstat (limited to 'crates/libsyntax2/src/ast/mod.rs')
-rw-r--r-- | crates/libsyntax2/src/ast/mod.rs | 24 |
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 | ||
38 | pub trait FnDefOwner<'a>: AstNode<'a> { | 38 | pub 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 | |||
44 | pub 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 | ||
54 | pub trait AttrsOwner<'a>: AstNode<'a> { | 60 | pub 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 | ||
170 | fn children<'a, P: AstNode<'a>, C: AstNode<'a>>(parent: P) -> AstNodeChildren<'a, C> { | 176 | fn 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)] |
176 | pub struct AstNodeChildren<'a, N> { | 182 | pub 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 | ||
181 | impl<'a, N> AstNodeChildren<'a, N> { | 187 | impl<'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 | ||
190 | impl<'a, N: AstNode<'a>> Iterator for AstNodeChildren<'a, N> { | 196 | impl<'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 { |