@@ -231,17 +231,25 @@ private predicate isRegularPackage(Folder f, string name) {
231
231
exists ( f .getFile ( "__init__.py" ) )
232
232
}
233
233
234
+ /** Gets the name of a module imported in package `c`. */
235
+ private string moduleImportedInPackage ( Container c ) {
236
+ legalShortName ( result ) and
237
+ // it has to be imported in this folder
238
+ result =
239
+ any ( ImportExpr i | i .getLocation ( ) .getFile ( ) .getParent ( ) = c )
240
+ .getName ( )
241
+ // strip everything after the first `.`
242
+ .regexpReplaceAll ( "\\..*" , "" ) and
243
+ result != ""
244
+ }
245
+
234
246
/** Holds if the file `f` could be resolved to a module named `name`. */
235
247
private predicate isPotentialModuleFile ( File file , string name ) {
236
248
legalShortName ( name ) and
237
249
name = file .getStem ( ) and
238
250
file .getExtension ( ) = [ "py" , "pyc" , "so" , "pyd" ] and
239
251
// it has to be imported in this folder
240
- name =
241
- any ( ImportExpr i | i .getLocation ( ) .getFile ( ) .getParent ( ) = file .getParent ( ) )
242
- .getName ( )
243
- .regexpReplaceAll ( "\\..*" , "" ) and
244
- name != ""
252
+ name = moduleImportedInPackage ( file .getParent ( ) )
245
253
}
246
254
247
255
/**
@@ -256,11 +264,7 @@ private predicate isNameSpacePackage(Folder f, string name) {
256
264
not isRegularPackage ( f , name ) and
257
265
// it has to be imported in a file
258
266
// either in this folder or next to this folder
259
- name =
260
- any ( ImportExpr i | i .getLocation ( ) .getFile ( ) .getParent ( ) in [ f , f .getParent ( ) ] )
261
- .getName ( )
262
- .regexpReplaceAll ( "\\..*" , "" ) and
263
- name != "" and
267
+ name = moduleImportedInPackage ( [ f , f .getParent ( ) ] ) and
264
268
// no sibling regular package
265
269
// and no sibling module
266
270
not exists ( Folder sibling | sibling .getParent ( ) = f .getParent ( ) |
0 commit comments