diff options
Diffstat (limited to 'Lib/lib2to3/fixes')
-rw-r--r-- | Lib/lib2to3/fixes/fix_idioms.py | 25 | ||||
-rw-r--r-- | Lib/lib2to3/fixes/fix_map.py | 18 | ||||
-rw-r--r-- | Lib/lib2to3/fixes/fix_tuple_params.py | 2 |
3 files changed, 37 insertions, 8 deletions
diff --git a/Lib/lib2to3/fixes/fix_idioms.py b/Lib/lib2to3/fixes/fix_idioms.py index 1f68faf..9bee99b 100644 --- a/Lib/lib2to3/fixes/fix_idioms.py +++ b/Lib/lib2to3/fixes/fix_idioms.py @@ -29,7 +29,7 @@ into # Local imports from .. import fixer_base -from ..fixer_util import Call, Comma, Name, Node, syms +from ..fixer_util import Call, Comma, Name, Node, BlankLine, syms CMP = "(n='!=' | '==' | 'is' | n=comp_op< 'is' 'not' >)" TYPE = "power< 'type' trailer< '(' x=any ')' > >" @@ -130,5 +130,24 @@ class FixIdioms(fixer_base.BaseFix): else: raise RuntimeError("should not have reached here") sort_stmt.remove() - if next_stmt: - next_stmt[0].prefix = sort_stmt.prefix + + btwn = sort_stmt.prefix + # Keep any prefix lines between the sort_stmt and the list_call and + # shove them right after the sorted() call. + if "\n" in btwn: + if next_stmt: + # The new prefix should be everything from the sort_stmt's + # prefix up to the last newline, then the old prefix after a new + # line. + prefix_lines = (btwn.rpartition("\n")[0], next_stmt[0].prefix) + next_stmt[0].prefix = "\n".join(prefix_lines) + else: + assert list_call.parent + assert list_call.next_sibling is None + # Put a blank line after list_call and set its prefix. + end_line = BlankLine() + list_call.parent.append_child(end_line) + assert list_call.next_sibling is end_line + # The new prefix should be everything up to the first new line + # of sort_stmt's prefix. + end_line.prefix = btwn.rpartition("\n")[0] diff --git a/Lib/lib2to3/fixes/fix_map.py b/Lib/lib2to3/fixes/fix_map.py index cf8f351..77d66c4 100644 --- a/Lib/lib2to3/fixes/fix_map.py +++ b/Lib/lib2to3/fixes/fix_map.py @@ -49,8 +49,7 @@ class FixMap(fixer_base.ConditionalFix): > | power< - 'map' - args=trailer< '(' [any] ')' > + 'map' trailer< '(' [arglist=any] ')' > > """ @@ -66,13 +65,22 @@ class FixMap(fixer_base.ConditionalFix): new.prefix = "" new = Call(Name("list"), [new]) elif "map_lambda" in results: - new = ListComp(results.get("xp").clone(), - results.get("fp").clone(), - results.get("it").clone()) + new = ListComp(results["xp"].clone(), + results["fp"].clone(), + results["it"].clone()) else: if "map_none" in results: new = results["arg"].clone() else: + if "arglist" in results: + args = results["arglist"] + if args.type == syms.arglist and \ + args.children[0].type == token.NAME and \ + args.children[0].value == "None": + self.warning(node, "cannot convert map(None, ...) " + "with multiple arguments because map() " + "now truncates to the shortest sequence") + return if in_special_context(node): return None new = node.clone() diff --git a/Lib/lib2to3/fixes/fix_tuple_params.py b/Lib/lib2to3/fixes/fix_tuple_params.py index 41b8dc2..fb47d01 100644 --- a/Lib/lib2to3/fixes/fix_tuple_params.py +++ b/Lib/lib2to3/fixes/fix_tuple_params.py @@ -96,6 +96,8 @@ class FixTupleParams(fixer_base.BaseFix): new_lines[0].prefix = indent after = start + 1 + for line in new_lines: + line.parent = suite[0] suite[0].children[after:after] = new_lines for i in range(after+1, after+len(new_lines)+1): suite[0].children[i].prefix = indent |