]> git.lizzy.rs Git - rust.git/commitdiff
Fix add reference action on macros.
authorMathew Horner <mathewhorner456@gmail.com>
Fri, 16 Sep 2022 01:25:29 +0000 (20:25 -0500)
committerMathew Horner <mathewhorner456@gmail.com>
Fri, 16 Sep 2022 01:25:29 +0000 (20:25 -0500)
crates/ide-diagnostics/src/handlers/type_mismatch.rs

index 6bf90e645b49ae4be4789207762044b05f584264..937f98f47983ad7201a2d864b82f911dc1c8027e 100644 (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! 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(