forked from VimPlug/jedi
Support "a = b = 1"-style assignment
This commit is contained in:
@@ -554,16 +554,33 @@ def assign_tuples(tup, results, seek_name):
|
|||||||
else:
|
else:
|
||||||
r = eval_results(i)
|
r = eval_results(i)
|
||||||
|
|
||||||
# are there still tuples or is it just a Call.
|
# LHS of tuples can be nested, so resolve it recursively
|
||||||
if isinstance(command, pr.Array):
|
result += find_assignments(command, r, seek_name)
|
||||||
# These are "sub"-tuples.
|
|
||||||
result += assign_tuples(command, r, seek_name)
|
|
||||||
else:
|
|
||||||
if command.name.names[-1] == seek_name:
|
|
||||||
result += r
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def find_assignments(lhs, results, seek_name):
|
||||||
|
"""
|
||||||
|
Check if `seek_name` is in the left hand side `lhs` of assignment.
|
||||||
|
|
||||||
|
`lhs` can simply be a variable (`pr.Call`) or a tuple/list (`pr.Array`)
|
||||||
|
representing the following cases::
|
||||||
|
|
||||||
|
a = 1 # lhs is pr.Call
|
||||||
|
(a, b) = 2 # lhs is pr.Array
|
||||||
|
|
||||||
|
:type lhs: pr.Call
|
||||||
|
:type results: list
|
||||||
|
:type seek_name: str
|
||||||
|
"""
|
||||||
|
if isinstance(lhs, pr.Array):
|
||||||
|
return assign_tuples(lhs, results, seek_name)
|
||||||
|
elif lhs.name.names[-1] == seek_name:
|
||||||
|
return results
|
||||||
|
else:
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
@recursion.RecursionDecorator
|
@recursion.RecursionDecorator
|
||||||
@cache.memoize_default(default=())
|
@cache.memoize_default(default=())
|
||||||
def follow_statement(stmt, seek_name=None):
|
def follow_statement(stmt, seek_name=None):
|
||||||
@@ -587,7 +604,7 @@ def follow_statement(stmt, seek_name=None):
|
|||||||
if len(stmt.get_set_vars()) > 1 and seek_name and stmt.assignment_details:
|
if len(stmt.get_set_vars()) > 1 and seek_name and stmt.assignment_details:
|
||||||
new_result = []
|
new_result = []
|
||||||
for ass_commands, op in stmt.assignment_details:
|
for ass_commands, op in stmt.assignment_details:
|
||||||
new_result += assign_tuples(ass_commands[0], result, seek_name)
|
new_result += find_assignments(ass_commands[0], result, seek_name)
|
||||||
result = new_result
|
result = new_result
|
||||||
return set(result)
|
return set(result)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user