From 6feac2a0ecfd08e6dc3759ebe1f34c50ee4d12a6 Mon Sep 17 00:00:00 2001 From: Johannes Mikulasch Date: Tue, 31 Oct 2017 12:58:56 +0100 Subject: [PATCH] add ahead of time annotations PEP 526 --- jedi/evaluate/syntax_tree.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/jedi/evaluate/syntax_tree.py b/jedi/evaluate/syntax_tree.py index 1d847a49..54cfa459 100644 --- a/jedi/evaluate/syntax_tree.py +++ b/jedi/evaluate/syntax_tree.py @@ -17,6 +17,7 @@ from jedi.evaluate import helpers from jedi.evaluate import analysis from jedi.evaluate import imports from jedi.evaluate import arguments +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 @@ -442,6 +443,22 @@ def _remove_statements(evaluator, context, stmt, name): def tree_name_to_contexts(evaluator, context, tree_name): + + context_set = ContextSet() + module = context.get_root_context().tree_node + names = module.get_used_names().get(tree_name.value) + for name in names: + expr_stmt = name.parent + + correct_scope = parser_utils.get_parent_scope(name) == context.tree_node + + if expr_stmt.type == "expr_stmt" and expr_stmt.children[1].type == "annassign" and correct_scope: + print("found node in correct scope!", expr_stmt.children[1].children[1]) + context_set |= _evaluate_for_annotation(context, expr_stmt.children[1].children[1]) + + if context_set: + return context_set + types = [] node = tree_name.get_definition(import_name_always=True) if node is None: