Skip to content

Commit

Permalink
Rust: Accept expected changes and fix other CI complaints
Browse files Browse the repository at this point in the history
  • Loading branch information
paldepind committed Jan 3, 2025
1 parent cd957ba commit 321931b
Show file tree
Hide file tree
Showing 14 changed files with 158 additions and 0 deletions.
11 changes: 11 additions & 0 deletions rust/ql/lib/codeql/rust/controlflow/CfgNodes.qll
Original file line number Diff line number Diff line change
Expand Up @@ -186,10 +186,14 @@ final class CallExprCfgNode extends CallExprBaseCfgNode, Nodes::CallExprCfgNode
final class FormatArgsExprCfgNode extends Nodes::FormatArgsExprCfgNode {
private FormatArgsExprChildMapping node;

FormatArgsExprCfgNode() { node = this.getAstNode() }

/** Gets the `i`th argument of this format arguments expression (0-based). */
ExprCfgNode getArgumentExpr(int i) {
any(ChildMapping mapping).hasCfgChild(node, node.getArg(i).getExpr(), this, result)
}

/** Gets a format argument of the `i`th format of this format arguments expression (0-based). */
FormatTemplateVariableAccessCfgNode getFormatTemplateVariableAccess(int i) {
exists(FormatTemplateVariableAccess v |
v.getArgument() = node.getFormat(i).getArgument() and
Expand All @@ -199,11 +203,18 @@ final class FormatArgsExprCfgNode extends Nodes::FormatArgsExprCfgNode {
}
}

/**
* A MacroCall. For example:
* ```rust
* todo!()
* ```
*/
final class MacroCallCfgNode extends Nodes::MacroCallCfgNode {
private MacroCallChildMapping node;

MacroCallCfgNode() { node = this.getAstNode() }

/** Gets the CFG node for the expansion of this macro call, if it exists. */
CfgNode getExpandedNode() {
any(ChildMapping mapping).hasCfgChild(node, node.getExpanded(), this, result)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
| gen_format.rs:5:21:5:22 | {} | getParent: | gen_format.rs:5:14:5:32 | FormatArgsExpr | getIndex: | 1 | hasArgument: | no |
| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | getParent: | gen_format.rs:7:14:7:47 | FormatArgsExpr | getIndex: | 1 | hasArgument: | yes |
| gen_format_args_arg.rs:5:26:5:27 | {} | getParent: | gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | getIndex: | 1 | hasArgument: | no |
| gen_format_args_expr.rs:6:19:6:20 | {} | getParent: | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getIndex: | 1 | hasArgument: | no |
| gen_format_args_expr.rs:6:26:6:29 | {:?} | getParent: | gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getIndex: | 3 | hasArgument: | no |
| gen_format_args_expr.rs:7:19:7:21 | {b} | getParent: | gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | getIndex: | 1 | hasArgument: | yes |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
| gen_format.rs:5:26:5:32 | FormatArgsArg | hasExpr: | yes | hasName: | no |
| gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | hasExpr: | yes | hasName: | no |
| gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | hasExpr: | yes | hasName: | no |
| gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | hasExpr: | yes | hasName: | no |
| gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | hasExpr: | yes | hasName: | yes |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
| gen_format.rs:5:26:5:32 | FormatArgsArg | gen_format.rs:5:26:5:32 | "world" |
| gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg | gen_format_args_arg.rs:5:32:5:38 | "world" |
| gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg | gen_format_args_expr.rs:6:33:6:33 | 1 |
| gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg | gen_format_args_expr.rs:6:36:6:36 | 2 |
| gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg | gen_format_args_expr.rs:7:37:7:37 | 1 |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
| gen_format.rs:5:14:5:32 | FormatArgsExpr | getNumberOfArgs: | 1 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 |
| gen_format.rs:7:14:7:47 | FormatArgsExpr | getNumberOfArgs: | 0 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 |
| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | getNumberOfArgs: | 1 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 1 |
| gen_format_args_expr.rs:5:17:5:27 | FormatArgsExpr | getNumberOfArgs: | 0 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 0 |
| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | getNumberOfArgs: | 2 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 2 |
| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | getNumberOfArgs: | 2 | getNumberOfAttrs: | 0 | hasTemplate: | yes | getNumberOfFormats: | 2 |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
| gen_format.rs:5:14:5:32 | FormatArgsExpr | 0 | gen_format.rs:5:26:5:32 | FormatArgsArg |
| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | 0 | gen_format_args_arg.rs:5:32:5:38 | FormatArgsArg |
| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 0 | gen_format_args_expr.rs:6:33:6:33 | FormatArgsArg |
| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 1 | gen_format_args_expr.rs:6:36:6:36 | FormatArgsArg |
| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 0 | gen_format_args_expr.rs:7:35:7:37 | FormatArgsArg |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
| gen_format.rs:5:14:5:32 | FormatArgsExpr | 0 | gen_format.rs:5:21:5:22 | {} |
| gen_format.rs:7:14:7:47 | FormatArgsExpr | 0 | gen_format.rs:7:21:7:46 | {value:#width$.precision$} |
| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | 0 | gen_format_args_arg.rs:5:26:5:27 | {} |
| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 0 | gen_format_args_expr.rs:6:19:6:20 | {} |
| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | 1 | gen_format_args_expr.rs:6:26:6:29 | {:?} |
| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | 0 | gen_format_args_expr.rs:7:19:7:21 | {b} |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
| gen_format.rs:5:14:5:32 | FormatArgsExpr | gen_format.rs:5:14:5:23 | "Hello {}\\n" |
| gen_format.rs:7:14:7:47 | FormatArgsExpr | gen_format.rs:7:14:7:47 | "Value {value:#width$.precisio... |
| gen_format_args_arg.rs:5:17:5:39 | FormatArgsExpr | gen_format_args_arg.rs:5:18:5:29 | "Hello, {}!" |
| gen_format_args_expr.rs:5:17:5:27 | FormatArgsExpr | gen_format_args_expr.rs:5:18:5:26 | "no args" |
| gen_format_args_expr.rs:6:17:6:37 | FormatArgsExpr | gen_format_args_expr.rs:6:18:6:30 | "{} foo {:?}" |
| gen_format_args_expr.rs:7:17:7:43 | FormatArgsExpr | gen_format_args_expr.rs:7:18:7:32 | "{b} foo {a:?}" |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
| gen_format.rs:7:22:7:26 | value | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | hasVariable: | yes |
| gen_format.rs:7:29:7:33 | width | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | hasVariable: | yes |
| gen_format.rs:7:36:7:44 | precision | getParent: | gen_format.rs:7:21:7:46 | {value:#width$.precision$} | hasVariable: | yes |
| gen_format_args_expr.rs:7:20:7:20 | b | getParent: | gen_format_args_expr.rs:7:19:7:21 | {b} | hasVariable: | no |
| gen_format_args_expr.rs:7:28:7:28 | a | getParent: | gen_format_args_expr.rs:7:27:7:31 | {a:?} | hasVariable: | no |
| gen_format_args_expr.rs:9:20:9:20 | x | getParent: | gen_format_args_expr.rs:9:19:9:21 | {x} | hasVariable: | yes |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
| gen_format.rs:7:22:7:26 | value | gen_format.rs:7:22:7:26 | value |
| gen_format.rs:7:29:7:33 | width | gen_format.rs:7:29:7:33 | width |
| gen_format.rs:7:36:7:44 | precision | gen_format.rs:7:36:7:44 | precision |
| gen_format_args_expr.rs:9:20:9:20 | x | gen_format_args_expr.rs:9:20:9:20 | x |
| gen_format_args_expr.rs:9:25:9:25 | y | gen_format_args_expr.rs:9:25:9:25 | y |
| gen_format_argument.rs:5:22:5:26 | value | gen_format_argument.rs:5:22:5:26 | value |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
| gen_format.rs:7:22:7:26 | value |
| gen_format.rs:7:29:7:33 | width |
| gen_format.rs:7:36:7:44 | precision |
| gen_format_args_expr.rs:9:20:9:20 | x |
| gen_format_args_expr.rs:9:25:9:25 | y |
| gen_format_argument.rs:5:22:5:26 | value |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:22:7:26 | value |
| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:29:7:33 | width |
| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | gen_format.rs:7:36:7:44 | precision |
| gen_format_args_expr.rs:7:19:7:21 | {b} | gen_format_args_expr.rs:7:20:7:20 | b |
| gen_format_args_expr.rs:7:27:7:31 | {a:?} | gen_format_args_expr.rs:7:28:7:28 | a |
| gen_format_args_expr.rs:9:19:9:21 | {x} | gen_format_args_expr.rs:9:20:9:20 | x |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
edges
#select
122 changes: 122 additions & 0 deletions rust/ql/test/library-tests/dataflow/strings/DataFlowStep.expected
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
localStep
| main.rs:5:11:5:11 | [SSA] i | main.rs:6:19:6:19 | i |
| main.rs:5:11:5:11 | i | main.rs:5:11:5:11 | [SSA] i |
| main.rs:5:11:5:16 | ...: i64 | main.rs:5:11:5:11 | i |
| main.rs:6:5:6:20 | MacroExpr | main.rs:5:29:7:1 | { ... } |
| main.rs:6:5:6:20 | res | main.rs:6:13:6:19 | { ... } |
| main.rs:6:13:6:19 | ...::format(...) | main.rs:6:5:6:20 | res |
| main.rs:6:13:6:19 | FormatArgsExpr | main.rs:6:13:6:19 | MacroExpr |
| main.rs:6:13:6:19 | { ... } | main.rs:6:13:6:19 | ...::must_use(...) |
| main.rs:9:17:9:17 | [SSA] i | main.rs:10:5:10:5 | i |
| main.rs:9:17:9:17 | i | main.rs:9:17:9:17 | [SSA] i |
| main.rs:9:17:9:24 | ...: usize | main.rs:9:17:9:17 | i |
| main.rs:10:5:10:5 | i | main.rs:9:36:11:1 | { ... } |
| main.rs:13:17:13:23 | ...: i64 | main.rs:13:17:13:18 | _i |
| main.rs:14:5:14:12 | "source" | main.rs:13:42:15:1 | { ... } |
| main.rs:17:15:17:15 | [SSA] s | main.rs:18:20:18:20 | s |
| main.rs:17:15:17:15 | s | main.rs:17:15:17:15 | [SSA] s |
| main.rs:17:15:17:21 | ...: ... | main.rs:17:15:17:15 | s |
| main.rs:18:14:18:20 | FormatArgsExpr | main.rs:18:14:18:20 | MacroExpr |
| main.rs:21:9:21:9 | [SSA] s | main.rs:22:20:22:20 | s |
| main.rs:21:9:21:9 | s | main.rs:21:9:21:9 | [SSA] s |
| main.rs:21:9:21:17 | ...: String | main.rs:21:9:21:9 | s |
| main.rs:22:14:22:20 | FormatArgsExpr | main.rs:22:14:22:20 | MacroExpr |
| main.rs:26:9:26:9 | [SSA] s | main.rs:27:19:27:19 | s |
| main.rs:26:9:26:9 | s | main.rs:26:9:26:9 | [SSA] s |
| main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | s |
| main.rs:27:9:27:14 | [SSA] sliced | main.rs:28:16:28:21 | sliced |
| main.rs:27:9:27:14 | sliced | main.rs:27:9:27:14 | [SSA] sliced |
| main.rs:27:18:27:25 | &... | main.rs:27:9:27:14 | sliced |
| main.rs:32:9:32:10 | [SSA] s1 | main.rs:35:14:35:15 | s1 |
| main.rs:32:9:32:10 | s1 | main.rs:32:9:32:10 | [SSA] s1 |
| main.rs:32:14:32:23 | source(...) | main.rs:32:9:32:10 | s1 |
| main.rs:33:9:33:10 | [SSA] s2 | main.rs:36:14:36:15 | s2 |
| main.rs:33:9:33:10 | s2 | main.rs:33:9:33:10 | [SSA] s2 |
| main.rs:33:14:33:27 | "2".to_owned(...) | main.rs:33:9:33:10 | s2 |
| main.rs:34:9:34:10 | [SSA] s3 | main.rs:35:19:35:20 | s3 |
| main.rs:34:9:34:10 | s3 | main.rs:34:9:34:10 | [SSA] s3 |
| main.rs:34:14:34:16 | "3" | main.rs:34:9:34:10 | s3 |
| main.rs:35:9:35:10 | [SSA] s4 | main.rs:38:10:38:11 | s4 |
| main.rs:35:9:35:10 | s4 | main.rs:35:9:35:10 | [SSA] s4 |
| main.rs:35:14:35:20 | ... + ... | main.rs:35:9:35:10 | s4 |
| main.rs:35:19:35:20 | s3 | main.rs:36:19:36:20 | s3 |
| main.rs:36:9:36:10 | [SSA] s5 | main.rs:39:10:39:11 | s5 |
| main.rs:36:9:36:10 | s5 | main.rs:36:9:36:10 | [SSA] s5 |
| main.rs:36:14:36:20 | ... + ... | main.rs:36:9:36:10 | s5 |
| main.rs:43:9:43:10 | [SSA] s1 | main.rs:46:34:46:35 | s1 |
| main.rs:43:9:43:10 | s1 | main.rs:43:9:43:10 | [SSA] s1 |
| main.rs:43:14:43:23 | source(...) | main.rs:43:9:43:10 | s1 |
| main.rs:44:9:44:10 | [SSA] s2 | main.rs:47:34:47:35 | s2 |
| main.rs:44:9:44:10 | s2 | main.rs:44:9:44:10 | [SSA] s2 |
| main.rs:44:14:44:28 | "1".to_string(...) | main.rs:44:9:44:10 | s2 |
| main.rs:51:9:51:10 | [SSA] s1 | main.rs:52:27:52:28 | s1 |
| main.rs:51:9:51:10 | s1 | main.rs:51:9:51:10 | [SSA] s1 |
| main.rs:51:14:51:29 | source_slice(...) | main.rs:51:9:51:10 | s1 |
| main.rs:52:9:52:10 | [SSA] s2 | main.rs:53:10:53:11 | s2 |
| main.rs:52:9:52:10 | s2 | main.rs:52:9:52:10 | [SSA] s2 |
| main.rs:52:14:52:29 | ...::from(...) | main.rs:52:9:52:10 | s2 |
| main.rs:57:9:57:10 | [SSA] s1 | main.rs:58:14:58:15 | s1 |
| main.rs:57:9:57:10 | s1 | main.rs:57:9:57:10 | [SSA] s1 |
| main.rs:57:14:57:29 | source_slice(...) | main.rs:57:9:57:10 | s1 |
| main.rs:58:9:58:10 | [SSA] s2 | main.rs:59:10:59:11 | s2 |
| main.rs:58:9:58:10 | s2 | main.rs:58:9:58:10 | [SSA] s2 |
| main.rs:58:14:58:27 | s1.to_string(...) | main.rs:58:9:58:10 | s2 |
| main.rs:63:9:63:9 | [SSA] s | main.rs:64:16:64:16 | s |
| main.rs:63:9:63:9 | s | main.rs:63:9:63:9 | [SSA] s |
| main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s |
| main.rs:68:9:68:9 | [SSA] s | main.rs:70:60:70:60 | s |
| main.rs:68:9:68:9 | s | main.rs:68:9:68:9 | [SSA] s |
| main.rs:68:13:68:22 | source(...) | main.rs:68:9:68:9 | s |
| main.rs:70:9:70:18 | [SSA] formatted1 | main.rs:71:10:71:19 | formatted1 |
| main.rs:70:9:70:18 | formatted1 | main.rs:70:9:70:18 | [SSA] formatted1 |
| main.rs:70:22:70:62 | ...::format(...) | main.rs:70:9:70:18 | formatted1 |
| main.rs:70:46:70:61 | FormatArgsExpr | main.rs:70:34:70:61 | MacroExpr |
| main.rs:70:60:70:60 | s | main.rs:73:55:73:55 | s |
| main.rs:73:9:73:18 | [SSA] formatted2 | main.rs:74:10:74:19 | formatted2 |
| main.rs:73:9:73:18 | formatted2 | main.rs:73:9:73:18 | [SSA] formatted2 |
| main.rs:73:22:73:60 | ...::format(...) | main.rs:73:9:73:18 | formatted2 |
| main.rs:73:46:73:59 | FormatArgsExpr | main.rs:73:34:73:59 | MacroExpr |
| main.rs:76:9:76:13 | [SSA] width | main.rs:77:56:77:60 | width |
| main.rs:76:9:76:13 | width | main.rs:76:9:76:13 | [SSA] width |
| main.rs:76:17:76:32 | source_usize(...) | main.rs:76:9:76:13 | width |
| main.rs:77:9:77:18 | [SSA] formatted3 | main.rs:78:10:78:19 | formatted3 |
| main.rs:77:9:77:18 | formatted3 | main.rs:77:9:77:18 | [SSA] formatted3 |
| main.rs:77:22:77:75 | ...::format(...) | main.rs:77:9:77:18 | formatted3 |
| main.rs:77:46:77:74 | FormatArgsExpr | main.rs:77:34:77:74 | MacroExpr |
| main.rs:82:9:82:10 | [SSA] s1 | main.rs:86:24:86:25 | s1 |
| main.rs:82:9:82:10 | s1 | main.rs:82:9:82:10 | [SSA] s1 |
| main.rs:82:14:82:23 | source(...) | main.rs:82:9:82:10 | s1 |
| main.rs:83:9:83:10 | [SSA] s2 | main.rs:88:20:88:21 | s2 |
| main.rs:83:9:83:10 | s2 | main.rs:83:9:83:10 | [SSA] s2 |
| main.rs:83:14:83:16 | "2" | main.rs:83:9:83:10 | s2 |
| main.rs:84:9:84:10 | [SSA] s3 | main.rs:87:29:87:30 | s3 |
| main.rs:84:9:84:10 | s3 | main.rs:84:9:84:10 | [SSA] s3 |
| main.rs:84:14:84:16 | "3" | main.rs:84:9:84:10 | s3 |
| main.rs:86:10:86:26 | res | main.rs:86:18:86:25 | { ... } |
| main.rs:86:18:86:25 | ...::format(...) | main.rs:86:10:86:26 | res |
| main.rs:86:18:86:25 | ...::must_use(...) | main.rs:86:10:86:26 | MacroExpr |
| main.rs:86:18:86:25 | FormatArgsExpr | main.rs:86:18:86:25 | MacroExpr |
| main.rs:86:18:86:25 | { ... } | main.rs:86:18:86:25 | ...::must_use(...) |
| main.rs:86:24:86:25 | s1 | main.rs:87:20:87:21 | s1 |
| main.rs:87:10:87:33 | res | main.rs:87:18:87:32 | { ... } |
| main.rs:87:18:87:32 | ...::format(...) | main.rs:87:10:87:33 | res |
| main.rs:87:18:87:32 | ...::must_use(...) | main.rs:87:10:87:33 | MacroExpr |
| main.rs:87:18:87:32 | FormatArgsExpr | main.rs:87:18:87:32 | MacroExpr |
| main.rs:87:18:87:32 | { ... } | main.rs:87:18:87:32 | ...::must_use(...) |
| main.rs:87:29:87:30 | s3 | main.rs:88:29:88:30 | s3 |
| main.rs:88:10:88:33 | res | main.rs:88:18:88:32 | { ... } |
| main.rs:88:18:88:32 | ...::format(...) | main.rs:88:10:88:33 | res |
| main.rs:88:18:88:32 | ...::must_use(...) | main.rs:88:10:88:33 | MacroExpr |
| main.rs:88:18:88:32 | FormatArgsExpr | main.rs:88:18:88:32 | MacroExpr |
| main.rs:88:18:88:32 | { ... } | main.rs:88:18:88:32 | ...::must_use(...) |
storeStep
| file://:0:0:0:0 | [summary] to write: ReturnValue.Variant[crate::result::Result::Ok(0)] in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text | Ok | file://:0:0:0:0 | [summary] to write: ReturnValue in repo:https://github.com/seanmonstar/reqwest:reqwest::_::<crate::blocking::response::Response>::text |
| main.rs:27:19:27:25 | s[...] | &ref | main.rs:27:18:27:25 | &... |
| main.rs:46:34:46:35 | s1 | &ref | main.rs:46:33:46:35 | &s1 |
| main.rs:47:34:47:35 | s2 | &ref | main.rs:47:33:47:35 | &s2 |
readStep
| file://:0:0:0:0 | [summary param] self in lang:core::_::<crate::option::Option>::unwrap | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::<crate::option::Option>::unwrap |
| file://:0:0:0:0 | [summary param] self in lang:core::_::<crate::option::Option>::unwrap_or | Some | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::option::Option::Some(0)] in lang:core::_::<crate::option::Option>::unwrap_or |
| file://:0:0:0:0 | [summary param] self in lang:core::_::<crate::result::Result>::unwrap | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::<crate::result::Result>::unwrap |
| file://:0:0:0:0 | [summary param] self in lang:core::_::<crate::result::Result>::unwrap_or | Ok | file://:0:0:0:0 | [summary] read: Argument[self].Variant[crate::result::Result::Ok(0)] in lang:core::_::<crate::result::Result>::unwrap_or |
| main.rs:27:19:27:19 | s | array[] | main.rs:27:19:27:25 | s[...] |

0 comments on commit 321931b

Please sign in to comment.