D12246: import-checker: assume absolute and use modern import checker
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Wed Mar 2 00:44:01 UTC 2022
indygreg created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.
REVISION SUMMARY
Since we require Python 3 now, we can assume we always use absolute
imports and the modern import checker should be used.
REPOSITORY
rHG Mercurial
BRANCH
default
REVISION DETAIL
https://phab.mercurial-scm.org/D12246
AFFECTED FILES
contrib/import-checker.py
CHANGE DETAILS
diff --git a/contrib/import-checker.py b/contrib/import-checker.py
--- a/contrib/import-checker.py
+++ b/contrib/import-checker.py
@@ -58,21 +58,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))
@@ -402,21 +387,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):
@@ -617,33 +591,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
To: indygreg, #hg-reviewers
Cc: mercurial-patches, mercurial-devel
More information about the Mercurial-devel
mailing list