forked from VimPlug/jedi
add a names_are_set_vars variable to statement
This commit is contained in:
@@ -300,7 +300,7 @@ class Parser(object):
|
|||||||
return scope
|
return scope
|
||||||
|
|
||||||
def _parse_statement(self, pre_used_token=None, added_breaks=None,
|
def _parse_statement(self, pre_used_token=None, added_breaks=None,
|
||||||
stmt_class=pr.Statement):
|
stmt_class=pr.Statement, names_are_set_vars=False):
|
||||||
"""
|
"""
|
||||||
Parses statements like::
|
Parses statements like::
|
||||||
|
|
||||||
@@ -409,7 +409,8 @@ class Parser(object):
|
|||||||
|
|
||||||
|
|
||||||
stmt = stmt_class(self.module, set_vars, used_vars, tok_list,
|
stmt = stmt_class(self.module, set_vars, used_vars, tok_list,
|
||||||
first_pos, self.end_pos, as_names=as_names)
|
first_pos, self.end_pos, as_names=as_names,
|
||||||
|
names_are_set_vars=names_are_set_vars)
|
||||||
|
|
||||||
stmt.parent = self.top_module
|
stmt.parent = self.top_module
|
||||||
self._check_user_stmt(stmt)
|
self._check_user_stmt(stmt)
|
||||||
@@ -572,7 +573,8 @@ class Parser(object):
|
|||||||
self.freshscope = False
|
self.freshscope = False
|
||||||
# loops
|
# loops
|
||||||
elif tok == 'for':
|
elif tok == 'for':
|
||||||
set_stmt, tok = self._parse_statement(added_breaks=['in'])
|
set_stmt, tok = self._parse_statement(added_breaks=['in'],
|
||||||
|
names_are_set_vars=True)
|
||||||
if tok == 'in':
|
if tok == 'in':
|
||||||
statement, tok = self._parse_statement()
|
statement, tok = self._parse_statement()
|
||||||
if tok == ':':
|
if tok == ':':
|
||||||
|
|||||||
@@ -638,7 +638,7 @@ class ForFlow(Flow):
|
|||||||
set_stmt.parent = self.use_as_parent
|
set_stmt.parent = self.use_as_parent
|
||||||
self.is_list_comp = is_list_comp
|
self.is_list_comp = is_list_comp
|
||||||
|
|
||||||
self.set_vars = [t for t in set_stmt.token_list if isinstance(t, Name)]
|
self.set_vars = set_stmt.get_set_vars()
|
||||||
for s in self.set_vars:
|
for s in self.set_vars:
|
||||||
s.parent.parent = self.use_as_parent
|
s.parent.parent = self.use_as_parent
|
||||||
s.parent = self.use_as_parent
|
s.parent = self.use_as_parent
|
||||||
@@ -755,13 +755,15 @@ class Statement(Simple):
|
|||||||
"""
|
"""
|
||||||
__slots__ = ('token_list', '_used_vars',
|
__slots__ = ('token_list', '_used_vars',
|
||||||
'_set_vars', 'as_names', '_commands', '_assignment_details',
|
'_set_vars', 'as_names', '_commands', '_assignment_details',
|
||||||
'docstr')
|
'docstr', '_names_are_set_vars')
|
||||||
|
|
||||||
def __init__(self, module, set_vars, used_vars, token_list,
|
def __init__(self, module, set_vars, used_vars, token_list,
|
||||||
start_pos, end_pos, parent=None, as_names=(), set_name_parents=True):
|
start_pos, end_pos, parent=None, as_names=(),
|
||||||
|
names_are_set_vars=False, set_name_parents=True):
|
||||||
super(Statement, self).__init__(module, start_pos, end_pos)
|
super(Statement, self).__init__(module, start_pos, end_pos)
|
||||||
self._used_vars = used_vars
|
self._used_vars = used_vars
|
||||||
self.token_list = token_list
|
self.token_list = token_list
|
||||||
|
self._names_are_set_vars = names_are_set_vars
|
||||||
if set_name_parents:
|
if set_name_parents:
|
||||||
for t in token_list:
|
for t in token_list:
|
||||||
if isinstance(t, Name):
|
if isinstance(t, Name):
|
||||||
@@ -820,7 +822,7 @@ class Statement(Simple):
|
|||||||
for calls, operation in self.assignment_details:
|
for calls, operation in self.assignment_details:
|
||||||
search_calls(calls)
|
search_calls(calls)
|
||||||
|
|
||||||
if not self.assignment_details and isinstance(self, Param):
|
if not self.assignment_details and self._names_are_set_vars:
|
||||||
# In the case of Param, it's also a defining name without ``=``
|
# In the case of Param, it's also a defining name without ``=``
|
||||||
search_calls(self.get_commands())
|
search_calls(self.get_commands())
|
||||||
return self._set_vars + self.as_names
|
return self._set_vars + self.as_names
|
||||||
@@ -985,7 +987,8 @@ class Statement(Simple):
|
|||||||
return lambd, tok
|
return lambd, tok
|
||||||
|
|
||||||
def parse_list_comp(token_iterator, token_list, start_pos, end_pos):
|
def parse_list_comp(token_iterator, token_list, start_pos, end_pos):
|
||||||
def parse_stmt_or_arr(token_iterator, added_breaks=()):
|
def parse_stmt_or_arr(token_iterator, added_breaks=(),
|
||||||
|
names_are_set_vars=False):
|
||||||
stmt, tok = parse_stmt(token_iterator,
|
stmt, tok = parse_stmt(token_iterator,
|
||||||
added_breaks=added_breaks)
|
added_breaks=added_breaks)
|
||||||
if not stmt:
|
if not stmt:
|
||||||
@@ -1006,13 +1009,13 @@ class Statement(Simple):
|
|||||||
for t in stmt.token_list:
|
for t in stmt.token_list:
|
||||||
if isinstance(t, Name):
|
if isinstance(t, Name):
|
||||||
t.parent = stmt
|
t.parent = stmt
|
||||||
|
stmt._names_are_set_vars = names_are_set_vars
|
||||||
return stmt, tok
|
return stmt, tok
|
||||||
|
|
||||||
st = Statement(self._sub_module, [], [], token_list, start_pos,
|
st = Statement(self._sub_module, [], [], token_list, start_pos,
|
||||||
end_pos, set_name_parents=False)
|
end_pos, set_name_parents=False)
|
||||||
|
|
||||||
middle, tok = parse_stmt_or_arr(token_iterator,
|
middle, tok = parse_stmt_or_arr(token_iterator, ['in'], True)
|
||||||
added_breaks=['in'])
|
|
||||||
if tok != 'in' or middle is None:
|
if tok != 'in' or middle is None:
|
||||||
debug.warning('list comprehension middle @%s' % str(start_pos))
|
debug.warning('list comprehension middle @%s' % str(start_pos))
|
||||||
return None, tok
|
return None, tok
|
||||||
@@ -1127,7 +1130,8 @@ class Param(Statement):
|
|||||||
'parent_function')
|
'parent_function')
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(Param, self).__init__(*args, **kwargs)
|
kwargs.pop('names_are_set_vars', None)
|
||||||
|
super(Param, self).__init__(*args, names_are_set_vars=True, **kwargs)
|
||||||
|
|
||||||
# this is defined by the parser later on, not at the initialization
|
# this is defined by the parser later on, not at the initialization
|
||||||
# it is the position in the call (first argument, second...)
|
# it is the position in the call (first argument, second...)
|
||||||
|
|||||||
Reference in New Issue
Block a user