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:
bors 2022-09-17 11:23:05 +00:00
commit 932e63b5d4

View File

@ -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(