Refactor logic for stub empty lines (#2796)

This PR is intended to have no change to semantics.

This is in preparation for #2784 which will likely introduce more logic
that depends on `current_line.depth`.

Inlining the subtraction gets rid of offsetting and makes it much easier
to see what the result will be.
This commit is contained in:
Shantanu 2022-01-22 07:29:38 -08:00 committed by GitHub
parent fb1d1b2fc8
commit 811de5f36b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -529,9 +529,11 @@ def _maybe_empty_lines_for_class_or_def(
if self.is_pyi:
if self.previous_line.depth > current_line.depth:
newlines = 1
newlines = 0 if current_line.depth else 1
elif current_line.is_class or self.previous_line.is_class:
if current_line.is_stub_class and self.previous_line.is_stub_class:
if current_line.depth:
newlines = 0
elif current_line.is_stub_class and self.previous_line.is_stub_class:
# No blank line between classes with an empty body
newlines = 0
else:
@ -539,21 +541,18 @@ def _maybe_empty_lines_for_class_or_def(
elif (
current_line.is_def or current_line.is_decorator
) and not self.previous_line.is_def:
if not current_line.depth:
if current_line.depth:
# In classes empty lines between attributes and methods should
# be preserved.
newlines = min(1, before)
else:
# Blank line between a block of functions (maybe with preceding
# decorators) and a block of non-functions
newlines = 1
else:
# In classes empty lines between attributes and methods should
# be preserved. The +1 offset is to negate the -1 done later as
# this function is indented.
newlines = min(2, before + 1)
else:
newlines = 0
else:
newlines = 2
if current_line.depth and newlines:
newlines -= 1
newlines = 1 if current_line.depth else 2
return newlines, 0