import-checker: assume absolute and use modern import checker
Since we require Python 3 now, we can assume we always use absolute
imports and the modern import checker should be used.
Differential Revision: https://phab.mercurial-scm.org/D12246
--- a/contrib/import-checker.py Sun Feb 20 13:29:47 2022 -0700
+++ b/contrib/import-checker.py Sun Feb 20 13:43:44 2022 -0700
@@ -59,21 +59,6 @@
}
-def usingabsolute(root):
- """Whether absolute imports are being used."""
- if sys.version_info[0] >= 3:
- return True
-
- for node in ast.walk(root):
- if isinstance(node, ast.ImportFrom):
- if node.module == '__future__':
- for n in node.names:
- if n.name == 'absolute_import':
- return True
-
- return False
-
-
def walklocal(root):
"""Recursively yield all descendant nodes but not in a different scope"""
todo = collections.deque(ast.iter_child_nodes(root))
@@ -403,21 +388,10 @@
def verify_import_convention(module, source, localmods):
- """Verify imports match our established coding convention.
-
- We have 2 conventions: legacy and modern. The modern convention is in
- effect when using absolute imports.
+ """Verify imports match our established coding convention."""
+ root = ast.parse(source)
- The legacy convention only looks for mixed imports. The modern convention
- is much more thorough.
- """
- root = ast.parse(source)
- absolute = usingabsolute(root)
-
- if absolute:
- return verify_modern_convention(module, root, localmods)
- else:
- return verify_stdlib_on_own_line(root)
+ return verify_modern_convention(module, root, localmods)
def verify_modern_convention(module, root, localmods, root_col_offset=0):
@@ -618,33 +592,6 @@
)
-def verify_stdlib_on_own_line(root):
- """Given some python source, verify that stdlib imports are done
- in separate statements from relative local module imports.
-
- >>> list(verify_stdlib_on_own_line(ast.parse('import sys, foo')))
- [('mixed imports\\n stdlib: sys\\n relative: foo', 1)]
- >>> list(verify_stdlib_on_own_line(ast.parse('import sys, os')))
- []
- >>> list(verify_stdlib_on_own_line(ast.parse('import foo, bar')))
- []
- """
- for node in ast.walk(root):
- if isinstance(node, ast.Import):
- from_stdlib = {False: [], True: []}
- for n in node.names:
- from_stdlib[n.name in stdlib_modules].append(n.name)
- if from_stdlib[True] and from_stdlib[False]:
- yield (
- 'mixed imports\n stdlib: %s\n relative: %s'
- % (
- ', '.join(sorted(from_stdlib[True])),
- ', '.join(sorted(from_stdlib[False])),
- ),
- node.lineno,
- )
-
-
class CircularImport(Exception):
pass