diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index c0a9b8fa..5f648953 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -474,7 +474,7 @@ class ModuleContext(use_metaclass(CachedMetaClass, context.TreeContext)): @memoize_default([]) def star_imports(self): modules = [] - for i in self.tree_node.imports: + for i in self.tree_node.iter_imports(): if i.is_star_import(): name = i.star_import_name() new = imports.infer_import(self, name) diff --git a/jedi/parser/python/tree.py b/jedi/parser/python/tree.py index 61b355d7..46e4b444 100644 --- a/jedi/parser/python/tree.py +++ b/jedi/parser/python/tree.py @@ -245,9 +245,8 @@ class Scope(PythonBaseNode, DocstringMixin): def iter_classdefs(self): return self._search_in_scope(Class) - @property - def imports(self): - return list(self._search_in_scope(Import)) + def iter_imports(self): + return self._search_in_scope(Import) def _search_in_scope(self, typ): def scan(children): @@ -302,7 +301,7 @@ class Module(Scope): # parser does it in a different way and scans for the first # statement/import with a tokenizer (to check for syntax changes like # the future print statement). - for imp in self.imports: + for imp in self.iter_imports(): if imp.type == 'import_from' and imp.level == 0: for path in imp.paths(): if [name.value for name in path] == ['__future__', 'absolute_import']: diff --git a/test/test_parser/test_parser.py b/test/test_parser/test_parser.py index a1eb1499..2251c0a8 100644 --- a/test/test_parser/test_parser.py +++ b/test/test_parser/test_parser.py @@ -79,7 +79,7 @@ class TestSubscopes(): class TestImports(): def get_import(self, source): - return parse(source).imports[0] + return next(parse(source).iter_imports()) def test_import_names(self): imp = self.get_import(u('import math\n'))