@@ -208,7 +208,6 @@ abstract class ItemNode extends Locatable {
208208 crateDefEdge ( this , name , result , kind )
209209 or
210210 crateDependencyEdge ( this , name , result ) and
211- not declaresDirectly ( this , TTypeNamespace ( ) , name ) and
212211 kind .isInternal ( )
213212 or
214213 externCrateEdge ( this , name , result ) and
@@ -1233,17 +1232,23 @@ private class BuiltinSourceFile extends SourceFileItemNode {
12331232 BuiltinSourceFile ( ) { this .getFile ( ) .getParentContainer ( ) instanceof Builtins:: BuiltinsFolder }
12341233}
12351234
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+
12361240/**
12371241 * Holds if `file` depends on crate `dep` named `name`.
12381242 */
12391243pragma [ nomagic]
12401244private 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 )
12421246 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 , _)
12471252}
12481253
12491254private predicate useTreeDeclares ( UseTree tree , string name ) {
0 commit comments