Mercurial > public > mercurial-scm > hg-stable
diff contrib/import-checker.py @ 29208:cba8bc11ed10
import-checker: extend check of symbol-import order to all local modules
It doesn't make sense that (a) is allowed whereas (b) is disallowed.
a) from mercurial import hg
from mercurial.i18n import _
b) from . import hg
from .i18n import _
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 14 May 2016 13:39:33 +0900 |
parents | a09098c61fea |
children | b42c2a66a698 |
line wrap: on
line diff
--- a/contrib/import-checker.py Sat May 14 13:20:13 2016 +0900 +++ b/contrib/import-checker.py Sat May 14 13:39:33 2016 +0900 @@ -370,7 +370,7 @@ * Symbols can only be imported from specific modules (see `allowsymbolimports`). For other modules, first import the module then assign the symbol to a module-level variable. In addition, these imports - must be performed before other relative imports. This rule only + must be performed before other local imports. This rule only applies to import statements outside of any blocks. * Relative imports from the standard library are not allowed. * Certain modules must be aliased to alternate names to avoid aliasing @@ -381,8 +381,8 @@ # Whether a local/non-stdlib import has been performed. seenlocal = None - # Whether a relative, non-symbol import has been seen. - seennonsymbolrelative = False + # Whether a local/non-stdlib, non-symbol import has been seen. + seennonsymbollocal = False # The last name to be imported (for sorting). lastname = None # Relative import levels encountered so far. @@ -468,13 +468,14 @@ yield msg('direct symbol import %s from %s', ', '.join(symbols), fullname) - if symbols and seennonsymbolrelative: + if symbols and seennonsymbollocal: yield msg('symbol import follows non-symbol import: %s', fullname) + if not symbols and fullname not in stdlib_modules: + seennonsymbollocal = True if not node.module: assert node.level - seennonsymbolrelative = True # Only allow 1 group per level. if (node.level in seenlevels