Unnamed repository; edit this file 'description' to name the repository.
Extract trait_name out of analyze_container
| -rw-r--r-- | crates/ide-assists/src/handlers/extract_function.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/crates/ide-assists/src/handlers/extract_function.rs b/crates/ide-assists/src/handlers/extract_function.rs index 549676aa26..3ec2ae1dcf 100644 --- a/crates/ide-assists/src/handlers/extract_function.rs +++ b/crates/ide-assists/src/handlers/extract_function.rs @@ -92,12 +92,13 @@ pub(crate) fn extract_function(acc: &mut Assists, ctx: &AssistContext<'_>) -> Op let anchor = if self_param.is_some() { Anchor::Method } else { Anchor::Freestanding }; let insert_after = node_to_insert_after(&body, anchor)?; + let trait_name = ast::Trait::cast(insert_after.clone()).and_then(|trait_| trait_.name()); let semantics_scope = ctx.sema.scope(&insert_after)?; let module = semantics_scope.module(); let edition = semantics_scope.krate().edition(ctx.db()); let (container_info, contains_tail_expr) = - body.analyze_container(&ctx.sema, edition, &insert_after)?; + body.analyze_container(&ctx.sema, edition, trait_name)?; let ret_ty = body.return_ty(ctx)?; let control_flow = body.external_control_flow(ctx, &container_info)?; @@ -841,7 +842,7 @@ impl FunctionBody { &self, sema: &Semantics<'db, RootDatabase>, edition: Edition, - insert_after: &SyntaxNode, + trait_name: Option<ast::Name>, ) -> Option<(ContainerInfo<'db>, bool)> { let mut ancestors = self.parent()?.ancestors(); let infer_expr_opt = |expr| sema.type_of_expr(&expr?).map(TypeInfo::adjusted); @@ -929,8 +930,7 @@ impl FunctionBody { }; // FIXME: make trait arguments - let trait_name = ast::Trait::cast(insert_after.clone()) - .and_then(|trait_| Some(make::ty_path(make::ext::ident_path(&trait_.name()?.text())))); + let trait_name = trait_name.map(|name| make::ty_path(make::ext::ident_path(&name.text()))); let parent = self.parent()?; let parents = generic_parents(&parent); |