]> git.lizzy.rs Git - rust.git/commitdiff
Complete modules in assoc item lists
authorLukas Wirth <lukastw97@gmail.com>
Thu, 27 May 2021 18:53:38 +0000 (20:53 +0200)
committerLukas Wirth <lukastw97@gmail.com>
Thu, 27 May 2021 18:53:38 +0000 (20:53 +0200)
crates/ide_completion/src/completions/qualified_path.rs
crates/ide_completion/src/completions/unqualified_path.rs
crates/ide_completion/src/patterns.rs

index c16bb215f755317b7b84447d96e0621bc4192629..4aa37df91b4c7e846357a6fdfce6b710ebbcbbde 100644 (file)
@@ -27,6 +27,9 @@ pub(crate) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionCon
                 if let ScopeDef::MacroDef(macro_def) = def {
                     acc.add_macro(ctx, Some(name.to_string()), macro_def);
                 }
+                if let ScopeDef::ModuleDef(hir::ModuleDef::Module(_)) = def {
+                    acc.add_resolution(ctx, name.to_string(), &def);
+                }
             }
         }
         return;
@@ -614,19 +617,20 @@ fn main()  fn()
     }
 
     #[test]
-    fn completes_qualified_macros_in_impl() {
+    fn completes_in_assoc_item_list() {
         check(
             r#"
 #[macro_export]
 macro_rules! foo { () => {} }
+mod bar {}
 
 struct MyStruct {}
-
 impl MyStruct {
     crate::$0
 }
 "#,
             expect![[r##"
+                md bar
                 ma foo! #[macro_export] macro_rules! foo
             "##]],
         );
index cbac88240744e4fc5dbd7eec262694664b25b6e8..dc93e368d46012fc9a360b318c742637e1238714 100644 (file)
@@ -17,6 +17,9 @@ pub(crate) fn complete_unqualified_path(acc: &mut Completions, ctx: &CompletionC
             if let ScopeDef::MacroDef(macro_def) = def {
                 acc.add_macro(ctx, Some(name.to_string()), macro_def);
             }
+            if let ScopeDef::ModuleDef(hir::ModuleDef::Module(_)) = def {
+                acc.add_resolution(ctx, name.to_string(), &def);
+            }
         });
         return;
     }
@@ -672,17 +675,19 @@ impl My$0
     }
 
     #[test]
-    fn only_completes_macros_in_assoc_item_list() {
+    fn completes_in_assoc_item_list() {
         check(
             r#"
-struct MyStruct {}
 macro_rules! foo {}
+mod bar {}
 
+struct MyStruct {}
 impl MyStruct {
     $0
 }
 "#,
             expect![[r#"
+                md bar
                 ma foo! macro_rules! foo
             "#]],
         )
index ed289d561137b09f1d13821d6120bf5a3c680924..19e42ba432e19a40d1af4764a400a8ebda2cf292 100644 (file)
@@ -62,7 +62,6 @@ pub(crate) fn determine_location(tok: SyntaxToken) -> Option<ImmediateLocation>
             ast::SourceFile(_it) => ImmediateLocation::ItemList,
             ast::ItemList(_it) => ImmediateLocation::ItemList,
             ast::RefExpr(_it) => ImmediateLocation::RefExpr,
-            ast::RefPat(_it) => ImmediateLocation::RefExpr,
             ast::RecordField(_it) => ImmediateLocation::RecordField,
             ast::AssocItemList(it) => match it.syntax().parent().map(|it| it.kind()) {
                 Some(IMPL) => ImmediateLocation::Impl,