Skip to content

Commit 30eabeb

Browse files
committed
extract fn_target_info
1 parent 6130860 commit 30eabeb

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

crates/ide-assists/src/handlers/generate_function.rs

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,31 @@ fn gen_fn(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
6161
}
6262

6363
let fn_name = &*name_ref.text();
64+
let (target_module, adt_name, target, file, insert_offset) =
65+
fn_target_info(path, ctx, &call, fn_name)?;
66+
let function_builder = FunctionBuilder::from_call(ctx, &call, fn_name, target_module, target)?;
67+
let text_range = call.syntax().text_range();
68+
let label = format!("Generate {} function", function_builder.fn_name);
69+
add_func_to_accumulator(
70+
acc,
71+
ctx,
72+
text_range,
73+
function_builder,
74+
insert_offset,
75+
file,
76+
adt_name,
77+
label,
78+
)
79+
}
80+
81+
fn fn_target_info(
82+
path: ast::Path,
83+
ctx: &AssistContext<'_>,
84+
call: &CallExpr,
85+
fn_name: &str,
86+
) -> Option<(Option<Module>, Option<hir::Name>, GeneratedFunctionTarget, FileId, TextSize)> {
6487
let mut target_module = None;
6588
let mut adt_name = None;
66-
6789
let (target, file, insert_offset) = match path.qualifier() {
6890
Some(qualifier) => match ctx.sema.resolve_path(&qualifier) {
6991
Some(hir::PathResolution::Def(hir::ModuleDef::Module(module))) => {
@@ -78,11 +100,11 @@ fn gen_fn(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
78100
}
79101
}
80102

81-
assoc_fn_target(ctx, &call, adt, &mut target_module, fn_name, &mut adt_name)?
103+
assoc_fn_target(ctx, call, adt, &mut target_module, fn_name, &mut adt_name)?
82104
}
83105
Some(hir::PathResolution::SelfType(impl_)) => {
84106
let adt = impl_.self_ty(ctx.db()).as_adt()?;
85-
assoc_fn_target(ctx, &call, adt, &mut target_module, fn_name, &mut adt_name)?
107+
assoc_fn_target(ctx, call, adt, &mut target_module, fn_name, &mut adt_name)?
86108
}
87109
_ => {
88110
return None;
@@ -93,19 +115,7 @@ fn gen_fn(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
93115
get_fn_target(ctx, &target_module, call.clone())?
94116
}
95117
};
96-
let function_builder = FunctionBuilder::from_call(ctx, &call, fn_name, target_module, target)?;
97-
let text_range = call.syntax().text_range();
98-
let label = format!("Generate {} function", function_builder.fn_name);
99-
add_func_to_accumulator(
100-
acc,
101-
ctx,
102-
text_range,
103-
function_builder,
104-
insert_offset,
105-
file,
106-
adt_name,
107-
label,
108-
)
118+
Some((target_module, adt_name, target, file, insert_offset))
109119
}
110120

111121
fn gen_method(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {

0 commit comments

Comments
 (0)