Skip to content

Commit c29187d

Browse files
committed
Rust: More path resolution and variable tests
1 parent 3c663d8 commit c29187d

File tree

6 files changed

+348
-206
lines changed

6 files changed

+348
-206
lines changed

rust/ql/test/library-tests/path-resolution/main.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -789,6 +789,31 @@ mod impl_with_attribute_macro {
789789
} // impl_with_attribute_macro::test
790790
}
791791

792+
mod patterns {
793+
#[rustfmt::skip]
794+
pub fn test() -> Option<i32> { // $ item=Option $ item=i32
795+
let x = Some(42); // $ item=Some
796+
let y : Option<i32> = match x { // $ item=Option $ item=i32
797+
Some(y) => { // $ item=Some
798+
None // $ item=None
799+
}
800+
None => // $ MISSING: item=None
801+
None // $ item=None
802+
};
803+
match y {
804+
N0ne => // local variable
805+
N0ne
806+
}
807+
} // patterns::test
808+
809+
#[rustfmt::skip]
810+
fn test2() -> Option<i32> { // $ item=Option $ item=i32
811+
let test_alias = test; // $ item=patterns::test
812+
let test = test_alias();
813+
test
814+
}
815+
}
816+
792817
fn main() {
793818
my::nested::nested1::nested2::f(); // $ item=I4
794819
my::f(); // $ item=I38
@@ -824,4 +849,5 @@ fn main() {
824849
AStruct::z_on_type(); // $ item=I124
825850
AStruct {}.z_on_instance(); // $ item=I123 item=I125
826851
impl_with_attribute_macro::test(); // $ item=impl_with_attribute_macro::test
852+
patterns::test(); // $ item=patterns::test
827853
}

rust/ql/test/library-tests/path-resolution/path-resolution.expected

Lines changed: 87 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ mod
3232
| main.rs:628:1:696:1 | mod m24 |
3333
| main.rs:713:1:765:1 | mod associated_types |
3434
| main.rs:771:1:790:1 | mod impl_with_attribute_macro |
35+
| main.rs:792:1:815:1 | mod patterns |
3536
| my2/mod.rs:1:1:1:16 | mod nested2 |
3637
| my2/mod.rs:20:1:20:12 | mod my3 |
3738
| my2/mod.rs:22:1:23:10 | mod mymod |
@@ -71,7 +72,7 @@ resolvePath
7172
| main.rs:36:17:36:24 | ...::f | main.rs:25:9:27:9 | fn f |
7273
| main.rs:38:17:38:23 | println | {EXTERNAL LOCATION} | MacroRules |
7374
| main.rs:39:17:39:17 | f | main.rs:25:9:27:9 | fn f |
74-
| main.rs:46:9:46:13 | super | main.rs:1:1:827:2 | SourceFile |
75+
| main.rs:46:9:46:13 | super | main.rs:1:1:853:2 | SourceFile |
7576
| main.rs:46:9:46:17 | ...::m1 | main.rs:19:1:43:1 | mod m1 |
7677
| main.rs:46:9:46:21 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
7778
| main.rs:46:9:46:24 | ...::g | main.rs:29:9:33:9 | fn g |
@@ -86,7 +87,7 @@ resolvePath
8687
| main.rs:67:17:67:19 | Foo | main.rs:65:9:65:21 | struct Foo |
8788
| main.rs:70:13:70:15 | Foo | main.rs:59:5:59:17 | struct Foo |
8889
| main.rs:72:5:72:5 | f | main.rs:61:5:68:5 | fn f |
89-
| main.rs:74:5:74:8 | self | main.rs:1:1:827:2 | SourceFile |
90+
| main.rs:74:5:74:8 | self | main.rs:1:1:853:2 | SourceFile |
9091
| main.rs:74:5:74:11 | ...::i | main.rs:77:1:89:1 | fn i |
9192
| main.rs:78:5:78:11 | println | {EXTERNAL LOCATION} | MacroRules |
9293
| main.rs:80:13:80:15 | Foo | main.rs:54:1:54:13 | struct Foo |
@@ -108,7 +109,7 @@ resolvePath
108109
| main.rs:111:9:111:15 | println | {EXTERNAL LOCATION} | MacroRules |
109110
| main.rs:117:9:117:15 | println | {EXTERNAL LOCATION} | MacroRules |
110111
| main.rs:121:9:121:15 | println | {EXTERNAL LOCATION} | MacroRules |
111-
| main.rs:124:13:124:17 | super | main.rs:1:1:827:2 | SourceFile |
112+
| main.rs:124:13:124:17 | super | main.rs:1:1:853:2 | SourceFile |
112113
| main.rs:124:13:124:21 | ...::m5 | main.rs:109:1:113:1 | mod m5 |
113114
| main.rs:125:9:125:9 | f | main.rs:110:5:112:5 | fn f |
114115
| main.rs:125:9:125:9 | f | main.rs:116:5:118:5 | fn f |
@@ -396,75 +397,88 @@ resolvePath
396397
| main.rs:780:21:780:23 | i64 | {EXTERNAL LOCATION} | struct i64 |
397398
| main.rs:782:11:782:13 | i64 | {EXTERNAL LOCATION} | struct i64 |
398399
| main.rs:788:17:788:19 | Foo | main.rs:773:5:773:15 | struct Foo |
399-
| main.rs:793:5:793:6 | my | main.rs:1:1:1:7 | mod my |
400-
| main.rs:793:5:793:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
401-
| main.rs:793:5:793:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
402-
| main.rs:793:5:793:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
403-
| main.rs:793:5:793:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
404-
| main.rs:794:5:794:6 | my | main.rs:1:1:1:7 | mod my |
405-
| main.rs:794:5:794:9 | ...::f | my.rs:5:1:7:1 | fn f |
406-
| main.rs:795:5:795:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
407-
| main.rs:795:5:795:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
408-
| main.rs:795:5:795:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
409-
| main.rs:795:5:795:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
410-
| main.rs:796:5:796:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
411-
| main.rs:797:5:797:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
412-
| main.rs:798:5:798:9 | crate | main.rs:0:0:0:0 | Crate([email protected]) |
413-
| main.rs:798:5:798:12 | ...::h | main.rs:56:1:75:1 | fn h |
414-
| main.rs:799:5:799:6 | m1 | main.rs:19:1:43:1 | mod m1 |
415-
| main.rs:799:5:799:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
416-
| main.rs:799:5:799:13 | ...::g | main.rs:29:9:33:9 | fn g |
417-
| main.rs:800:5:800:6 | m1 | main.rs:19:1:43:1 | mod m1 |
418-
| main.rs:800:5:800:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
419-
| main.rs:800:5:800:14 | ...::m3 | main.rs:35:9:41:9 | mod m3 |
420-
| main.rs:800:5:800:17 | ...::h | main.rs:36:27:40:13 | fn h |
421-
| main.rs:801:5:801:6 | m4 | main.rs:45:1:52:1 | mod m4 |
422-
| main.rs:801:5:801:9 | ...::i | main.rs:48:5:51:5 | fn i |
423-
| main.rs:802:5:802:5 | h | main.rs:56:1:75:1 | fn h |
424-
| main.rs:803:5:803:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
425-
| main.rs:804:5:804:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
426-
| main.rs:805:5:805:5 | j | main.rs:103:1:107:1 | fn j |
427-
| main.rs:806:5:806:6 | m6 | main.rs:115:1:127:1 | mod m6 |
428-
| main.rs:806:5:806:9 | ...::g | main.rs:120:5:126:5 | fn g |
429-
| main.rs:807:5:807:6 | m7 | main.rs:129:1:148:1 | mod m7 |
430-
| main.rs:807:5:807:9 | ...::f | main.rs:140:5:147:5 | fn f |
431-
| main.rs:808:5:808:6 | m8 | main.rs:150:1:204:1 | mod m8 |
432-
| main.rs:808:5:808:9 | ...::g | main.rs:188:5:203:5 | fn g |
433-
| main.rs:809:5:809:6 | m9 | main.rs:206:1:214:1 | mod m9 |
434-
| main.rs:809:5:809:9 | ...::f | main.rs:209:5:213:5 | fn f |
435-
| main.rs:810:5:810:7 | m11 | main.rs:237:1:274:1 | mod m11 |
436-
| main.rs:810:5:810:10 | ...::f | main.rs:242:5:245:5 | fn f |
437-
| main.rs:811:5:811:7 | m15 | main.rs:305:1:374:1 | mod m15 |
438-
| main.rs:811:5:811:10 | ...::f | main.rs:361:5:373:5 | fn f |
439-
| main.rs:812:5:812:7 | m16 | main.rs:376:1:468:1 | mod m16 |
440-
| main.rs:812:5:812:10 | ...::f | main.rs:443:5:467:5 | fn f |
441-
| main.rs:813:5:813:20 | trait_visibility | main.rs:470:1:520:1 | mod trait_visibility |
442-
| main.rs:813:5:813:23 | ...::f | main.rs:497:5:519:5 | fn f |
443-
| main.rs:814:5:814:7 | m17 | main.rs:522:1:552:1 | mod m17 |
444-
| main.rs:814:5:814:10 | ...::f | main.rs:546:5:551:5 | fn f |
445-
| main.rs:815:5:815:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
446-
| main.rs:815:5:815:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
447-
| main.rs:816:5:816:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
448-
| main.rs:816:5:816:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
449-
| main.rs:817:5:817:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
450-
| main.rs:817:5:817:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
451-
| main.rs:818:5:818:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
452-
| main.rs:819:5:819:7 | m18 | main.rs:554:1:572:1 | mod m18 |
453-
| main.rs:819:5:819:12 | ...::m19 | main.rs:559:5:571:5 | mod m19 |
454-
| main.rs:819:5:819:17 | ...::m20 | main.rs:564:9:570:9 | mod m20 |
455-
| main.rs:819:5:819:20 | ...::g | main.rs:565:13:569:13 | fn g |
456-
| main.rs:820:5:820:7 | m23 | main.rs:601:1:626:1 | mod m23 |
457-
| main.rs:820:5:820:10 | ...::f | main.rs:621:5:625:5 | fn f |
458-
| main.rs:821:5:821:7 | m24 | main.rs:628:1:696:1 | mod m24 |
459-
| main.rs:821:5:821:10 | ...::f | main.rs:682:5:695:5 | fn f |
460-
| main.rs:822:5:822:8 | zelf | main.rs:0:0:0:0 | Crate([email protected]) |
461-
| main.rs:822:5:822:11 | ...::h | main.rs:56:1:75:1 | fn h |
462-
| main.rs:823:5:823:13 | z_changed | main.rs:701:1:701:9 | fn z_changed |
463-
| main.rs:824:5:824:11 | AStruct | main.rs:703:1:703:17 | struct AStruct |
464-
| main.rs:824:5:824:22 | ...::z_on_type | main.rs:707:5:707:17 | fn z_on_type |
465-
| main.rs:825:5:825:11 | AStruct | main.rs:703:1:703:17 | struct AStruct |
466-
| main.rs:826:5:826:29 | impl_with_attribute_macro | main.rs:771:1:790:1 | mod impl_with_attribute_macro |
467-
| main.rs:826:5:826:35 | ...::test | main.rs:786:5:789:5 | fn test |
400+
| main.rs:794:22:794:32 | Option::<...> | {EXTERNAL LOCATION} | enum Option |
401+
| main.rs:794:29:794:31 | i32 | {EXTERNAL LOCATION} | struct i32 |
402+
| main.rs:795:17:795:20 | Some | {EXTERNAL LOCATION} | Some |
403+
| main.rs:796:17:796:27 | Option::<...> | {EXTERNAL LOCATION} | enum Option |
404+
| main.rs:796:24:796:26 | i32 | {EXTERNAL LOCATION} | struct i32 |
405+
| main.rs:797:13:797:16 | Some | {EXTERNAL LOCATION} | Some |
406+
| main.rs:798:17:798:20 | None | {EXTERNAL LOCATION} | None |
407+
| main.rs:801:17:801:20 | None | {EXTERNAL LOCATION} | None |
408+
| main.rs:810:19:810:29 | Option::<...> | {EXTERNAL LOCATION} | enum Option |
409+
| main.rs:810:26:810:28 | i32 | {EXTERNAL LOCATION} | struct i32 |
410+
| main.rs:811:26:811:29 | test | main.rs:793:5:807:5 | fn test |
411+
| main.rs:818:5:818:6 | my | main.rs:1:1:1:7 | mod my |
412+
| main.rs:818:5:818:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
413+
| main.rs:818:5:818:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
414+
| main.rs:818:5:818:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
415+
| main.rs:818:5:818:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
416+
| main.rs:819:5:819:6 | my | main.rs:1:1:1:7 | mod my |
417+
| main.rs:819:5:819:9 | ...::f | my.rs:5:1:7:1 | fn f |
418+
| main.rs:820:5:820:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
419+
| main.rs:820:5:820:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
420+
| main.rs:820:5:820:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
421+
| main.rs:820:5:820:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
422+
| main.rs:821:5:821:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
423+
| main.rs:822:5:822:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
424+
| main.rs:823:5:823:9 | crate | main.rs:0:0:0:0 | Crate([email protected]) |
425+
| main.rs:823:5:823:12 | ...::h | main.rs:56:1:75:1 | fn h |
426+
| main.rs:824:5:824:6 | m1 | main.rs:19:1:43:1 | mod m1 |
427+
| main.rs:824:5:824:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
428+
| main.rs:824:5:824:13 | ...::g | main.rs:29:9:33:9 | fn g |
429+
| main.rs:825:5:825:6 | m1 | main.rs:19:1:43:1 | mod m1 |
430+
| main.rs:825:5:825:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
431+
| main.rs:825:5:825:14 | ...::m3 | main.rs:35:9:41:9 | mod m3 |
432+
| main.rs:825:5:825:17 | ...::h | main.rs:36:27:40:13 | fn h |
433+
| main.rs:826:5:826:6 | m4 | main.rs:45:1:52:1 | mod m4 |
434+
| main.rs:826:5:826:9 | ...::i | main.rs:48:5:51:5 | fn i |
435+
| main.rs:827:5:827:5 | h | main.rs:56:1:75:1 | fn h |
436+
| main.rs:828:5:828:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
437+
| main.rs:829:5:829:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
438+
| main.rs:830:5:830:5 | j | main.rs:103:1:107:1 | fn j |
439+
| main.rs:831:5:831:6 | m6 | main.rs:115:1:127:1 | mod m6 |
440+
| main.rs:831:5:831:9 | ...::g | main.rs:120:5:126:5 | fn g |
441+
| main.rs:832:5:832:6 | m7 | main.rs:129:1:148:1 | mod m7 |
442+
| main.rs:832:5:832:9 | ...::f | main.rs:140:5:147:5 | fn f |
443+
| main.rs:833:5:833:6 | m8 | main.rs:150:1:204:1 | mod m8 |
444+
| main.rs:833:5:833:9 | ...::g | main.rs:188:5:203:5 | fn g |
445+
| main.rs:834:5:834:6 | m9 | main.rs:206:1:214:1 | mod m9 |
446+
| main.rs:834:5:834:9 | ...::f | main.rs:209:5:213:5 | fn f |
447+
| main.rs:835:5:835:7 | m11 | main.rs:237:1:274:1 | mod m11 |
448+
| main.rs:835:5:835:10 | ...::f | main.rs:242:5:245:5 | fn f |
449+
| main.rs:836:5:836:7 | m15 | main.rs:305:1:374:1 | mod m15 |
450+
| main.rs:836:5:836:10 | ...::f | main.rs:361:5:373:5 | fn f |
451+
| main.rs:837:5:837:7 | m16 | main.rs:376:1:468:1 | mod m16 |
452+
| main.rs:837:5:837:10 | ...::f | main.rs:443:5:467:5 | fn f |
453+
| main.rs:838:5:838:20 | trait_visibility | main.rs:470:1:520:1 | mod trait_visibility |
454+
| main.rs:838:5:838:23 | ...::f | main.rs:497:5:519:5 | fn f |
455+
| main.rs:839:5:839:7 | m17 | main.rs:522:1:552:1 | mod m17 |
456+
| main.rs:839:5:839:10 | ...::f | main.rs:546:5:551:5 | fn f |
457+
| main.rs:840:5:840:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
458+
| main.rs:840:5:840:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
459+
| main.rs:841:5:841:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
460+
| main.rs:841:5:841:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
461+
| main.rs:842:5:842:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
462+
| main.rs:842:5:842:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
463+
| main.rs:843:5:843:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
464+
| main.rs:844:5:844:7 | m18 | main.rs:554:1:572:1 | mod m18 |
465+
| main.rs:844:5:844:12 | ...::m19 | main.rs:559:5:571:5 | mod m19 |
466+
| main.rs:844:5:844:17 | ...::m20 | main.rs:564:9:570:9 | mod m20 |
467+
| main.rs:844:5:844:20 | ...::g | main.rs:565:13:569:13 | fn g |
468+
| main.rs:845:5:845:7 | m23 | main.rs:601:1:626:1 | mod m23 |
469+
| main.rs:845:5:845:10 | ...::f | main.rs:621:5:625:5 | fn f |
470+
| main.rs:846:5:846:7 | m24 | main.rs:628:1:696:1 | mod m24 |
471+
| main.rs:846:5:846:10 | ...::f | main.rs:682:5:695:5 | fn f |
472+
| main.rs:847:5:847:8 | zelf | main.rs:0:0:0:0 | Crate([email protected]) |
473+
| main.rs:847:5:847:11 | ...::h | main.rs:56:1:75:1 | fn h |
474+
| main.rs:848:5:848:13 | z_changed | main.rs:701:1:701:9 | fn z_changed |
475+
| main.rs:849:5:849:11 | AStruct | main.rs:703:1:703:17 | struct AStruct |
476+
| main.rs:849:5:849:22 | ...::z_on_type | main.rs:707:5:707:17 | fn z_on_type |
477+
| main.rs:850:5:850:11 | AStruct | main.rs:703:1:703:17 | struct AStruct |
478+
| main.rs:851:5:851:29 | impl_with_attribute_macro | main.rs:771:1:790:1 | mod impl_with_attribute_macro |
479+
| main.rs:851:5:851:35 | ...::test | main.rs:786:5:789:5 | fn test |
480+
| main.rs:852:5:852:12 | patterns | main.rs:792:1:815:1 | mod patterns |
481+
| main.rs:852:5:852:18 | ...::test | main.rs:793:5:807:5 | fn test |
468482
| my2/mod.rs:4:5:4:11 | println | {EXTERNAL LOCATION} | MacroRules |
469483
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
470484
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
@@ -490,7 +504,7 @@ resolvePath
490504
| my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g |
491505
| my2/my3/mod.rs:4:5:4:5 | h | main.rs:56:1:75:1 | fn h |
492506
| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
493-
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:827:2 | SourceFile |
507+
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:853:2 | SourceFile |
494508
| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:56:1:75:1 | fn h |
495509
| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
496510
| my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g |

0 commit comments

Comments
 (0)