Skip to content

Commit f3a393f

Browse files
committed
Rust: Add more path resolution tests
1 parent b08f535 commit f3a393f

File tree

2 files changed

+116
-42
lines changed

2 files changed

+116
-42
lines changed

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

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,62 @@ mod m13 {
291291
}
292292
}
293293

294+
mod m15 {
295+
trait Trait1 {
296+
fn f(&self);
297+
298+
fn g(&self); // I80
299+
} // I79
300+
301+
#[rustfmt::skip]
302+
trait Trait2
303+
: Trait1 { // $ item=I79
304+
fn f(&self) {
305+
println!("m15::Trait2::f");
306+
Self::g(self); // $ MISSING: item=I80
307+
self.g(); // $ MISSING: item=I80
308+
}
309+
} // I82
310+
311+
struct S; // I81
312+
313+
#[rustfmt::skip]
314+
impl Trait1 // $ item=I79
315+
for S { // $ item=I81
316+
fn f(&self) {
317+
println!("m15::<S as Trait1>::f");
318+
Self::g(self); // $ item=I77
319+
self.g(); // $ MISSING: item=I77
320+
} // I76
321+
322+
fn g(&self) {
323+
println!("m15::<S as Trait1>::g");
324+
} // I77
325+
}
326+
327+
#[rustfmt::skip]
328+
impl Trait2 // $ item=I82
329+
for S { // $ item=I81
330+
fn f(&self) {
331+
println!("m15::<S as Trait2>::f");
332+
} // I78
333+
}
334+
335+
#[rustfmt::skip]
336+
pub fn f() {
337+
println!("m15::f");
338+
let x = S; // $ item=I81
339+
<S // $ item=I81
340+
as Trait1 // $ MISSING: item=I79
341+
>::f(&x); // $ MISSING: item=I76
342+
<S // $ item=I81
343+
as Trait2 // MISSING: item=I82
344+
>::f(&x); // $ MISSING: item=I78
345+
S::g(&x); // $ MISSING: item=I77
346+
x.g(); // $ MISSING: item=I77
347+
} // I75
348+
}
349+
294350
fn main() {
295351
my::nested::nested1::nested2::f(); // $ item=I4
296352
my::f(); // $ item=I38
@@ -310,4 +366,5 @@ fn main() {
310366
m8::g(); // $ item=I55
311367
m9::f(); // $ item=I57
312368
m11::f(); // $ item=I63
369+
m15::f(); // $ item=I75
313370
}

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

Lines changed: 59 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ mod
1818
| main.rs:265:1:277:1 | mod m12 |
1919
| main.rs:279:1:292:1 | mod m13 |
2020
| main.rs:283:5:291:5 | mod m14 |
21+
| main.rs:294:1:348:1 | mod m15 |
2122
| my2/mod.rs:1:1:1:16 | mod nested2 |
2223
| my2/nested2.rs:1:1:11:1 | mod nested3 |
2324
| my2/nested2.rs:2:5:10:5 | mod nested4 |
@@ -43,7 +44,7 @@ resolvePath
4344
| main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 |
4445
| main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f |
4546
| main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f |
46-
| main.rs:40:9:40:13 | super | main.rs:1:1:313:2 | SourceFile |
47+
| main.rs:40:9:40:13 | super | main.rs:1:1:370:2 | SourceFile |
4748
| main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 |
4849
| main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
4950
| main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g |
@@ -55,7 +56,7 @@ resolvePath
5556
| main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo |
5657
| main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo |
5758
| main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f |
58-
| main.rs:68:5:68:8 | self | main.rs:1:1:313:2 | SourceFile |
59+
| main.rs:68:5:68:8 | self | main.rs:1:1:370:2 | SourceFile |
5960
| main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i |
6061
| main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo |
6162
| main.rs:81:17:81:19 | Foo | main.rs:77:9:79:9 | struct Foo |
@@ -69,7 +70,7 @@ resolvePath
6970
| main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g |
7071
| main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
7172
| main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro |
72-
| main.rs:117:13:117:17 | super | main.rs:1:1:313:2 | SourceFile |
73+
| main.rs:117:13:117:17 | super | main.rs:1:1:370:2 | SourceFile |
7374
| main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 |
7475
| main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f |
7576
| main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f |
@@ -122,51 +123,67 @@ resolvePath
122123
| main.rs:274:16:274:16 | T | main.rs:268:7:268:7 | T |
123124
| main.rs:275:14:275:17 | Self | main.rs:266:5:276:5 | trait MyParamTrait |
124125
| main.rs:275:14:275:33 | ...::AssociatedType | main.rs:270:9:270:28 | TypeAlias |
125-
| main.rs:284:13:284:17 | crate | main.rs:1:1:313:2 | SourceFile |
126+
| main.rs:284:13:284:17 | crate | main.rs:1:1:370:2 | SourceFile |
126127
| main.rs:284:13:284:22 | ...::m13 | main.rs:279:1:292:1 | mod m13 |
127128
| main.rs:284:13:284:25 | ...::f | main.rs:280:5:280:17 | fn f |
128129
| main.rs:284:13:284:25 | ...::f | main.rs:280:19:281:19 | struct f |
129130
| main.rs:287:17:287:17 | f | main.rs:280:19:281:19 | struct f |
130131
| main.rs:288:21:288:21 | f | main.rs:280:19:281:19 | struct f |
131132
| main.rs:289:13:289:13 | f | main.rs:280:5:280:17 | fn f |
132-
| main.rs:295:5:295:6 | my | main.rs:1:1:1:7 | mod my |
133-
| main.rs:295:5:295:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
134-
| main.rs:295:5:295:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
135-
| main.rs:295:5:295:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
136-
| main.rs:295:5:295:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
137-
| main.rs:296:5:296:6 | my | main.rs:1:1:1:7 | mod my |
138-
| main.rs:296:5:296:9 | ...::f | my.rs:5:1:7:1 | fn f |
139-
| main.rs:297:5:297:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
140-
| main.rs:297:5:297:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
141-
| main.rs:297:5:297:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
142-
| main.rs:297:5:297:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
143-
| main.rs:298:5:298:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
144-
| main.rs:299:5:299:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
145-
| main.rs:300:5:300:9 | crate | main.rs:1:1:313:2 | SourceFile |
146-
| main.rs:300:5:300:12 | ...::h | main.rs:50:1:69:1 | fn h |
147-
| main.rs:301:5:301:6 | m1 | main.rs:13:1:37:1 | mod m1 |
148-
| main.rs:301:5:301:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
149-
| main.rs:301:5:301:13 | ...::g | main.rs:23:9:27:9 | fn g |
150-
| main.rs:302:5:302:6 | m1 | main.rs:13:1:37:1 | mod m1 |
151-
| main.rs:302:5:302:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
152-
| main.rs:302:5:302:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 |
153-
| main.rs:302:5:302:17 | ...::h | main.rs:30:27:34:13 | fn h |
154-
| main.rs:303:5:303:6 | m4 | main.rs:39:1:46:1 | mod m4 |
155-
| main.rs:303:5:303:9 | ...::i | main.rs:42:5:45:5 | fn i |
156-
| main.rs:304:5:304:5 | h | main.rs:50:1:69:1 | fn h |
157-
| main.rs:305:5:305:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
158-
| main.rs:306:5:306:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
159-
| main.rs:307:5:307:5 | j | main.rs:97:1:101:1 | fn j |
160-
| main.rs:308:5:308:6 | m6 | main.rs:109:1:120:1 | mod m6 |
161-
| main.rs:308:5:308:9 | ...::g | main.rs:114:5:119:5 | fn g |
162-
| main.rs:309:5:309:6 | m7 | main.rs:122:1:137:1 | mod m7 |
163-
| main.rs:309:5:309:9 | ...::f | main.rs:129:5:136:5 | fn f |
164-
| main.rs:310:5:310:6 | m8 | main.rs:139:1:193:1 | mod m8 |
165-
| main.rs:310:5:310:9 | ...::g | main.rs:177:5:192:5 | fn g |
166-
| main.rs:311:5:311:6 | m9 | main.rs:195:1:203:1 | mod m9 |
167-
| main.rs:311:5:311:9 | ...::f | main.rs:198:5:202:5 | fn f |
168-
| main.rs:312:5:312:7 | m11 | main.rs:226:1:263:1 | mod m11 |
169-
| main.rs:312:5:312:10 | ...::f | main.rs:231:5:234:5 | fn f |
133+
| main.rs:303:9:303:14 | Trait1 | main.rs:295:5:299:5 | trait Trait1 |
134+
| main.rs:306:13:306:16 | Self | main.rs:301:5:309:5 | trait Trait2 |
135+
| main.rs:314:10:314:15 | Trait1 | main.rs:295:5:299:5 | trait Trait1 |
136+
| main.rs:315:11:315:11 | S | main.rs:311:5:311:13 | struct S |
137+
| main.rs:318:13:318:16 | Self | main.rs:313:5:325:5 | impl Trait1 for S { ... } |
138+
| main.rs:318:13:318:19 | ...::g | main.rs:322:9:324:9 | fn g |
139+
| main.rs:328:10:328:15 | Trait2 | main.rs:301:5:309:5 | trait Trait2 |
140+
| main.rs:329:11:329:11 | S | main.rs:311:5:311:13 | struct S |
141+
| main.rs:338:17:338:17 | S | main.rs:311:5:311:13 | struct S |
142+
| main.rs:339:10:339:10 | S | main.rs:311:5:311:13 | struct S |
143+
| main.rs:339:10:339:10 | S | main.rs:311:5:311:13 | struct S |
144+
| main.rs:342:10:342:10 | S | main.rs:311:5:311:13 | struct S |
145+
| main.rs:342:10:342:10 | S | main.rs:311:5:311:13 | struct S |
146+
| main.rs:345:9:345:9 | S | main.rs:311:5:311:13 | struct S |
147+
| main.rs:351:5:351:6 | my | main.rs:1:1:1:7 | mod my |
148+
| main.rs:351:5:351:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
149+
| main.rs:351:5:351:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
150+
| main.rs:351:5:351:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
151+
| main.rs:351:5:351:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
152+
| main.rs:352:5:352:6 | my | main.rs:1:1:1:7 | mod my |
153+
| main.rs:352:5:352:9 | ...::f | my.rs:5:1:7:1 | fn f |
154+
| main.rs:353:5:353:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
155+
| main.rs:353:5:353:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
156+
| main.rs:353:5:353:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
157+
| main.rs:353:5:353:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
158+
| main.rs:354:5:354:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
159+
| main.rs:355:5:355:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
160+
| main.rs:356:5:356:9 | crate | main.rs:1:1:370:2 | SourceFile |
161+
| main.rs:356:5:356:12 | ...::h | main.rs:50:1:69:1 | fn h |
162+
| main.rs:357:5:357:6 | m1 | main.rs:13:1:37:1 | mod m1 |
163+
| main.rs:357:5:357:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
164+
| main.rs:357:5:357:13 | ...::g | main.rs:23:9:27:9 | fn g |
165+
| main.rs:358:5:358:6 | m1 | main.rs:13:1:37:1 | mod m1 |
166+
| main.rs:358:5:358:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
167+
| main.rs:358:5:358:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 |
168+
| main.rs:358:5:358:17 | ...::h | main.rs:30:27:34:13 | fn h |
169+
| main.rs:359:5:359:6 | m4 | main.rs:39:1:46:1 | mod m4 |
170+
| main.rs:359:5:359:9 | ...::i | main.rs:42:5:45:5 | fn i |
171+
| main.rs:360:5:360:5 | h | main.rs:50:1:69:1 | fn h |
172+
| main.rs:361:5:361:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
173+
| main.rs:362:5:362:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
174+
| main.rs:363:5:363:5 | j | main.rs:97:1:101:1 | fn j |
175+
| main.rs:364:5:364:6 | m6 | main.rs:109:1:120:1 | mod m6 |
176+
| main.rs:364:5:364:9 | ...::g | main.rs:114:5:119:5 | fn g |
177+
| main.rs:365:5:365:6 | m7 | main.rs:122:1:137:1 | mod m7 |
178+
| main.rs:365:5:365:9 | ...::f | main.rs:129:5:136:5 | fn f |
179+
| main.rs:366:5:366:6 | m8 | main.rs:139:1:193:1 | mod m8 |
180+
| main.rs:366:5:366:9 | ...::g | main.rs:177:5:192:5 | fn g |
181+
| main.rs:367:5:367:6 | m9 | main.rs:195:1:203:1 | mod m9 |
182+
| main.rs:367:5:367:9 | ...::f | main.rs:198:5:202:5 | fn f |
183+
| main.rs:368:5:368:7 | m11 | main.rs:226:1:263:1 | mod m11 |
184+
| main.rs:368:5:368:10 | ...::f | main.rs:231:5:234:5 | fn f |
185+
| main.rs:369:5:369:7 | m15 | main.rs:294:1:348:1 | mod m15 |
186+
| main.rs:369:5:369:10 | ...::f | main.rs:335:5:347:5 | fn f |
170187
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
171188
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
172189
| my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |

0 commit comments

Comments
 (0)