diff --git a/jedi/evaluate/analysis.py b/jedi/evaluate/analysis.py index de1e93a1..b43a92b3 100644 --- a/jedi/evaluate/analysis.py +++ b/jedi/evaluate/analysis.py @@ -137,5 +137,5 @@ def get_module_statements(module): for scope in module.walk(): imports |= set(scope.imports) stmts |= add_stmts(scope.statements) - stmts |= add_stmts(scope.returns) + stmts |= add_stmts(r for r in scope.returns if r is not None) return stmts, imports diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index ae7c050e..4b9c158a 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -188,7 +188,11 @@ class CompiledName(FakeName): self.start_pos = 0, 0 # an illegal start_pos, to make sorting easy. def __repr__(self): - return '<%s: (%s).%s>' % (type(self).__name__, self._obj.name, self.name) + try: + name = self._obj.name # __name__ is not defined all the time + except AttributeError: + name = None + return '<%s: (%s).%s>' % (type(self).__name__, name, self.name) @property @underscore_memoization diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index 64e8f959..0d551ab5 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -795,7 +795,7 @@ class Import(Simple): import foo.bar """ - return not self.alias and not self.from_ns \ + return not self.alias and not self.from_ns and self.namespace is not None \ and len(self.namespace.names) > 1 diff --git a/test/test_parser/test_representation.py b/test/test_parser/test_representation.py new file mode 100644 index 00000000..e2151a34 --- /dev/null +++ b/test/test_parser/test_representation.py @@ -0,0 +1,7 @@ +from jedi.parser import Parser + + +def test_import_is_nested(): + imp = Parser('import ').module.imports[0] + # should not raise an error, even if it's not a complete import + assert not imp.is_nested()