[python] expand comprehensions into for loops via for_in_clause #25
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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 thelist
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 withvim.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:Tests include an "absurd" case to show that it supports many fors, ifs, comments, and multiline everything, everywhere, all at once.