use crate::{CompletionContext, Completions};
+// Ideally this should be removed and moved into `(un)qualified_path` respectively
pub(crate) fn complete_macro_in_item_position(acc: &mut Completions, ctx: &CompletionContext) {
// Show only macros in top level.
if !ctx.is_new_item {
if let hir::ScopeDef::MacroDef(mac) = res {
acc.add_macro(ctx, Some(name.to_string()), mac);
}
+ // FIXME: This should be done in qualified_path/unqualified_path instead?
+ if let hir::ScopeDef::ModuleDef(hir::ModuleDef::Module(_)) = res {
+ acc.add_resolution(ctx, name.to_string(), &res);
+ }
})
}
use crate::{CompletionContext, Completions};
pub(crate) fn complete_qualified_path(acc: &mut Completions, ctx: &CompletionContext) {
- if ctx.is_path_disallowed() {
+ if ctx.is_path_disallowed() || ctx.expects_item() {
return;
}
let path = match &ctx.path_qual {
None => return,
};
let context_module = ctx.scope.module();
- if ctx.expects_item() || ctx.expects_assoc_item() {
+ if ctx.expects_assoc_item() {
if let PathResolution::Def(hir::ModuleDef::Module(module)) = resolution {
let module_scope = module.scope(ctx.db, context_module);
for (name, def) in module_scope {
);
}
+ #[test]
+ #[ignore] // FIXME doesn't complete anything atm
+ fn completes_in_item_list() {
+ check(
+ r#"
+struct MyStruct {}
+macro_rules! foo {}
+mod bar {}
+
+crate::$0
+"#,
+ expect![[r#"
+ md bar
+ ma foo! macro_rules! foo
+ "#]],
+ )
+ }
+
#[test]
fn test_super_super_completion() {
check(
if !ctx.is_trivial_path {
return;
}
- if ctx.is_path_disallowed() {
+ if ctx.is_path_disallowed() || ctx.expects_item() {
return;
}
- if ctx.expects_item() || ctx.expects_assoc_item() {
+ if ctx.expects_assoc_item() {
ctx.scope.process_all_names(&mut |name, def| {
if let ScopeDef::MacroDef(macro_def) = def {
acc.add_macro(ctx, Some(name.to_string()), macro_def);
"#]],
)
}
+
+ // FIXME: The completions here currently come from `macro_in_item_position`, but they shouldn't
+ #[test]
+ fn completes_in_item_list() {
+ check(
+ r#"
+struct MyStruct {}
+macro_rules! foo {}
+mod bar {}
+
+$0
+"#,
+ expect![[r#"
+ md bar
+ ma foo!(…) macro_rules! foo
+ "#]],
+ )
+ }
}