aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ssr
diff options
context:
space:
mode:
authorDavid Lattimore <[email protected]>2020-07-22 07:06:14 +0100
committerDavid Lattimore <[email protected]>2020-07-24 12:34:00 +0100
commit6fcaaa1201c650ce22b71160f6e9bf2288d10a1a (patch)
tree528e554a584eb746f67eaf6e1d9af04cdc780337 /crates/ra_ssr
parenta45682ed96f18f962ac403419b4d143d59ba5283 (diff)
SSR tests: Define all paths needed for templates
In a later commit, paths in templates will be resolved. This allows us to render the path with appropriate qualifiers for its context. Here we prepare for that change by updating existing tests where I'd previously not bothered to define the items that the template referred to.
Diffstat (limited to 'crates/ra_ssr')
-rw-r--r--crates/ra_ssr/src/tests.rs102
1 files changed, 76 insertions, 26 deletions
diff --git a/crates/ra_ssr/src/tests.rs b/crates/ra_ssr/src/tests.rs
index c7c37af2f..11512c8cc 100644
--- a/crates/ra_ssr/src/tests.rs
+++ b/crates/ra_ssr/src/tests.rs
@@ -154,8 +154,19 @@ fn ssr_function_to_method() {
154fn ssr_nested_function() { 154fn ssr_nested_function() {
155 assert_ssr_transform( 155 assert_ssr_transform(
156 "foo($a, $b, $c) ==>> bar($c, baz($a, $b))", 156 "foo($a, $b, $c) ==>> bar($c, baz($a, $b))",
157 "fn foo() {} fn main { foo (x + value.method(b), x+y-z, true && false) }", 157 r#"
158 expect![["fn foo() {} fn main { bar(true && false, baz(x + value.method(b), x+y-z)) }"]], 158 //- /lib.rs crate:foo
159 fn foo() {}
160 fn bar() {}
161 fn baz() {}
162 fn main { foo (x + value.method(b), x+y-z, true && false) }
163 "#,
164 expect![[r#"
165 fn foo() {}
166 fn bar() {}
167 fn baz() {}
168 fn main { bar(true && false, baz(x + value.method(b), x+y-z)) }
169 "#]],
159 ) 170 )
160} 171}
161 172
@@ -181,8 +192,8 @@ fn ssr_with_extra_space() {
181fn ssr_keeps_nested_comment() { 192fn ssr_keeps_nested_comment() {
182 assert_ssr_transform( 193 assert_ssr_transform(
183 "foo($x) ==>> bar($x)", 194 "foo($x) ==>> bar($x)",
184 "fn foo() {} fn main() { foo(other(5 /* using 5 */)) }", 195 "fn foo() {} fn bar() {} fn main() { foo(other(5 /* using 5 */)) }",
185 expect![["fn foo() {} fn main() { bar(other(5 /* using 5 */)) }"]], 196 expect![["fn foo() {} fn bar() {} fn main() { bar(other(5 /* using 5 */)) }"]],
186 ) 197 )
187} 198}
188 199
@@ -190,17 +201,25 @@ fn ssr_keeps_nested_comment() {
190fn ssr_keeps_comment() { 201fn ssr_keeps_comment() {
191 assert_ssr_transform( 202 assert_ssr_transform(
192 "foo($x) ==>> bar($x)", 203 "foo($x) ==>> bar($x)",
193 "fn foo() {} fn main() { foo(5 /* using 5 */) }", 204 "fn foo() {} fn bar() {} fn main() { foo(5 /* using 5 */) }",
194 expect![["fn foo() {} fn main() { bar(5)/* using 5 */ }"]], 205 expect![["fn foo() {} fn bar() {} fn main() { bar(5)/* using 5 */ }"]],
195 ) 206 )
196} 207}
197 208
198#[test] 209#[test]
199fn ssr_struct_lit() { 210fn ssr_struct_lit() {
200 assert_ssr_transform( 211 assert_ssr_transform(
201 "foo{a: $a, b: $b} ==>> foo::new($a, $b)", 212 "Foo{a: $a, b: $b} ==>> Foo::new($a, $b)",
202 "fn foo() {} fn main() { foo{b:2, a:1} }", 213 r#"
203 expect![["fn foo() {} fn main() { foo::new(1, 2) }"]], 214 struct Foo() {}
215 impl Foo { fn new() {} }
216 fn main() { Foo{b:2, a:1} }
217 "#,
218 expect![[r#"
219 struct Foo() {}
220 impl Foo { fn new() {} }
221 fn main() { Foo::new(1, 2) }
222 "#]],
204 ) 223 )
205} 224}
206 225
@@ -312,7 +331,7 @@ fn match_struct_instantiation() {
312fn match_path() { 331fn match_path() {
313 let code = r#" 332 let code = r#"
314 mod foo { 333 mod foo {
315 fn bar() {} 334 pub fn bar() {}
316 } 335 }
317 fn f() {foo::bar(42)}"#; 336 fn f() {foo::bar(42)}"#;
318 assert_matches("foo::bar", code, &["foo::bar"]); 337 assert_matches("foo::bar", code, &["foo::bar"]);
@@ -413,8 +432,8 @@ fn no_match_split_expression() {
413fn replace_function_call() { 432fn replace_function_call() {
414 assert_ssr_transform( 433 assert_ssr_transform(
415 "foo() ==>> bar()", 434 "foo() ==>> bar()",
416 "fn foo() {} fn f1() {foo(); foo();}", 435 "fn foo() {} fn bar() {} fn f1() {foo(); foo();}",
417 expect![["fn foo() {} fn f1() {bar(); bar();}"]], 436 expect![["fn foo() {} fn bar() {} fn f1() {bar(); bar();}"]],
418 ); 437 );
419} 438}
420 439
@@ -422,8 +441,8 @@ fn replace_function_call() {
422fn replace_function_call_with_placeholders() { 441fn replace_function_call_with_placeholders() {
423 assert_ssr_transform( 442 assert_ssr_transform(
424 "foo($a, $b) ==>> bar($b, $a)", 443 "foo($a, $b) ==>> bar($b, $a)",
425 "fn foo() {} fn f1() {foo(5, 42)}", 444 "fn foo() {} fn bar() {} fn f1() {foo(5, 42)}",
426 expect![["fn foo() {} fn f1() {bar(42, 5)}"]], 445 expect![["fn foo() {} fn bar() {} fn f1() {bar(42, 5)}"]],
427 ); 446 );
428} 447}
429 448
@@ -431,26 +450,40 @@ fn replace_function_call_with_placeholders() {
431fn replace_nested_function_calls() { 450fn replace_nested_function_calls() {
432 assert_ssr_transform( 451 assert_ssr_transform(
433 "foo($a) ==>> bar($a)", 452 "foo($a) ==>> bar($a)",
434 "fn foo() {} fn f1() {foo(foo(42))}", 453 "fn foo() {} fn bar() {} fn f1() {foo(foo(42))}",
435 expect![["fn foo() {} fn f1() {bar(bar(42))}"]], 454 expect![["fn foo() {} fn bar() {} fn f1() {bar(bar(42))}"]],
436 ); 455 );
437} 456}
438 457
439#[test] 458#[test]
440fn replace_type() { 459fn replace_associated_function_call() {
441 assert_ssr_transform( 460 assert_ssr_transform(
442 "Result<(), $a> ==>> Option<$a>", 461 "Foo::new() ==>> Bar::new()",
443 "struct Result<T, E> {} fn f1() -> Result<(), Vec<Error>> {foo()}", 462 r#"
444 expect![["struct Result<T, E> {} fn f1() -> Option<Vec<Error>> {foo()}"]], 463 struct Foo {}
464 impl Foo { fn new() {} }
465 struct Bar {}
466 impl Bar { fn new() {} }
467 fn f1() {Foo::new();}
468 "#,
469 expect![[r#"
470 struct Foo {}
471 impl Foo { fn new() {} }
472 struct Bar {}
473 impl Bar { fn new() {} }
474 fn f1() {Bar::new();}
475 "#]],
445 ); 476 );
446} 477}
447 478
448#[test] 479#[test]
449fn replace_struct_init() { 480fn replace_type() {
450 assert_ssr_transform( 481 assert_ssr_transform(
451 "Foo {a: $a, b: $b} ==>> Foo::new($a, $b)", 482 "Result<(), $a> ==>> Option<$a>",
452 "struct Foo {} fn f1() {Foo{b: 1, a: 2}}", 483 "struct Result<T, E> {} struct Option<T> {} fn f1() -> Result<(), Vec<Error>> {foo()}",
453 expect![["struct Foo {} fn f1() {Foo::new(2, 1)}"]], 484 expect![[
485 "struct Result<T, E> {} struct Option<T> {} fn f1() -> Option<Vec<Error>> {foo()}"
486 ]],
454 ); 487 );
455} 488}
456 489
@@ -491,8 +524,23 @@ fn match_binary_op() {
491fn multiple_rules() { 524fn multiple_rules() {
492 assert_ssr_transforms( 525 assert_ssr_transforms(
493 &["$a + 1 ==>> add_one($a)", "$a + $b ==>> add($a, $b)"], 526 &["$a + 1 ==>> add_one($a)", "$a + $b ==>> add($a, $b)"],
494 "fn f() -> i32 {3 + 2 + 1}", 527 "fn add() {} fn add_one() {} fn f() -> i32 {3 + 2 + 1}",
495 expect![["fn f() -> i32 {add_one(add(3, 2))}"]], 528 expect![["fn add() {} fn add_one() {} fn f() -> i32 {add_one(add(3, 2))}"]],
529 )
530}
531
532#[test]
533fn multiple_rules_with_nested_matches() {
534 assert_ssr_transforms(
535 &["foo1($a) ==>> bar1($a)", "foo2($a) ==>> bar2($a)"],
536 r#"
537 fn foo1() {} fn foo2() {} fn bar1() {} fn bar2() {}
538 fn f() {foo1(foo2(foo1(foo2(foo1(42)))))}
539 "#,
540 expect![[r#"
541 fn foo1() {} fn foo2() {} fn bar1() {} fn bar2() {}
542 fn f() {bar1(bar2(bar1(bar2(bar1(42)))))}
543 "#]],
496 ) 544 )
497} 545}
498 546
@@ -524,12 +572,14 @@ fn replace_within_macro_expansion() {
524 macro_rules! macro1 { 572 macro_rules! macro1 {
525 ($a:expr) => {$a} 573 ($a:expr) => {$a}
526 } 574 }
575 fn bar() {}
527 fn f() {macro1!(5.x().foo().o2())} 576 fn f() {macro1!(5.x().foo().o2())}
528 "#, 577 "#,
529 expect![[r#" 578 expect![[r#"
530 macro_rules! macro1 { 579 macro_rules! macro1 {
531 ($a:expr) => {$a} 580 ($a:expr) => {$a}
532 } 581 }
582 fn bar() {}
533 fn f() {macro1!(bar(5.x()).o2())} 583 fn f() {macro1!(bar(5.x()).o2())}
534 "#]], 584 "#]],
535 ) 585 )