diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index f8e854f1..e2e6d712 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -488,7 +488,7 @@ class Script(object): if call is None: return [] - user_stmt = self._parser.user_stmt() + user_stmt = self._parser.user_stmt(True) with common.scale_speed_settings(settings.scale_call_signatures): _callable = lambda: self._evaluator.eval_call(call) origins = cache.cache_call_signatures(_callable, user_stmt) @@ -502,7 +502,7 @@ class Script(object): debug.speed('func_call start') call, index = None, 0 if call is None: - user_stmt = self._parser.user_stmt() + user_stmt = self._parser.user_stmt(True) if user_stmt is not None and isinstance(user_stmt, pr.Statement): call, index, _ = helpers.search_call_signatures(user_stmt, self._pos) debug.speed('func_call parsed') diff --git a/jedi/parser/user_context.py b/jedi/parser/user_context.py index 44ffafcd..c927e95f 100644 --- a/jedi/parser/user_context.py +++ b/jedi/parser/user_context.py @@ -126,6 +126,7 @@ class UserContext(object): + (after.group(0) if after is not None else '') def get_context(self, yield_positions=False): + self.get_path_until_cursor() # In case _start_cursor_pos is undefined. pos = self._start_cursor_pos while True: # remove non important white space @@ -200,18 +201,16 @@ class UserContextParser(object): return self.module().get_statement_for_position(self._position, include_imports=True) - def user_stmt(self, is_completion=False): + def user_stmt(self, check_whitespace=False): user_stmt = self._get_user_stmt() debug.speed('parsed') - if is_completion and not user_stmt: + if check_whitespace and not user_stmt: # for statements like `from x import ` (cursor not in statement) + # or `abs( ` where the cursor is out in the whitespace. pos = next(self._user_context.get_context(yield_positions=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 + user_stmt = self.module().get_statement_for_position(pos, include_imports=True) return user_stmt @cache.underscore_memoization