Auto merge of #13239 - mdx97:mathew/fix-add-reference-for-macros, r=Veykril
Fix add reference action on macros. Before we were using the range of the corresponding expression node in the macro expanded file, which is obviously incorrect as we are setting the text in the original source. For some reason, the test I added is failing and I haven't found a way to fix it. Does anyone know why `check_fix` wouldn't work with macros? Getting this error: ```text thread 'handlers::type_mismatch::tests::test_add_reference_to_macro_call' panicked at 'no diagnostics', crates/ide-diagnostics/src/handlers/type_mismatch.rs:317:9 ``` closes #13219
This commit is contained in:
commit
932e63b5d4
@ -59,9 +59,6 @@ fn add_reference(
|
||||
d: &hir::TypeMismatch,
|
||||
acc: &mut Vec<Assist>,
|
||||
) -> Option<()> {
|
||||
let root = ctx.sema.db.parse_or_expand(d.expr.file_id)?;
|
||||
let expr_node = d.expr.value.to_node(&root);
|
||||
|
||||
let range = ctx.sema.diagnostics_display_range(d.expr.clone().map(|it| it.into())).range;
|
||||
|
||||
let (_, mutability) = d.expected.as_reference()?;
|
||||
@ -72,7 +69,7 @@ fn add_reference(
|
||||
|
||||
let ampersands = format!("&{}", mutability.as_keyword_for_ref());
|
||||
|
||||
let edit = TextEdit::insert(expr_node.syntax().text_range().start(), ampersands);
|
||||
let edit = TextEdit::insert(range.start(), ampersands);
|
||||
let source_change =
|
||||
SourceChange::from_text_edit(d.expr.file_id.original_file(ctx.sema.db), edit);
|
||||
acc.push(fix("add_reference_here", "Add reference here", source_change, range));
|
||||
@ -314,6 +311,34 @@ fn main() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_add_reference_to_macro_call() {
|
||||
check_fix(
|
||||
r#"
|
||||
macro_rules! thousand {
|
||||
() => {
|
||||
1000_u64
|
||||
};
|
||||
}
|
||||
fn test(foo: &u64) {}
|
||||
fn main() {
|
||||
test($0thousand!());
|
||||
}
|
||||
"#,
|
||||
r#"
|
||||
macro_rules! thousand {
|
||||
() => {
|
||||
1000_u64
|
||||
};
|
||||
}
|
||||
fn test(foo: &u64) {}
|
||||
fn main() {
|
||||
test(&thousand!());
|
||||
}
|
||||
"#,
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_add_mutable_reference_to_let_stmt() {
|
||||
check_fix(
|
||||
|
Loading…
Reference in New Issue
Block a user