mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-08 14:54:47 +08:00
Fix some more issues with the call_of_name function.
This commit is contained in:
@@ -84,18 +84,20 @@ def call_of_name(leaf, cut_own_trailer=False):
|
|||||||
# ignore it, It's not what we want anyway. Or document it better?
|
# ignore it, It's not what we want anyway. Or document it better?
|
||||||
"""
|
"""
|
||||||
trailer = leaf.parent
|
trailer = leaf.parent
|
||||||
print(leaf)
|
|
||||||
# The leaf may not be the last or first child, because there exist three
|
# The leaf may not be the last or first child, because there exist three
|
||||||
# different trailers: `( x )`, `[ x ]` and `.x`. In the first two examples
|
# different trailers: `( x )`, `[ x ]` and `.x`. In the first two examples
|
||||||
# we should not match anything more than x.
|
# we should not match anything more than x.
|
||||||
if trailer.type != 'trailer' or leaf not in (trailer.children[0], trailer.children[-1]):
|
if trailer.type != 'trailer' or leaf not in (trailer.children[0], trailer.children[-1]):
|
||||||
return leaf
|
return leaf
|
||||||
|
|
||||||
assert not cut_own_trailer # TODO remove
|
|
||||||
power = trailer.parent
|
power = trailer.parent
|
||||||
index = power.children.index(trailer)
|
index = power.children.index(trailer)
|
||||||
power = deep_ast_copy(power)
|
power = deep_ast_copy(power)
|
||||||
power.children[index + 1:] = []
|
if cut_own_trailer:
|
||||||
|
cut = index
|
||||||
|
else:
|
||||||
|
cut = index + 1
|
||||||
|
power.children[cut:] = []
|
||||||
|
|
||||||
if power.type == 'error_node':
|
if power.type == 'error_node':
|
||||||
transformed = tree.Node('power', power.children)
|
transformed = tree.Node('power', power.children)
|
||||||
|
|||||||
@@ -537,6 +537,7 @@ class Function(use_metaclass(CachedMetaClass, Wrapper)):
|
|||||||
if trailer:
|
if trailer:
|
||||||
# Create a trailer and evaluate it.
|
# Create a trailer and evaluate it.
|
||||||
trailer = tree.Node('trailer', trailer)
|
trailer = tree.Node('trailer', trailer)
|
||||||
|
# TODO WTF WHY IS THIS CHANGING PARENTS
|
||||||
trailer.parent = dec
|
trailer.parent = dec
|
||||||
dec_results = self._evaluator.eval_trailer(dec_results, trailer)
|
dec_results = self._evaluator.eval_trailer(dec_results, trailer)
|
||||||
|
|
||||||
@@ -632,7 +633,9 @@ class FunctionExecution(Executed):
|
|||||||
self._copy_dict = {}
|
self._copy_dict = {}
|
||||||
new_func = helpers.deep_ast_copy(base.base_func, new_elements=self._copy_dict)
|
new_func = helpers.deep_ast_copy(base.base_func, new_elements=self._copy_dict)
|
||||||
for child in new_func.children:
|
for child in new_func.children:
|
||||||
child.parent = self
|
if child.type not in ('operator', 'keyword'):
|
||||||
|
# Not all nodes are properly copied by deep_ast_copy.
|
||||||
|
child.parent = self
|
||||||
self.children = new_func.children
|
self.children = new_func.children
|
||||||
self.names_dict = new_func.names_dict
|
self.names_dict = new_func.names_dict
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user