Skip to content

Commit 04d37c3

Browse files
authored
Merge pull request #19198 from paldepind/rust-ti-inline-expectations
Rust: Add inline expectations test for type inference
2 parents 5f290eb + e6c7ad8 commit 04d37c3

File tree

26 files changed

+1276
-1246
lines changed

26 files changed

+1276
-1246
lines changed

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

+43
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
* INTERNAL: Do not use.
55
*/
66

7+
private import codeql.files.FileSystem
78
private import codeql.rust.elements.internal.generated.Function
9+
private import codeql.rust.elements.Comment
810

911
/**
1012
* INTERNAL: This module contains the customizable definition of `Function` and should not
@@ -26,5 +28,46 @@ module Impl {
2628
*/
2729
class Function extends Generated::Function {
2830
override string toStringImpl() { result = "fn " + this.getName().getText() }
31+
32+
pragma[nomagic]
33+
private predicate hasPotentialCommentAt(File f, int line) {
34+
f = this.getLocation().getFile() and
35+
// When a function is preceded by comments its start line is the line of
36+
// the first comment. Hence all relevant comments are found by including
37+
// comments from the start line and up to the line with the function
38+
// name.
39+
line in [this.getLocation().getStartLine() .. this.getName().getLocation().getStartLine()]
40+
}
41+
42+
/**
43+
* Gets a comment preceding this function.
44+
*
45+
* A comment is considered preceding if it occurs immediately before this
46+
* function or if only other comments occur between the comment and this
47+
* function.
48+
*/
49+
Comment getAPrecedingComment() {
50+
exists(File f, int line |
51+
this.hasPotentialCommentAt(f, line) and
52+
result.getLocation().hasLocationFileInfo(f, line, _, _, _)
53+
)
54+
}
55+
56+
/**
57+
* Gets a comment preceding this function.
58+
*
59+
* A comment is considered preceding if it occurs immediately before this
60+
* function or if only other comments occur between the comment and this
61+
* function.
62+
*/
63+
Comment getPrecedingComment() {
64+
result.getLocation().getFile() = this.getLocation().getFile() and
65+
// When a function is preceded by comments its start line is the line of
66+
// the first comment. Hence all relevant comments are found by including
67+
// comments from the start line and up to the line with the function
68+
// name.
69+
this.getLocation().getStartLine() <= result.getLocation().getStartLine() and
70+
result.getLocation().getStartLine() <= this.getName().getLocation().getStartLine()
71+
}
2972
}
3073
}

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

+15-5
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,22 @@ module Impl {
4242
)
4343
}
4444

45+
private string toStringPart(int index) {
46+
index = 0 and
47+
result = this.getReceiver().toAbbreviatedString()
48+
or
49+
index = 1 and
50+
(if this.getReceiver().toAbbreviatedString() = "..." then result = " ." else result = ".")
51+
or
52+
index = 2 and
53+
result = this.getIdentifier().toStringImpl()
54+
or
55+
index = 3 and
56+
if this.getArgList().getNumberOfArgs() = 0 then result = "()" else result = "(...)"
57+
}
58+
4559
override string toStringImpl() {
46-
exists(string base, string separator |
47-
base = this.getReceiver().toAbbreviatedString() and
48-
(if base = "..." then separator = " ." else separator = ".") and
49-
result = base + separator + this.getIdentifier().toStringImpl() + "(...)"
50-
)
60+
result = strictconcat(int i | | this.toStringPart(i) order by i)
5161
}
5262
}
5363
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ class StructType extends StructOrEnumType, TStruct {
104104
result = TTypeParamTypeParameter(struct.getGenericParamList().getTypeParam(i))
105105
}
106106

107-
override string toString() { result = struct.toString() }
107+
override string toString() { result = struct.getName().getText() }
108108

109109
override Location getLocation() { result = struct.getLocation() }
110110
}
@@ -125,7 +125,7 @@ class EnumType extends StructOrEnumType, TEnum {
125125
result = TTypeParamTypeParameter(enum.getGenericParamList().getTypeParam(i))
126126
}
127127

128-
override string toString() { result = enum.toString() }
128+
override string toString() { result = enum.getName().getText() }
129129

130130
override Location getLocation() { result = enum.getLocation() }
131131
}

rust/ql/lib/utils/test/InlineMadTest.qll

+1-10
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,7 @@ private module InlineMadTestLang implements InlineMadTestLangSig {
55
class Callable = R::Function;
66

77
string getComment(R::Function callable) {
8-
exists(R::Comment comment |
9-
result = comment.getCommentText() and
10-
comment.getLocation().getFile() = callable.getLocation().getFile() and
11-
// When a function is preceded by comments its start line is the line of
12-
// the first comment. Hence all relevant comments are found by including
13-
// comments from the start line and up to the line with the function
14-
// name.
15-
callable.getLocation().getStartLine() <= comment.getLocation().getStartLine() and
16-
comment.getLocation().getStartLine() <= callable.getName().getLocation().getStartLine()
17-
)
8+
result = callable.getAPrecedingComment().getCommentText()
189
}
1910
}
2011

Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
multipleStaticCallTargets
2-
| regular.rs:29:5:29:9 | s.g(...) | anonymous.rs:15:9:15:22 | fn g |
3-
| regular.rs:29:5:29:9 | s.g(...) | regular.rs:13:5:13:18 | fn g |
2+
| regular.rs:29:5:29:9 | s.g() | anonymous.rs:15:9:15:22 | fn g |
3+
| regular.rs:29:5:29:9 | s.g() | regular.rs:13:5:13:18 | fn g |

rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected

+5-5
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ canonicalPaths
3838
resolvedPaths
3939
| anonymous.rs:27:17:27:30 | OtherStruct {...} | None | None |
4040
| anonymous.rs:28:9:28:9 | s | None | None |
41-
| anonymous.rs:28:9:28:13 | s.f(...) | None | None |
41+
| anonymous.rs:28:9:28:13 | s.f() | None | None |
4242
| anonymous.rs:29:9:29:9 | s | None | None |
43-
| anonymous.rs:29:9:29:13 | s.g(...) | None | None |
43+
| anonymous.rs:29:9:29:13 | s.g() | None | None |
4444
| anonymous.rs:30:9:30:14 | nested | None | None |
4545
| regular.rs:27:13:27:21 | Struct {...} | repo::test | crate::regular::Struct |
4646
| regular.rs:28:5:28:5 | s | None | None |
47-
| regular.rs:28:5:28:9 | s.f(...) | repo::test | <crate::regular::Struct as crate::regular::Trait>::f |
47+
| regular.rs:28:5:28:9 | s.f() | repo::test | <crate::regular::Struct as crate::regular::Trait>::f |
4848
| regular.rs:29:5:29:5 | s | None | None |
49-
| regular.rs:29:5:29:9 | s.g(...) | repo::test | <crate::regular::Struct>::g |
49+
| regular.rs:29:5:29:9 | s.g() | repo::test | <crate::regular::Struct>::g |
5050
| regular.rs:30:5:30:5 | s | None | None |
51-
| regular.rs:30:5:30:9 | s.h(...) | repo::test | <_ as crate::regular::TraitWithBlanketImpl>::h |
51+
| regular.rs:30:5:30:9 | s.h() | repo::test | <_ as crate::regular::TraitWithBlanketImpl>::h |
5252
| regular.rs:31:5:31:8 | free | repo::test | crate::regular::free |
5353
| regular.rs:41:9:41:26 | ...::None::<...> | lang:core | crate::option::Option::None |
5454
| regular.rs:42:9:42:20 | ...::Some | lang:core | crate::option::Option::Some |
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
multipleStaticCallTargets
2-
| regular.rs:32:5:32:9 | s.g(...) | anonymous.rs:18:9:18:22 | fn g |
3-
| regular.rs:32:5:32:9 | s.g(...) | regular.rs:16:5:16:18 | fn g |
2+
| regular.rs:32:5:32:9 | s.g() | anonymous.rs:18:9:18:22 | fn g |
3+
| regular.rs:32:5:32:9 | s.g() | regular.rs:16:5:16:18 | fn g |

rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected

+5-5
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ canonicalPaths
3838
resolvedPaths
3939
| anonymous.rs:30:17:30:30 | OtherStruct {...} | None | None |
4040
| anonymous.rs:31:9:31:9 | s | None | None |
41-
| anonymous.rs:31:9:31:13 | s.f(...) | None | None |
41+
| anonymous.rs:31:9:31:13 | s.f() | None | None |
4242
| anonymous.rs:32:9:32:9 | s | None | None |
43-
| anonymous.rs:32:9:32:13 | s.g(...) | None | None |
43+
| anonymous.rs:32:9:32:13 | s.g() | None | None |
4444
| anonymous.rs:33:9:33:14 | nested | None | None |
4545
| regular.rs:30:13:30:21 | Struct {...} | None | None |
4646
| regular.rs:31:5:31:5 | s | None | None |
47-
| regular.rs:31:5:31:9 | s.f(...) | None | None |
47+
| regular.rs:31:5:31:9 | s.f() | None | None |
4848
| regular.rs:32:5:32:5 | s | None | None |
49-
| regular.rs:32:5:32:9 | s.g(...) | None | None |
49+
| regular.rs:32:5:32:9 | s.g() | None | None |
5050
| regular.rs:33:5:33:5 | s | None | None |
51-
| regular.rs:33:5:33:9 | s.h(...) | None | None |
51+
| regular.rs:33:5:33:9 | s.h() | None | None |
5252
| regular.rs:34:5:34:8 | free | None | None |
5353
| regular.rs:44:9:44:26 | ...::None::<...> | None | None |
5454
| regular.rs:45:9:45:20 | ...::Some | None | None |

rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
noLocation
2-
| file://:0:0:0:0 | ... .unwrap(...) |
2+
| file://:0:0:0:0 | ... .unwrap() |
33
| file://:0:0:0:0 | ...: ... |
44
| file://:0:0:0:0 | ...::Path |
55
| file://:0:0:0:0 | ...::Path |
@@ -32,7 +32,7 @@ noLocation
3232
| file://:0:0:0:0 | path |
3333
| file://:0:0:0:0 | path |
3434
| file://:0:0:0:0 | path |
35-
| file://:0:0:0:0 | path.parent(...) |
35+
| file://:0:0:0:0 | path.parent() |
3636
| file://:0:0:0:0 | std |
3737
| file://:0:0:0:0 | std |
3838
| file://:0:0:0:0 | std |

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ edges
205205
| test.rs:99:19:99:25 | Some(...) | test.rs:99:24:99:24 | x | match |
206206
| test.rs:99:24:99:24 | x | test.rs:99:24:99:24 | x | |
207207
| test.rs:99:24:99:24 | x | test.rs:100:17:100:17 | x | match |
208-
| test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | iter.next(...) | |
209-
| test.rs:99:29:99:39 | iter.next(...) | test.rs:99:19:99:25 | Some(...) | |
208+
| test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | iter.next() | |
209+
| test.rs:99:29:99:39 | iter.next() | test.rs:99:19:99:25 | Some(...) | |
210210
| test.rs:99:41:103:9 | { ... } | test.rs:99:15:99:39 | let ... = ... | |
211211
| test.rs:100:13:102:13 | if ... {...} | test.rs:99:41:103:9 | { ... } | |
212212
| test.rs:100:17:100:17 | x | test.rs:100:22:100:22 | 5 | |
@@ -760,8 +760,8 @@ edges
760760
| test.rs:311:87:313:5 | { ... } | test.rs:311:5:313:5 | exit fn test_question_mark_operator_1 (normal) | |
761761
| test.rs:312:9:312:10 | Ok | test.rs:312:12:312:12 | s | |
762762
| test.rs:312:9:312:33 | Ok(...) | test.rs:311:87:313:5 | { ... } | |
763-
| test.rs:312:12:312:12 | s | test.rs:312:12:312:27 | s.parse(...) | |
764-
| test.rs:312:12:312:27 | s.parse(...) | test.rs:312:12:312:28 | TryExpr | |
763+
| test.rs:312:12:312:12 | s | test.rs:312:12:312:27 | s.parse() | |
764+
| test.rs:312:12:312:27 | s.parse() | test.rs:312:12:312:28 | TryExpr | |
765765
| test.rs:312:12:312:28 | TryExpr | test.rs:311:5:313:5 | exit fn test_question_mark_operator_1 (normal) | return |
766766
| test.rs:312:12:312:28 | TryExpr | test.rs:312:32:312:32 | 4 | match |
767767
| test.rs:312:12:312:32 | ... + ... | test.rs:312:9:312:33 | Ok(...) | |

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

+11-11
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ edges
1717
| main.rs:38:23:38:31 | source(...) | main.rs:26:28:26:33 | ...: i64 | provenance | |
1818
| main.rs:38:23:38:31 | source(...) | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] | provenance | |
1919
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | provenance | |
20-
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:39:10:39:21 | a.get_data(...) | provenance | |
20+
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:39:10:39:21 | a.get_data() | provenance | |
2121
| main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | main.rs:44:17:44:17 | [post] a [MyStruct] | provenance | |
2222
| main.rs:44:17:44:17 | [post] a [MyStruct] | main.rs:45:10:45:10 | a [MyStruct] | provenance | |
2323
| main.rs:44:30:44:38 | source(...) | main.rs:26:28:26:33 | ...: i64 | provenance | |
2424
| main.rs:44:30:44:38 | source(...) | main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | provenance | |
2525
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | provenance | |
26-
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:45:10:45:21 | a.get_data(...) | provenance | |
26+
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:45:10:45:21 | a.get_data() | provenance | |
2727
| main.rs:48:12:48:17 | ...: i64 | main.rs:49:10:49:10 | n | provenance | |
2828
| main.rs:53:9:53:9 | a | main.rs:54:13:54:13 | a | provenance | |
2929
| main.rs:53:13:53:21 | source(...) | main.rs:53:9:53:9 | a | provenance | |
@@ -48,11 +48,11 @@ edges
4848
| main.rs:82:26:82:26 | a | main.rs:78:21:78:26 | ...: i64 | provenance | |
4949
| main.rs:82:26:82:26 | a | main.rs:82:13:82:27 | pass_through(...) | provenance | |
5050
| main.rs:94:22:94:27 | ...: i64 | main.rs:95:14:95:14 | n | provenance | |
51-
| main.rs:98:30:104:5 | { ... } | main.rs:117:13:117:25 | mn.get_data(...) | provenance | |
51+
| main.rs:98:30:104:5 | { ... } | main.rs:117:13:117:25 | mn.get_data() | provenance | |
5252
| main.rs:102:13:102:21 | source(...) | main.rs:98:30:104:5 | { ... } | provenance | |
5353
| main.rs:106:27:106:32 | ...: i64 | main.rs:106:42:112:5 | { ... } | provenance | |
5454
| main.rs:117:9:117:9 | a | main.rs:118:10:118:10 | a | provenance | |
55-
| main.rs:117:13:117:25 | mn.get_data(...) | main.rs:117:9:117:9 | a | provenance | |
55+
| main.rs:117:13:117:25 | mn.get_data() | main.rs:117:9:117:9 | a | provenance | |
5656
| main.rs:123:9:123:9 | a | main.rs:124:16:124:16 | a | provenance | |
5757
| main.rs:123:13:123:21 | source(...) | main.rs:123:9:123:9 | a | provenance | |
5858
| main.rs:124:16:124:16 | a | main.rs:94:22:94:27 | ...: i64 | provenance | |
@@ -115,12 +115,12 @@ nodes
115115
| main.rs:38:11:38:11 | [post] a [MyStruct] | semmle.label | [post] a [MyStruct] |
116116
| main.rs:38:23:38:31 | source(...) | semmle.label | source(...) |
117117
| main.rs:39:10:39:10 | a [MyStruct] | semmle.label | a [MyStruct] |
118-
| main.rs:39:10:39:21 | a.get_data(...) | semmle.label | a.get_data(...) |
118+
| main.rs:39:10:39:21 | a.get_data() | semmle.label | a.get_data() |
119119
| main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | semmle.label | [post] &mut a [&ref, MyStruct] |
120120
| main.rs:44:17:44:17 | [post] a [MyStruct] | semmle.label | [post] a [MyStruct] |
121121
| main.rs:44:30:44:38 | source(...) | semmle.label | source(...) |
122122
| main.rs:45:10:45:10 | a [MyStruct] | semmle.label | a [MyStruct] |
123-
| main.rs:45:10:45:21 | a.get_data(...) | semmle.label | a.get_data(...) |
123+
| main.rs:45:10:45:21 | a.get_data() | semmle.label | a.get_data() |
124124
| main.rs:48:12:48:17 | ...: i64 | semmle.label | ...: i64 |
125125
| main.rs:49:10:49:10 | n | semmle.label | n |
126126
| main.rs:53:9:53:9 | a | semmle.label | a |
@@ -154,7 +154,7 @@ nodes
154154
| main.rs:106:27:106:32 | ...: i64 | semmle.label | ...: i64 |
155155
| main.rs:106:42:112:5 | { ... } | semmle.label | { ... } |
156156
| main.rs:117:9:117:9 | a | semmle.label | a |
157-
| main.rs:117:13:117:25 | mn.get_data(...) | semmle.label | mn.get_data(...) |
157+
| main.rs:117:13:117:25 | mn.get_data() | semmle.label | mn.get_data() |
158158
| main.rs:118:10:118:10 | a | semmle.label | a |
159159
| main.rs:123:9:123:9 | a | semmle.label | a |
160160
| main.rs:123:13:123:21 | source(...) | semmle.label | source(...) |
@@ -204,9 +204,9 @@ nodes
204204
| main.rs:239:14:239:14 | c | semmle.label | c |
205205
subpaths
206206
| main.rs:38:23:38:31 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] |
207-
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:39:10:39:21 | a.get_data(...) |
207+
| main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:39:10:39:21 | a.get_data() |
208208
| main.rs:44:30:44:38 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] |
209-
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:45:10:45:21 | a.get_data(...) |
209+
| main.rs:45:10:45:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:45:10:45:21 | a.get_data() |
210210
| main.rs:63:26:63:26 | a | main.rs:57:17:57:22 | ...: i64 | main.rs:57:32:59:1 | { ... } | main.rs:63:13:63:27 | pass_through(...) |
211211
| main.rs:68:26:71:5 | { ... } | main.rs:57:17:57:22 | ...: i64 | main.rs:57:32:59:1 | { ... } | main.rs:68:13:71:6 | pass_through(...) |
212212
| main.rs:82:26:82:26 | a | main.rs:78:21:78:26 | ...: i64 | main.rs:78:36:80:5 | { ... } | main.rs:82:13:82:27 | pass_through(...) |
@@ -217,8 +217,8 @@ subpaths
217217
testFailures
218218
#select
219219
| main.rs:18:10:18:10 | a | main.rs:13:5:13:13 | source(...) | main.rs:18:10:18:10 | a | $@ | main.rs:13:5:13:13 | source(...) | source(...) |
220-
| main.rs:39:10:39:21 | a.get_data(...) | main.rs:38:23:38:31 | source(...) | main.rs:39:10:39:21 | a.get_data(...) | $@ | main.rs:38:23:38:31 | source(...) | source(...) |
221-
| main.rs:45:10:45:21 | a.get_data(...) | main.rs:44:30:44:38 | source(...) | main.rs:45:10:45:21 | a.get_data(...) | $@ | main.rs:44:30:44:38 | source(...) | source(...) |
220+
| main.rs:39:10:39:21 | a.get_data() | main.rs:38:23:38:31 | source(...) | main.rs:39:10:39:21 | a.get_data() | $@ | main.rs:38:23:38:31 | source(...) | source(...) |
221+
| main.rs:45:10:45:21 | a.get_data() | main.rs:44:30:44:38 | source(...) | main.rs:45:10:45:21 | a.get_data() | $@ | main.rs:44:30:44:38 | source(...) | source(...) |
222222
| main.rs:49:10:49:10 | n | main.rs:53:13:53:21 | source(...) | main.rs:49:10:49:10 | n | $@ | main.rs:53:13:53:21 | source(...) | source(...) |
223223
| main.rs:64:10:64:10 | b | main.rs:62:13:62:21 | source(...) | main.rs:64:10:64:10 | b | $@ | main.rs:62:13:62:21 | source(...) | source(...) |
224224
| main.rs:72:10:72:10 | a | main.rs:70:9:70:18 | source(...) | main.rs:72:10:72:10 | a | $@ | main.rs:70:9:70:18 | source(...) | source(...) |

rust/ql/test/library-tests/dataflow/global/viableCallable.expected

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
| main.rs:17:13:17:23 | get_data(...) | main.rs:12:1:14:1 | fn get_data |
33
| main.rs:18:5:18:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
44
| main.rs:37:5:37:22 | sink(...) | main.rs:5:1:7:1 | fn sink |
5-
| main.rs:37:10:37:21 | a.get_data(...) | main.rs:30:5:32:5 | fn get_data |
5+
| main.rs:37:10:37:21 | a.get_data() | main.rs:30:5:32:5 | fn get_data |
66
| main.rs:38:5:38:32 | ... .set_data(...) | main.rs:26:5:28:5 | fn set_data |
77
| main.rs:38:23:38:31 | source(...) | main.rs:1:1:3:1 | fn source |
88
| main.rs:39:5:39:22 | sink(...) | main.rs:5:1:7:1 | fn sink |
9-
| main.rs:39:10:39:21 | a.get_data(...) | main.rs:30:5:32:5 | fn get_data |
9+
| main.rs:39:10:39:21 | a.get_data() | main.rs:30:5:32:5 | fn get_data |
1010
| main.rs:44:5:44:39 | ... .set_data(...) | main.rs:26:5:28:5 | fn set_data |
1111
| main.rs:44:30:44:38 | source(...) | main.rs:1:1:3:1 | fn source |
1212
| main.rs:45:5:45:22 | sink(...) | main.rs:5:1:7:1 | fn sink |
13-
| main.rs:45:10:45:21 | a.get_data(...) | main.rs:30:5:32:5 | fn get_data |
13+
| main.rs:45:10:45:21 | a.get_data() | main.rs:30:5:32:5 | fn get_data |
1414
| main.rs:49:5:49:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
1515
| main.rs:53:13:53:21 | source(...) | main.rs:1:1:3:1 | fn source |
1616
| main.rs:54:5:54:14 | data_in(...) | main.rs:48:1:50:1 | fn data_in |
@@ -25,7 +25,7 @@
2525
| main.rs:83:5:83:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
2626
| main.rs:95:9:95:15 | sink(...) | main.rs:5:1:7:1 | fn sink |
2727
| main.rs:102:13:102:21 | source(...) | main.rs:1:1:3:1 | fn source |
28-
| main.rs:117:13:117:25 | mn.get_data(...) | main.rs:98:5:104:5 | fn get_data |
28+
| main.rs:117:13:117:25 | mn.get_data() | main.rs:98:5:104:5 | fn get_data |
2929
| main.rs:118:5:118:11 | sink(...) | main.rs:5:1:7:1 | fn sink |
3030
| main.rs:123:13:123:21 | source(...) | main.rs:1:1:3:1 | fn source |
3131
| main.rs:124:5:124:17 | mn.data_in(...) | main.rs:94:5:96:5 | fn data_in |

0 commit comments

Comments
 (0)