From eac69aef2b801ed6806e6cc3f069a0f4c12e8119 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 25 Feb 2019 21:48:57 +0100 Subject: [PATCH] Infer names in the correct way, fixes #1286 --- jedi/evaluate/syntax_tree.py | 6 +++++- test/test_api/test_defined_names.py | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/jedi/evaluate/syntax_tree.py b/jedi/evaluate/syntax_tree.py index 720ea349..2b90a29a 100644 --- a/jedi/evaluate/syntax_tree.py +++ b/jedi/evaluate/syntax_tree.py @@ -21,6 +21,7 @@ from jedi.evaluate.pep0484 import _evaluate_for_annotation from jedi.evaluate.context import ClassContext, FunctionContext from jedi.evaluate.context import iterable from jedi.evaluate.context import TreeInstance, CompiledInstance +from jedi.evaluate.filters import TreeNameDefinition, ParamName from jedi.evaluate.finder import NameFinder from jedi.evaluate.helpers import is_string, is_literal, is_number, is_compiled from jedi.evaluate.compiled.access import COMPARISON_OPERATORS @@ -526,8 +527,11 @@ def tree_name_to_contexts(evaluator, context, tree_name): # which means the function itself. filters = [next(filters)] return finder.find(filters, attribute_lookup=False) + elif node.type == 'param': + raise NotImplementedError elif node.type not in ('import_from', 'import_name'): - raise ValueError("Should not happen. type: %s", node.type) + context = evaluator.create_context(context, tree_name) + return eval_atom(context, tree_name) typ = node.type if typ == 'for_stmt': diff --git a/test/test_api/test_defined_names.py b/test/test_api/test_defined_names.py index 81b7c5b6..ed5f1eb2 100644 --- a/test/test_api/test_defined_names.py +++ b/test/test_api/test_defined_names.py @@ -96,3 +96,8 @@ def test_names_twice(environment): defs = names(source=source, environment=environment) assert defs[0].defined_names() == [] + + +def test_simple_name(environment): + defs = names('foo', references=True, environment=environment) + assert not defs[0]._name.infer()