@@ -59,9 +59,6 @@ fn add_reference(
59
59
d : & hir:: TypeMismatch ,
60
60
acc : & mut Vec < Assist > ,
61
61
) -> Option < ( ) > {
62
- let root = ctx. sema . db . parse_or_expand ( d. expr . file_id ) ?;
63
- let expr_node = d. expr . value . to_node ( & root) ;
64
-
65
62
let range = ctx. sema . diagnostics_display_range ( d. expr . clone ( ) . map ( |it| it. into ( ) ) ) . range ;
66
63
67
64
let ( _, mutability) = d. expected . as_reference ( ) ?;
@@ -72,7 +69,7 @@ fn add_reference(
72
69
73
70
let ampersands = format ! ( "&{}" , mutability. as_keyword_for_ref( ) ) ;
74
71
75
- let edit = TextEdit :: insert ( expr_node . syntax ( ) . text_range ( ) . start ( ) , ampersands) ;
72
+ let edit = TextEdit :: insert ( range . start ( ) , ampersands) ;
76
73
let source_change =
77
74
SourceChange :: from_text_edit ( d. expr . file_id . original_file ( ctx. sema . db ) , edit) ;
78
75
acc. push ( fix ( "add_reference_here" , "Add reference here" , source_change, range) ) ;
@@ -314,6 +311,34 @@ fn main() {
314
311
) ;
315
312
}
316
313
314
+ #[ test]
315
+ fn test_add_reference_to_macro_call ( ) {
316
+ check_fix (
317
+ r#"
318
+ macro_rules! hello_world {
319
+ () => {
320
+ "Hello World".to_string()
321
+ };
322
+ }
323
+ fn test(foo: &String) {}
324
+ fn main() {
325
+ test($0hello_world!());
326
+ }
327
+ "# ,
328
+ r#"
329
+ macro_rules! hello_world {
330
+ () => {
331
+ "Hello World".to_string()
332
+ };
333
+ }
334
+ fn test(foo: &String) {}
335
+ fn main() {
336
+ test(&hello_world!());
337
+ }
338
+ "# ,
339
+ ) ;
340
+ }
341
+
317
342
#[ test]
318
343
fn test_add_mutable_reference_to_let_stmt ( ) {
319
344
check_fix (
0 commit comments