def is_before(node1, node2):
"""
checks if definately appears before node2
"""
parents1 = []
current = node1.parent
#first get parent_list of node1
while current is not None:
if isinstance(current, ast.Assign) or isinstance(current, ast.AugAssign):
parent1 = current
break
parents1.append(current)
current = current.parent
current = node2
if current in parents1:
return False
while current is not None:
try:
"""if current.parent == parent1.parent:
parent_field = current.parent_field
field_list = getattr(current.parent, parent_field)
list_index1 = field_list.index(parent1)
list_index2 = field_list.index(current)
if list_index2 > list_index1:
return True"""
if current.parent == parent1.parent:
for field, value in ast.iter_fields(parent1.parent):
if value == current or value == parent1:
return False
elif isinstance(value, list) and current in value and parent1 in value:
list_index1 = value.index(parent1)
list_index2 = value.index(current)
if list_index2 > list_index1:
return True
except:
return False
current = current.parent
return False
评论列表
文章目录