PyCQA / baron

IDE allow you to refactor code, Baron allows you to write refactoring code.
http://baron.pycqa.org
GNU Lesser General Public License v3.0
289 stars 50 forks source link

Baron fails for for nested double star #158

Open Melevir opened 4 years ago

Melevir commented 4 years ago

Here is working Python snippet:

def foo(*args, **kwargs):
    print(args, kwargs)

foo(**{"a": 1, **kwargs})

Last line fails when parsing with Baron:

>>> from baron import parse
>>> parse('foo(**{"a": 1, **kwargs})')
ParsingError: Error, got an unexpected token DOUBLE_STAR here:

   1 foo(**{"a": 1, **<---- here

The token DOUBLE_STAR should be one of those: BACKQUOTE, BINARY, BINARY_RAW_STRING, BINARY_STRING, COMPLEX, ELLIPSIS, FLOAT, FLOAT_EXPONANT, FLOAT_EXPONANT_COMPLEX, HEXA, INT, INTERPOLATED_RAW_STRING, INTERPOLATED_STRING, LAMBDA, LEFT_BRACKET, LEFT_PARENTHESIS, LEFT_SQUARE_BRACKET, LONG, MINUS, NAME, NOT, OCTA, PLUS, RAW_STRING, RIGHT_BRACKET, STRING, TILDE, UNICODE_RAW_STRING, UNICODE_STRING

Baron has failed to parse this input. If this is valid python code (and by that I mean that the python binary successfully parse this code without any syntax error) (also consider that python does not yet parse python 3 code integrally) it would be kind if you can extract a snippet of your code that make Baron fails and open a bug here: https://github.com/PyCQA/baron/issues

Sorry for the inconvenience.

baron==0.9, Python 3.7.2

Jackenmen commented 4 years ago

Baron fails for all dicts that have dict unpacking in them:

x = {
    "abc": "def"
}
y = {
    "fed": "cba",
    **x
}

This is a new functionality of Python 3.5 (PEP 448)

PaulRenvoise commented 4 years ago

Looks like this issue is a duplicate of #137