From e0c8b3dd3b9743ddd27c1428a1aa982f3adce556 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 29 Jan 2017 19:09:35 +0100 Subject: [PATCH] Fix an context issue in completions. --- jedi/api/completion.py | 11 ++++++++++- test/completion/flow_analysis.py | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/jedi/api/completion.py b/jedi/api/completion.py index 00b937cf..5a5ecd98 100644 --- a/jedi/api/completion.py +++ b/jedi/api/completion.py @@ -70,6 +70,14 @@ def get_user_scope(module_context, position): return module_context.create_context(user_stmt) +def get_flow_scope_node(module_node, position): + node = module_node.get_leaf_for_position(position, include_prefixes=True) + while not isinstance(node, (tree.Scope, tree.Flow)): + node = node.parent + + return node + + class Completion: def __init__(self, evaluator, module, code_lines, position, call_signatures_method): self._evaluator = evaluator @@ -176,11 +184,12 @@ class Completion: def _global_completions(self): context = get_user_scope(self._module_context, self._position) debug.dbg('global completion scope: %s', context) + flow_scope_node = get_flow_scope_node(self._module_node, self._position) filters = get_global_filters( self._evaluator, context, self._position, - origin_scope=self._module_node + origin_scope=flow_scope_node ) completion_names = [] for filter in filters: diff --git a/test/completion/flow_analysis.py b/test/completion/flow_analysis.py index 0b330a3e..af292b47 100644 --- a/test/completion/flow_analysis.py +++ b/test/completion/flow_analysis.py @@ -242,6 +242,11 @@ if 0: #? nested +if False: + in_false = 1 + #? ['in_false'] + in_false + # ----------------- # True objects like modules # -----------------