Skip to content

Commit 985ee92

Browse files
committed
Rust: Add more path resolution tests
1 parent 0b2e307 commit 985ee92

File tree

3 files changed

+163
-39
lines changed

3 files changed

+163
-39
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,23 @@
11
multiplePathResolutions
22
| main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f |
33
| main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f |
4+
| main.rs:221:17:221:19 | Foo | main.rs:216:5:216:21 | struct Foo |
5+
| main.rs:221:17:221:19 | Foo | main.rs:218:5:218:15 | fn Foo |
6+
| main.rs:222:9:222:11 | Foo | main.rs:216:5:216:21 | struct Foo |
7+
| main.rs:222:9:222:11 | Foo | main.rs:218:5:218:15 | fn Foo |
8+
| main.rs:236:13:236:15 | Foo | main.rs:216:5:216:21 | struct Foo |
9+
| main.rs:236:13:236:15 | Foo | main.rs:218:5:218:15 | fn Foo |
10+
| main.rs:237:17:237:22 | FooBar | main.rs:228:9:228:17 | FooBar |
11+
| main.rs:237:17:237:22 | FooBar | main.rs:233:5:233:18 | fn FooBar |
12+
| main.rs:238:17:238:22 | FooBar | main.rs:228:9:228:17 | FooBar |
13+
| main.rs:238:17:238:22 | FooBar | main.rs:233:5:233:18 | fn FooBar |
14+
| main.rs:273:13:273:25 | ...::f | main.rs:269:5:269:17 | fn f |
15+
| main.rs:273:13:273:25 | ...::f | main.rs:269:19:270:19 | struct f |
16+
| main.rs:276:17:276:17 | f | main.rs:269:5:269:17 | fn f |
17+
| main.rs:276:17:276:17 | f | main.rs:269:19:270:19 | struct f |
18+
| main.rs:277:21:277:21 | f | main.rs:269:5:269:17 | fn f |
19+
| main.rs:277:21:277:21 | f | main.rs:269:19:270:19 | struct f |
20+
| main.rs:278:13:278:13 | f | main.rs:269:5:269:17 | fn f |
21+
| main.rs:278:13:278:13 | f | main.rs:269:19:270:19 | struct f |
22+
| main.rs:301:5:301:10 | ...::f | main.rs:220:5:223:5 | fn f |
23+
| main.rs:301:5:301:10 | ...::f | main.rs:225:5:225:12 | mod f |

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

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,74 @@ mod m10 {
212212
}
213213
}
214214

215+
mod m11 {
216+
pub struct Foo {} // I61
217+
218+
fn Foo() {} // I62
219+
220+
pub fn f() {
221+
let _ = Foo {}; // $ item=I61 $ SPURIOUS: item=I62
222+
Foo(); // $ item=I62 $ SPURIOUS: item=I61
223+
} // I63
224+
225+
mod f {} // I66
226+
227+
pub enum Bar {
228+
FooBar {}, // I64
229+
} // I65
230+
231+
use Bar::FooBar; // $ item=I64
232+
233+
fn FooBar() {} // I65
234+
235+
#[rustfmt::skip]
236+
fn g(x: Foo) { // $ item=I61 $ SPURIOUS: item=I62
237+
let _ = FooBar {}; // $ item=I64 $ SPURIOUS: item=I65
238+
let _ = FooBar(); // $ item=I65 $ SPURIOUS: item=I64
239+
}
240+
241+
struct S; // I67
242+
enum E {
243+
C, // I68
244+
}
245+
246+
use E::C; // $ item=I68
247+
248+
fn h() {
249+
let _ = S; // $ item=I67
250+
let _ = C; // $ item=I68
251+
}
252+
}
253+
254+
mod m12 {
255+
#[rustfmt::skip]
256+
trait MyParamTrait<
257+
T // I69
258+
> {
259+
type AssociatedType; // I70
260+
261+
fn f(
262+
&self,
263+
x: T // $ MISSING: item=I69
264+
) -> Self::AssociatedType; // $ MISSING: item=I70
265+
}
266+
}
267+
268+
mod m13 {
269+
pub fn f() {} // I71
270+
pub struct f {} // I72
271+
272+
mod m14 {
273+
use crate::m13::f; // $ item=I71 item=I72
274+
275+
#[rustfmt::skip]
276+
fn g(x: f) { // $ item=I72 $ SPUROUS: item=I71
277+
let _ = f {}; // $ item=I72 $ SPUROUS: item=I71
278+
f(); // $ item=I71 $ SPUROUS: item=I72
279+
}
280+
}
281+
}
282+
215283
fn main() {
216284
my::nested::nested1::nested2::f(); // $ item=I4
217285
my::f(); // $ item=I38
@@ -230,4 +298,5 @@ fn main() {
230298
m7::f(); // $ item=I45
231299
m8::g(); // $ item=I55
232300
m9::f(); // $ item=I57
301+
m11::f(); // $ item=I63 $ SPUROUS: item=I66
233302
}

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

Lines changed: 74 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ mod
1313
| main.rs:139:1:182:1 | mod m8 |
1414
| main.rs:184:1:192:1 | mod m9 |
1515
| main.rs:194:1:213:1 | mod m10 |
16+
| main.rs:215:1:252:1 | mod m11 |
17+
| main.rs:225:5:225:12 | mod f |
18+
| main.rs:254:1:266:1 | mod m12 |
19+
| main.rs:268:1:281:1 | mod m13 |
20+
| main.rs:272:5:280:5 | mod m14 |
1621
| my2/mod.rs:1:1:1:16 | mod nested2 |
1722
| my2/nested2.rs:1:1:11:1 | mod nested3 |
1823
| my2/nested2.rs:2:5:10:5 | mod nested4 |
@@ -38,7 +43,7 @@ resolvePath
3843
| main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 |
3944
| main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f |
4045
| main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f |
41-
| main.rs:40:9:40:13 | super | main.rs:1:1:233:2 | SourceFile |
46+
| main.rs:40:9:40:13 | super | main.rs:1:1:302:2 | SourceFile |
4247
| main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 |
4348
| main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
4449
| main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g |
@@ -50,7 +55,7 @@ resolvePath
5055
| main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo |
5156
| main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo |
5257
| main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f |
53-
| main.rs:68:5:68:8 | self | main.rs:1:1:233:2 | SourceFile |
58+
| main.rs:68:5:68:8 | self | main.rs:1:1:302:2 | SourceFile |
5459
| main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i |
5560
| main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo |
5661
| main.rs:81:17:81:19 | Foo | main.rs:77:9:79:9 | struct Foo |
@@ -64,7 +69,7 @@ resolvePath
6469
| main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g |
6570
| main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
6671
| main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro |
67-
| main.rs:117:13:117:17 | super | main.rs:1:1:233:2 | SourceFile |
72+
| main.rs:117:13:117:17 | super | main.rs:1:1:302:2 | SourceFile |
6873
| main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 |
6974
| main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f |
7075
| main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f |
@@ -99,42 +104,72 @@ resolvePath
99104
| main.rs:207:7:209:7 | MyStruct::<...> | main.rs:195:5:201:5 | struct MyStruct |
100105
| main.rs:208:9:208:9 | T | main.rs:204:14:204:14 | TypeParam |
101106
| main.rs:211:9:211:16 | MyStruct | main.rs:195:5:201:5 | struct MyStruct |
102-
| main.rs:216:5:216:6 | my | main.rs:1:1:1:7 | mod my |
103-
| main.rs:216:5:216:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
104-
| main.rs:216:5:216:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
105-
| main.rs:216:5:216:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
106-
| main.rs:216:5:216:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
107-
| main.rs:217:5:217:6 | my | main.rs:1:1:1:7 | mod my |
108-
| main.rs:217:5:217:9 | ...::f | my.rs:5:1:7:1 | fn f |
109-
| main.rs:218:5:218:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
110-
| main.rs:218:5:218:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
111-
| main.rs:218:5:218:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
112-
| main.rs:218:5:218:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
113-
| main.rs:219:5:219:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
114-
| main.rs:220:5:220:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
115-
| main.rs:221:5:221:9 | crate | main.rs:1:1:233:2 | SourceFile |
116-
| main.rs:221:5:221:12 | ...::h | main.rs:50:1:69:1 | fn h |
117-
| main.rs:222:5:222:6 | m1 | main.rs:13:1:37:1 | mod m1 |
118-
| main.rs:222:5:222:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
119-
| main.rs:222:5:222:13 | ...::g | main.rs:23:9:27:9 | fn g |
120-
| main.rs:223:5:223:6 | m1 | main.rs:13:1:37:1 | mod m1 |
121-
| main.rs:223:5:223:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
122-
| main.rs:223:5:223:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 |
123-
| main.rs:223:5:223:17 | ...::h | main.rs:30:27:34:13 | fn h |
124-
| main.rs:224:5:224:6 | m4 | main.rs:39:1:46:1 | mod m4 |
125-
| main.rs:224:5:224:9 | ...::i | main.rs:42:5:45:5 | fn i |
126-
| main.rs:225:5:225:5 | h | main.rs:50:1:69:1 | fn h |
127-
| main.rs:226:5:226:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
128-
| main.rs:227:5:227:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
129-
| main.rs:228:5:228:5 | j | main.rs:97:1:101:1 | fn j |
130-
| main.rs:229:5:229:6 | m6 | main.rs:109:1:120:1 | mod m6 |
131-
| main.rs:229:5:229:9 | ...::g | main.rs:114:5:119:5 | fn g |
132-
| main.rs:230:5:230:6 | m7 | main.rs:122:1:137:1 | mod m7 |
133-
| main.rs:230:5:230:9 | ...::f | main.rs:129:5:136:5 | fn f |
134-
| main.rs:231:5:231:6 | m8 | main.rs:139:1:182:1 | mod m8 |
135-
| main.rs:231:5:231:9 | ...::g | main.rs:169:5:181:5 | fn g |
136-
| main.rs:232:5:232:6 | m9 | main.rs:184:1:192:1 | mod m9 |
137-
| main.rs:232:5:232:9 | ...::f | main.rs:187:5:191:5 | fn f |
107+
| main.rs:221:17:221:19 | Foo | main.rs:216:5:216:21 | struct Foo |
108+
| main.rs:221:17:221:19 | Foo | main.rs:218:5:218:15 | fn Foo |
109+
| main.rs:222:9:222:11 | Foo | main.rs:216:5:216:21 | struct Foo |
110+
| main.rs:222:9:222:11 | Foo | main.rs:218:5:218:15 | fn Foo |
111+
| main.rs:231:9:231:11 | Bar | main.rs:227:5:229:5 | enum Bar |
112+
| main.rs:231:9:231:19 | ...::FooBar | main.rs:228:9:228:17 | FooBar |
113+
| main.rs:236:13:236:15 | Foo | main.rs:216:5:216:21 | struct Foo |
114+
| main.rs:236:13:236:15 | Foo | main.rs:218:5:218:15 | fn Foo |
115+
| main.rs:237:17:237:22 | FooBar | main.rs:228:9:228:17 | FooBar |
116+
| main.rs:237:17:237:22 | FooBar | main.rs:233:5:233:18 | fn FooBar |
117+
| main.rs:238:17:238:22 | FooBar | main.rs:228:9:228:17 | FooBar |
118+
| main.rs:238:17:238:22 | FooBar | main.rs:233:5:233:18 | fn FooBar |
119+
| main.rs:246:9:246:9 | E | main.rs:241:15:244:5 | enum E |
120+
| main.rs:246:9:246:12 | ...::C | main.rs:243:9:243:9 | C |
121+
| main.rs:249:17:249:17 | S | main.rs:241:5:241:13 | struct S |
122+
| main.rs:250:17:250:17 | C | main.rs:243:9:243:9 | C |
123+
| main.rs:264:14:264:17 | Self | main.rs:255:5:265:5 | trait MyParamTrait |
124+
| main.rs:273:13:273:17 | crate | main.rs:1:1:302:2 | SourceFile |
125+
| main.rs:273:13:273:22 | ...::m13 | main.rs:268:1:281:1 | mod m13 |
126+
| main.rs:273:13:273:25 | ...::f | main.rs:269:5:269:17 | fn f |
127+
| main.rs:273:13:273:25 | ...::f | main.rs:269:19:270:19 | struct f |
128+
| main.rs:276:17:276:17 | f | main.rs:269:5:269:17 | fn f |
129+
| main.rs:276:17:276:17 | f | main.rs:269:19:270:19 | struct f |
130+
| main.rs:277:21:277:21 | f | main.rs:269:5:269:17 | fn f |
131+
| main.rs:277:21:277:21 | f | main.rs:269:19:270:19 | struct f |
132+
| main.rs:278:13:278:13 | f | main.rs:269:5:269:17 | fn f |
133+
| main.rs:278:13:278:13 | f | main.rs:269:19:270:19 | struct f |
134+
| main.rs:284:5:284:6 | my | main.rs:1:1:1:7 | mod my |
135+
| main.rs:284:5:284:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
136+
| main.rs:284:5:284:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
137+
| main.rs:284:5:284:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
138+
| main.rs:284:5:284:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
139+
| main.rs:285:5:285:6 | my | main.rs:1:1:1:7 | mod my |
140+
| main.rs:285:5:285:9 | ...::f | my.rs:5:1:7:1 | fn f |
141+
| main.rs:286:5:286:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
142+
| main.rs:286:5:286:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
143+
| main.rs:286:5:286:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
144+
| main.rs:286:5:286:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
145+
| main.rs:287:5:287:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
146+
| main.rs:288:5:288:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
147+
| main.rs:289:5:289:9 | crate | main.rs:1:1:302:2 | SourceFile |
148+
| main.rs:289:5:289:12 | ...::h | main.rs:50:1:69:1 | fn h |
149+
| main.rs:290:5:290:6 | m1 | main.rs:13:1:37:1 | mod m1 |
150+
| main.rs:290:5:290:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
151+
| main.rs:290:5:290:13 | ...::g | main.rs:23:9:27:9 | fn g |
152+
| main.rs:291:5:291:6 | m1 | main.rs:13:1:37:1 | mod m1 |
153+
| main.rs:291:5:291:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
154+
| main.rs:291:5:291:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 |
155+
| main.rs:291:5:291:17 | ...::h | main.rs:30:27:34:13 | fn h |
156+
| main.rs:292:5:292:6 | m4 | main.rs:39:1:46:1 | mod m4 |
157+
| main.rs:292:5:292:9 | ...::i | main.rs:42:5:45:5 | fn i |
158+
| main.rs:293:5:293:5 | h | main.rs:50:1:69:1 | fn h |
159+
| main.rs:294:5:294:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
160+
| main.rs:295:5:295:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
161+
| main.rs:296:5:296:5 | j | main.rs:97:1:101:1 | fn j |
162+
| main.rs:297:5:297:6 | m6 | main.rs:109:1:120:1 | mod m6 |
163+
| main.rs:297:5:297:9 | ...::g | main.rs:114:5:119:5 | fn g |
164+
| main.rs:298:5:298:6 | m7 | main.rs:122:1:137:1 | mod m7 |
165+
| main.rs:298:5:298:9 | ...::f | main.rs:129:5:136:5 | fn f |
166+
| main.rs:299:5:299:6 | m8 | main.rs:139:1:182:1 | mod m8 |
167+
| main.rs:299:5:299:9 | ...::g | main.rs:169:5:181:5 | fn g |
168+
| main.rs:300:5:300:6 | m9 | main.rs:184:1:192:1 | mod m9 |
169+
| main.rs:300:5:300:9 | ...::f | main.rs:187:5:191:5 | fn f |
170+
| main.rs:301:5:301:7 | m11 | main.rs:215:1:252:1 | mod m11 |
171+
| main.rs:301:5:301:10 | ...::f | main.rs:220:5:223:5 | fn f |
172+
| main.rs:301:5:301:10 | ...::f | main.rs:225:5:225:12 | mod f |
138173
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
139174
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
140175
| my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |

0 commit comments

Comments
 (0)