aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_assists/src/handlers/auto_import.rs119
1 files changed, 116 insertions, 3 deletions
diff --git a/crates/ra_assists/src/handlers/auto_import.rs b/crates/ra_assists/src/handlers/auto_import.rs
index 10984d8ad..27d96b941 100644
--- a/crates/ra_assists/src/handlers/auto_import.rs
+++ b/crates/ra_assists/src/handlers/auto_import.rs
@@ -46,9 +46,9 @@ pub(crate) fn auto_import(ctx: AssistCtx) -> Option<Assist> {
46 46
47 let name_ref_to_import = 47 let name_ref_to_import =
48 path_under_caret.syntax().descendants().find_map(ast::NameRef::cast)?; 48 path_under_caret.syntax().descendants().find_map(ast::NameRef::cast)?;
49 if dbg!(source_analyzer 49 if source_analyzer
50 .resolve_path(ctx.db, &name_ref_to_import.syntax().ancestors().find_map(ast::Path::cast)?)) 50 .resolve_path(ctx.db, &name_ref_to_import.syntax().ancestors().find_map(ast::Path::cast)?)
51 .is_some() 51 .is_some()
52 { 52 {
53 return None; 53 return None;
54 } 54 }
@@ -307,4 +307,117 @@ mod tests {
307 ", 307 ",
308 ); 308 );
309 } 309 }
310
311 #[test]
312 fn associated_struct_function() {
313 check_assist(
314 auto_import,
315 r"
316 mod test_mod {
317 pub struct TestStruct {}
318 impl TestStruct {
319 pub fn test_function() {}
320 }
321 }
322
323 fn main() {
324 TestStruct::test_function<|>
325 }
326 ",
327 r"
328 use test_mod::TestStruct;
329
330 mod test_mod {
331 pub struct TestStruct {}
332 impl TestStruct {
333 pub fn test_function() {}
334 }
335 }
336
337 fn main() {
338 TestStruct::test_function<|>
339 }
340 ",
341 );
342 }
343
344 #[test]
345 fn associated_trait_function() {
346 check_assist(
347 auto_import,
348 r"
349 mod test_mod {
350 pub trait TestTrait {
351 fn test_function();
352 }
353 pub struct TestStruct {}
354 impl TestTrait for TestStruct {
355 fn test_function() {}
356 }
357 }
358
359 fn main() {
360 test_mod::TestStruct::test_function<|>
361 }
362 ",
363 r"
364 use test_mod::TestTrait;
365
366 mod test_mod {
367 pub trait TestTrait {
368 fn test_function();
369 }
370 pub struct TestStruct {}
371 impl TestTrait for TestStruct {
372 fn test_function() {}
373 }
374 }
375
376 fn main() {
377 test_mod::TestStruct::test_function<|>
378 }
379 ",
380 );
381 }
382
383 #[test]
384 fn trait_method() {
385 check_assist(
386 auto_import,
387 r"
388 mod test_mod {
389 pub trait TestTrait {
390 fn test_method(&self);
391 }
392 pub struct TestStruct {}
393 impl TestTrait for TestStruct {
394 fn test_method(&self) {}
395 }
396 }
397
398 fn main() {
399 let test_struct = test_mod::TestStruct {};
400 test_struct.test_method<|>
401 }
402 ",
403 r"
404 use test_mod::TestTrait;
405
406 mod test_mod {
407 pub trait TestTrait {
408 fn test_method(&self);
409 }
410 pub struct TestStruct {}
411 impl TestTrait for TestStruct {
412 fn test_method(&self) {}
413 }
414 }
415
416 fn main() {
417 let test_struct = test_mod::TestStruct {};
418 test_struct.test_method<|>
419 }
420 ",
421 );
422 }
310} 423}