# HG changeset patch # User timeless # Date 1460565299 0 # Node ID 02ee31a5000251e06b9f9af24df25d6d8c2048d7 # Parent cdf331b54eb88e89a8729cd071d60ac309d06075 import-checker: track filenames for SyntaxErrors diff -r cdf331b54eb8 -r 02ee31a50002 contrib/import-checker.py --- a/contrib/import-checker.py Wed Apr 13 16:36:19 2016 +0000 +++ b/contrib/import-checker.py Wed Apr 13 16:34:59 2016 +0000 @@ -225,7 +225,7 @@ stdlib_modules = set(list_stdlib_modules()) -def imported_modules(source, modulename, localmods, ignore_nested=False): +def imported_modules(source, modulename, f, localmods, ignore_nested=False): """Given the source of a file as a string, yield the names imported by that file. @@ -239,6 +239,7 @@ Returns: A list of absolute module names imported by the given source. + >>> f = 'foo/xxx.py' >>> modulename = 'foo.xxx' >>> localmods = {'foo.__init__': True, ... 'foo.foo1': True, 'foo.foo2': True, @@ -247,43 +248,43 @@ >>> # standard library (= not locally defined ones) >>> sorted(imported_modules( ... 'from stdlib1 import foo, bar; import stdlib2', - ... modulename, localmods)) + ... modulename, f, localmods)) [] >>> # relative importing >>> sorted(imported_modules( ... 'import foo1; from bar import bar1', - ... modulename, localmods)) + ... modulename, f, localmods)) ['foo.bar.bar1', 'foo.foo1'] >>> sorted(imported_modules( ... 'from bar.bar1 import name1, name2, name3', - ... modulename, localmods)) + ... modulename, f, localmods)) ['foo.bar.bar1'] >>> # absolute importing >>> sorted(imported_modules( ... 'from baz import baz1, name1', - ... modulename, localmods)) + ... modulename, f, localmods)) ['baz.__init__', 'baz.baz1'] >>> # mixed importing, even though it shouldn't be recommended >>> sorted(imported_modules( ... 'import stdlib, foo1, baz', - ... modulename, localmods)) + ... modulename, f, localmods)) ['baz.__init__', 'foo.foo1'] >>> # ignore_nested >>> sorted(imported_modules( ... '''import foo ... def wat(): ... import bar - ... ''', modulename, localmods)) + ... ''', modulename, f, localmods)) ['foo.__init__', 'foo.bar.__init__'] >>> sorted(imported_modules( ... '''import foo ... def wat(): ... import bar - ... ''', modulename, localmods, ignore_nested=True)) + ... ''', modulename, f, localmods, ignore_nested=True)) ['foo.__init__'] """ fromlocal = fromlocalfunc(modulename, localmods) - for node in ast.walk(ast.parse(source)): + for node in ast.walk(ast.parse(source, f)): if ignore_nested and getattr(node, 'col_offset', 0) > 0: continue if isinstance(node, ast.Import): @@ -589,7 +590,7 @@ for src, modname in sources(source_path, localmodname): try: used_imports[modname] = sorted( - imported_modules(src, modname, localmods, + imported_modules(src, modname, source_path, localmods, ignore_nested=True)) for error, lineno in verify_import_convention(modname, src, localmods):