ts-node-action
ts-node-action copied to clipboard
[python] expand comprehensions into for loops via for_in_clause
This rewrites {set,list,dictionary}_ comprehensions into it's expanded for loop form. Unlike the if/else <-> ternary code, this can safely preserve all comments.
Notice: It does not support an action to toggle back to a comprehension as I haven't wrapped my head around how to approach that, except for in a very narrow case.
Warn: The most questionable thing is a decision made in order to support return statements, eg, return [x for x in range(10)]
. The expanded form requires a variable to hold the list
that is initialized, appended to, and returned, but there's no identifier name in this case. So, I either had to choose one, or prompt the user for one, ie with vim.fn.input()
. I opted not to prompt and chose a generic/friendly name, result
, instead of a generated collision-proof one like _list_accumulator_fda43
. That means the comprehension's expanded form looks like:
result = []
for x in range(10):
result.append(x)
return result
Tests include an "absurd" case to show that it supports many fors, ifs, comments, and multiline everything, everywhere, all at once.