1
0
forked from VimPlug/jedi

Reverted 10f5e1 --- needed some more work to get it working again

This commit is contained in:
Claude
2016-01-17 16:12:43 +01:00
parent ae701b2f9a
commit b499906398
2 changed files with 32 additions and 36 deletions

View File

@@ -31,45 +31,36 @@ from jedi import debug
def _evaluate_for_annotation(evaluator, annotation):
if annotation is not None:
dereferenced_annotation = _fix_forward_reference(evaluator, annotation)
definitions = evaluator.eval_element(dereferenced_annotation)
definitions = evaluator.eval_element(
_fix_forward_reference(evaluator, annotation))
return list(itertools.chain.from_iterable(
evaluator.execute(d) for d in definitions))
else:
return []
def _fix_forward_reference(evaluator, item):
"""
Gets something from the parse tree, and replaces any string literal
in there with the result of evaluating that string at the bottom of the
module
"""
if isinstance(item, tree.String):
compiledobjects = evaluator.eval_element(item)
assert len(compiledobjects) == 1
compiledobject = list(compiledobjects)[0]
def _fix_forward_reference(evaluator, node):
evaled_nodes = evaluator.eval_element(node)
if len(evaled_nodes) != 1:
debug.warning("Eval'ed typing index %s should lead to 1 object, "
" not %s" % (node, evaled_nodes))
return node
evaled_node = list(evaled_nodes)[0]
if isinstance(evaled_node, compiled.CompiledObject) and \
isinstance(evaled_node.obj, str):
try:
p = Parser(load_grammar(), compiledobject.obj, start='eval_input')
element = p.get_parsed_node()
p = Parser(load_grammar(), evaled_node.obj, start='eval_input')
newnode = p.get_parsed_node()
except ParseError:
debug.warning('Annotation not parsed: %s' % compiledobject.obj)
return item
debug.warning('Annotation not parsed: %s' % evaled_node.obj)
return node
else:
module = item.get_parent_until()
module = node.get_parent_until()
p.position_modifier.line = module.end_pos[0]
element.parent = module
dereferenced = _fix_forward_reference(evaluator, element)
return dereferenced
if isinstance(item, tree.Node):
newnode = tree.Node(item.type, [])
for child in item.children:
newchild = _fix_forward_reference(evaluator, child)
newchild.parent = newnode
newnode.children.append(newchild)
newnode.parent = item.parent
return newnode
return item
newnode.parent = module
return newnode
else:
return node
@memoize_default(None, evaluator_is_first_arg=True)
@@ -113,6 +104,8 @@ def get_types_for_typing_module(evaluator, typ, node):
nodes = [node]
del node
nodes = [_fix_forward_reference(evaluator, node) for node in nodes]
# hacked in Union and Optional, since it's hard to do nicely in parsed code
if typ.name.value == "Union":
return unite(evaluator.eval_element(node) for node in nodes)
@@ -132,25 +125,24 @@ def get_types_for_typing_module(evaluator, typ, node):
return None
compiled_classname = compiled.create(evaluator, typ.name.value)
result = set()
args = FakeSequence(evaluator, nodes, "tuple")
result |= evaluator.execute_evaluated(factory, compiled_classname, args)
result = evaluator.execute_evaluated(factory, compiled_classname, args)
human_nodes = []
for node in nodes:
evalled_node = evaluator.eval_element(node)
if len(evalled_node) != 1:
evaled_node = evaluator.eval_element(node)
if len(evaled_node) != 1:
human_nodes.append("???")
continue
evalled_node = list(evalled_node)[0]
evaled_node = list(evaled_node)[0]
try:
human_nodes.append(str(evalled_node.name))
human_nodes.append(str(evaled_node.name))
except AttributeError:
pass
else:
continue
try:
human_nodes.append(evalled_node.obj.__name__)
human_nodes.append(evaled_node.obj.__name__)
except AttributeError:
pass
else:

View File

@@ -153,3 +153,7 @@ def function_with_assined_class_in_reference(x: X, y: "Y"):
#? int()
y
Y = int
def just_because_we_can(x: "flo" + "at"):
#? float()
x