Skip to content

Commit 7713657

Browse files
committed
feat: add fix for unused_variables
1 parent a0dd822 commit 7713657

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

crates/ide-diagnostics/src/handlers/unused_variables.rs

+28
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
use ide_db::{
2+
assists::{Assist, AssistId, AssistKind},
3+
base_db::FileRange,
4+
label::Label,
5+
source_change::SourceChange,
6+
};
7+
use text_edit::TextEdit;
8+
19
use crate::{Diagnostic, DiagnosticCode, DiagnosticsContext};
210

311
// Diagnostic: unused-variables
@@ -8,15 +16,35 @@ pub(crate) fn unused_variables(
816
d: &hir::UnusedVariable,
917
) -> Diagnostic {
1018
let ast = d.local.primary_source(ctx.sema.db).syntax_ptr();
19+
let diagnostic_range = ctx.sema.diagnostics_display_range(ast);
20+
let var_name = d.local.primary_source(ctx.sema.db).syntax().to_string();
1121
Diagnostic::new_with_syntax_node_ptr(
1222
ctx,
1323
DiagnosticCode::RustcLint("unused_variables"),
1424
"unused variable",
1525
ast,
1626
)
27+
.with_fixes(fixes(&var_name, diagnostic_range, ast.file_id.is_macro()))
1728
.experimental()
1829
}
1930

31+
fn fixes(var_name: &String, diagnostic_range: FileRange, is_in_marco: bool) -> Option<Vec<Assist>> {
32+
if is_in_marco {
33+
return None;
34+
}
35+
Some(vec![Assist {
36+
id: AssistId("unscore_unused_variable_name", AssistKind::QuickFix),
37+
label: Label::new(format!("Rename unused {} to _{}", var_name, var_name)),
38+
group: None,
39+
target: diagnostic_range.range,
40+
source_change: Some(SourceChange::from_text_edit(
41+
diagnostic_range.file_id,
42+
TextEdit::replace(diagnostic_range.range, format!("_{}", var_name)),
43+
)),
44+
trigger_signature_help: false,
45+
}])
46+
}
47+
2048
#[cfg(test)]
2149
mod tests {
2250
use crate::tests::check_diagnostics;

0 commit comments

Comments
 (0)