mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 22:44:27 +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?
|
||||
"""
|
||||
trailer = leaf.parent
|
||||
print(leaf)
|
||||
# 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
|
||||
# we should not match anything more than x.
|
||||
if trailer.type != 'trailer' or leaf not in (trailer.children[0], trailer.children[-1]):
|
||||
return leaf
|
||||
|
||||
assert not cut_own_trailer # TODO remove
|
||||
power = trailer.parent
|
||||
index = power.children.index(trailer)
|
||||
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':
|
||||
transformed = tree.Node('power', power.children)
|
||||
|
||||
@@ -537,6 +537,7 @@ class Function(use_metaclass(CachedMetaClass, Wrapper)):
|
||||
if trailer:
|
||||
# Create a trailer and evaluate it.
|
||||
trailer = tree.Node('trailer', trailer)
|
||||
# TODO WTF WHY IS THIS CHANGING PARENTS
|
||||
trailer.parent = dec
|
||||
dec_results = self._evaluator.eval_trailer(dec_results, trailer)
|
||||
|
||||
@@ -632,7 +633,9 @@ class FunctionExecution(Executed):
|
||||
self._copy_dict = {}
|
||||
new_func = helpers.deep_ast_copy(base.base_func, new_elements=self._copy_dict)
|
||||
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.names_dict = new_func.names_dict
|
||||
|
||||
|
||||
Reference in New Issue
Block a user