@@ -37,6 +37,7 @@ pub struct AssistAction {
37
37
pub label : Option < String > ,
38
38
pub edit : TextEdit ,
39
39
pub cursor_position : Option < TextUnit > ,
40
+ // FIXME: This belongs to `AssistLabel`
40
41
pub target : Option < TextRange > ,
41
42
}
42
43
@@ -60,35 +61,33 @@ impl ResolvedAssist {
60
61
/// Assists are returned in the "unresolved" state, that is only labels are
61
62
/// returned, without actual edits.
62
63
pub fn unresolved_assists ( db : & RootDatabase , range : FileRange ) -> Vec < AssistLabel > {
63
- AssistCtx :: with_ctx ( db, range, false , |ctx| {
64
- assists:: all ( )
65
- . iter ( )
66
- . filter_map ( |f| f ( ctx. clone ( ) ) )
67
- . map ( |a| match a {
68
- Assist :: Unresolved { label } => label,
69
- Assist :: Resolved { .. } => unreachable ! ( ) ,
70
- } )
71
- . collect ( )
72
- } )
64
+ let ctx = AssistCtx :: new ( db, range, false ) ;
65
+ assists:: all ( )
66
+ . iter ( )
67
+ . filter_map ( |f| f ( ctx. clone ( ) ) )
68
+ . map ( |a| match a {
69
+ Assist :: Unresolved { label } => label,
70
+ Assist :: Resolved { .. } => unreachable ! ( ) ,
71
+ } )
72
+ . collect ( )
73
73
}
74
74
75
75
/// Return all the assists applicable at the given position.
76
76
///
77
77
/// Assists are returned in the "resolved" state, that is with edit fully
78
78
/// computed.
79
79
pub fn resolved_assists ( db : & RootDatabase , range : FileRange ) -> Vec < ResolvedAssist > {
80
- AssistCtx :: with_ctx ( db, range, true , |ctx| {
81
- let mut a = assists:: all ( )
82
- . iter ( )
83
- . filter_map ( |f| f ( ctx. clone ( ) ) )
84
- . map ( |a| match a {
85
- Assist :: Resolved { assist } => assist,
86
- Assist :: Unresolved { .. } => unreachable ! ( ) ,
87
- } )
88
- . collect ( ) ;
89
- sort_assists ( & mut a) ;
90
- a
91
- } )
80
+ let ctx = AssistCtx :: new ( db, range, true ) ;
81
+ let mut a = assists:: all ( )
82
+ . iter ( )
83
+ . filter_map ( |f| f ( ctx. clone ( ) ) )
84
+ . map ( |a| match a {
85
+ Assist :: Resolved { assist } => assist,
86
+ Assist :: Unresolved { .. } => unreachable ! ( ) ,
87
+ } )
88
+ . collect ( ) ;
89
+ sort_assists ( & mut a) ;
90
+ a
92
91
}
93
92
94
93
fn sort_assists ( assists : & mut Vec < ResolvedAssist > ) {
@@ -192,7 +191,7 @@ mod helpers {
192
191
let frange =
193
192
FileRange { file_id, range : TextRange :: offset_len ( before_cursor_pos, 0 . into ( ) ) } ;
194
193
let assist =
195
- AssistCtx :: with_ctx ( & db, frange, true , assist ) . expect ( "code action is not applicable" ) ;
194
+ assist ( AssistCtx :: new ( & db, frange, true ) ) . expect ( "code action is not applicable" ) ;
196
195
let action = match assist {
197
196
Assist :: Unresolved { .. } => unreachable ! ( ) ,
198
197
Assist :: Resolved { assist } => assist. get_first_action ( ) ,
@@ -219,7 +218,7 @@ mod helpers {
219
218
let ( db, file_id) = with_single_file ( & before) ;
220
219
let frange = FileRange { file_id, range } ;
221
220
let assist =
222
- AssistCtx :: with_ctx ( & db, frange, true , assist ) . expect ( "code action is not applicable" ) ;
221
+ assist ( AssistCtx :: new ( & db, frange, true ) ) . expect ( "code action is not applicable" ) ;
223
222
let action = match assist {
224
223
Assist :: Unresolved { .. } => unreachable ! ( ) ,
225
224
Assist :: Resolved { assist } => assist. get_first_action ( ) ,
@@ -242,7 +241,7 @@ mod helpers {
242
241
let frange =
243
242
FileRange { file_id, range : TextRange :: offset_len ( before_cursor_pos, 0 . into ( ) ) } ;
244
243
let assist =
245
- AssistCtx :: with_ctx ( & db, frange, true , assist ) . expect ( "code action is not applicable" ) ;
244
+ assist ( AssistCtx :: new ( & db, frange, true ) ) . expect ( "code action is not applicable" ) ;
246
245
let action = match assist {
247
246
Assist :: Unresolved { .. } => unreachable ! ( ) ,
248
247
Assist :: Resolved { assist } => assist. get_first_action ( ) ,
@@ -261,7 +260,7 @@ mod helpers {
261
260
let ( db, file_id) = with_single_file ( & before) ;
262
261
let frange = FileRange { file_id, range } ;
263
262
let assist =
264
- AssistCtx :: with_ctx ( & db, frange, true , assist ) . expect ( "code action is not applicable" ) ;
263
+ assist ( AssistCtx :: new ( & db, frange, true ) ) . expect ( "code action is not applicable" ) ;
265
264
let action = match assist {
266
265
Assist :: Unresolved { .. } => unreachable ! ( ) ,
267
266
Assist :: Resolved { assist } => assist. get_first_action ( ) ,
@@ -279,7 +278,7 @@ mod helpers {
279
278
let ( db, file_id) = with_single_file ( & before) ;
280
279
let frange =
281
280
FileRange { file_id, range : TextRange :: offset_len ( before_cursor_pos, 0 . into ( ) ) } ;
282
- let assist = AssistCtx :: with_ctx ( & db, frange, true , assist ) ;
281
+ let assist = assist ( AssistCtx :: new ( & db, frange, true ) ) ;
283
282
assert ! ( assist. is_none( ) ) ;
284
283
}
285
284
@@ -290,7 +289,7 @@ mod helpers {
290
289
let ( range, before) = extract_range ( before) ;
291
290
let ( db, file_id) = with_single_file ( & before) ;
292
291
let frange = FileRange { file_id, range } ;
293
- let assist = AssistCtx :: with_ctx ( & db, frange, true , assist ) ;
292
+ let assist = assist ( AssistCtx :: new ( & db, frange, true ) ) ;
294
293
assert ! ( assist. is_none( ) ) ;
295
294
}
296
295
}
0 commit comments