aboutsummaryrefslogtreecommitdiff
path: root/crates/libsyntax2/src/ast
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-09-07 23:35:20 +0100
committerAleksey Kladov <[email protected]>2018-09-07 23:35:20 +0100
commit127814d9a7f62c834c0893ff05e933aac4be89e9 (patch)
tree412432e0308c8b22b28e3b84776b44b311b283da /crates/libsyntax2/src/ast
parentff1c82216cc05f2621a301e30ab7a1102dea9d2b (diff)
nested mod completion
Diffstat (limited to 'crates/libsyntax2/src/ast')
-rw-r--r--crates/libsyntax2/src/ast/generated.rs13
-rw-r--r--crates/libsyntax2/src/ast/mod.rs24
2 files changed, 18 insertions, 19 deletions
diff --git a/crates/libsyntax2/src/ast/generated.rs b/crates/libsyntax2/src/ast/generated.rs
index a239f0630..c945c094a 100644
--- a/crates/libsyntax2/src/ast/generated.rs
+++ b/crates/libsyntax2/src/ast/generated.rs
@@ -699,11 +699,8 @@ impl<'a> AstNode<'a> for ItemList<'a> {
699} 699}
700 700
701impl<'a> ast::FnDefOwner<'a> for ItemList<'a> {} 701impl<'a> ast::FnDefOwner<'a> for ItemList<'a> {}
702impl<'a> ItemList<'a> { 702impl<'a> ast::ModuleItemOwner<'a> for ItemList<'a> {}
703 pub fn items(self) -> impl Iterator<Item = ModuleItem<'a>> + 'a { 703impl<'a> ItemList<'a> {}
704 super::children(self)
705 }
706}
707 704
708// Label 705// Label
709#[derive(Debug, Clone, Copy)] 706#[derive(Debug, Clone, Copy)]
@@ -979,7 +976,6 @@ impl<'a> AstNode<'a> for Module<'a> {
979 976
980impl<'a> ast::NameOwner<'a> for Module<'a> {} 977impl<'a> ast::NameOwner<'a> for Module<'a> {}
981impl<'a> ast::AttrsOwner<'a> for Module<'a> {} 978impl<'a> ast::AttrsOwner<'a> for Module<'a> {}
982impl<'a> ast::FnDefOwner<'a> for Module<'a> {}
983impl<'a> Module<'a> {pub fn item_list(self) -> Option<ItemList<'a>> { 979impl<'a> Module<'a> {pub fn item_list(self) -> Option<ItemList<'a>> {
984 super::child_opt(self) 980 super::child_opt(self)
985 } 981 }
@@ -1616,12 +1612,9 @@ impl<'a> AstNode<'a> for Root<'a> {
1616 fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax } 1612 fn syntax(self) -> SyntaxNodeRef<'a> { self.syntax }
1617} 1613}
1618 1614
1615impl<'a> ast::ModuleItemOwner<'a> for Root<'a> {}
1619impl<'a> ast::FnDefOwner<'a> for Root<'a> {} 1616impl<'a> ast::FnDefOwner<'a> for Root<'a> {}
1620impl<'a> Root<'a> { 1617impl<'a> Root<'a> {
1621 pub fn items(self) -> impl Iterator<Item = ModuleItem<'a>> + 'a {
1622 super::children(self)
1623 }
1624
1625 pub fn modules(self) -> impl Iterator<Item = Module<'a>> + 'a { 1618 pub fn modules(self) -> impl Iterator<Item = Module<'a>> + 'a {
1626 super::children(self) 1619 super::children(self)
1627 } 1620 }
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 {