@@ -168,16 +168,27 @@ mod assists {
168
168
169
169
#[ cfg( test) ]
170
170
mod helpers {
171
- use ra_db:: { fixture:: WithFixture , FileRange } ;
172
- use ra_ide_db:: RootDatabase ;
171
+ use std:: sync:: Arc ;
172
+
173
+ use ra_db:: { fixture:: WithFixture , FileId , FileRange , SourceDatabaseExt } ;
174
+ use ra_ide_db:: { symbol_index:: SymbolsDatabase , RootDatabase } ;
173
175
use ra_syntax:: TextRange ;
174
176
use test_utils:: { add_cursor, assert_eq_text, extract_offset, extract_range} ;
175
177
176
178
use crate :: { Assist , AssistCtx } ;
177
179
180
+ pub ( crate ) fn with_single_file ( text : & str ) -> ( RootDatabase , FileId ) {
181
+ let ( mut db, file_id) = RootDatabase :: with_single_file ( text) ;
182
+ // FIXME: ideally, this should be done by the above `RootDatabase::with_single_file`,
183
+ // but it looks like this might need specialization? :(
184
+ let local_roots = vec ! [ db. file_source_root( file_id) ] ;
185
+ db. set_local_roots ( Arc :: new ( local_roots) ) ;
186
+ ( db, file_id)
187
+ }
188
+
178
189
pub ( crate ) fn check_assist ( assist : fn ( AssistCtx ) -> Option < Assist > , before : & str , after : & str ) {
179
190
let ( before_cursor_pos, before) = extract_offset ( before) ;
180
- let ( db, file_id) = RootDatabase :: with_single_file ( & before) ;
191
+ let ( db, file_id) = with_single_file ( & before) ;
181
192
let frange =
182
193
FileRange { file_id, range : TextRange :: offset_len ( before_cursor_pos, 0 . into ( ) ) } ;
183
194
let assist =
@@ -205,7 +216,7 @@ mod helpers {
205
216
after : & str ,
206
217
) {
207
218
let ( range, before) = extract_range ( before) ;
208
- let ( db, file_id) = RootDatabase :: with_single_file ( & before) ;
219
+ let ( db, file_id) = with_single_file ( & before) ;
209
220
let frange = FileRange { file_id, range } ;
210
221
let assist =
211
222
AssistCtx :: with_ctx ( & db, frange, true , assist) . expect ( "code action is not applicable" ) ;
@@ -227,7 +238,7 @@ mod helpers {
227
238
target : & str ,
228
239
) {
229
240
let ( before_cursor_pos, before) = extract_offset ( before) ;
230
- let ( db, file_id) = RootDatabase :: with_single_file ( & before) ;
241
+ let ( db, file_id) = with_single_file ( & before) ;
231
242
let frange =
232
243
FileRange { file_id, range : TextRange :: offset_len ( before_cursor_pos, 0 . into ( ) ) } ;
233
244
let assist =
@@ -247,7 +258,7 @@ mod helpers {
247
258
target : & str ,
248
259
) {
249
260
let ( range, before) = extract_range ( before) ;
250
- let ( db, file_id) = RootDatabase :: with_single_file ( & before) ;
261
+ let ( db, file_id) = with_single_file ( & before) ;
251
262
let frange = FileRange { file_id, range } ;
252
263
let assist =
253
264
AssistCtx :: with_ctx ( & db, frange, true , assist) . expect ( "code action is not applicable" ) ;
@@ -265,7 +276,7 @@ mod helpers {
265
276
before : & str ,
266
277
) {
267
278
let ( before_cursor_pos, before) = extract_offset ( before) ;
268
- let ( db, file_id) = RootDatabase :: with_single_file ( & before) ;
279
+ let ( db, file_id) = with_single_file ( & before) ;
269
280
let frange =
270
281
FileRange { file_id, range : TextRange :: offset_len ( before_cursor_pos, 0 . into ( ) ) } ;
271
282
let assist = AssistCtx :: with_ctx ( & db, frange, true , assist) ;
@@ -277,7 +288,7 @@ mod helpers {
277
288
before : & str ,
278
289
) {
279
290
let ( range, before) = extract_range ( before) ;
280
- let ( db, file_id) = RootDatabase :: with_single_file ( & before) ;
291
+ let ( db, file_id) = with_single_file ( & before) ;
281
292
let frange = FileRange { file_id, range } ;
282
293
let assist = AssistCtx :: with_ctx ( & db, frange, true , assist) ;
283
294
assert ! ( assist. is_none( ) ) ;
@@ -286,17 +297,17 @@ mod helpers {
286
297
287
298
#[ cfg( test) ]
288
299
mod tests {
289
- use ra_db:: { fixture :: WithFixture , FileRange } ;
300
+ use ra_db:: FileRange ;
290
301
use ra_syntax:: TextRange ;
291
302
use test_utils:: { extract_offset, extract_range} ;
292
303
293
- use ra_ide_db :: RootDatabase ;
304
+ use crate :: helpers ;
294
305
295
306
#[ test]
296
307
fn assist_order_field_struct ( ) {
297
308
let before = "struct Foo { <|>bar: u32 }" ;
298
309
let ( before_cursor_pos, before) = extract_offset ( before) ;
299
- let ( db, file_id) = RootDatabase :: with_single_file ( & before) ;
310
+ let ( db, file_id) = helpers :: with_single_file ( & before) ;
300
311
let frange =
301
312
FileRange { file_id, range : TextRange :: offset_len ( before_cursor_pos, 0 . into ( ) ) } ;
302
313
let assists = super :: assists ( & db, frange) ;
@@ -320,7 +331,7 @@ mod tests {
320
331
}
321
332
}" ;
322
333
let ( range, before) = extract_range ( before) ;
323
- let ( db, file_id) = RootDatabase :: with_single_file ( & before) ;
334
+ let ( db, file_id) = helpers :: with_single_file ( & before) ;
324
335
let frange = FileRange { file_id, range } ;
325
336
let assists = super :: assists ( & db, frange) ;
326
337
let mut assists = assists. iter ( ) ;
0 commit comments