astor icon indicating copy to clipboard operation
astor copied to clipboard

astor.to_source(tree_from_ast) generate different source code on identical node

Open free2dog opened this issue 5 years ago • 2 comments

Same ast node in memory.

expected output source code(arguments list omitted):

def make_mocked_request(
    ) ->Any:
    mock.Mock = annotations.annot_aiohttp_test_utils_make_mocked_request_mock_Mock()

actually I got parentheses around the _ast.Call:

def make_mocked_request(
    ) ->Any:
    mock.Mock = (annotations.
        annot_aiohttp_test_utils_make_mocked_request_mock_Mock())

when I use debugger to print source using astor.to_source() on this specific _ast.Assign node,

I use these in my debugger console

import astor astor.to_source(fundefNode.body[0])

I got the correct version

mock.Mock = annotations.annot_aiohttp_test_utils_make_mocked_request_mock_Mock(\n )\n

But when I print all functionDef node,

astor.to_source(fundefNode)

I got the wrong version

... mock.Mock = (annotations.\n annot_aiohttp_test_utils_make_mocked_request_mock_Mock())\n ...

free2dog avatar Mar 23 '19 13:03 free2dog

Thank you for your report! I think #75 was meant to fix cases like this. I will work on that after we release 0.8 next month.

berkerpeksag avatar Mar 30 '19 17:03 berkerpeksag

The statement mock.Mock = annotations.annot_aiohttp_test_utils_make_mocked_request_mock_Mock() is exactly 80 chars without indentation. Hence, astor.to_source(fundefNode.body[0]) output meets @bryce-ma's expectation.

With indentation of 4 spaces, the same statement is 84 chars. Hence, the line is broken and, instead of adding a line continuation character (''), the pretty printer wraps the rhs expression in parenthesis.

So, I think the perceived "incorrectness" of the breaks is due to the length of the statement when used in isolation and when used inside a function.

That said, to help users, astor should commit to either use of parenthesis or use of line continuation or be explicit about when would each be supported.

rvprasad avatar Jan 13 '20 00:01 rvprasad