|
1 | 1 | use std::iter; |
2 | 2 |
|
3 | | -use hir::{HirFileIdExt, ModuleSource}; |
| 3 | +use hir::{HasSource, HirFileIdExt, ModuleSource}; |
4 | 4 | use ide_db::{ |
5 | 5 | assists::{AssistId, AssistKind}, |
6 | 6 | base_db::FileId, |
7 | 7 | defs::{Definition, NameClass, NameRefClass}, |
8 | | - helpers::item_name, |
9 | | - items_locator::items_with_name, |
10 | 8 | search::{FileReference, SearchScope}, |
11 | 9 | FxHashMap, FxHashSet, |
12 | 10 | }; |
@@ -473,6 +471,9 @@ impl Module { |
473 | 471 | .filter(|(use_file_id, _)| *use_file_id == file_id) |
474 | 472 | .flat_map(|(_, refs)| refs.into_iter().rev()) |
475 | 473 | .find_map(|fref| find_node_at_range(file.syntax(), fref.range)); |
| 474 | + let use_stmt_not_in_sel = use_stmt.as_ref().is_some_and(|use_stmt| { |
| 475 | + !selection_range.contains_range(use_stmt.syntax().text_range()) |
| 476 | + }); |
476 | 477 |
|
477 | 478 | let mut use_tree_str_opt: Option<Vec<ast::Path>> = None; |
478 | 479 | //Exists inside and outside selection |
@@ -565,7 +566,7 @@ impl Module { |
565 | 566 | _ => false, |
566 | 567 | }; |
567 | 568 |
|
568 | | - if def_out_sel || !is_item { |
| 569 | + if (def_out_sel || !is_item) && use_stmt_not_in_sel { |
569 | 570 | self.use_items.insert(0, item.clone()); |
570 | 571 | } |
571 | 572 | } |
|
0 commit comments