@@ -194,21 +194,11 @@ abstract class ItemNode extends Locatable {
194194 this = result .( ImplOrTraitItemNode ) .getAnItemInSelfScope ( )
195195 or
196196 name = "crate" and
197- result =
198- any ( CrateItemNode crate |
199- this = crate .getASourceFile ( )
200- or
201- this = crate .getModuleNode ( )
202- )
197+ this = result .( CrateItemNode ) .getARootModuleNode ( )
203198 or
204199 // todo: implement properly
205200 name = "$crate" and
206- result =
207- any ( CrateItemNode crate |
208- this = crate .getASourceFile ( )
209- or
210- this = crate .getModuleNode ( )
211- ) .( Crate ) .getADependency * ( ) and
201+ result = any ( CrateItemNode crate | this = crate .getARootModuleNode ( ) ) .( Crate ) .getADependency * ( ) and
212202 result .( CrateItemNode ) .isPotentialDollarCrateTarget ( )
213203 }
214204
@@ -237,7 +227,7 @@ abstract private class ModuleLikeNode extends ItemNode {
237227 predicate isRoot ( ) {
238228 this instanceof SourceFileItemNode
239229 or
240- this = any ( CrateItemNode c ) .getModuleNode ( )
230+ this = any ( Crate c ) .getModule ( )
241231 }
242232}
243233
@@ -294,6 +284,15 @@ class CrateItemNode extends ItemNode instanceof Crate {
294284 )
295285 }
296286
287+ /**
288+ * Gets a root module node belonging to this crate.
289+ */
290+ ModuleLikeNode getARootModuleNode ( ) {
291+ result = this .getASourceFile ( )
292+ or
293+ result = super .getModule ( )
294+ }
295+
297296 pragma [ nomagic]
298297 predicate isPotentialDollarCrateTarget ( ) {
299298 exists ( string name , RelevantPath p |
0 commit comments