Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/bind_unused_param.rs')
-rw-r--r--crates/ide-assists/src/handlers/bind_unused_param.rs33
1 files changed, 30 insertions, 3 deletions
diff --git a/crates/ide-assists/src/handlers/bind_unused_param.rs b/crates/ide-assists/src/handlers/bind_unused_param.rs
index 00c7d25b25..1b24f7fe7f 100644
--- a/crates/ide-assists/src/handlers/bind_unused_param.rs
+++ b/crates/ide-assists/src/handlers/bind_unused_param.rs
@@ -2,7 +2,7 @@ use crate::assist_context::{AssistContext, Assists};
use ide_db::{LineIndexDatabase, assists::AssistId, defs::Definition};
use syntax::{
AstNode,
- ast::{self, edit_in_place::Indent},
+ ast::{self, HasName, edit_in_place::Indent},
};
// Assist: bind_unused_param
@@ -22,6 +22,7 @@ pub(crate) fn bind_unused_param(acc: &mut Assists, ctx: &AssistContext<'_>) -> O
let param: ast::Param = ctx.find_node_at_offset()?;
let Some(ast::Pat::IdentPat(ident_pat)) = param.pat() else { return None };
+ let name = ident_pat.name().filter(|n| !n.text().starts_with('_'))?;
let param_def = {
let local = ctx.sema.to_def(&ident_pat)?;
@@ -39,14 +40,14 @@ pub(crate) fn bind_unused_param(acc: &mut Assists, ctx: &AssistContext<'_>) -> O
acc.add(
AssistId::quick_fix("bind_unused_param"),
- format!("Bind as `let _ = {ident_pat};`"),
+ format!("Bind as `let _ = {name};`"),
param.syntax().text_range(),
|builder| {
let line_index = ctx.db().line_index(ctx.vfs_file_id());
let indent = func.indent_level();
let text_indent = indent + 1;
- let mut text = format!("\n{text_indent}let _ = {ident_pat};");
+ let mut text = format!("\n{text_indent}let _ = {name};");
let left_line = line_index.line_col(l_curly_range.end()).line;
let right_line = line_index.line_col(r_curly_range.start()).line;
@@ -84,6 +85,22 @@ fn foo(y: i32) {
}
#[test]
+ fn bind_unused_ref_ident_pat() {
+ cov_mark::check!(single_line);
+ check_assist(
+ bind_unused_param,
+ r#"
+fn foo(ref $0y: i32) {}
+"#,
+ r#"
+fn foo(ref y: i32) {
+ let _ = y;
+}
+"#,
+ );
+ }
+
+ #[test]
fn bind_unused_empty_block_with_newline() {
check_assist(
bind_unused_param,
@@ -152,4 +169,14 @@ fn foo(x: i32, $0y: i32) { y; }
"#,
);
}
+
+ #[test]
+ fn keep_underscore_used() {
+ check_assist_not_applicable(
+ bind_unused_param,
+ r#"
+fn foo($0_x: i32, y: i32) {}
+"#,
+ );
+ }
}