@@ -208,7 +208,6 @@ abstract class ItemNode extends Locatable {
208
208
crateDefEdge ( this , name , result , kind )
209
209
or
210
210
crateDependencyEdge ( this , name , result ) and
211
- not declaresDirectly ( this , TTypeNamespace ( ) , name ) and
212
211
kind .isInternal ( )
213
212
or
214
213
externCrateEdge ( this , name , result ) and
@@ -1233,17 +1232,23 @@ private class BuiltinSourceFile extends SourceFileItemNode {
1233
1232
BuiltinSourceFile ( ) { this .getFile ( ) .getParentContainer ( ) instanceof Builtins:: BuiltinsFolder }
1234
1233
}
1235
1234
1235
+ pragma [ nomagic]
1236
+ private predicate crateDependency ( SourceFileItemNode file , string name , CrateItemNode dep ) {
1237
+ exists ( CrateItemNode c | dep = c .( Crate ) .getDependency ( name ) | file = c .getASourceFile ( ) )
1238
+ }
1239
+
1236
1240
/**
1237
1241
* Holds if `file` depends on crate `dep` named `name`.
1238
1242
*/
1239
1243
pragma [ nomagic]
1240
1244
private predicate crateDependencyEdge ( SourceFileItemNode file , string name , CrateItemNode dep ) {
1241
- exists ( CrateItemNode c | dep = c . ( Crate ) . getDependency ( name ) | file = c . getASourceFile ( ) )
1245
+ crateDependency ( file , name , dep )
1242
1246
or
1243
- // All files _should_ belong to a crate, but for those where we cannot identify the crate,
1244
- // we give access to all crates as a fallback.
1245
- not file = any ( Crate c ) .getASourceFile ( ) and
1246
- name = dep .getName ( )
1247
+ // As a fallback, give all files access to crates that do not conflict with known dependencies
1248
+ // and declarations.
1249
+ name = dep .getName ( ) and
1250
+ not declaresDirectly ( file , TTypeNamespace ( ) , name ) and
1251
+ not crateDependency ( file , name , _)
1247
1252
}
1248
1253
1249
1254
private predicate useTreeDeclares ( UseTree tree , string name ) {
0 commit comments