Skip to content

Commit 62dcf39

Browse files
committed
Auto merge of rust-lang#14723 - obsgolem:master, r=Veykril
Added remove unused imports assist This resolves the most important part of rust-lang#5131. I needed to make a couple of cosmetic changes to the search infrastructure to do this. A few open questions: * Should imports that don't resolve to anything be considered unused? I figured probably not, but it would be a trivial change to make if we want it. * Is there a cleaner way to make the edits to the use list? * Is there a cleaner way to get the list of uses that intersect the current selection? * Is the performance acceptable? When testing this on itself, it takes a good couple seconds to perform the assist. * Is there a way to hide the rustc diagnostics that overlap with this functionality?
2 parents 43ecf29 + 7a87a35 commit 62dcf39

16 files changed

+822
-28
lines changed

crates/ide-assists/src/handlers/destructure_tuple_binding.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ fn collect_data(ident_pat: IdentPat, ctx: &AssistContext<'_>) -> Option<TupleDat
114114
let usages = ctx.sema.to_def(&ident_pat).map(|def| {
115115
Definition::Local(def)
116116
.usages(&ctx.sema)
117-
.in_scope(SearchScope::single_file(ctx.file_id()))
117+
.in_scope(&SearchScope::single_file(ctx.file_id()))
118118
.all()
119119
});
120120

crates/ide-assists/src/handlers/expand_glob_import.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ fn find_parent_and_path(
120120

121121
fn def_is_referenced_in(def: Definition, ctx: &AssistContext<'_>) -> bool {
122122
let search_scope = SearchScope::single_file(ctx.file_id());
123-
def.usages(&ctx.sema).in_scope(search_scope).at_least_one()
123+
def.usages(&ctx.sema).in_scope(&search_scope).at_least_one()
124124
}
125125

126126
#[derive(Debug, Clone)]

crates/ide-assists/src/handlers/extract_function.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ impl LocalUsages {
384384
Self(
385385
Definition::Local(var)
386386
.usages(&ctx.sema)
387-
.in_scope(SearchScope::single_file(ctx.file_id()))
387+
.in_scope(&SearchScope::single_file(ctx.file_id()))
388388
.all(),
389389
)
390390
}

crates/ide-assists/src/handlers/extract_module.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -478,7 +478,7 @@ impl Module {
478478
let selection_range = ctx.selection_trimmed();
479479
let curr_file_id = ctx.file_id();
480480
let search_scope = SearchScope::single_file(curr_file_id);
481-
let usage_res = def.usages(&ctx.sema).in_scope(search_scope).all();
481+
let usage_res = def.usages(&ctx.sema).in_scope(&search_scope).all();
482482
let file = ctx.sema.parse(curr_file_id);
483483

484484
let mut exists_inside_sel = false;

crates/ide-assists/src/handlers/inline_call.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ pub(crate) fn inline_into_callers(acc: &mut Assists, ctx: &AssistContext<'_>) ->
8080

8181
let is_recursive_fn = usages
8282
.clone()
83-
.in_scope(SearchScope::file_range(FileRange {
83+
.in_scope(&SearchScope::file_range(FileRange {
8484
file_id: def_file,
8585
range: func_body.syntax().text_range(),
8686
}))

crates/ide-assists/src/handlers/move_const_to_impl.rs

+9-7
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,19 @@ pub(crate) fn move_const_to_impl(acc: &mut Assists, ctx: &AssistContext<'_>) ->
8282
return None;
8383
}
8484

85-
let usages =
86-
Definition::Const(def).usages(&ctx.sema).in_scope(SearchScope::file_range(FileRange {
87-
file_id: ctx.file_id(),
88-
range: parent_fn.syntax().text_range(),
89-
}));
90-
9185
acc.add(
9286
AssistId("move_const_to_impl", crate::AssistKind::RefactorRewrite),
9387
"Move const to impl block",
9488
const_.syntax().text_range(),
9589
|builder| {
90+
let usages = Definition::Const(def)
91+
.usages(&ctx.sema)
92+
.in_scope(&SearchScope::file_range(FileRange {
93+
file_id: ctx.file_id(),
94+
range: parent_fn.syntax().text_range(),
95+
}))
96+
.all();
97+
9698
let range_to_delete = match const_.syntax().next_sibling_or_token() {
9799
Some(s) if matches!(s.kind(), SyntaxKind::WHITESPACE) => {
98100
// Remove following whitespaces too.
@@ -103,7 +105,7 @@ pub(crate) fn move_const_to_impl(acc: &mut Assists, ctx: &AssistContext<'_>) ->
103105
builder.delete(range_to_delete);
104106

105107
let const_ref = format!("Self::{}", name.display(ctx.db()));
106-
for range in usages.all().file_ranges().map(|it| it.range) {
108+
for range in usages.file_ranges().map(|it| it.range) {
107109
builder.replace(range, const_ref.clone());
108110
}
109111

0 commit comments

Comments
 (0)