py-backwards icon indicating copy to clipboard operation
py-backwards copied to clipboard

`extend` inside `else` statement fails

Open nvbn opened this issue 8 years ago • 0 comments

Snippets like:

@snippet
def import_rewrite(previous, current):
    if __import__('six').PY2:
        extend(current)
    else:
        extend(previous)

Are failing with:

In [47]: import_rewrite.get_body(previous=[], current=[])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-47-0b1498ca8fd1> in <module>()
----> 1 import_rewrite.get_body(previous=[], current=[])

/home/nvbn/exp/py-backwards/py_backwards/utils/snippet.py in get_body(self, **snippet_kwargs)
    125         tree = ast.parse(source)
    126         variables = self._get_variables(tree, snippet_kwargs)
--> 127         extend_tree(tree, variables)
    128         VariablesReplacer.replace(tree, variables)
    129         return tree.body[0].body  # type: ignore

/home/nvbn/exp/py-backwards/py_backwards/utils/snippet.py in extend_tree(tree, variables)
     94     for node in find(tree, ast.Call):
     95         if isinstance(node.func, ast.Name) and node.func.id == 'extend':
---> 96             parent, index = get_non_exp_parent_and_index(tree, node)
     97             replace_at(index, parent, variables[node.args[0].id])  # type: ignore
     98 

/home/nvbn/exp/py-backwards/py_backwards/utils/tree.py in get_non_exp_parent_and_index(tree, node)
     33         parent = get_parent(tree, parent)
     34 
---> 35     return parent, parent.body.index(node)  # type: ignore
     36 
     37 

ValueError: <_ast3.Expr object at 0x7f8715d4d668> is not in list

nvbn avatar May 30 '17 19:05 nvbn