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

Crash when dict unpacking for dict merging #153

Closed PaulRenvoise closed 5 years ago

PaulRenvoise commented 5 years ago

A not-so-usual way of merging dict is the following:

first_dict = {'a': 1, 'b': 2, 'c': 3}
second_dict = {'a': 10, 'b': 20}

merged_dict = {**first_dict, **second_dict}

Currently this approach makes baron crash with the following backtrace:

Traceback (most recent call last):
  File ".../.pyenv/versions/3.7.1/Python.framework/Versions/3.7/lib/python3.7/site-packages/baron/baron.py", line 20, in _parse
    return parser(tokens)
  File ".../.pyenv/versions/3.7.1/Python.framework/Versions/3.7/lib/python3.7/site-packages/baron/grammator.py", line 828, in parse
    return parser.parse(iter(tokens))
  File ".../.pyenv/versions/3.7.1/Python.framework/Versions/3.7/lib/python3.7/site-packages/baron/parser.py", line 167, in parse
    raise ParsingError(debug_output)
baron.parser.ParsingError: Error, got an unexpected token DOUBLE_STAR here:

   1 merged_dict = {**<---- 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.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".../.pyenv/versions/3.7.1/Python.framework/Versions/3.7/lib/python3.7/site-packages/baron/baron.py", line 57, in parse
    to_return = _parse(tokens, print_function)
  File ".../.pyenv/versions/3.7.1/Python.framework/Versions/3.7/lib/python3.7/site-packages/baron/baron.py", line 24, in _parse
    return parser(tokens)
  File ".../.pyenv/versions/3.7.1/Python.framework/Versions/3.7/lib/python3.7/site-packages/baron/grammator.py", line 828, in parse
    return parser.parse(iter(tokens))
  File ".../.pyenv/versions/3.7.1/Python.framework/Versions/3.7/lib/python3.7/site-packages/baron/parser.py", line 167, in parse
    raise ParsingError(debug_output)
baron.parser.ParsingError: Error, got an unexpected token DOUBLE_STAR here:

   1 merged_dict = {**<---- 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.
PaulRenvoise commented 5 years ago

Duplicate of #137