]> git.lizzy.rs Git - rust.git/commitdiff
Handle nested declrations in from_source
authorAleksey Kladov <aleksey.kladov@gmail.com>
Fri, 20 Dec 2019 10:24:23 +0000 (11:24 +0100)
committerAleksey Kladov <aleksey.kladov@gmail.com>
Fri, 20 Dec 2019 10:52:17 +0000 (11:52 +0100)
crates/ra_hir/src/from_source.rs

index b3ed88b6b62b3c3db9d60cf04b07293588b218b0..4fd7c757364e04933893d82426adae79e973b7b9 100644 (file)
@@ -216,21 +216,30 @@ fn analyze_container(db: &impl DefDatabase, src: InFile<&SyntaxNode>) -> DynMap
 }
 
 fn _analyze_container(db: &impl DefDatabase, src: InFile<&SyntaxNode>) -> Option<DynMap> {
-    // FIXME: this doesn't try to handle nested declarations
     for container in src.value.ancestors().skip(1) {
         let res = match_ast! {
             match container {
                 ast::TraitDef(it) => {
-                    let c = Trait::from_source(db, src.with_value(it))?;
-                    c.id.child_by_source(db)
+                    let def = Trait::from_source(db, src.with_value(it))?;
+                    def.id.child_by_source(db)
                 },
                 ast::ImplBlock(it) => {
-                    let c = ImplBlock::from_source(db, src.with_value(it))?;
-                    c.id.child_by_source(db)
+                    let def = ImplBlock::from_source(db, src.with_value(it))?;
+                    def.id.child_by_source(db)
                 },
                 ast::FnDef(it) => {
-                    let f = Function::from_source(db, src.with_value(it))?;
-                    DefWithBodyId::from(f.id)
+                    let def = Function::from_source(db, src.with_value(it))?;
+                    DefWithBodyId::from(def.id)
+                        .child_by_source(db)
+                },
+                ast::StaticDef(it) => {
+                    let def = Static::from_source(db, src.with_value(it))?;
+                    DefWithBodyId::from(def.id)
+                        .child_by_source(db)
+                },
+                ast::ConstDef(it) => {
+                    let def = Const::from_source(db, src.with_value(it))?;
+                    DefWithBodyId::from(def.id)
                         .child_by_source(db)
                 },
                 _ => { continue },