diff options
Diffstat (limited to 'crates/ra_hir/src/ty/tests.rs')
-rw-r--r-- | crates/ra_hir/src/ty/tests.rs | 141 |
1 files changed, 100 insertions, 41 deletions
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs index 0b7c841df..f6a325033 100644 --- a/crates/ra_hir/src/ty/tests.rs +++ b/crates/ra_hir/src/ty/tests.rs | |||
@@ -697,58 +697,58 @@ fn test(x: &str, y: isize) { | |||
697 | [9; 10) 'x': &str | 697 | [9; 10) 'x': &str |
698 | [18; 19) 'y': isize | 698 | [18; 19) 'y': isize |
699 | [28; 324) '{ ... 3]; }': () | 699 | [28; 324) '{ ... 3]; }': () |
700 | [38; 39) 'a': [&str] | 700 | [38; 39) 'a': [&str;_] |
701 | [42; 45) '[x]': [&str] | 701 | [42; 45) '[x]': [&str;_] |
702 | [43; 44) 'x': &str | 702 | [43; 44) 'x': &str |
703 | [55; 56) 'b': [[&str]] | 703 | [55; 56) 'b': [[&str;_];_] |
704 | [59; 65) '[a, a]': [[&str]] | 704 | [59; 65) '[a, a]': [[&str;_];_] |
705 | [60; 61) 'a': [&str] | 705 | [60; 61) 'a': [&str;_] |
706 | [63; 64) 'a': [&str] | 706 | [63; 64) 'a': [&str;_] |
707 | [75; 76) 'c': [[[&str]]] | 707 | [75; 76) 'c': [[[&str;_];_];_] |
708 | [79; 85) '[b, b]': [[[&str]]] | 708 | [79; 85) '[b, b]': [[[&str;_];_];_] |
709 | [80; 81) 'b': [[&str]] | 709 | [80; 81) 'b': [[&str;_];_] |
710 | [83; 84) 'b': [[&str]] | 710 | [83; 84) 'b': [[&str;_];_] |
711 | [96; 97) 'd': [isize] | 711 | [96; 97) 'd': [isize;_] |
712 | [100; 112) '[y, 1, 2, 3]': [isize] | 712 | [100; 112) '[y, 1, 2, 3]': [isize;_] |
713 | [101; 102) 'y': isize | 713 | [101; 102) 'y': isize |
714 | [104; 105) '1': isize | 714 | [104; 105) '1': isize |
715 | [107; 108) '2': isize | 715 | [107; 108) '2': isize |
716 | [110; 111) '3': isize | 716 | [110; 111) '3': isize |
717 | [122; 123) 'd': [isize] | 717 | [122; 123) 'd': [isize;_] |
718 | [126; 138) '[1, y, 2, 3]': [isize] | 718 | [126; 138) '[1, y, 2, 3]': [isize;_] |
719 | [127; 128) '1': isize | 719 | [127; 128) '1': isize |
720 | [130; 131) 'y': isize | 720 | [130; 131) 'y': isize |
721 | [133; 134) '2': isize | 721 | [133; 134) '2': isize |
722 | [136; 137) '3': isize | 722 | [136; 137) '3': isize |
723 | [148; 149) 'e': [isize] | 723 | [148; 149) 'e': [isize;_] |
724 | [152; 155) '[y]': [isize] | 724 | [152; 155) '[y]': [isize;_] |
725 | [153; 154) 'y': isize | 725 | [153; 154) 'y': isize |
726 | [165; 166) 'f': [[isize]] | 726 | [165; 166) 'f': [[isize;_];_] |
727 | [169; 175) '[d, d]': [[isize]] | 727 | [169; 175) '[d, d]': [[isize;_];_] |
728 | [170; 171) 'd': [isize] | 728 | [170; 171) 'd': [isize;_] |
729 | [173; 174) 'd': [isize] | 729 | [173; 174) 'd': [isize;_] |
730 | [185; 186) 'g': [[isize]] | 730 | [185; 186) 'g': [[isize;_];_] |
731 | [189; 195) '[e, e]': [[isize]] | 731 | [189; 195) '[e, e]': [[isize;_];_] |
732 | [190; 191) 'e': [isize] | 732 | [190; 191) 'e': [isize;_] |
733 | [193; 194) 'e': [isize] | 733 | [193; 194) 'e': [isize;_] |
734 | [206; 207) 'h': [i32] | 734 | [206; 207) 'h': [i32;_] |
735 | [210; 216) '[1, 2]': [i32] | 735 | [210; 216) '[1, 2]': [i32;_] |
736 | [211; 212) '1': i32 | 736 | [211; 212) '1': i32 |
737 | [214; 215) '2': i32 | 737 | [214; 215) '2': i32 |
738 | [226; 227) 'i': [&str] | 738 | [226; 227) 'i': [&str;_] |
739 | [230; 240) '["a", "b"]': [&str] | 739 | [230; 240) '["a", "b"]': [&str;_] |
740 | [231; 234) '"a"': &str | 740 | [231; 234) '"a"': &str |
741 | [236; 239) '"b"': &str | 741 | [236; 239) '"b"': &str |
742 | [251; 252) 'b': [[&str]] | 742 | [251; 252) 'b': [[&str;_];_] |
743 | [255; 265) '[a, ["b"]]': [[&str]] | 743 | [255; 265) '[a, ["b"]]': [[&str;_];_] |
744 | [256; 257) 'a': [&str] | 744 | [256; 257) 'a': [&str;_] |
745 | [259; 264) '["b"]': [&str] | 745 | [259; 264) '["b"]': [&str;_] |
746 | [260; 263) '"b"': &str | 746 | [260; 263) '"b"': &str |
747 | [275; 276) 'x': [u8] | 747 | [275; 276) 'x': [u8;_] |
748 | [288; 290) '[]': [u8] | 748 | [288; 290) '[]': [u8;_] |
749 | [300; 301) 'z': &[u8] | 749 | [300; 301) 'z': &[u8;_] |
750 | [311; 321) '&[1, 2, 3]': &[u8] | 750 | [311; 321) '&[1, 2, 3]': &[u8;_] |
751 | [312; 321) '[1, 2, 3]': [u8] | 751 | [312; 321) '[1, 2, 3]': [u8;_] |
752 | [313; 314) '1': u8 | 752 | [313; 314) '1': u8 |
753 | [316; 317) '2': u8 | 753 | [316; 317) '2': u8 |
754 | [319; 320) '3': u8"### | 754 | [319; 320) '3': u8"### |
@@ -1553,7 +1553,7 @@ fn test() { | |||
1553 | [11; 48) '{ ...&y]; }': () | 1553 | [11; 48) '{ ...&y]; }': () |
1554 | [21; 22) 'y': &{unknown} | 1554 | [21; 22) 'y': &{unknown} |
1555 | [25; 32) 'unknown': &{unknown} | 1555 | [25; 32) 'unknown': &{unknown} |
1556 | [38; 45) '[y, &y]': [&&{unknown}] | 1556 | [38; 45) '[y, &y]': [&&{unknown};_] |
1557 | [39; 40) 'y': &{unknown} | 1557 | [39; 40) 'y': &{unknown} |
1558 | [42; 44) '&y': &&{unknown} | 1558 | [42; 44) '&y': &&{unknown} |
1559 | [43; 44) 'y': &{unknown}"### | 1559 | [43; 44) 'y': &{unknown}"### |
@@ -1578,7 +1578,7 @@ fn test() { | |||
1578 | [25; 32) 'unknown': &&{unknown} | 1578 | [25; 32) 'unknown': &&{unknown} |
1579 | [42; 43) 'y': &&{unknown} | 1579 | [42; 43) 'y': &&{unknown} |
1580 | [46; 53) 'unknown': &&{unknown} | 1580 | [46; 53) 'unknown': &&{unknown} |
1581 | [59; 77) '[(x, y..., &x)]': [(&&{unknown}, &&{unknown})] | 1581 | [59; 77) '[(x, y..., &x)]': [(&&{unknown}, &&{unknown});_] |
1582 | [60; 66) '(x, y)': (&&{unknown}, &&{unknown}) | 1582 | [60; 66) '(x, y)': (&&{unknown}, &&{unknown}) |
1583 | [61; 62) 'x': &&{unknown} | 1583 | [61; 62) 'x': &&{unknown} |
1584 | [64; 65) 'y': &&{unknown} | 1584 | [64; 65) 'y': &&{unknown} |
@@ -1670,8 +1670,8 @@ fn test_line_buffer() { | |||
1670 | "#), | 1670 | "#), |
1671 | @r###" | 1671 | @r###" |
1672 | [23; 53) '{ ...n']; }': () | 1672 | [23; 53) '{ ...n']; }': () |
1673 | [29; 50) '&[0, b...b'\n']': &[u8] | 1673 | [29; 50) '&[0, b...b'\n']': &[u8;_] |
1674 | [30; 50) '[0, b'...b'\n']': [u8] | 1674 | [30; 50) '[0, b'...b'\n']': [u8;_] |
1675 | [31; 32) '0': u8 | 1675 | [31; 32) '0': u8 |
1676 | [34; 39) 'b'\n'': u8 | 1676 | [34; 39) 'b'\n'': u8 |
1677 | [41; 42) '1': u8 | 1677 | [41; 42) '1': u8 |
@@ -2242,6 +2242,65 @@ static B: u64 = { let x = 1; x }; | |||
2242 | ); | 2242 | ); |
2243 | } | 2243 | } |
2244 | 2244 | ||
2245 | #[test] | ||
2246 | fn tuple_struct_fields() { | ||
2247 | assert_snapshot_matches!( | ||
2248 | infer(r#" | ||
2249 | struct S(i32, u64); | ||
2250 | fn test() -> u64 { | ||
2251 | let a = S(4, 6); | ||
2252 | let b = a.0; | ||
2253 | a.1 | ||
2254 | } | ||
2255 | "#), | ||
2256 | @r###" | ||
2257 | [38; 87) '{ ... a.1 }': u64 | ||
2258 | [48; 49) 'a': S | ||
2259 | [52; 53) 'S': S(i32, u64) -> S | ||
2260 | [52; 59) 'S(4, 6)': S | ||
2261 | [54; 55) '4': i32 | ||
2262 | [57; 58) '6': u64 | ||
2263 | [69; 70) 'b': i32 | ||
2264 | [73; 74) 'a': S | ||
2265 | [73; 76) 'a.0': i32 | ||
2266 | [82; 83) 'a': S | ||
2267 | [82; 85) 'a.1': u64"### | ||
2268 | ); | ||
2269 | } | ||
2270 | |||
2271 | #[test] | ||
2272 | fn tuple_struct_with_fn() { | ||
2273 | assert_snapshot_matches!( | ||
2274 | infer(r#" | ||
2275 | struct S(fn(u32) -> u64); | ||
2276 | fn test() -> u64 { | ||
2277 | let a = S(|i| 2*i); | ||
2278 | let b = a.0(4); | ||
2279 | a.0(2) | ||
2280 | } | ||
2281 | "#), | ||
2282 | @r###" | ||
2283 | [44; 102) '{ ...0(2) }': u64 | ||
2284 | [54; 55) 'a': S | ||
2285 | [58; 59) 'S': S(fn(u32) -> u64) -> S | ||
2286 | [58; 68) 'S(|i| 2*i)': S | ||
2287 | [60; 67) '|i| 2*i': fn(u32) -> u64 | ||
2288 | [61; 62) 'i': i32 | ||
2289 | [64; 65) '2': i32 | ||
2290 | [64; 67) '2*i': i32 | ||
2291 | [66; 67) 'i': i32 | ||
2292 | [78; 79) 'b': u64 | ||
2293 | [82; 83) 'a': S | ||
2294 | [82; 85) 'a.0': fn(u32) -> u64 | ||
2295 | [82; 88) 'a.0(4)': u64 | ||
2296 | [86; 87) '4': u32 | ||
2297 | [94; 95) 'a': S | ||
2298 | [94; 97) 'a.0': fn(u32) -> u64 | ||
2299 | [94; 100) 'a.0(2)': u64 | ||
2300 | [98; 99) '2': u32"### | ||
2301 | ); | ||
2302 | } | ||
2303 | |||
2245 | fn type_at_pos(db: &MockDatabase, pos: FilePosition) -> String { | 2304 | fn type_at_pos(db: &MockDatabase, pos: FilePosition) -> String { |
2246 | let func = source_binder::function_from_position(db, pos).unwrap(); | 2305 | let func = source_binder::function_from_position(db, pos).unwrap(); |
2247 | let body_source_map = func.body_source_map(db); | 2306 | let body_source_map = func.body_source_map(db); |