Skip to content

Crash on functions with certain typehinting #129

Open
@kmantel

Description

Simple typehints seem to be supported, but others cause bowler to crash. For example,

foo.py:

import typing


def foo(bar: typing.List[str]):
    pass

Running

bowler.Query('foo.py').select_function('foo').add_argument('baz', 1).diff()

Produces

Skipping foo.py: failed to transform because 'Node' object has no attribute 'value'
Traceback (most recent call last):
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/bowler/tool.py", line 209, in refactor_queue
    hunks = self.refactor_file(filename)
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/bowler/tool.py", line 171, in refactor_file
    tree = self.refactor_string(input, filename)
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/fissix/refactor.py", line 377, in refactor_string
    self.refactor_tree(tree, name)
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/fissix/refactor.py", line 417, in refactor_tree
    self.traverse_by(self.bmi_post_order_heads, tree.post_order())
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/fissix/refactor.py", line 493, in traverse_by
    new = fixer.transform(node, results)
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/bowler/query.py", line 962, in transform
    returned_node = callback(node, capture, filename)
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/bowler/query.py", line 746, in add_argument_transform
    spec = FunctionSpec.build(node, capture)
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/bowler/imr.py", line 214, in build
    arguments = FunctionArgument.build_list(args, is_def)
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/bowler/imr.py", line 89, in build_list
    arg = cls.build(leaf, is_def)
File "~/.pyenv/versions/pnl368/lib/python3.6/site-packages/bowler/imr.py", line 50, in build
    kwargs["annotation"] = leaf.children[-1].value
AttributeError: 'Node' object has no attribute 'value'
AttributeError: 'Node' object has no attribute 'value'
<bowler.query.Query object at 0x7fe8de0d8860>

While replacing typing.List[str] with just str produces the expected result

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions