From dccbb38d2e28bfeb53f31c13de3b83e72f1a476c Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Mon, 8 Mar 2021 00:25:45 +0200 Subject: Less lifetines: derive SemanticsScope in place --- crates/ide_completion/src/completions/flyimport.rs | 11 ++++++++--- crates/ide_completion/src/lib.rs | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) (limited to 'crates/ide_completion') diff --git a/crates/ide_completion/src/completions/flyimport.rs b/crates/ide_completion/src/completions/flyimport.rs index 8a11cba41..391a11c91 100644 --- a/crates/ide_completion/src/completions/flyimport.rs +++ b/crates/ide_completion/src/completions/flyimport.rs @@ -169,23 +169,28 @@ pub(crate) fn position_for_import<'a>( }) } -fn import_assets<'a>(ctx: &'a CompletionContext, fuzzy_name: String) -> Option> { +fn import_assets(ctx: &CompletionContext, fuzzy_name: String) -> Option { let current_module = ctx.scope.module()?; if let Some(dot_receiver) = &ctx.dot_receiver { ImportAssets::for_fuzzy_method_call( current_module, ctx.sema.type_of_expr(dot_receiver)?, fuzzy_name, - ctx.scope.clone(), + dot_receiver.syntax().clone(), ) } else { let fuzzy_name_length = fuzzy_name.len(); + let approximate_node = match current_module.definition_source(ctx.db).value { + hir::ModuleSource::SourceFile(s) => s.syntax().clone(), + hir::ModuleSource::Module(m) => m.syntax().clone(), + hir::ModuleSource::BlockExpr(b) => b.syntax().clone(), + }; let assets_for_path = ImportAssets::for_fuzzy_path( current_module, ctx.path_qual.clone(), fuzzy_name, &ctx.sema, - ctx.scope.clone(), + approximate_node, )?; if matches!(assets_for_path.import_candidate(), ImportCandidate::Path(_)) diff --git a/crates/ide_completion/src/lib.rs b/crates/ide_completion/src/lib.rs index 5470914fb..a0c8c374d 100644 --- a/crates/ide_completion/src/lib.rs +++ b/crates/ide_completion/src/lib.rs @@ -150,7 +150,7 @@ pub fn resolve_completion_edits( let current_crate = current_module.krate(); let (import_path, item_to_import) = - items_locator::with_for_exact_name(&ctx.sema, current_crate, imported_name) + items_locator::with_exact_name(&ctx.sema, current_crate, imported_name) .into_iter() .filter_map(|candidate| { current_module -- cgit v1.2.3