Skip to content

Commit 94f0710

Browse files
authored
Merge pull request github#18741 from paldepind/rust-identity-pattern-to-string
Rust: Tweak `toString` on identity pattern
2 parents 2a8cc00 + a09b37e commit 94f0710

File tree

12 files changed

+743
-598
lines changed

12 files changed

+743
-598
lines changed

rust/ql/lib/codeql/rust/elements/internal/IdentPatImpl.qll

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,18 @@ module Impl {
2828
* ```
2929
*/
3030
class IdentPat extends Generated::IdentPat {
31-
override string toString() { result = this.getName().getText() }
31+
override string toString() {
32+
result = strictconcat(int i | | this.toStringPart(i), " " order by i)
33+
}
34+
35+
private string toStringPart(int index) {
36+
index = 0 and this.isRef() and result = "ref"
37+
or
38+
index = 1 and this.isMut() and result = "mut"
39+
or
40+
index = 2 and result = this.getName().getText()
41+
or
42+
index = 3 and this.hasPat() and result = "@ ..."
43+
}
3244
}
3345
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
| gen_ident_pat.rs:6:22:6:22 | y | getNumberOfAttrs: | 0 | isMut: | no | isRef: | no | hasName: | yes | hasPat: | no |
2-
| gen_ident_pat.rs:10:9:10:25 | y | getNumberOfAttrs: | 0 | isMut: | no | isRef: | no | hasName: | yes | hasPat: | yes |
2+
| gen_ident_pat.rs:10:9:10:25 | y @ ... | getNumberOfAttrs: | 0 | isMut: | no | isRef: | no | hasName: | yes | hasPat: | yes |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
| gen_ident_pat.rs:6:22:6:22 | y | gen_ident_pat.rs:6:22:6:22 | y |
2-
| gen_ident_pat.rs:10:9:10:25 | y | gen_ident_pat.rs:10:9:10:9 | y |
2+
| gen_ident_pat.rs:10:9:10:25 | y @ ... | gen_ident_pat.rs:10:9:10:9 | y |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
| gen_ident_pat.rs:10:9:10:25 | y | gen_ident_pat.rs:10:11:10:25 | ...::Some(...) |
1+
| gen_ident_pat.rs:10:9:10:25 | y @ ... | gen_ident_pat.rs:10:11:10:25 | ...::Some(...) |

rust/ql/test/library-tests/controlflow/BasicBlocks.expected

Lines changed: 246 additions & 176 deletions
Large diffs are not rendered by default.

rust/ql/test/library-tests/controlflow/Cfg.expected

Lines changed: 336 additions & 289 deletions
Large diffs are not rendered by default.

rust/ql/test/library-tests/controlflow/test.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,22 @@ mod patterns {
396396
_ => 4,
397397
}
398398
}
399+
400+
fn identifier_pattern_with_subpattern() -> i64 {
401+
match 43 {
402+
n @ 1..10 => 2 * n,
403+
_ => 0,
404+
}
405+
}
406+
407+
fn identifier_pattern_with_ref() -> i64 {
408+
let mut a = 10;
409+
match a {
410+
ref mut n @ 1..10 => *n += 10,
411+
ref mut n => *n = 0,
412+
};
413+
a
414+
}
399415
}
400416

401417
mod divergence {

rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ localStep
7272
| main.rs:44:13:46:5 | loop { ... } | main.rs:44:9:44:9 | b | |
7373
| main.rs:45:9:45:23 | break ... | main.rs:44:13:46:5 | loop { ... } | |
7474
| main.rs:45:15:45:23 | source(...) | main.rs:45:9:45:23 | break ... | |
75-
| main.rs:51:9:51:13 | [SSA] i | main.rs:52:10:52:10 | i | |
76-
| main.rs:51:9:51:13 | i | main.rs:51:9:51:13 | [SSA] i | |
77-
| main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | i | |
75+
| main.rs:51:9:51:13 | [SSA] mut i | main.rs:52:10:52:10 | i | |
76+
| main.rs:51:9:51:13 | mut i | main.rs:51:9:51:13 | [SSA] mut i | |
77+
| main.rs:51:17:51:17 | 1 | main.rs:51:9:51:13 | mut i | |
7878
| main.rs:53:5:53:5 | [SSA] i | main.rs:54:10:54:10 | i | |
7979
| main.rs:53:5:53:5 | i | main.rs:53:5:53:5 | [SSA] i | |
8080
| main.rs:53:9:53:17 | source(...) | main.rs:53:5:53:5 | i | |
@@ -122,9 +122,9 @@ localStep
122122
| main.rs:101:18:101:19 | [SSA] a2 | main.rs:104:10:104:11 | a2 | |
123123
| main.rs:101:18:101:19 | a2 | main.rs:101:18:101:19 | [SSA] a2 | |
124124
| main.rs:101:24:101:24 | a | main.rs:101:9:101:20 | TuplePat | |
125-
| main.rs:108:9:108:13 | [SSA] a | main.rs:109:10:109:10 | a | |
126-
| main.rs:108:9:108:13 | a | main.rs:108:9:108:13 | [SSA] a | |
127-
| main.rs:108:17:108:31 | TupleExpr | main.rs:108:9:108:13 | a | |
125+
| main.rs:108:9:108:13 | [SSA] mut a | main.rs:109:10:109:10 | a | |
126+
| main.rs:108:9:108:13 | mut a | main.rs:108:9:108:13 | [SSA] mut a | |
127+
| main.rs:108:17:108:31 | TupleExpr | main.rs:108:9:108:13 | mut a | |
128128
| main.rs:109:10:109:10 | [post] a | main.rs:110:10:110:10 | a | |
129129
| main.rs:109:10:109:10 | a | main.rs:110:10:110:10 | a | |
130130
| main.rs:110:10:110:10 | [post] a | main.rs:111:5:111:5 | a | |
@@ -152,9 +152,9 @@ localStep
152152
| main.rs:134:13:134:40 | Point {...} | main.rs:134:9:134:9 | p | |
153153
| main.rs:135:10:135:10 | [post] p | main.rs:136:10:136:10 | p | |
154154
| main.rs:135:10:135:10 | p | main.rs:136:10:136:10 | p | |
155-
| main.rs:140:9:140:13 | [SSA] p | main.rs:141:10:141:10 | p | |
156-
| main.rs:140:9:140:13 | p | main.rs:140:9:140:13 | [SSA] p | |
157-
| main.rs:140:17:140:44 | Point {...} | main.rs:140:9:140:13 | p | |
155+
| main.rs:140:9:140:13 | [SSA] mut p | main.rs:141:10:141:10 | p | |
156+
| main.rs:140:9:140:13 | mut p | main.rs:140:9:140:13 | [SSA] mut p | |
157+
| main.rs:140:17:140:44 | Point {...} | main.rs:140:9:140:13 | mut p | |
158158
| main.rs:141:10:141:10 | [post] p | main.rs:142:5:142:5 | p | |
159159
| main.rs:141:10:141:10 | p | main.rs:142:5:142:5 | p | |
160160
| main.rs:142:5:142:5 | [post] p | main.rs:143:10:143:10 | p | |
@@ -477,9 +477,9 @@ localStep
477477
| main.rs:403:16:403:16 | [SSA] c | main.rs:406:18:406:18 | c | |
478478
| main.rs:403:16:403:16 | c | main.rs:403:16:403:16 | [SSA] c | |
479479
| main.rs:403:22:407:9 | { ... } | main.rs:402:5:408:5 | match arr1 { ... } | |
480-
| main.rs:412:9:412:19 | [SSA] mut_arr | main.rs:413:10:413:16 | mut_arr | |
481-
| main.rs:412:9:412:19 | mut_arr | main.rs:412:9:412:19 | [SSA] mut_arr | |
482-
| main.rs:412:23:412:31 | [...] | main.rs:412:9:412:19 | mut_arr | |
480+
| main.rs:412:9:412:19 | [SSA] mut mut_arr | main.rs:413:10:413:16 | mut_arr | |
481+
| main.rs:412:9:412:19 | mut mut_arr | main.rs:412:9:412:19 | [SSA] mut mut_arr | |
482+
| main.rs:412:23:412:31 | [...] | main.rs:412:9:412:19 | mut mut_arr | |
483483
| main.rs:413:10:413:16 | [post] mut_arr | main.rs:415:5:415:11 | mut_arr | |
484484
| main.rs:413:10:413:16 | mut_arr | main.rs:415:5:415:11 | mut_arr | |
485485
| main.rs:415:5:415:11 | [post] mut_arr | main.rs:416:13:416:19 | mut_arr | |

rust/ql/test/library-tests/dataflow/local/inline-flow.expected

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ edges
2828
| main.rs:100:17:100:26 | source(...) | main.rs:100:13:100:30 | TupleExpr [tuple.1] | provenance | |
2929
| main.rs:101:9:101:20 | TuplePat [tuple.1] | main.rs:101:14:101:15 | a1 | provenance | |
3030
| main.rs:101:14:101:15 | a1 | main.rs:103:10:103:11 | a1 | provenance | |
31-
| main.rs:108:9:108:13 | a [tuple.1] | main.rs:110:10:110:10 | a [tuple.1] | provenance | |
32-
| main.rs:108:17:108:31 | TupleExpr [tuple.1] | main.rs:108:9:108:13 | a [tuple.1] | provenance | |
31+
| main.rs:108:9:108:13 | mut a [tuple.1] | main.rs:110:10:110:10 | a [tuple.1] | provenance | |
32+
| main.rs:108:17:108:31 | TupleExpr [tuple.1] | main.rs:108:9:108:13 | mut a [tuple.1] | provenance | |
3333
| main.rs:108:21:108:30 | source(...) | main.rs:108:17:108:31 | TupleExpr [tuple.1] | provenance | |
3434
| main.rs:110:10:110:10 | a [tuple.1] | main.rs:110:10:110:12 | a.1 | provenance | |
3535
| main.rs:111:5:111:5 | [post] a [tuple.0] | main.rs:112:5:112:5 | a [tuple.0] | provenance | |
@@ -217,7 +217,7 @@ nodes
217217
| main.rs:101:9:101:20 | TuplePat [tuple.1] | semmle.label | TuplePat [tuple.1] |
218218
| main.rs:101:14:101:15 | a1 | semmle.label | a1 |
219219
| main.rs:103:10:103:11 | a1 | semmle.label | a1 |
220-
| main.rs:108:9:108:13 | a [tuple.1] | semmle.label | a [tuple.1] |
220+
| main.rs:108:9:108:13 | mut a [tuple.1] | semmle.label | mut a [tuple.1] |
221221
| main.rs:108:17:108:31 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] |
222222
| main.rs:108:21:108:30 | source(...) | semmle.label | source(...) |
223223
| main.rs:110:10:110:10 | a [tuple.1] | semmle.label | a [tuple.1] |

0 commit comments

Comments
 (0)