Skip to content

Commit 2f4f82f

Browse files
committed
Rust: More path resolution and variable tests
1 parent 1e2d694 commit 2f4f82f

File tree

6 files changed

+448
-214
lines changed

6 files changed

+448
-214
lines changed

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -790,6 +790,49 @@ mod impl_with_attribute_macro {
790790
} // impl_with_attribute_macro::test
791791
}
792792

793+
mod patterns {
794+
#[rustfmt::skip]
795+
pub fn test() -> Option<i32> { // $ item=Option $ item=i32
796+
let x = Some(42); // $ item=Some
797+
let y : Option<i32> = match x { // $ item=Option $ item=i32
798+
Some(y) => { // $ item=Some
799+
None // $ item=None
800+
}
801+
None => // $ MISSING: item=None
802+
None // $ item=None
803+
};
804+
match y {
805+
N0ne => // local variable
806+
N0ne
807+
}
808+
} // patterns::test
809+
810+
#[rustfmt::skip]
811+
fn test2() -> Option<i32> { // $ item=Option $ item=i32
812+
let test_alias = test; // $ item=patterns::test
813+
let test = test_alias();
814+
test
815+
}
816+
817+
#[rustfmt::skip]
818+
const z: i32 // $ item=i32
819+
= 0; // constz
820+
821+
#[rustfmt::skip]
822+
fn test3() {
823+
let x = Some(0); // $ item=Some
824+
match x {
825+
Some(x) // $ item=Some
826+
=> x,
827+
_ => 0
828+
};
829+
match x {
830+
Some(z) => z, // $ item=Some $ MISSING: item=constz
831+
_ => 0
832+
};
833+
}
834+
}
835+
793836
fn main() {
794837
my::nested::nested1::nested2::f(); // $ item=I4
795838
my::f(); // $ item=I38
@@ -826,4 +869,5 @@ fn main() {
826869
AStruct::z_on_type(); // $ item=I124
827870
AStruct {}.z_on_instance(); // $ item=I123 item=I125
828871
impl_with_attribute_macro::test(); // $ item=impl_with_attribute_macro::test
872+
patterns::test(); // $ item=patterns::test
829873
}

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

Lines changed: 93 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ mod
3232
| main.rs:629:1:697:1 | mod m24 |
3333
| main.rs:714:1:766:1 | mod associated_types |
3434
| main.rs:772:1:791:1 | mod impl_with_attribute_macro |
35+
| main.rs:793:1:834: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 |
@@ -72,7 +73,7 @@ resolvePath
7273
| main.rs:37:17:37:24 | ...::f | main.rs:26:9:28:9 | fn f |
7374
| main.rs:39:17:39:23 | println | {EXTERNAL LOCATION} | MacroRules |
7475
| main.rs:40:17:40:17 | f | main.rs:26:9:28:9 | fn f |
75-
| main.rs:47:9:47:13 | super | main.rs:1:1:829:2 | SourceFile |
76+
| main.rs:47:9:47:13 | super | main.rs:1:1:873:2 | SourceFile |
7677
| main.rs:47:9:47:17 | ...::m1 | main.rs:20:1:44:1 | mod m1 |
7778
| main.rs:47:9:47:21 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
7879
| main.rs:47:9:47:24 | ...::g | main.rs:30:9:34:9 | fn g |
@@ -87,7 +88,7 @@ resolvePath
8788
| main.rs:68:17:68:19 | Foo | main.rs:66:9:66:21 | struct Foo |
8889
| main.rs:71:13:71:15 | Foo | main.rs:60:5:60:17 | struct Foo |
8990
| main.rs:73:5:73:5 | f | main.rs:62:5:69:5 | fn f |
90-
| main.rs:75:5:75:8 | self | main.rs:1:1:829:2 | SourceFile |
91+
| main.rs:75:5:75:8 | self | main.rs:1:1:873:2 | SourceFile |
9192
| main.rs:75:5:75:11 | ...::i | main.rs:78:1:90:1 | fn i |
9293
| main.rs:79:5:79:11 | println | {EXTERNAL LOCATION} | MacroRules |
9394
| main.rs:81:13:81:15 | Foo | main.rs:55:1:55:13 | struct Foo |
@@ -109,7 +110,7 @@ resolvePath
109110
| main.rs:112:9:112:15 | println | {EXTERNAL LOCATION} | MacroRules |
110111
| main.rs:118:9:118:15 | println | {EXTERNAL LOCATION} | MacroRules |
111112
| main.rs:122:9:122:15 | println | {EXTERNAL LOCATION} | MacroRules |
112-
| main.rs:125:13:125:17 | super | main.rs:1:1:829:2 | SourceFile |
113+
| main.rs:125:13:125:17 | super | main.rs:1:1:873:2 | SourceFile |
113114
| main.rs:125:13:125:21 | ...::m5 | main.rs:110:1:114:1 | mod m5 |
114115
| main.rs:126:9:126:9 | f | main.rs:111:5:113:5 | fn f |
115116
| main.rs:126:9:126:9 | f | main.rs:117:5:119:5 | fn f |
@@ -397,77 +398,94 @@ resolvePath
397398
| main.rs:781:21:781:23 | i64 | {EXTERNAL LOCATION} | struct i64 |
398399
| main.rs:783:11:783:13 | i64 | {EXTERNAL LOCATION} | struct i64 |
399400
| main.rs:789:17:789:19 | Foo | main.rs:774:5:774:15 | struct Foo |
400-
| main.rs:794:5:794:6 | my | main.rs:1:1:1:7 | mod my |
401-
| main.rs:794:5:794:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
402-
| main.rs:794:5:794:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
403-
| main.rs:794:5:794:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
404-
| main.rs:794:5:794:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
405-
| main.rs:795:5:795:6 | my | main.rs:1:1:1:7 | mod my |
406-
| main.rs:795:5:795:9 | ...::f | my.rs:5:1:7:1 | fn f |
407-
| main.rs:796:5:796:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
408-
| main.rs:796:5:796:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
409-
| main.rs:796:5:796:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
410-
| main.rs:796:5:796:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
411-
| main.rs:797:5:797:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
412-
| main.rs:798:5:798:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
413-
| main.rs:799:5:799:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
414-
| main.rs:799:5:799:12 | ...::h | main.rs:57:1:76:1 | fn h |
415-
| main.rs:800:5:800:6 | m1 | main.rs:20:1:44:1 | mod m1 |
416-
| main.rs:800:5:800:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
417-
| main.rs:800:5:800:13 | ...::g | main.rs:30:9:34:9 | fn g |
418-
| main.rs:801:5:801:6 | m1 | main.rs:20:1:44:1 | mod m1 |
419-
| main.rs:801:5:801:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
420-
| main.rs:801:5:801:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 |
421-
| main.rs:801:5:801:17 | ...::h | main.rs:37:27:41:13 | fn h |
422-
| main.rs:802:5:802:6 | m4 | main.rs:46:1:53:1 | mod m4 |
423-
| main.rs:802:5:802:9 | ...::i | main.rs:49:5:52:5 | fn i |
424-
| main.rs:803:5:803:5 | h | main.rs:57:1:76:1 | fn h |
425-
| main.rs:804:5:804:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
426-
| main.rs:805:5:805:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
427-
| main.rs:806:5:806:5 | j | main.rs:104:1:108:1 | fn j |
428-
| main.rs:807:5:807:6 | m6 | main.rs:116:1:128:1 | mod m6 |
429-
| main.rs:807:5:807:9 | ...::g | main.rs:121:5:127:5 | fn g |
430-
| main.rs:808:5:808:6 | m7 | main.rs:130:1:149:1 | mod m7 |
431-
| main.rs:808:5:808:9 | ...::f | main.rs:141:5:148:5 | fn f |
432-
| main.rs:809:5:809:6 | m8 | main.rs:151:1:205:1 | mod m8 |
433-
| main.rs:809:5:809:9 | ...::g | main.rs:189:5:204:5 | fn g |
434-
| main.rs:810:5:810:6 | m9 | main.rs:207:1:215:1 | mod m9 |
435-
| main.rs:810:5:810:9 | ...::f | main.rs:210:5:214:5 | fn f |
436-
| main.rs:811:5:811:7 | m11 | main.rs:238:1:275:1 | mod m11 |
437-
| main.rs:811:5:811:10 | ...::f | main.rs:243:5:246:5 | fn f |
438-
| main.rs:812:5:812:7 | m15 | main.rs:306:1:375:1 | mod m15 |
439-
| main.rs:812:5:812:10 | ...::f | main.rs:362:5:374:5 | fn f |
440-
| main.rs:813:5:813:7 | m16 | main.rs:377:1:469:1 | mod m16 |
441-
| main.rs:813:5:813:10 | ...::f | main.rs:444:5:468:5 | fn f |
442-
| main.rs:814:5:814:20 | trait_visibility | main.rs:471:1:521:1 | mod trait_visibility |
443-
| main.rs:814:5:814:23 | ...::f | main.rs:498:5:520:5 | fn f |
444-
| main.rs:815:5:815:7 | m17 | main.rs:523:1:553:1 | mod m17 |
445-
| main.rs:815:5:815:10 | ...::f | main.rs:547:5:552:5 | fn f |
446-
| main.rs:816:5:816:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
447-
| main.rs:816:5:816:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
448-
| main.rs:817:5:817:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
449-
| main.rs:817:5:817:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
450-
| main.rs:818:5:818:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
451-
| main.rs:818:5:818:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
452-
| main.rs:819:5:819:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
453-
| main.rs:820:5:820:12 | my_alias | main.rs:1:1:1:7 | mod my |
454-
| main.rs:820:5:820:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
455-
| main.rs:821:5:821:7 | m18 | main.rs:555:1:573:1 | mod m18 |
456-
| main.rs:821:5:821:12 | ...::m19 | main.rs:560:5:572:5 | mod m19 |
457-
| main.rs:821:5:821:17 | ...::m20 | main.rs:565:9:571:9 | mod m20 |
458-
| main.rs:821:5:821:20 | ...::g | main.rs:566:13:570:13 | fn g |
459-
| main.rs:822:5:822:7 | m23 | main.rs:602:1:627:1 | mod m23 |
460-
| main.rs:822:5:822:10 | ...::f | main.rs:622:5:626:5 | fn f |
461-
| main.rs:823:5:823:7 | m24 | main.rs:629:1:697:1 | mod m24 |
462-
| main.rs:823:5:823:10 | ...::f | main.rs:683:5:696:5 | fn f |
463-
| main.rs:824:5:824:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
464-
| main.rs:824:5:824:11 | ...::h | main.rs:57:1:76:1 | fn h |
465-
| main.rs:825:5:825:13 | z_changed | main.rs:702:1:702:9 | fn z_changed |
466-
| main.rs:826:5:826:11 | AStruct | main.rs:704:1:704:17 | struct AStruct |
467-
| main.rs:826:5:826:22 | ...::z_on_type | main.rs:708:5:708:17 | fn z_on_type |
468-
| main.rs:827:5:827:11 | AStruct | main.rs:704:1:704:17 | struct AStruct |
469-
| main.rs:828:5:828:29 | impl_with_attribute_macro | main.rs:772:1:791:1 | mod impl_with_attribute_macro |
470-
| main.rs:828:5:828:35 | ...::test | main.rs:787:5:790:5 | fn test |
401+
| main.rs:795:22:795:32 | Option::<...> | {EXTERNAL LOCATION} | enum Option |
402+
| main.rs:795:29:795:31 | i32 | {EXTERNAL LOCATION} | struct i32 |
403+
| main.rs:796:17:796:20 | Some | {EXTERNAL LOCATION} | Some |
404+
| main.rs:797:17:797:27 | Option::<...> | {EXTERNAL LOCATION} | enum Option |
405+
| main.rs:797:24:797:26 | i32 | {EXTERNAL LOCATION} | struct i32 |
406+
| main.rs:798:13:798:16 | Some | {EXTERNAL LOCATION} | Some |
407+
| main.rs:799:17:799:20 | None | {EXTERNAL LOCATION} | None |
408+
| main.rs:802:17:802:20 | None | {EXTERNAL LOCATION} | None |
409+
| main.rs:811:19:811:29 | Option::<...> | {EXTERNAL LOCATION} | enum Option |
410+
| main.rs:811:26:811:28 | i32 | {EXTERNAL LOCATION} | struct i32 |
411+
| main.rs:812:26:812:29 | test | main.rs:794:5:808:5 | fn test |
412+
| main.rs:818:14:818:16 | i32 | {EXTERNAL LOCATION} | struct i32 |
413+
| main.rs:823:17:823:20 | Some | {EXTERNAL LOCATION} | Some |
414+
| main.rs:825:13:825:16 | Some | {EXTERNAL LOCATION} | Some |
415+
| main.rs:830:13:830:16 | Some | {EXTERNAL LOCATION} | Some |
416+
| main.rs:837:5:837:6 | my | main.rs:1:1:1:7 | mod my |
417+
| main.rs:837:5:837:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
418+
| main.rs:837:5:837:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
419+
| main.rs:837:5:837:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
420+
| main.rs:837:5:837:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
421+
| main.rs:838:5:838:6 | my | main.rs:1:1:1:7 | mod my |
422+
| main.rs:838:5:838:9 | ...::f | my.rs:5:1:7:1 | fn f |
423+
| main.rs:839:5:839:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
424+
| main.rs:839:5:839:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
425+
| main.rs:839:5:839:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
426+
| main.rs:839:5:839:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
427+
| main.rs:840:5:840:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
428+
| main.rs:841:5:841:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
429+
| main.rs:842:5:842:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
430+
| main.rs:842:5:842:12 | ...::h | main.rs:57:1:76:1 | fn h |
431+
| main.rs:843:5:843:6 | m1 | main.rs:20:1:44:1 | mod m1 |
432+
| main.rs:843:5:843:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
433+
| main.rs:843:5:843:13 | ...::g | main.rs:30:9:34:9 | fn g |
434+
| main.rs:844:5:844:6 | m1 | main.rs:20:1:44:1 | mod m1 |
435+
| main.rs:844:5:844:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
436+
| main.rs:844:5:844:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 |
437+
| main.rs:844:5:844:17 | ...::h | main.rs:37:27:41:13 | fn h |
438+
| main.rs:845:5:845:6 | m4 | main.rs:46:1:53:1 | mod m4 |
439+
| main.rs:845:5:845:9 | ...::i | main.rs:49:5:52:5 | fn i |
440+
| main.rs:846:5:846:5 | h | main.rs:57:1:76:1 | fn h |
441+
| main.rs:847:5:847:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
442+
| main.rs:848:5:848:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
443+
| main.rs:849:5:849:5 | j | main.rs:104:1:108:1 | fn j |
444+
| main.rs:850:5:850:6 | m6 | main.rs:116:1:128:1 | mod m6 |
445+
| main.rs:850:5:850:9 | ...::g | main.rs:121:5:127:5 | fn g |
446+
| main.rs:851:5:851:6 | m7 | main.rs:130:1:149:1 | mod m7 |
447+
| main.rs:851:5:851:9 | ...::f | main.rs:141:5:148:5 | fn f |
448+
| main.rs:852:5:852:6 | m8 | main.rs:151:1:205:1 | mod m8 |
449+
| main.rs:852:5:852:9 | ...::g | main.rs:189:5:204:5 | fn g |
450+
| main.rs:853:5:853:6 | m9 | main.rs:207:1:215:1 | mod m9 |
451+
| main.rs:853:5:853:9 | ...::f | main.rs:210:5:214:5 | fn f |
452+
| main.rs:854:5:854:7 | m11 | main.rs:238:1:275:1 | mod m11 |
453+
| main.rs:854:5:854:10 | ...::f | main.rs:243:5:246:5 | fn f |
454+
| main.rs:855:5:855:7 | m15 | main.rs:306:1:375:1 | mod m15 |
455+
| main.rs:855:5:855:10 | ...::f | main.rs:362:5:374:5 | fn f |
456+
| main.rs:856:5:856:7 | m16 | main.rs:377:1:469:1 | mod m16 |
457+
| main.rs:856:5:856:10 | ...::f | main.rs:444:5:468:5 | fn f |
458+
| main.rs:857:5:857:20 | trait_visibility | main.rs:471:1:521:1 | mod trait_visibility |
459+
| main.rs:857:5:857:23 | ...::f | main.rs:498:5:520:5 | fn f |
460+
| main.rs:858:5:858:7 | m17 | main.rs:523:1:553:1 | mod m17 |
461+
| main.rs:858:5:858:10 | ...::f | main.rs:547:5:552:5 | fn f |
462+
| main.rs:859:5:859:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
463+
| main.rs:859:5:859:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
464+
| main.rs:860:5:860:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
465+
| main.rs:860:5:860:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
466+
| main.rs:861:5:861:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
467+
| main.rs:861:5:861:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
468+
| main.rs:862:5:862:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
469+
| main.rs:863:5:863:12 | my_alias | main.rs:1:1:1:7 | mod my |
470+
| main.rs:863:5:863:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
471+
| main.rs:864:5:864:7 | m18 | main.rs:555:1:573:1 | mod m18 |
472+
| main.rs:864:5:864:12 | ...::m19 | main.rs:560:5:572:5 | mod m19 |
473+
| main.rs:864:5:864:17 | ...::m20 | main.rs:565:9:571:9 | mod m20 |
474+
| main.rs:864:5:864:20 | ...::g | main.rs:566:13:570:13 | fn g |
475+
| main.rs:865:5:865:7 | m23 | main.rs:602:1:627:1 | mod m23 |
476+
| main.rs:865:5:865:10 | ...::f | main.rs:622:5:626:5 | fn f |
477+
| main.rs:866:5:866:7 | m24 | main.rs:629:1:697:1 | mod m24 |
478+
| main.rs:866:5:866:10 | ...::f | main.rs:683:5:696:5 | fn f |
479+
| main.rs:867:5:867:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
480+
| main.rs:867:5:867:11 | ...::h | main.rs:57:1:76:1 | fn h |
481+
| main.rs:868:5:868:13 | z_changed | main.rs:702:1:702:9 | fn z_changed |
482+
| main.rs:869:5:869:11 | AStruct | main.rs:704:1:704:17 | struct AStruct |
483+
| main.rs:869:5:869:22 | ...::z_on_type | main.rs:708:5:708:17 | fn z_on_type |
484+
| main.rs:870:5:870:11 | AStruct | main.rs:704:1:704:17 | struct AStruct |
485+
| main.rs:871:5:871:29 | impl_with_attribute_macro | main.rs:772:1:791:1 | mod impl_with_attribute_macro |
486+
| main.rs:871:5:871:35 | ...::test | main.rs:787:5:790:5 | fn test |
487+
| main.rs:872:5:872:12 | patterns | main.rs:793:1:834:1 | mod patterns |
488+
| main.rs:872:5:872:18 | ...::test | main.rs:794:5:808:5 | fn test |
471489
| my2/mod.rs:4:5:4:11 | println | {EXTERNAL LOCATION} | MacroRules |
472490
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
473491
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
@@ -493,7 +511,7 @@ resolvePath
493511
| my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g |
494512
| my2/my3/mod.rs:4:5:4:5 | h | main.rs:57:1:76:1 | fn h |
495513
| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
496-
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:829:2 | SourceFile |
514+
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:873:2 | SourceFile |
497515
| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:57:1:76:1 | fn h |
498516
| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
499517
| my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g |

0 commit comments

Comments
 (0)