diff options
| author | Mathew Horner <mathewhorner456@gmail.com> | 2022-09-15 20:25:29 -0500 |
|---|---|---|
| committer | Mathew Horner <mathewhorner456@gmail.com> | 2022-09-15 20:25:29 -0500 |
| commit | e7abf34c1984196aadc3b3ee6e95887e22b68dea (patch) | |
| tree | e5459a36809bf87e22e175deb86f032aff8ac783 | |
| parent | 2b61be297568015de5d038f31a304c7a69679bc7 (diff) | |
| download | rust-e7abf34c1984196aadc3b3ee6e95887e22b68dea.tar.gz rust-e7abf34c1984196aadc3b3ee6e95887e22b68dea.zip | |
Fix add reference action on macros.
| -rw-r--r-- | crates/ide-diagnostics/src/handlers/type_mismatch.rs | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/crates/ide-diagnostics/src/handlers/type_mismatch.rs b/crates/ide-diagnostics/src/handlers/type_mismatch.rs index 6bf90e645b4..937f98f4798 100644 --- a/crates/ide-diagnostics/src/handlers/type_mismatch.rs +++ b/crates/ide-diagnostics/src/handlers/type_mismatch.rs @@ -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)); @@ -315,6 +312,34 @@ fn main() { } #[test] + fn test_add_reference_to_macro_call() { + check_fix( + r#" +macro_rules! hello_world { + () => { + "Hello World".to_string() + }; +} +fn test(foo: &String) {} +fn main() { + test($0hello_world!()); +} + "#, + r#" +macro_rules! hello_world { + () => { + "Hello World".to_string() + }; +} +fn test(foo: &String) {} +fn main() { + test(&hello_world!()); +} + "#, + ); + } + + #[test] fn test_add_mutable_reference_to_let_stmt() { check_fix( r#" |
