aboutsummaryrefslogtreecommitdiff
path: root/crates/libeditor/src/scope
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/libeditor/src/scope
parentff1c82216cc05f2621a301e30ab7a1102dea9d2b (diff)
nested mod completion
Diffstat (limited to 'crates/libeditor/src/scope')
-rw-r--r--crates/libeditor/src/scope/mod_scope.rs11
1 files changed, 6 insertions, 5 deletions
diff --git a/crates/libeditor/src/scope/mod_scope.rs b/crates/libeditor/src/scope/mod_scope.rs
index 67baa8678..0ec56a206 100644
--- a/crates/libeditor/src/scope/mod_scope.rs
+++ b/crates/libeditor/src/scope/mod_scope.rs
@@ -1,5 +1,6 @@
1use libsyntax2::{ 1use libsyntax2::{
2 AstNode, SyntaxNode, SyntaxNodeRef, SmolStr, ast 2 AstNode, SyntaxNode, SyntaxNodeRef, SmolStr,
3 ast::{self, AstChildren},
3}; 4};
4 5
5pub struct ModuleScope { 6pub struct ModuleScope {
@@ -16,9 +17,9 @@ enum EntryKind {
16} 17}
17 18
18impl ModuleScope { 19impl ModuleScope {
19 pub fn new(m: ast::Root) -> ModuleScope { 20 pub fn new(items: AstChildren<ast::ModuleItem>) -> ModuleScope {
20 let mut entries = Vec::new(); 21 let mut entries = Vec::new();
21 for item in m.items() { 22 for item in items {
22 let entry = match item { 23 let entry = match item {
23 ast::ModuleItem::StructDef(item) => Entry::new(item), 24 ast::ModuleItem::StructDef(item) => Entry::new(item),
24 ast::ModuleItem::EnumDef(item) => Entry::new(item), 25 ast::ModuleItem::EnumDef(item) => Entry::new(item),
@@ -85,11 +86,11 @@ fn collect_imports(tree: ast::UseTree, acc: &mut Vec<Entry>) {
85#[cfg(test)] 86#[cfg(test)]
86mod tests { 87mod tests {
87 use super::*; 88 use super::*;
88 use libsyntax2::File; 89 use libsyntax2::{File, ast::ModuleItemOwner};
89 90
90 fn do_check(code: &str, expected: &[&str]) { 91 fn do_check(code: &str, expected: &[&str]) {
91 let file = File::parse(&code); 92 let file = File::parse(&code);
92 let scope = ModuleScope::new(file.ast()); 93 let scope = ModuleScope::new(file.ast().items());
93 let actual = scope.entries 94 let actual = scope.entries
94 .iter() 95 .iter()
95 .map(|it| it.name()) 96 .map(|it| it.name())