Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_completion/src/completions/flyimport.rs')
| -rw-r--r-- | crates/ide_completion/src/completions/flyimport.rs | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/crates/ide_completion/src/completions/flyimport.rs b/crates/ide_completion/src/completions/flyimport.rs index a613dd574b..aee2bbb53c 100644 --- a/crates/ide_completion/src/completions/flyimport.rs +++ b/crates/ide_completion/src/completions/flyimport.rs @@ -142,7 +142,7 @@ pub(crate) fn import_on_the_fly(acc: &mut Completions, ctx: &CompletionContext) )?; let ns_filter = |import: &LocatedImport| { - let kind = match ctx.path_kind() { + let path_kind = match ctx.path_kind() { Some(kind) => kind, None => { return match import.original_item { @@ -151,9 +151,9 @@ pub(crate) fn import_on_the_fly(acc: &mut Completions, ctx: &CompletionContext) } } }; - match (kind, import.original_item) { + match (path_kind, import.original_item) { // Aren't handled in flyimport - (PathKind::Vis { .. } | PathKind::Use | PathKind::Derive, _) => false, + (PathKind::Vis { .. } | PathKind::Use, _) => false, // modules are always fair game (_, ItemInNs::Types(hir::ModuleDef::Module(_))) => true, // and so are macros(except for attributes) @@ -173,6 +173,11 @@ pub(crate) fn import_on_the_fly(acc: &mut Completions, ctx: &CompletionContext) (PathKind::Attr { .. }, ItemInNs::Macros(mac)) => mac.is_attr(ctx.db), (PathKind::Attr { .. }, _) => false, + + (PathKind::Derive, ItemInNs::Macros(mac)) => { + mac.is_derive(ctx.db) && !ctx.existing_derives.contains(&mac) + } + (PathKind::Derive, _) => false, } }; |