From 8d6d760422b56f69e57d009fa26eabcc49935afe Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Wed, 30 Jun 2010 08:32:11 +0000 Subject: Collapse else: if: ... into elif: --- Demo/parser/test_unparse.py | 22 ++++++++++++++++++++++ Demo/parser/unparse.py | 11 ++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Demo/parser/test_unparse.py b/Demo/parser/test_unparse.py index f4a3e66..7d85f16 100644 --- a/Demo/parser/test_unparse.py +++ b/Demo/parser/test_unparse.py @@ -64,6 +64,24 @@ class_decorator = """\ class Foo: pass """ +elif1 = """\ +if cond1: + suite1 +elif cond2: + suite2 +else: + suite3 +""" + +elif2 = """\ +if cond1: + suite1 +elif cond2: + suite2 +""" + + + class ASTTestCase(unittest.TestCase): def assertASTEqual(self, ast1, ast2): self.assertEqual(ast.dump(ast1), ast.dump(ast2)) @@ -159,6 +177,10 @@ class UnparseTestCase(ASTTestCase): def test_class_definition(self): self.check_roundtrip("class A(metaclass=type, *[], **{}): pass") + def test_elifs(self): + self.check_roundtrip(elif1) + self.check_roundtrip(elif2) + class DirectoryTestCase(ASTTestCase): """Test roundtrip behaviour on all files in Lib and Lib/test.""" diff --git a/Demo/parser/unparse.py b/Demo/parser/unparse.py index 6e4ef63..03dd9e1 100644 --- a/Demo/parser/unparse.py +++ b/Demo/parser/unparse.py @@ -256,9 +256,18 @@ class Unparser: self.fill("if ") self.dispatch(t.test) self.enter() - # XXX elif? self.dispatch(t.body) self.leave() + # collapse nested ifs into equivalent elifs. + while (t.orelse and len(t.orelse) == 1 and + isinstance(t.orelse[0], ast.If)): + t = t.orelse[0] + self.fill("elif ") + self.dispatch(t.test) + self.enter() + self.dispatch(t.body) + self.leave() + # final else if t.orelse: self.fill("else") self.enter() -- cgit v0.12