diff options
| author | Young-Flash <dongyang@apache.org> | 2024-03-11 19:34:16 +0800 |
|---|---|---|
| committer | Young-Flash <dongyang@apache.org> | 2024-03-11 19:36:53 +0800 |
| commit | 77136575da7fe3b59ed2c3d2f5100237e4111991 (patch) | |
| tree | 67390bb2724bd49deab2de05d0f2d71b8449682c | |
| parent | a0dd822972de3f4ad7fbb2f3d31291a1714ad652 (diff) | |
| download | rust-77136575da7fe3b59ed2c3d2f5100237e4111991.tar.gz rust-77136575da7fe3b59ed2c3d2f5100237e4111991.zip | |
feat: add fix for unused_variables
| -rw-r--r-- | crates/ide-diagnostics/src/handlers/unused_variables.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/crates/ide-diagnostics/src/handlers/unused_variables.rs b/crates/ide-diagnostics/src/handlers/unused_variables.rs index 28ccf474b40..412aed1e1ce 100644 --- a/crates/ide-diagnostics/src/handlers/unused_variables.rs +++ b/crates/ide-diagnostics/src/handlers/unused_variables.rs @@ -1,3 +1,11 @@ +use ide_db::{ + assists::{Assist, AssistId, AssistKind}, + base_db::FileRange, + label::Label, + source_change::SourceChange, +}; +use text_edit::TextEdit; + use crate::{Diagnostic, DiagnosticCode, DiagnosticsContext}; // Diagnostic: unused-variables @@ -8,15 +16,35 @@ pub(crate) fn unused_variables( d: &hir::UnusedVariable, ) -> Diagnostic { let ast = d.local.primary_source(ctx.sema.db).syntax_ptr(); + let diagnostic_range = ctx.sema.diagnostics_display_range(ast); + let var_name = d.local.primary_source(ctx.sema.db).syntax().to_string(); Diagnostic::new_with_syntax_node_ptr( ctx, DiagnosticCode::RustcLint("unused_variables"), "unused variable", ast, ) + .with_fixes(fixes(&var_name, diagnostic_range, ast.file_id.is_macro())) .experimental() } +fn fixes(var_name: &String, diagnostic_range: FileRange, is_in_marco: bool) -> Option<Vec<Assist>> { + if is_in_marco { + return None; + } + Some(vec![Assist { + id: AssistId("unscore_unused_variable_name", AssistKind::QuickFix), + label: Label::new(format!("Rename unused {} to _{}", var_name, var_name)), + group: None, + target: diagnostic_range.range, + source_change: Some(SourceChange::from_text_edit( + diagnostic_range.file_id, + TextEdit::replace(diagnostic_range.range, format!("_{}", var_name)), + )), + trigger_signature_help: false, + }]) +} + #[cfg(test)] mod tests { use crate::tests::check_diagnostics; |
