@@ -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
111121fn gen_method ( acc : & mut Assists , ctx : & AssistContext < ' _ > ) -> Option < ( ) > {
0 commit comments