[PATCH 1 of 8] import-checker: show stdlib and relative imports separately
Mads Kiilerich
mads at kiilerich.com
Mon Jan 20 00:32:25 UTC 2014
# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1390177794 -3600
# Mon Jan 20 01:29:54 2014 +0100
# Node ID 3a963f886a2374b0221c73cdcba4e4bac2981852
# Parent 4988e42465370f1458b2ddd9bf2760f3f881b3ce
import-checker: show stdlib and relative imports separately
Make it more clear what is what so the problem can be investigated.
diff --git a/contrib/import-checker.py b/contrib/import-checker.py
--- a/contrib/import-checker.py
+++ b/contrib/import-checker.py
@@ -136,7 +136,7 @@ def verify_stdlib_on_own_line(source):
http://bugs.python.org/issue19510.
>>> list(verify_stdlib_on_own_line('import sys, foo'))
- ['mixed stdlib and relative imports:\\n foo, sys']
+ ['mixed imports\\n stdlib: sys\\n relative: foo']
>>> list(verify_stdlib_on_own_line('import sys, os'))
[]
>>> list(verify_stdlib_on_own_line('import foo, bar'))
@@ -144,13 +144,13 @@ def verify_stdlib_on_own_line(source):
"""
for node in ast.walk(ast.parse(source)):
if isinstance(node, ast.Import):
- from_stdlib = {}
+ from_stdlib = {False: [], True: []}
for n in node.names:
- from_stdlib[n.name] = n.name in stdlib_modules
- num_std = len([x for x in from_stdlib.values() if x])
- if num_std not in (len(from_stdlib.values()), 0):
- yield ('mixed stdlib and relative imports:\n %s' %
- ', '.join(sorted(from_stdlib.iterkeys())))
+ 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]))))
class CircularImport(Exception):
pass
diff --git a/tests/test-module-imports.t b/tests/test-module-imports.t
--- a/tests/test-module-imports.t
+++ b/tests/test-module-imports.t
@@ -23,16 +23,21 @@ hidden by deduplication algorithm in the
these may expose other cycles.
$ hg locate 'mercurial/**.py' | xargs python "$import_checker"
- mercurial/dispatch.py mixed stdlib and relative imports:
- commands, error, extensions, fancyopts, hg, hook, util
- mercurial/fileset.py mixed stdlib and relative imports:
- error, merge, parser, util
- mercurial/revset.py mixed stdlib and relative imports:
- discovery, error, hbisect, parser, phases, util
- mercurial/templater.py mixed stdlib and relative imports:
- config, error, parser, templatefilters, util
- mercurial/ui.py mixed stdlib and relative imports:
- config, error, formatter, scmutil, util
+ mercurial/dispatch.py mixed imports
+ stdlib: commands
+ relative: error, extensions, fancyopts, hg, hook, util
+ mercurial/fileset.py mixed imports
+ stdlib: parser
+ relative: error, merge, util
+ mercurial/revset.py mixed imports
+ stdlib: parser
+ relative: discovery, error, hbisect, phases, util
+ mercurial/templater.py mixed imports
+ stdlib: parser
+ relative: config, error, templatefilters, util
+ mercurial/ui.py mixed imports
+ stdlib: formatter
+ relative: config, error, scmutil, util
Import cycle: mercurial.cmdutil -> mercurial.subrepo -> mercurial.cmdutil
Import cycle: mercurial.repoview -> mercurial.revset -> mercurial.repoview
Import cycle: mercurial.fileset -> mercurial.merge -> mercurial.subrepo -> mercurial.match -> mercurial.fileset
More information about the Mercurial-devel
mailing list