Skip to content

Commit 55ea55a

Browse files
authored
Merge pull request #21247 from paldepind/rust/self-types
Rust: Resolve `Self` paths in type definitions
2 parents 8e39ed0 + d72d8b6 commit 55ea55a

File tree

3 files changed

+140
-101
lines changed

3 files changed

+140
-101
lines changed

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

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,15 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki
119119
if result.isPublic()
120120
then kind.isBoth()
121121
else kind.isInternal()
122+
or
123+
// `Self` has scoping rules similar to type parameters and can be considered
124+
// an implicit type parameter child of the introducing item.
125+
// - https://doc.rust-lang.org/stable/reference/paths.html#r-paths.qualifiers.type-self
126+
// - https://doc.rust-lang.org/stable/reference/names/scopes.html#r-names.scopes.self
127+
(item instanceof TypeItemTypeItemNode or item instanceof ImplOrTraitItemNode) and
128+
name = "Self" and
129+
kind.isInternal() and
130+
result = item
122131
}
123132

124133
private module UseOption = Option<Use>;
@@ -405,9 +414,6 @@ abstract class ItemNode extends Locatable {
405414
this instanceof SourceFile and
406415
builtin(name, result)
407416
or
408-
name = "Self" and
409-
this = result.(ImplOrTraitItemNode).getAnItemInSelfScope()
410-
or
411417
name = "crate" and
412418
this = result.(CrateItemNode).getASourceFile()
413419
)
@@ -718,26 +724,12 @@ class FunctionItemNode extends AssocItemNode, ParameterizableItemNode instanceof
718724
}
719725

720726
abstract class ImplOrTraitItemNode extends ItemNode {
721-
/** Gets an item that may refer to this node using `Self`. */
722-
pragma[nomagic]
723-
ItemNode getAnItemInSelfScope() {
724-
result = this
725-
or
726-
result.getImmediateParent() = this
727-
or
728-
exists(ItemNode mid |
729-
mid = this.getAnItemInSelfScope() and
730-
result.getImmediateParent() = mid and
731-
not mid instanceof ImplOrTraitItemNode
732-
)
733-
}
734-
735727
/** Gets a `Self` path that refers to this item. */
736728
cached
737729
Path getASelfPath() {
738730
Stages::PathResolutionStage::ref() and
739731
isUnqualifiedSelfPath(result) and
740-
result = this.getAnItemInSelfScope().getADescendant()
732+
this = unqualifiedPathLookup(result, _, _)
741733
}
742734

743735
/** Gets an associated item belonging to this trait or `impl` block. */
@@ -1610,11 +1602,7 @@ private predicate unqualifiedPathLookup(ItemNode ancestor, string name, Namespac
16101602
// lookup in an outer scope, but only if the item is not declared in inner scope
16111603
exists(ItemNode mid |
16121604
unqualifiedPathLookup(mid, name, ns, encl) and
1613-
not declares(mid, ns, name) and
1614-
not (
1615-
name = "Self" and
1616-
mid = any(ImplOrTraitItemNode i).getAnItemInSelfScope()
1617-
)
1605+
not declares(mid, ns, name)
16181606
|
16191607
ancestor = getOuterScope(mid)
16201608
or
@@ -2147,7 +2135,7 @@ private predicate useImportEdge(Use use, string name, ItemNode item, SuccessorKi
21472135
checkQualifiedVisibility(use, item, kind1, useOpt) and
21482136
// glob imports can be shadowed
21492137
not declares(encl, ns, name) and
2150-
not name = ["super", "self"]
2138+
not name = ["super", "self", "Self"]
21512139
)
21522140
else (
21532141
item = used and

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1056,6 +1056,37 @@ mod self_constructors {
10561056
}
10571057
}
10581058

1059+
/// Tests for using `Self` in type definitions.
1060+
mod self_types {
1061+
struct NonEmptyListStruct<T> {
1062+
head: T, // $ item=T
1063+
tail: Option<Box<Self>>, // $ item=Option item=Box item=NonEmptyListStruct
1064+
}
1065+
1066+
enum NonEmptyListEnum<T> {
1067+
Single(T), // $ item=T
1068+
Cons(T, Box<Self>), // $ item=T item=Box item=NonEmptyListEnum
1069+
}
1070+
1071+
#[rustfmt::skip]
1072+
impl NonEmptyListEnum<i32> { // $ item=NonEmptyListEnum item=i32
1073+
fn new_single(value: i32) -> Self { // $ item=i32 item=NonEmptyListEnum
1074+
use NonEmptyListEnum::*; // $ item=NonEmptyListEnum
1075+
Self::Single(value) // $ item=Single
1076+
}
1077+
}
1078+
1079+
#[rustfmt::skip]
1080+
union NonEmptyListUnion<
1081+
'a,
1082+
T // T
1083+
: Copy // $ item=Copy
1084+
> {
1085+
single: T, // $ item=T
1086+
cons: (T, &'a Self), // $ item=T item=NonEmptyListUnion
1087+
}
1088+
}
1089+
10591090
fn main() {
10601091
my::nested::nested1::nested2::f(); // $ item=I4
10611092
my::f(); // $ item=I38

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

Lines changed: 97 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ mod
3535
| main.rs:949:1:968:1 | mod impl_with_attribute_macro |
3636
| main.rs:970:1:1011:1 | mod patterns |
3737
| main.rs:1013:1:1057:1 | mod self_constructors |
38+
| main.rs:1059:1:1088:1 | mod self_types |
3839
| my2/mod.rs:1:1:1:16 | mod nested2 |
3940
| my2/mod.rs:20:1:20:12 | mod my3 |
4041
| my2/mod.rs:22:1:23:10 | mod mymod |
@@ -75,7 +76,7 @@ resolvePath
7576
| main.rs:37:17:37:24 | ...::f | main.rs:26:9:28:9 | fn f |
7677
| main.rs:39:17:39:23 | println | {EXTERNAL LOCATION} | MacroRules |
7778
| main.rs:40:17:40:17 | f | main.rs:26:9:28:9 | fn f |
78-
| main.rs:47:9:47:13 | super | main.rs:1:1:1096:2 | SourceFile |
79+
| main.rs:47:9:47:13 | super | main.rs:1:1:1127:2 | SourceFile |
7980
| main.rs:47:9:47:17 | ...::m1 | main.rs:20:1:44:1 | mod m1 |
8081
| main.rs:47:9:47:21 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
8182
| main.rs:47:9:47:24 | ...::g | main.rs:30:9:34:9 | fn g |
@@ -90,7 +91,7 @@ resolvePath
9091
| main.rs:68:17:68:19 | Foo | main.rs:66:9:66:21 | struct Foo |
9192
| main.rs:71:13:71:15 | Foo | main.rs:60:5:60:17 | struct Foo |
9293
| main.rs:73:5:73:5 | f | main.rs:62:5:69:5 | fn f |
93-
| main.rs:75:5:75:8 | self | main.rs:1:1:1096:2 | SourceFile |
94+
| main.rs:75:5:75:8 | self | main.rs:1:1:1127:2 | SourceFile |
9495
| main.rs:75:5:75:11 | ...::i | main.rs:78:1:90:1 | fn i |
9596
| main.rs:79:5:79:11 | println | {EXTERNAL LOCATION} | MacroRules |
9697
| main.rs:81:13:81:15 | Foo | main.rs:55:1:55:13 | struct Foo |
@@ -112,7 +113,7 @@ resolvePath
112113
| main.rs:112:9:112:15 | println | {EXTERNAL LOCATION} | MacroRules |
113114
| main.rs:118:9:118:15 | println | {EXTERNAL LOCATION} | MacroRules |
114115
| main.rs:122:9:122:15 | println | {EXTERNAL LOCATION} | MacroRules |
115-
| main.rs:125:13:125:17 | super | main.rs:1:1:1096:2 | SourceFile |
116+
| main.rs:125:13:125:17 | super | main.rs:1:1:1127:2 | SourceFile |
116117
| main.rs:125:13:125:21 | ...::m5 | main.rs:110:1:114:1 | mod m5 |
117118
| main.rs:126:9:126:9 | f | main.rs:111:5:113:5 | fn f |
118119
| main.rs:126:9:126:9 | f | main.rs:117:5:119:5 | fn f |
@@ -532,79 +533,98 @@ resolvePath
532533
| main.rs:1047:25:1047:27 | i32 | {EXTERNAL LOCATION} | struct i32 |
533534
| main.rs:1049:17:1049:20 | Self | main.rs:1045:5:1056:5 | impl MyEnum { ... } |
534535
| main.rs:1049:17:1049:23 | ...::A | main.rs:1040:9:1042:9 | A |
535-
| main.rs:1060:5:1060:6 | my | main.rs:1:1:1:7 | mod my |
536-
| main.rs:1060:5:1060:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
537-
| main.rs:1060:5:1060:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
538-
| main.rs:1060:5:1060:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
539-
| main.rs:1060:5:1060:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
540-
| main.rs:1061:5:1061:6 | my | main.rs:1:1:1:7 | mod my |
541-
| main.rs:1061:5:1061:9 | ...::f | my.rs:5:1:7:1 | fn f |
542-
| main.rs:1062:5:1062:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
543-
| main.rs:1062:5:1062:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
544-
| main.rs:1062:5:1062:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
545-
| main.rs:1062:5:1062:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
546-
| main.rs:1063:5:1063:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
547-
| main.rs:1064:5:1064:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
548-
| main.rs:1065:5:1065:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
549-
| main.rs:1065:5:1065:12 | ...::h | main.rs:57:1:76:1 | fn h |
550-
| main.rs:1066:5:1066:6 | m1 | main.rs:20:1:44:1 | mod m1 |
551-
| main.rs:1066:5:1066:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
552-
| main.rs:1066:5:1066:13 | ...::g | main.rs:30:9:34:9 | fn g |
553-
| main.rs:1067:5:1067:6 | m1 | main.rs:20:1:44:1 | mod m1 |
554-
| main.rs:1067:5:1067:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
555-
| main.rs:1067:5:1067:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 |
556-
| main.rs:1067:5:1067:17 | ...::h | main.rs:37:27:41:13 | fn h |
557-
| main.rs:1068:5:1068:6 | m4 | main.rs:46:1:53:1 | mod m4 |
558-
| main.rs:1068:5:1068:9 | ...::i | main.rs:49:5:52:5 | fn i |
559-
| main.rs:1069:5:1069:5 | h | main.rs:57:1:76:1 | fn h |
560-
| main.rs:1070:5:1070:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
561-
| main.rs:1071:5:1071:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
562-
| main.rs:1072:5:1072:5 | j | main.rs:104:1:108:1 | fn j |
563-
| main.rs:1073:5:1073:6 | m6 | main.rs:116:1:128:1 | mod m6 |
564-
| main.rs:1073:5:1073:9 | ...::g | main.rs:121:5:127:5 | fn g |
565-
| main.rs:1074:5:1074:6 | m7 | main.rs:130:1:149:1 | mod m7 |
566-
| main.rs:1074:5:1074:9 | ...::f | main.rs:141:5:148:5 | fn f |
567-
| main.rs:1075:5:1075:6 | m8 | main.rs:151:1:205:1 | mod m8 |
568-
| main.rs:1075:5:1075:9 | ...::g | main.rs:189:5:204:5 | fn g |
569-
| main.rs:1076:5:1076:6 | m9 | main.rs:207:1:215:1 | mod m9 |
570-
| main.rs:1076:5:1076:9 | ...::f | main.rs:210:5:214:5 | fn f |
571-
| main.rs:1077:5:1077:7 | m11 | main.rs:238:1:275:1 | mod m11 |
572-
| main.rs:1077:5:1077:10 | ...::f | main.rs:243:5:246:5 | fn f |
573-
| main.rs:1078:5:1078:7 | m15 | main.rs:306:1:375:1 | mod m15 |
574-
| main.rs:1078:5:1078:10 | ...::f | main.rs:362:5:374:5 | fn f |
575-
| main.rs:1079:5:1079:7 | m16 | main.rs:377:1:574:1 | mod m16 |
576-
| main.rs:1079:5:1079:10 | ...::f | main.rs:446:5:470:5 | fn f |
577-
| main.rs:1080:5:1080:20 | trait_visibility | main.rs:576:1:633:1 | mod trait_visibility |
578-
| main.rs:1080:5:1080:23 | ...::f | main.rs:603:5:632:5 | fn f |
579-
| main.rs:1081:5:1081:7 | m17 | main.rs:635:1:665:1 | mod m17 |
580-
| main.rs:1081:5:1081:10 | ...::f | main.rs:659:5:664:5 | fn f |
581-
| main.rs:1082:5:1082:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
582-
| main.rs:1082:5:1082:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
583-
| main.rs:1083:5:1083:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
584-
| main.rs:1083:5:1083:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
585-
| main.rs:1084:5:1084:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
586-
| main.rs:1084:5:1084:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
587-
| main.rs:1085:5:1085:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
588-
| main.rs:1086:5:1086:12 | my_alias | main.rs:1:1:1:7 | mod my |
589-
| main.rs:1086:5:1086:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
590-
| main.rs:1087:5:1087:7 | m18 | main.rs:667:1:685:1 | mod m18 |
591-
| main.rs:1087:5:1087:12 | ...::m19 | main.rs:672:5:684:5 | mod m19 |
592-
| main.rs:1087:5:1087:17 | ...::m20 | main.rs:677:9:683:9 | mod m20 |
593-
| main.rs:1087:5:1087:20 | ...::g | main.rs:678:13:682:13 | fn g |
594-
| main.rs:1088:5:1088:7 | m23 | main.rs:714:1:739:1 | mod m23 |
595-
| main.rs:1088:5:1088:10 | ...::f | main.rs:734:5:738:5 | fn f |
596-
| main.rs:1089:5:1089:7 | m24 | main.rs:741:1:809:1 | mod m24 |
597-
| main.rs:1089:5:1089:10 | ...::f | main.rs:795:5:808:5 | fn f |
598-
| main.rs:1090:5:1090:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
599-
| main.rs:1090:5:1090:11 | ...::h | main.rs:57:1:76:1 | fn h |
600-
| main.rs:1091:5:1091:13 | z_changed | main.rs:814:1:814:9 | fn z_changed |
601-
| main.rs:1092:5:1092:11 | AStruct | main.rs:816:1:816:17 | struct AStruct |
602-
| main.rs:1092:5:1092:22 | ...::z_on_type | main.rs:820:5:820:17 | fn z_on_type |
603-
| main.rs:1093:5:1093:11 | AStruct | main.rs:816:1:816:17 | struct AStruct |
604-
| main.rs:1094:5:1094:29 | impl_with_attribute_macro | main.rs:949:1:968:1 | mod impl_with_attribute_macro |
605-
| main.rs:1094:5:1094:35 | ...::test | main.rs:964:5:967:5 | fn test |
606-
| main.rs:1095:5:1095:12 | patterns | main.rs:970:1:1011:1 | mod patterns |
607-
| main.rs:1095:5:1095:18 | ...::test | main.rs:971:5:985:5 | fn test |
536+
| main.rs:1062:15:1062:15 | T | main.rs:1061:31:1061:31 | T |
537+
| main.rs:1063:15:1063:31 | Option::<...> | {EXTERNAL LOCATION} | enum Option |
538+
| main.rs:1063:22:1063:30 | Box::<...> | {EXTERNAL LOCATION} | struct Box |
539+
| main.rs:1063:26:1063:29 | Self | main.rs:1061:5:1064:5 | struct NonEmptyListStruct |
540+
| main.rs:1067:16:1067:16 | T | main.rs:1066:27:1066:27 | T |
541+
| main.rs:1068:14:1068:14 | T | main.rs:1066:27:1066:27 | T |
542+
| main.rs:1068:17:1068:25 | Box::<...> | {EXTERNAL LOCATION} | struct Box |
543+
| main.rs:1068:21:1068:24 | Self | main.rs:1066:5:1069:5 | enum NonEmptyListEnum |
544+
| main.rs:1072:10:1072:30 | NonEmptyListEnum::<...> | main.rs:1066:5:1069:5 | enum NonEmptyListEnum |
545+
| main.rs:1072:27:1072:29 | i32 | {EXTERNAL LOCATION} | struct i32 |
546+
| main.rs:1073:30:1073:32 | i32 | {EXTERNAL LOCATION} | struct i32 |
547+
| main.rs:1073:38:1073:41 | Self | main.rs:1066:5:1069:5 | enum NonEmptyListEnum |
548+
| main.rs:1074:17:1074:32 | NonEmptyListEnum | main.rs:1066:5:1069:5 | enum NonEmptyListEnum |
549+
| main.rs:1075:13:1075:16 | Self | main.rs:1071:5:1077:5 | impl NonEmptyListEnum::<...> { ... } |
550+
| main.rs:1075:13:1075:24 | ...::Single | main.rs:1067:9:1067:17 | Single |
551+
| main.rs:1083:13:1083:16 | Copy | {EXTERNAL LOCATION} | trait Copy |
552+
| main.rs:1085:17:1085:17 | T | main.rs:1082:9:1082:9 | T |
553+
| main.rs:1086:16:1086:16 | T | main.rs:1082:9:1082:9 | T |
554+
| main.rs:1086:23:1086:26 | Self | main.rs:1079:5:1087:5 | union NonEmptyListUnion |
555+
| main.rs:1091:5:1091:6 | my | main.rs:1:1:1:7 | mod my |
556+
| main.rs:1091:5:1091:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
557+
| main.rs:1091:5:1091:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
558+
| main.rs:1091:5:1091:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
559+
| main.rs:1091:5:1091:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
560+
| main.rs:1092:5:1092:6 | my | main.rs:1:1:1:7 | mod my |
561+
| main.rs:1092:5:1092:9 | ...::f | my.rs:5:1:7:1 | fn f |
562+
| main.rs:1093:5:1093:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
563+
| main.rs:1093:5:1093:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
564+
| main.rs:1093:5:1093:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
565+
| main.rs:1093:5:1093:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
566+
| main.rs:1094:5:1094:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
567+
| main.rs:1095:5:1095:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
568+
| main.rs:1096:5:1096:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
569+
| main.rs:1096:5:1096:12 | ...::h | main.rs:57:1:76:1 | fn h |
570+
| main.rs:1097:5:1097:6 | m1 | main.rs:20:1:44:1 | mod m1 |
571+
| main.rs:1097:5:1097:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
572+
| main.rs:1097:5:1097:13 | ...::g | main.rs:30:9:34:9 | fn g |
573+
| main.rs:1098:5:1098:6 | m1 | main.rs:20:1:44:1 | mod m1 |
574+
| main.rs:1098:5:1098:10 | ...::m2 | main.rs:25:5:43:5 | mod m2 |
575+
| main.rs:1098:5:1098:14 | ...::m3 | main.rs:36:9:42:9 | mod m3 |
576+
| main.rs:1098:5:1098:17 | ...::h | main.rs:37:27:41:13 | fn h |
577+
| main.rs:1099:5:1099:6 | m4 | main.rs:46:1:53:1 | mod m4 |
578+
| main.rs:1099:5:1099:9 | ...::i | main.rs:49:5:52:5 | fn i |
579+
| main.rs:1100:5:1100:5 | h | main.rs:57:1:76:1 | fn h |
580+
| main.rs:1101:5:1101:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
581+
| main.rs:1102:5:1102:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
582+
| main.rs:1103:5:1103:5 | j | main.rs:104:1:108:1 | fn j |
583+
| main.rs:1104:5:1104:6 | m6 | main.rs:116:1:128:1 | mod m6 |
584+
| main.rs:1104:5:1104:9 | ...::g | main.rs:121:5:127:5 | fn g |
585+
| main.rs:1105:5:1105:6 | m7 | main.rs:130:1:149:1 | mod m7 |
586+
| main.rs:1105:5:1105:9 | ...::f | main.rs:141:5:148:5 | fn f |
587+
| main.rs:1106:5:1106:6 | m8 | main.rs:151:1:205:1 | mod m8 |
588+
| main.rs:1106:5:1106:9 | ...::g | main.rs:189:5:204:5 | fn g |
589+
| main.rs:1107:5:1107:6 | m9 | main.rs:207:1:215:1 | mod m9 |
590+
| main.rs:1107:5:1107:9 | ...::f | main.rs:210:5:214:5 | fn f |
591+
| main.rs:1108:5:1108:7 | m11 | main.rs:238:1:275:1 | mod m11 |
592+
| main.rs:1108:5:1108:10 | ...::f | main.rs:243:5:246:5 | fn f |
593+
| main.rs:1109:5:1109:7 | m15 | main.rs:306:1:375:1 | mod m15 |
594+
| main.rs:1109:5:1109:10 | ...::f | main.rs:362:5:374:5 | fn f |
595+
| main.rs:1110:5:1110:7 | m16 | main.rs:377:1:574:1 | mod m16 |
596+
| main.rs:1110:5:1110:10 | ...::f | main.rs:446:5:470:5 | fn f |
597+
| main.rs:1111:5:1111:20 | trait_visibility | main.rs:576:1:633:1 | mod trait_visibility |
598+
| main.rs:1111:5:1111:23 | ...::f | main.rs:603:5:632:5 | fn f |
599+
| main.rs:1112:5:1112:7 | m17 | main.rs:635:1:665:1 | mod m17 |
600+
| main.rs:1112:5:1112:10 | ...::f | main.rs:659:5:664:5 | fn f |
601+
| main.rs:1113:5:1113:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
602+
| main.rs:1113:5:1113:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
603+
| main.rs:1114:5:1114:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
604+
| main.rs:1114:5:1114:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
605+
| main.rs:1115:5:1115:7 | my3 | my2/mod.rs:20:1:20:12 | mod my3 |
606+
| main.rs:1115:5:1115:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
607+
| main.rs:1116:5:1116:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
608+
| main.rs:1117:5:1117:12 | my_alias | main.rs:1:1:1:7 | mod my |
609+
| main.rs:1117:5:1117:22 | ...::nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
610+
| main.rs:1118:5:1118:7 | m18 | main.rs:667:1:685:1 | mod m18 |
611+
| main.rs:1118:5:1118:12 | ...::m19 | main.rs:672:5:684:5 | mod m19 |
612+
| main.rs:1118:5:1118:17 | ...::m20 | main.rs:677:9:683:9 | mod m20 |
613+
| main.rs:1118:5:1118:20 | ...::g | main.rs:678:13:682:13 | fn g |
614+
| main.rs:1119:5:1119:7 | m23 | main.rs:714:1:739:1 | mod m23 |
615+
| main.rs:1119:5:1119:10 | ...::f | main.rs:734:5:738:5 | fn f |
616+
| main.rs:1120:5:1120:7 | m24 | main.rs:741:1:809:1 | mod m24 |
617+
| main.rs:1120:5:1120:10 | ...::f | main.rs:795:5:808:5 | fn f |
618+
| main.rs:1121:5:1121:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
619+
| main.rs:1121:5:1121:11 | ...::h | main.rs:57:1:76:1 | fn h |
620+
| main.rs:1122:5:1122:13 | z_changed | main.rs:814:1:814:9 | fn z_changed |
621+
| main.rs:1123:5:1123:11 | AStruct | main.rs:816:1:816:17 | struct AStruct |
622+
| main.rs:1123:5:1123:22 | ...::z_on_type | main.rs:820:5:820:17 | fn z_on_type |
623+
| main.rs:1124:5:1124:11 | AStruct | main.rs:816:1:816:17 | struct AStruct |
624+
| main.rs:1125:5:1125:29 | impl_with_attribute_macro | main.rs:949:1:968:1 | mod impl_with_attribute_macro |
625+
| main.rs:1125:5:1125:35 | ...::test | main.rs:964:5:967:5 | fn test |
626+
| main.rs:1126:5:1126:12 | patterns | main.rs:970:1:1011:1 | mod patterns |
627+
| main.rs:1126:5:1126:18 | ...::test | main.rs:971:5:985:5 | fn test |
608628
| my2/mod.rs:4:5:4:11 | println | {EXTERNAL LOCATION} | MacroRules |
609629
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
610630
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
@@ -630,7 +650,7 @@ resolvePath
630650
| my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g |
631651
| my2/my3/mod.rs:4:5:4:5 | h | main.rs:57:1:76:1 | fn h |
632652
| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
633-
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:1096:2 | SourceFile |
653+
| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:1127:2 | SourceFile |
634654
| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:57:1:76:1 | fn h |
635655
| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:25:34 | SourceFile |
636656
| my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g |

0 commit comments

Comments
 (0)