mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 11:20:54 +00:00
Use the text range for the name. Not the entire syntax in Unused Variable Diagnostic.
This commit is contained in:
parent
2e7059ca58
commit
0faa2940c7
@ -6,6 +6,7 @@ use ide_db::{
|
||||
source_change::SourceChange,
|
||||
RootDatabase,
|
||||
};
|
||||
use syntax::TextRange;
|
||||
use text_edit::TextEdit;
|
||||
|
||||
use crate::{Diagnostic, DiagnosticCode, DiagnosticsContext};
|
||||
@ -23,6 +24,13 @@ pub(crate) fn unused_variables(
|
||||
return None;
|
||||
}
|
||||
let diagnostic_range = ctx.sema.diagnostics_display_range(ast);
|
||||
// The range for the Actual Name. We don't want to replace the entire declarition. Using the diagnostic range causes issues within in Array Destructuring.
|
||||
let name_range =
|
||||
d.local.primary_source(ctx.sema.db).name().map(|v| v.syntax().value.text_range())?;
|
||||
// Make sure we are within the diagnostic range for the variable
|
||||
if !diagnostic_range.range.contains_range(name_range) {
|
||||
return None;
|
||||
}
|
||||
let var_name = d.local.name(ctx.sema.db);
|
||||
Some(
|
||||
Diagnostic::new_with_syntax_node_ptr(
|
||||
@ -31,7 +39,13 @@ pub(crate) fn unused_variables(
|
||||
"unused variable",
|
||||
ast,
|
||||
)
|
||||
.with_fixes(fixes(ctx.sema.db, var_name, diagnostic_range, ast.file_id.is_macro()))
|
||||
.with_fixes(fixes(
|
||||
ctx.sema.db,
|
||||
var_name,
|
||||
name_range,
|
||||
diagnostic_range,
|
||||
ast.file_id.is_macro(),
|
||||
))
|
||||
.experimental(),
|
||||
)
|
||||
}
|
||||
@ -39,12 +53,14 @@ pub(crate) fn unused_variables(
|
||||
fn fixes(
|
||||
db: &RootDatabase,
|
||||
var_name: Name,
|
||||
name_range: TextRange,
|
||||
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!(
|
||||
@ -56,7 +72,7 @@ fn fixes(
|
||||
target: diagnostic_range.range,
|
||||
source_change: Some(SourceChange::from_text_edit(
|
||||
diagnostic_range.file_id,
|
||||
TextEdit::replace(diagnostic_range.range, format!("_{}", var_name.display(db))),
|
||||
TextEdit::replace(name_range, format!("_{}", var_name.display(db))),
|
||||
)),
|
||||
trigger_signature_help: false,
|
||||
}])
|
||||
@ -221,6 +237,23 @@ macro_rules! my_macro {
|
||||
fn main() {
|
||||
my_macro!();
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
#[test]
|
||||
fn unused_variable_in_array_destructure() {
|
||||
check_fix(
|
||||
r#"
|
||||
fn main() {
|
||||
let arr = [1, 2, 3, 4, 5];
|
||||
let [_x, y$0 @ ..] = arr;
|
||||
}
|
||||
"#,
|
||||
r#"
|
||||
fn main() {
|
||||
let arr = [1, 2, 3, 4, 5];
|
||||
let [_x, _y @ ..] = arr;
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user