diff options
author | Lukas Wirth <[email protected]> | 2021-01-11 23:05:07 +0000 |
---|---|---|
committer | Lukas Wirth <[email protected]> | 2021-01-12 00:03:04 +0000 |
commit | fbdb32adfc49e0d69b7fd8e44135bea59382d2cb (patch) | |
tree | 5cffb6d3f0a0a168bfa48d7adcd6fa233e30b3db /crates/assists/src/handlers/remove_unused_param.rs | |
parent | 52fa926f005890f07dffc789c84c2be57a6bdccc (diff) |
Group references by FileId
Diffstat (limited to 'crates/assists/src/handlers/remove_unused_param.rs')
-rw-r--r-- | crates/assists/src/handlers/remove_unused_param.rs | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/crates/assists/src/handlers/remove_unused_param.rs b/crates/assists/src/handlers/remove_unused_param.rs index 56e8b5229..4f3b8ac46 100644 --- a/crates/assists/src/handlers/remove_unused_param.rs +++ b/crates/assists/src/handlers/remove_unused_param.rs | |||
@@ -1,8 +1,11 @@ | |||
1 | use ide_db::{defs::Definition, search::Reference}; | 1 | use ide_db::{ |
2 | defs::Definition, | ||
3 | search::{FileReference, FileReferences}, | ||
4 | }; | ||
2 | use syntax::{ | 5 | use syntax::{ |
3 | algo::find_node_at_range, | 6 | algo::find_node_at_range, |
4 | ast::{self, ArgListOwner}, | 7 | ast::{self, ArgListOwner}, |
5 | AstNode, SyntaxKind, SyntaxNode, TextRange, T, | 8 | AstNode, SourceFile, SyntaxKind, SyntaxNode, TextRange, T, |
6 | }; | 9 | }; |
7 | use test_utils::mark; | 10 | use test_utils::mark; |
8 | use SyntaxKind::WHITESPACE; | 11 | use SyntaxKind::WHITESPACE; |
@@ -58,32 +61,40 @@ pub(crate) fn remove_unused_param(acc: &mut Assists, ctx: &AssistContext) -> Opt | |||
58 | param.syntax().text_range(), | 61 | param.syntax().text_range(), |
59 | |builder| { | 62 | |builder| { |
60 | builder.delete(range_to_remove(param.syntax())); | 63 | builder.delete(range_to_remove(param.syntax())); |
61 | for usage in fn_def.usages(&ctx.sema).all() { | 64 | for usages in fn_def.usages(&ctx.sema).all() { |
62 | process_usage(ctx, builder, usage, param_position); | 65 | process_usages(ctx, builder, usages, param_position); |
63 | } | 66 | } |
64 | }, | 67 | }, |
65 | ) | 68 | ) |
66 | } | 69 | } |
67 | 70 | ||
68 | fn process_usage( | 71 | fn process_usages( |
69 | ctx: &AssistContext, | 72 | ctx: &AssistContext, |
70 | builder: &mut AssistBuilder, | 73 | builder: &mut AssistBuilder, |
71 | usage: Reference, | 74 | usages: FileReferences, |
75 | arg_to_remove: usize, | ||
76 | ) { | ||
77 | let source_file = ctx.sema.parse(usages.file_id); | ||
78 | builder.edit_file(usages.file_id); | ||
79 | for usage in usages.references { | ||
80 | if let Some(text_range) = process_usage(&source_file, usage, arg_to_remove) { | ||
81 | builder.delete(text_range); | ||
82 | } | ||
83 | } | ||
84 | } | ||
85 | |||
86 | fn process_usage( | ||
87 | source_file: &SourceFile, | ||
88 | FileReference { range, .. }: FileReference, | ||
72 | arg_to_remove: usize, | 89 | arg_to_remove: usize, |
73 | ) -> Option<()> { | 90 | ) -> Option<TextRange> { |
74 | let source_file = ctx.sema.parse(usage.file_range.file_id); | 91 | let call_expr: ast::CallExpr = find_node_at_range(source_file.syntax(), range)?; |
75 | let call_expr: ast::CallExpr = | ||
76 | find_node_at_range(source_file.syntax(), usage.file_range.range)?; | ||
77 | let call_expr_range = call_expr.expr()?.syntax().text_range(); | 92 | let call_expr_range = call_expr.expr()?.syntax().text_range(); |
78 | if !call_expr_range.contains_range(usage.file_range.range) { | 93 | if !call_expr_range.contains_range(range) { |
79 | return None; | 94 | return None; |
80 | } | 95 | } |
81 | let arg = call_expr.arg_list()?.args().nth(arg_to_remove)?; | 96 | let arg = call_expr.arg_list()?.args().nth(arg_to_remove)?; |
82 | 97 | Some(range_to_remove(arg.syntax())) | |
83 | builder.edit_file(usage.file_range.file_id); | ||
84 | builder.delete(range_to_remove(arg.syntax())); | ||
85 | |||
86 | Some(()) | ||
87 | } | 98 | } |
88 | 99 | ||
89 | fn range_to_remove(node: &SyntaxNode) -> TextRange { | 100 | fn range_to_remove(node: &SyntaxNode) -> TextRange { |