diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index 75cdb172..1defb6c2 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -16,7 +16,6 @@ from itertools import chain from jedi._compatibility import next, unicode, builtins from jedi.parser import Parser from jedi.parser import representation as pr -from jedi.parser import fast from jedi.parser.user_context import UserContext, UserContextParser from jedi import debug from jedi import settings diff --git a/jedi/parser/user_context.py b/jedi/parser/user_context.py index 4cc774d6..cb158daa 100644 --- a/jedi/parser/user_context.py +++ b/jedi/parser/user_context.py @@ -195,16 +195,21 @@ class UserContextParser(object): cache.save_parser(self._path, None, parser, pickling=False) return parser + @cache.underscore_memoization + def _get_user_stmt(self): + return self.module().get_statement_for_position(self._position, + include_imports=True) + def user_stmt(self, is_completion=False): - user_stmt = self._parser().user_stmt + user_stmt = self._get_user_stmt() debug.speed('parsed') if is_completion and not user_stmt: # for statements like `from x import ` (cursor not in statement) pos = next(self._user_context.get_context(yield_positions=True)) - last_stmt = pos and self._parser().module.get_statement_for_position( - pos, include_imports=True) + last_stmt = pos and \ + self.module().get_statement_for_position(pos, include_imports=True) if isinstance(last_stmt, representation.Import): user_stmt = last_stmt return user_stmt