@@ -61,9 +61,31 @@ fn gen_fn(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
61
61
}
62
62
63
63
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 ) > {
64
87
let mut target_module = None ;
65
88
let mut adt_name = None ;
66
-
67
89
let ( target, file, insert_offset) = match path. qualifier ( ) {
68
90
Some ( qualifier) => match ctx. sema . resolve_path ( & qualifier) {
69
91
Some ( hir:: PathResolution :: Def ( hir:: ModuleDef :: Module ( module) ) ) => {
@@ -78,11 +100,11 @@ fn gen_fn(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
78
100
}
79
101
}
80
102
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) ?
82
104
}
83
105
Some ( hir:: PathResolution :: SelfType ( impl_) ) => {
84
106
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) ?
86
108
}
87
109
_ => {
88
110
return None ;
@@ -93,19 +115,7 @@ fn gen_fn(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option<()> {
93
115
get_fn_target ( ctx, & target_module, call. clone ( ) ) ?
94
116
}
95
117
} ;
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) )
109
119
}
110
120
111
121
fn gen_method ( acc : & mut Assists , ctx : & AssistContext < ' _ > ) -> Option < ( ) > {
0 commit comments