From: Ɓukasz Langa Date: Tue, 24 Apr 2018 19:19:56 +0000 (-0700) Subject: Split ternary expressions X-Git-Url: https://git.madduck.net/etc/vim.git/commitdiff_plain/9d671bdbe13ab68cea1bba15001c43e90cf2c1a6?ds=inline;hp=92957a41e3f909c7b813b448f65cd437cf0139f2 Split ternary expressions Fixes #141 --- diff --git a/README.md b/README.md index 02cf2f9..4663176 100644 --- a/README.md +++ b/README.md @@ -540,6 +540,8 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md). * fixed invalid splitting on comma in lambda arguments (#133) +* fixed missing splits of ternary expressions (#141) + ### 18.4a2 * fixed parsing of unaligned standalone comments (#99, #112) diff --git a/black.py b/black.py index aeb7402..5bf466a 100644 --- a/black.py +++ b/black.py @@ -583,6 +583,7 @@ UNPACKING_PARENTS = { } COMPREHENSION_PRIORITY = 20 COMMA_PRIORITY = 10 +TERNARY_PRIORITY = 7 LOGIC_PRIORITY = 5 STRING_PRIORITY = 4 COMPARATOR_PRIORITY = 3 @@ -1602,6 +1603,14 @@ def is_split_before_delimiter(leaf: Leaf, previous: Leaf = None) -> int: ): return COMPREHENSION_PRIORITY + if ( + leaf.type == token.NAME + and leaf.value in {"if", "else"} + and leaf.parent + and leaf.parent.type == syms.test + ): + return TERNARY_PRIORITY + if leaf.type == token.NAME and leaf.value in LOGIC_OPERATORS and leaf.parent: return LOGIC_PRIORITY diff --git a/tests/expression.diff b/tests/expression.diff index 9da0048..da48a13 100644 --- a/tests/expression.diff +++ b/tests/expression.diff @@ -11,7 +11,7 @@ True False 1 -@@ -29,60 +29,78 @@ +@@ -29,61 +29,83 @@ ~great +value -1 @@ -37,8 +37,14 @@ (str or None) if True else (str or bytes or None) str or None if (1 if True else 2) else str or bytes or None (str or None) if (1 if True else 2) else (str or bytes or None) +-((super_long_variable_name or None) if (1 if super_long_test_name else 2) else (str or bytes or None)) -{'2.7': dead, '3.7': (long_live or die_hard)} -{'2.7': dead, '3.7': (long_live or die_hard), **{'3.6': verygood}} ++( ++ (super_long_variable_name or None) ++ if (1 if super_long_test_name else 2) ++ else (str or bytes or None) ++) +{"2.7": dead, "3.7": (long_live or die_hard)} +{"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}} {**a, **b, **c} @@ -110,7 +116,7 @@ call(**self.screen_kwargs) call(b, **self.screen_kwargs) lukasz.langa.pl -@@ -91,11 +109,11 @@ +@@ -92,11 +114,11 @@ 1.0 .real ....__class__ list[str] @@ -123,7 +129,7 @@ ] slice[0] slice[0:1] -@@ -122,88 +140,122 @@ +@@ -123,88 +145,122 @@ numpy[-(c + 1):, d] numpy[:, l[-2]] numpy[:, ::-1] diff --git a/tests/expression.py b/tests/expression.py index c67505f..2c4d8dd 100644 --- a/tests/expression.py +++ b/tests/expression.py @@ -43,6 +43,7 @@ str or None if True else str or bytes or None (str or None) if True else (str or bytes or None) str or None if (1 if True else 2) else str or bytes or None (str or None) if (1 if True else 2) else (str or bytes or None) +((super_long_variable_name or None) if (1 if super_long_test_name else 2) else (str or bytes or None)) {'2.7': dead, '3.7': (long_live or die_hard)} {'2.7': dead, '3.7': (long_live or die_hard), **{'3.6': verygood}} {**a, **b, **c} @@ -260,6 +261,11 @@ str or None if True else str or bytes or None (str or None) if True else (str or bytes or None) str or None if (1 if True else 2) else str or bytes or None (str or None) if (1 if True else 2) else (str or bytes or None) +( + (super_long_variable_name or None) + if (1 if super_long_test_name else 2) + else (str or bytes or None) +) {"2.7": dead, "3.7": (long_live or die_hard)} {"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}} {**a, **b, **c}