From 11b61596e0c6ecba65a38086627b8decbffa4809 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Thu, 23 Jan 2020 23:58:45 +0100 Subject: [PATCH] Make sure that del_stmt as a name can be handled, see #313 --- jedi/api/completion.py | 5 +++++ jedi/inference/finder.py | 13 +++++++++++-- jedi/inference/syntax_tree.py | 4 +++- test/completion/basic.py | 13 +++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/jedi/api/completion.py b/jedi/api/completion.py index f43b9b45..f8853cdf 100644 --- a/jedi/api/completion.py +++ b/jedi/api/completion.py @@ -64,6 +64,11 @@ def filter_names(inference_state, completion_names, stack, like_name, fuzzy, cac k = (new.name, new.complete) # key if k not in comp_dct: comp_dct.add(k) + tree_name = name.tree_name + if tree_name is not None: + definition = tree_name.get_definition() + if definition is not None and definition.type == 'del_stmt': + continue yield new diff --git a/jedi/inference/finder.py b/jedi/inference/finder.py index 18b02401..aac58732 100644 --- a/jedi/inference/finder.py +++ b/jedi/inference/finder.py @@ -20,7 +20,6 @@ from parso.python.tree import Name from jedi import settings from jedi.inference.arguments import TreeArguments -from jedi.inference import helpers from jedi.inference.value import iterable from jedi.inference.base_value import NO_VALUES from jedi.parser_utils import is_scope @@ -38,7 +37,17 @@ def filter_name(filters, name_or_str): if names: break - return list(names) + return list(_remove_del_stmt(names)) + + +def _remove_del_stmt(names): + # Catch del statements and remove them from results. + for name in names: + if name.tree_name is not None: + definition = name.tree_name.get_definition() + if definition is not None and definition.type == 'del_stmt': + continue + yield name def check_flow_information(value, flow, search_name, pos): diff --git a/jedi/inference/syntax_tree.py b/jedi/inference/syntax_tree.py index e790ed81..6512fa76 100644 --- a/jedi/inference/syntax_tree.py +++ b/jedi/inference/syntax_tree.py @@ -725,7 +725,9 @@ def tree_name_to_values(inference_state, context, tree_name): # the static analysis report. exceptions = context.infer_node(tree_name.get_previous_sibling().get_previous_sibling()) types = exceptions.execute_with_values() - elif node.type == 'param': + elif typ == 'param': + types = NO_VALUES + elif typ == 'del_stmt': types = NO_VALUES else: raise ValueError("Should not happen. type: %s" % typ) diff --git a/test/completion/basic.py b/test/completion/basic.py index 115ab16d..b4006817 100644 --- a/test/completion/basic.py +++ b/test/completion/basic.py @@ -203,6 +203,19 @@ if r: #? int() r +# ----------------- +# del +# ----------------- + +deleted_var = 3 +del deleted_var +#? int() +deleted_var +#? ['deleted_var'] +deleted_var +#! ['deleted_var = 3'] +deleted_var + # ----------------- # within docstrs # -----------------