@@ -221,12 +221,17 @@ private predicate transitively_imported_from_entry_point(File file) {
221221 )
222222}
223223
224+ /**
225+ * Holds if the folder `f` is a regular Python package,
226+ * containing an `__init__.py` file.
227+ */
224228private predicate isRegularPackage ( Folder f , string name ) {
225229 legalShortName ( name ) and
226230 name = f .getStem ( ) and
227231 exists ( f .getFile ( "__init__.py" ) )
228232}
229233
234+ /** Holds if the file `f` could be resolved to a module named `name`. */
230235private predicate isPotentialModuleFile ( File file , string name ) {
231236 legalShortName ( name ) and
232237 name = file .getStem ( ) and
@@ -239,7 +244,12 @@ private predicate isPotentialModuleFile(File file, string name) {
239244 name != ""
240245}
241246
242- // See https://peps.python.org/pep-0420/#specification
247+ /**
248+ * Holds if the folder `f` is a namespace package named `name`.
249+ *
250+ * See https://peps.python.org/pep-0420/#specification
251+ * for details on namespace packages.
252+ */
243253private predicate isNameSpacePackage ( Folder f , string name ) {
244254 legalShortName ( name ) and
245255 name = f .getStem ( ) and
@@ -259,22 +269,34 @@ private predicate isNameSpacePackage(Folder f, string name) {
259269 )
260270}
261271
272+ /**
273+ * Holds if the folder `f` is a package (either a regular package
274+ * or a namespace package) named `name`.
275+ */
262276private predicate isPackage ( Folder f , string name ) {
263277 isRegularPackage ( f , name )
264278 or
265279 isNameSpacePackage ( f , name )
266280}
267281
282+ /**
283+ * Holds if the file `f` is a module named `name`.
284+ */
268285private predicate isModuleFile ( File file , string name ) {
269286 isPotentialModuleFile ( file , name ) and
270287 not isPackage ( file .getParent ( ) , _)
271288}
272289
290+ /**
291+ * Holds if the folder `f` is a package named `name`
292+ * and does reside inside another package.
293+ */
273294private predicate isOutermostPackage ( Folder f , string name ) {
274295 isPackage ( f , name ) and
275296 not isPackage ( f .getParent ( ) , _)
276297}
277298
299+ /** Gets the name of the module that `c` resolves to, if any. */
278300cached
279301string moduleNameFromFile ( Container c ) {
280302 // package
0 commit comments