Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions rust/ql/test/library-tests/path-resolution/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -938,6 +938,52 @@ mod patterns {
}
}

/// Tests for referring to constructors via `Self`
mod self_constructors {
struct TupleStruct(i32); // $ item=i32

#[rustfmt::skip]
impl TupleStruct { // $ item=TupleStruct
#[rustfmt::skip]
fn new(x: i32) -> Self { // $ item=i32 item=TupleStruct
let _ = Self(0); // $ item=TupleStruct
let constructor = Self; // $ item=TupleStruct
constructor(x)
} // new
} // ImplTupleStruct

struct StructStruct {
a: i32, // $ item=i32
}

#[rustfmt::skip]
impl StructStruct { // $ item=StructStruct
#[rustfmt::skip]
fn new(a: i32) -> Self { // $ item=i32 item=StructStruct
Self { a } // $ item=StructStruct
} // new
} // ImplStructStruct

enum MyEnum {
A(
i32, // $ item=i32
), // MyEnumA
}

#[rustfmt::skip]
impl MyEnum { // $ item=MyEnum
fn get(self) -> i32{ // $ item=i32
match self {
Self::A( // $ item=MyEnumA
x,
) => {
x
}
}
}
}
}

fn main() {
my::nested::nested1::nested2::f(); // $ item=I4
my::f(); // $ item=I38
Expand Down
171 changes: 94 additions & 77 deletions rust/ql/test/library-tests/path-resolution/path-resolution.expected
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ mod
| main.rs:819:1:871:1 | mod associated_types |
| main.rs:877:1:896:1 | mod impl_with_attribute_macro |
| main.rs:898:1:939:1 | mod patterns |
| main.rs:941:1:985:1 | mod self_constructors |
| my2/mod.rs:1:1:1:16 | mod nested2 |
| my2/mod.rs:20:1:20:12 | mod my3 |
| my2/mod.rs:22:1:23:10 | mod mymod |
Expand Down Expand Up @@ -73,7 +74,7 @@ resolvePath
| main.rs:37:17:37:24 | ...::f | main.rs:26:9:28:9 | fn f |
| main.rs:39:17:39:23 | println | {EXTERNAL LOCATION} | MacroRules |
| main.rs:40:17:40:17 | f | main.rs:26:9:28:9 | fn f |
| main.rs:47:9:47:13 | super | main.rs:1:1:978:2 | SourceFile |
| main.rs:47:9:47:13 | super | main.rs:1:1:1024:2 | SourceFile |
| main.rs:47:9:47:17 | ...::m1 | main.rs:20:1:44:1 | mod m1 |
| main.rs:47:9:47:21 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
| main.rs:47:9:47:24 | ...::g | main.rs:30:9:34:9 | fn g |
Expand All @@ -88,7 +89,7 @@ resolvePath
| main.rs:68:17:68:19 | Foo | main.rs:66:9:66:21 | struct Foo |
| main.rs:71:13:71:15 | Foo | main.rs:60:5:60:17 | struct Foo |
| main.rs:73:5:73:5 | f | main.rs:62:5:69:5 | fn f |
| main.rs:75:5:75:8 | self | main.rs:1:1:978:2 | SourceFile |
| main.rs:75:5:75:8 | self | main.rs:1:1:1024:2 | SourceFile |
| main.rs:75:5:75:11 | ...::i | main.rs:78:1:90:1 | fn i |
| main.rs:79:5:79:11 | println | {EXTERNAL LOCATION} | MacroRules |
| main.rs:81:13:81:15 | Foo | main.rs:55:1:55:13 | struct Foo |
Expand All @@ -110,7 +111,7 @@ resolvePath
| main.rs:112:9:112:15 | println | {EXTERNAL LOCATION} | MacroRules |
| main.rs:118:9:118:15 | println | {EXTERNAL LOCATION} | MacroRules |
| main.rs:122:9:122:15 | println | {EXTERNAL LOCATION} | MacroRules |
| main.rs:125:13:125:17 | super | main.rs:1:1:978:2 | SourceFile |
| main.rs:125:13:125:17 | super | main.rs:1:1:1024:2 | SourceFile |
| main.rs:125:13:125:21 | ...::m5 | main.rs:110:1:114:1 | mod m5 |
| main.rs:126:9:126:9 | f | main.rs:111:5:113:5 | fn f |
| main.rs:126:9:126:9 | f | main.rs:117:5:119:5 | fn f |
Expand Down Expand Up @@ -477,79 +478,95 @@ resolvePath
| main.rs:935:13:935:16 | Some | {EXTERNAL LOCATION} | Some |
| main.rs:935:18:935:18 | z | main.rs:922:5:924:12 | Const |
| main.rs:935:24:935:24 | z | main.rs:922:5:924:12 | Const |
| main.rs:942:5:942:6 | my | main.rs:1:1:1:7 | mod my |
| main.rs:942:5:942:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
| main.rs:942:5:942:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
| main.rs:942:5:942:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
| main.rs:942:5:942:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
| main.rs:943:5:943:6 | my | main.rs:1:1:1:7 | mod my |
| main.rs:943:5:943:9 | ...::f | my.rs:5:1:7:1 | fn f |
| main.rs:944:5:944:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
| main.rs:944:5:944:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
| main.rs:944:5:944:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
| main.rs:944:5:944:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
| main.rs:945:5:945:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
| main.rs:946:5:946:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
| main.rs:947:5:947:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
| main.rs:947:5:947:12 | ...::h | main.rs:57:1:76:1 | fn h |
| main.rs:948:5:948:6 | m1 | main.rs:20:1:44:1 | mod m1 |
| main.rs:948:5:948:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
| main.rs:948:5:948:13 | ...::g | main.rs:30:9:34:9 | fn g |
| main.rs:949:5:949:6 | m1 | main.rs:20:1:44:1 | mod m1 |
| main.rs:949:5:949:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
| main.rs:949:5:949:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 |
| main.rs:949:5:949:17 | ...::h | main.rs:37:27:41:13 | fn h |
| main.rs:950:5:950:6 | m4 | main.rs:46:1:53:1 | mod m4 |
| main.rs:950:5:950:9 | ...::i | main.rs:49:5:52:5 | fn i |
| main.rs:951:5:951:5 | h | main.rs:57:1:76:1 | fn h |
| main.rs:952:5:952:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
| main.rs:953:5:953:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
| main.rs:954:5:954:5 | j | main.rs:104:1:108:1 | fn j |
| main.rs:955:5:955:6 | m6 | main.rs:116:1:128:1 | mod m6 |
| main.rs:955:5:955:9 | ...::g | main.rs:121:5:127:5 | fn g |
| main.rs:956:5:956:6 | m7 | main.rs:130:1:149:1 | mod m7 |
| main.rs:956:5:956:9 | ...::f | main.rs:141:5:148:5 | fn f |
| main.rs:957:5:957:6 | m8 | main.rs:151:1:205:1 | mod m8 |
| main.rs:957:5:957:9 | ...::g | main.rs:189:5:204:5 | fn g |
| main.rs:958:5:958:6 | m9 | main.rs:207:1:215:1 | mod m9 |
| main.rs:958:5:958:9 | ...::f | main.rs:210:5:214:5 | fn f |
| main.rs:959:5:959:7 | m11 | main.rs:238:1:275:1 | mod m11 |
| main.rs:959:5:959:10 | ...::f | main.rs:243:5:246:5 | fn f |
| main.rs:960:5:960:7 | m15 | main.rs:306:1:375:1 | mod m15 |
| main.rs:960:5:960:10 | ...::f | main.rs:362:5:374:5 | fn f |
| main.rs:961:5:961:7 | m16 | main.rs:377:1:574:1 | mod m16 |
| main.rs:961:5:961:10 | ...::f | main.rs:446:5:470:5 | fn f |
| main.rs:962:5:962:20 | trait_visibility | main.rs:576:1:626:1 | mod trait_visibility |
| main.rs:962:5:962:23 | ...::f | main.rs:603:5:625:5 | fn f |
| main.rs:963:5:963:7 | m17 | main.rs:628:1:658:1 | mod m17 |
| main.rs:963:5:963:10 | ...::f | main.rs:652:5:657:5 | fn f |
| main.rs:964:5:964:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
| main.rs:964:5:964:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
| main.rs:965:5:965:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
| main.rs:965:5:965:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
| main.rs:966:5:966:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
| main.rs:966:5:966:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
| main.rs:967:5:967:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
| main.rs:968:5:968:12 | my_alias | main.rs:1:1:1:7 | mod my |
| main.rs:968:5:968:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
| main.rs:969:5:969:7 | m18 | main.rs:660:1:678:1 | mod m18 |
| main.rs:969:5:969:12 | ...::m19 | main.rs:665:5:677:5 | mod m19 |
| main.rs:969:5:969:17 | ...::m20 | main.rs:670:9:676:9 | mod m20 |
| main.rs:969:5:969:20 | ...::g | main.rs:671:13:675:13 | fn g |
| main.rs:970:5:970:7 | m23 | main.rs:707:1:732:1 | mod m23 |
| main.rs:970:5:970:10 | ...::f | main.rs:727:5:731:5 | fn f |
| main.rs:971:5:971:7 | m24 | main.rs:734:1:802:1 | mod m24 |
| main.rs:971:5:971:10 | ...::f | main.rs:788:5:801:5 | fn f |
| main.rs:972:5:972:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
| main.rs:972:5:972:11 | ...::h | main.rs:57:1:76:1 | fn h |
| main.rs:973:5:973:13 | z_changed | main.rs:807:1:807:9 | fn z_changed |
| main.rs:974:5:974:11 | AStruct | main.rs:809:1:809:17 | struct AStruct |
| main.rs:974:5:974:22 | ...::z_on_type | main.rs:813:5:813:17 | fn z_on_type |
| main.rs:975:5:975:11 | AStruct | main.rs:809:1:809:17 | struct AStruct |
| main.rs:976:5:976:29 | impl_with_attribute_macro | main.rs:877:1:896:1 | mod impl_with_attribute_macro |
| main.rs:976:5:976:35 | ...::test | main.rs:892:5:895:5 | fn test |
| main.rs:977:5:977:12 | patterns | main.rs:898:1:939:1 | mod patterns |
| main.rs:977:5:977:18 | ...::test | main.rs:899:5:913:5 | fn test |
| main.rs:943:24:943:26 | i32 | {EXTERNAL LOCATION} | struct i32 |
| main.rs:946:10:946:20 | TupleStruct | main.rs:943:5:943:28 | struct TupleStruct |
| main.rs:948:19:948:21 | i32 | {EXTERNAL LOCATION} | struct i32 |
| main.rs:948:27:948:30 | Self | main.rs:943:5:943:28 | struct TupleStruct |
| main.rs:949:21:949:24 | Self | main.rs:943:5:943:28 | struct TupleStruct |
| main.rs:950:31:950:34 | Self | main.rs:943:5:943:28 | struct TupleStruct |
| main.rs:956:12:956:14 | i32 | {EXTERNAL LOCATION} | struct i32 |
| main.rs:960:10:960:21 | StructStruct | main.rs:955:5:957:5 | struct StructStruct |
| main.rs:962:19:962:21 | i32 | {EXTERNAL LOCATION} | struct i32 |
| main.rs:962:27:962:30 | Self | main.rs:955:5:957:5 | struct StructStruct |
| main.rs:963:13:963:16 | Self | main.rs:955:5:957:5 | struct StructStruct |
| main.rs:969:13:969:15 | i32 | {EXTERNAL LOCATION} | struct i32 |
| main.rs:974:10:974:15 | MyEnum | main.rs:967:5:971:5 | enum MyEnum |
| main.rs:975:25:975:27 | i32 | {EXTERNAL LOCATION} | struct i32 |
| main.rs:977:17:977:20 | Self | main.rs:967:5:971:5 | enum MyEnum |
| main.rs:977:17:977:23 | ...::A | main.rs:968:9:970:9 | A |
| main.rs:988:5:988:6 | my | main.rs:1:1:1:7 | mod my |
| main.rs:988:5:988:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
| main.rs:988:5:988:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
| main.rs:988:5:988:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
| main.rs:988:5:988:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
| main.rs:989:5:989:6 | my | main.rs:1:1:1:7 | mod my |
| main.rs:989:5:989:9 | ...::f | my.rs:5:1:7:1 | fn f |
| main.rs:990:5:990:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
| main.rs:990:5:990:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
| main.rs:990:5:990:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
| main.rs:990:5:990:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
| main.rs:991:5:991:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
| main.rs:992:5:992:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
| main.rs:993:5:993:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
| main.rs:993:5:993:12 | ...::h | main.rs:57:1:76:1 | fn h |
| main.rs:994:5:994:6 | m1 | main.rs:20:1:44:1 | mod m1 |
| main.rs:994:5:994:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
| main.rs:994:5:994:13 | ...::g | main.rs:30:9:34:9 | fn g |
| main.rs:995:5:995:6 | m1 | main.rs:20:1:44:1 | mod m1 |
| main.rs:995:5:995:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
| main.rs:995:5:995:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 |
| main.rs:995:5:995:17 | ...::h | main.rs:37:27:41:13 | fn h |
| main.rs:996:5:996:6 | m4 | main.rs:46:1:53:1 | mod m4 |
| main.rs:996:5:996:9 | ...::i | main.rs:49:5:52:5 | fn i |
| main.rs:997:5:997:5 | h | main.rs:57:1:76:1 | fn h |
| main.rs:998:5:998:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
| main.rs:999:5:999:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
| main.rs:1000:5:1000:5 | j | main.rs:104:1:108:1 | fn j |
| main.rs:1001:5:1001:6 | m6 | main.rs:116:1:128:1 | mod m6 |
| main.rs:1001:5:1001:9 | ...::g | main.rs:121:5:127:5 | fn g |
| main.rs:1002:5:1002:6 | m7 | main.rs:130:1:149:1 | mod m7 |
| main.rs:1002:5:1002:9 | ...::f | main.rs:141:5:148:5 | fn f |
| main.rs:1003:5:1003:6 | m8 | main.rs:151:1:205:1 | mod m8 |
| main.rs:1003:5:1003:9 | ...::g | main.rs:189:5:204:5 | fn g |
| main.rs:1004:5:1004:6 | m9 | main.rs:207:1:215:1 | mod m9 |
| main.rs:1004:5:1004:9 | ...::f | main.rs:210:5:214:5 | fn f |
| main.rs:1005:5:1005:7 | m11 | main.rs:238:1:275:1 | mod m11 |
| main.rs:1005:5:1005:10 | ...::f | main.rs:243:5:246:5 | fn f |
| main.rs:1006:5:1006:7 | m15 | main.rs:306:1:375:1 | mod m15 |
| main.rs:1006:5:1006:10 | ...::f | main.rs:362:5:374:5 | fn f |
| main.rs:1007:5:1007:7 | m16 | main.rs:377:1:574:1 | mod m16 |
| main.rs:1007:5:1007:10 | ...::f | main.rs:446:5:470:5 | fn f |
| main.rs:1008:5:1008:20 | trait_visibility | main.rs:576:1:626:1 | mod trait_visibility |
| main.rs:1008:5:1008:23 | ...::f | main.rs:603:5:625:5 | fn f |
| main.rs:1009:5:1009:7 | m17 | main.rs:628:1:658:1 | mod m17 |
| main.rs:1009:5:1009:10 | ...::f | main.rs:652:5:657:5 | fn f |
| main.rs:1010:5:1010:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
| main.rs:1010:5:1010:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
| main.rs:1011:5:1011:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
| main.rs:1011:5:1011:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
| main.rs:1012:5:1012:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
| main.rs:1012:5:1012:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
| main.rs:1013:5:1013:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
| main.rs:1014:5:1014:12 | my_alias | main.rs:1:1:1:7 | mod my |
| main.rs:1014:5:1014:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
| main.rs:1015:5:1015:7 | m18 | main.rs:660:1:678:1 | mod m18 |
| main.rs:1015:5:1015:12 | ...::m19 | main.rs:665:5:677:5 | mod m19 |
| main.rs:1015:5:1015:17 | ...::m20 | main.rs:670:9:676:9 | mod m20 |
| main.rs:1015:5:1015:20 | ...::g | main.rs:671:13:675:13 | fn g |
| main.rs:1016:5:1016:7 | m23 | main.rs:707:1:732:1 | mod m23 |
| main.rs:1016:5:1016:10 | ...::f | main.rs:727:5:731:5 | fn f |
| main.rs:1017:5:1017:7 | m24 | main.rs:734:1:802:1 | mod m24 |
| main.rs:1017:5:1017:10 | ...::f | main.rs:788:5:801:5 | fn f |
| main.rs:1018:5:1018:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
| main.rs:1018:5:1018:11 | ...::h | main.rs:57:1:76:1 | fn h |
| main.rs:1019:5:1019:13 | z_changed | main.rs:807:1:807:9 | fn z_changed |
| main.rs:1020:5:1020:11 | AStruct | main.rs:809:1:809:17 | struct AStruct |
| main.rs:1020:5:1020:22 | ...::z_on_type | main.rs:813:5:813:17 | fn z_on_type |
| main.rs:1021:5:1021:11 | AStruct | main.rs:809:1:809:17 | struct AStruct |
| main.rs:1022:5:1022:29 | impl_with_attribute_macro | main.rs:877:1:896:1 | mod impl_with_attribute_macro |
| main.rs:1022:5:1022:35 | ...::test | main.rs:892:5:895:5 | fn test |
| main.rs:1023:5:1023:12 | patterns | main.rs:898:1:939:1 | mod patterns |
| main.rs:1023:5:1023:18 | ...::test | main.rs:899:5:913:5 | fn test |
| my2/mod.rs:4:5:4:11 | println | {EXTERNAL LOCATION} | MacroRules |
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
Expand All @@ -575,7 +592,7 @@ resolvePath
| my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g |
| my2/my3/mod.rs:4:5:4:5 | h | main.rs:57:1:76:1 | fn h |
| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:978:2 | SourceFile |
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:1024:2 | SourceFile |
| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:57:1:76:1 | fn h |
| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
| my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
multipleResolvedTargets
| main.rs:2860:13:2860:17 | x.f() |
| main.rs:2871:13:2871:17 | x.f() |
11 changes: 11 additions & 0 deletions rust/ql/test/library-tests/type-inference/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,17 @@ mod method_impl {
}
}

mod struct_self_call {
struct ATupleStruct(i64);

impl Default for ATupleStruct {
fn default() -> Self {
let n = Default::default(); // $ target=default type=n:i64
Self(n)
}
}
}

mod trait_impl {
#[derive(Debug)]
struct MyThing {
Expand Down
Loading