Skip to content

Commit 7a4bc80

Browse files
authored
Merge pull request #20248 from hvitved/rust/jump-to-def-generic-args
Rust: Adjust jump-to-def for paths with generic arguments
2 parents 0144c77 + 714423d commit 7a4bc80

File tree

3 files changed

+47
-27
lines changed

3 files changed

+47
-27
lines changed

rust/ql/lib/codeql/rust/internal/Definitions.qll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,10 @@ private class PositionalFormatArgumentUse extends Use instanceof PositionalForma
135135
override string getUseType() { result = "format argument" }
136136
}
137137

138-
private class PathUse extends Use instanceof PathSegment {
138+
private class PathUse extends Use instanceof NameRef {
139139
private Path path;
140140

141-
PathUse() { this = path.getSegment() }
141+
PathUse() { this = path.getSegment().getIdentifier() }
142142

143143
private CallExpr getCall() { result.getFunction().(PathExpr).getPath() = path }
144144

rust/ql/test/library-tests/definitions/Definitions.expected

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,39 @@
22
| main.rs:9:14:9:14 | S | main.rs:7:9:7:21 | struct S | path |
33
| main.rs:10:36:10:39 | Self | main.rs:7:9:7:21 | struct S | path |
44
| main.rs:11:17:11:17 | S | main.rs:7:9:7:21 | struct S | path |
5-
| main.rs:21:22:21:26 | value | main.rs:21:50:21:54 | value | format argument |
6-
| main.rs:21:29:21:33 | width | main.rs:18:9:18:13 | width | local variable |
7-
| main.rs:21:36:21:44 | precision | main.rs:19:9:19:17 | precision | local variable |
8-
| main.rs:22:22:22:22 | 0 | main.rs:22:34:22:38 | value | format argument |
9-
| main.rs:22:25:22:25 | 1 | main.rs:22:41:22:45 | width | format argument |
10-
| main.rs:22:28:22:28 | 2 | main.rs:22:48:22:56 | precision | format argument |
11-
| main.rs:22:34:22:38 | value | main.rs:20:9:20:13 | value | local variable |
12-
| main.rs:22:41:22:45 | width | main.rs:18:9:18:13 | width | local variable |
13-
| main.rs:22:48:22:56 | precision | main.rs:19:9:19:17 | precision | local variable |
14-
| main.rs:23:21:23:22 | {} | main.rs:23:29:23:33 | value | format argument |
15-
| main.rs:23:24:23:25 | {} | main.rs:23:36:23:40 | width | format argument |
16-
| main.rs:23:29:23:33 | value | main.rs:20:9:20:13 | value | local variable |
17-
| main.rs:23:36:23:40 | width | main.rs:18:9:18:13 | width | local variable |
18-
| main.rs:25:22:25:27 | people | main.rs:24:9:24:14 | people | local variable |
19-
| main.rs:26:16:26:16 | 1 | main.rs:26:34:26:34 | 2 | format argument |
20-
| main.rs:26:19:26:20 | {} | main.rs:26:31:26:31 | 1 | format argument |
21-
| main.rs:26:23:26:23 | 0 | main.rs:26:31:26:31 | 1 | format argument |
22-
| main.rs:26:26:26:27 | {} | main.rs:26:34:26:34 | 2 | format argument |
23-
| main.rs:27:31:27:35 | {:<5} | main.rs:27:40:27:42 | "x" | format argument |
24-
| main.rs:28:13:28:13 | S | main.rs:1:1:1:9 | struct S | path |
25-
| main.rs:29:13:29:14 | M1 | main.rs:5:1:15:1 | mod M1 | path |
26-
| main.rs:29:17:29:18 | M2 | main.rs:6:5:14:5 | mod M2 | path |
27-
| main.rs:29:21:29:21 | S | main.rs:7:9:7:21 | struct S | path |
28-
| main.rs:30:5:30:5 | s | main.rs:29:9:29:9 | s | local variable |
29-
| main.rs:30:7:30:12 | method | main.rs:10:13:12:13 | fn method | method |
5+
| main.rs:16:22:16:22 | T | main.rs:16:19:16:19 | T | path |
6+
| main.rs:18:13:18:14 | S2 | main.rs:16:5:16:24 | struct S2 | path |
7+
| main.rs:18:16:18:16 | T | main.rs:18:10:18:10 | T | path |
8+
| main.rs:19:23:19:23 | T | main.rs:18:10:18:10 | T | path |
9+
| main.rs:19:29:19:32 | Self | main.rs:16:5:16:24 | struct S2 | path |
10+
| main.rs:20:16:20:16 | x | main.rs:19:20:19:20 | x | local variable |
11+
| main.rs:29:22:29:26 | value | main.rs:29:50:29:54 | value | format argument |
12+
| main.rs:29:29:29:33 | width | main.rs:26:9:26:13 | width | local variable |
13+
| main.rs:29:36:29:44 | precision | main.rs:27:9:27:17 | precision | local variable |
14+
| main.rs:30:22:30:22 | 0 | main.rs:30:34:30:38 | value | format argument |
15+
| main.rs:30:25:30:25 | 1 | main.rs:30:41:30:45 | width | format argument |
16+
| main.rs:30:28:30:28 | 2 | main.rs:30:48:30:56 | precision | format argument |
17+
| main.rs:30:34:30:38 | value | main.rs:28:9:28:13 | value | local variable |
18+
| main.rs:30:41:30:45 | width | main.rs:26:9:26:13 | width | local variable |
19+
| main.rs:30:48:30:56 | precision | main.rs:27:9:27:17 | precision | local variable |
20+
| main.rs:31:21:31:22 | {} | main.rs:31:29:31:33 | value | format argument |
21+
| main.rs:31:24:31:25 | {} | main.rs:31:36:31:40 | width | format argument |
22+
| main.rs:31:29:31:33 | value | main.rs:28:9:28:13 | value | local variable |
23+
| main.rs:31:36:31:40 | width | main.rs:26:9:26:13 | width | local variable |
24+
| main.rs:33:22:33:27 | people | main.rs:32:9:32:14 | people | local variable |
25+
| main.rs:34:16:34:16 | 1 | main.rs:34:34:34:34 | 2 | format argument |
26+
| main.rs:34:19:34:20 | {} | main.rs:34:31:34:31 | 1 | format argument |
27+
| main.rs:34:23:34:23 | 0 | main.rs:34:31:34:31 | 1 | format argument |
28+
| main.rs:34:26:34:27 | {} | main.rs:34:34:34:34 | 2 | format argument |
29+
| main.rs:35:31:35:35 | {:<5} | main.rs:35:40:35:42 | "x" | format argument |
30+
| main.rs:36:13:36:13 | S | main.rs:1:1:1:9 | struct S | path |
31+
| main.rs:37:13:37:14 | M1 | main.rs:5:1:23:1 | mod M1 | path |
32+
| main.rs:37:17:37:18 | M2 | main.rs:6:5:14:5 | mod M2 | path |
33+
| main.rs:37:21:37:21 | S | main.rs:7:9:7:21 | struct S | path |
34+
| main.rs:38:5:38:5 | s | main.rs:37:9:37:9 | s | local variable |
35+
| main.rs:38:7:38:12 | method | main.rs:10:13:12:13 | fn method | method |
36+
| main.rs:39:5:39:6 | M1 | main.rs:5:1:23:1 | mod M1 | path |
37+
| main.rs:39:9:39:10 | S2 | main.rs:16:5:16:24 | struct S2 | path |
38+
| main.rs:39:14:39:14 | S | main.rs:1:1:1:9 | struct S | path |
39+
| main.rs:39:18:39:20 | new | main.rs:19:9:21:9 | fn new | path |
40+
| main.rs:39:22:39:22 | S | main.rs:1:1:1:9 | struct S | path |

rust/ql/test/library-tests/definitions/main.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@ mod M1 {
1212
}
1313
}
1414
}
15+
16+
pub struct S2<T>(T);
17+
18+
impl<T> S2<T> {
19+
pub fn new(x: T) -> Self {
20+
S2(x)
21+
}
22+
}
1523
}
1624

1725
fn main() {
@@ -28,4 +36,5 @@ fn main() {
2836
let x = S;
2937
let s = M1::M2::S;
3038
s.method();
39+
M1::S2::<S>::new(S);
3140
}

0 commit comments

Comments
 (0)