From 6dbb657681b82268f66bd788991a4daa737577dc Mon Sep 17 00:00:00 2001 From: snlkapil Date: Mon, 7 May 2018 10:15:24 -0700 Subject: [PATCH] Removing empty parentheses after class name (#180) --- black.py | 17 ++++++++ tests/class_blank_parentheses.py | 71 ++++++++++++++++++++++++++++++++ tests/test_black.py | 8 ++++ 3 files changed, 96 insertions(+) create mode 100644 tests/class_blank_parentheses.py diff --git a/black.py b/black.py index f235afe..cfb5028 100644 --- a/black.py +++ b/black.py @@ -743,6 +743,9 @@ class Line: if not has_value: return + if token.COLON == leaf.type and self.is_class_parenth_empty: + del self.leaves[-2:] + if self.leaves and not preformatted: # Note: at this point leaf.prefix should be empty except for # imports, for which we only preserve newlines. @@ -840,6 +843,19 @@ class Line: and self.leaves[0].value == "yield" ) + @property + def is_class_parenth_empty(self) -> bool: + """Is this class parentheses blank?""" + return ( + bool(self) + and len(self.leaves) == 4 + and self.is_class + and self.leaves[2].type == token.LPAR + and self.leaves[2].value == "(" + and self.leaves[3].type == token.RPAR + and self.leaves[3].value == ")" + ) + def contains_standalone_comments(self, depth_limit: int = sys.maxsize) -> bool: """If so, needs to be split before emitting.""" for leaf in self.leaves: @@ -1125,6 +1141,7 @@ class LineGenerator(Visitor[Line]): If any lines were generated, set up a new current_line. """ + if not self.current_line: if self.current_line.__class__ == type: self.current_line.depth += indent diff --git a/tests/class_blank_parentheses.py b/tests/class_blank_parentheses.py new file mode 100644 index 0000000..b4dcb20 --- /dev/null +++ b/tests/class_blank_parentheses.py @@ -0,0 +1,71 @@ +class SimpleClassWithBlankParentheses(): + pass + + +class ClassWithSpaceParentheses(): + first_test_data = 90 + second_test_data = 100 + + def test_func(self): + return None + + +class ClassWithEmptyFunc(object): + + def func_with_blank_parentheses(): + return 5 + + +def public_func_with_blank_parentheses(): + return None + + +def class_under_the_func_with_blank_parentheses(): + + class InsideFunc(): + pass + + +class NormalClass(): + + def func_for_testing(self, first, second): + sum = first + second + return sum + + +# output + + +class SimpleClassWithBlankParentheses: + pass + + +class ClassWithSpaceParentheses: + first_test_data = 90 + second_test_data = 100 + + def test_func(self): + return None + + +class ClassWithEmptyFunc(object): + + def func_with_blank_parentheses(): + return 5 + + +def public_func_with_blank_parentheses(): + return None + + +def class_under_the_func_with_blank_parentheses(): + + class InsideFunc: + pass + + +class NormalClass: + + def func_for_testing(self, first, second): + sum = first + second + return sum diff --git a/tests/test_black.py b/tests/test_black.py index 5e17faf..951b298 100644 --- a/tests/test_black.py +++ b/tests/test_black.py @@ -325,6 +325,14 @@ class BlackTestCase(unittest.TestCase): black.assert_equivalent(source, actual) black.assert_stable(source, actual, line_length=ll) + @patch("black.dump_to_file", dump_to_stderr) + def test_remove_empty_parentheses_after_class(self) -> None: + source, expected = read_data("class_blank_parentheses") + actual = fs(source) + self.assertFormatEqual(expected, actual) + black.assert_equivalent(source, actual) + black.assert_stable(source, actual, line_length=ll) + def test_report(self) -> None: report = black.Report() out_lines = [] -- 2.39.5