Allow empty line after block open before a comment or compound statement (#3967)
This commit is contained in:
parent
0a37888e79
commit
2db5ab0a7b
@ -13,6 +13,7 @@
|
|||||||
### Preview style
|
### Preview style
|
||||||
|
|
||||||
- Fix merging implicit multiline strings that have inline comments (#3956)
|
- Fix merging implicit multiline strings that have inline comments (#3956)
|
||||||
|
- Allow empty first line after block open before a comment or compound statement (#3967)
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
|
@ -24,6 +24,8 @@
|
|||||||
STANDALONE_COMMENT,
|
STANDALONE_COMMENT,
|
||||||
TEST_DESCENDANTS,
|
TEST_DESCENDANTS,
|
||||||
child_towards,
|
child_towards,
|
||||||
|
is_docstring,
|
||||||
|
is_funcdef,
|
||||||
is_import,
|
is_import,
|
||||||
is_multiline_string,
|
is_multiline_string,
|
||||||
is_one_sequence_between,
|
is_one_sequence_between,
|
||||||
@ -686,7 +688,30 @@ def _maybe_empty_lines(self, current_line: Line) -> Tuple[int, int]:
|
|||||||
return 0, 1
|
return 0, 1
|
||||||
return before, 1
|
return before, 1
|
||||||
|
|
||||||
if self.previous_line and self.previous_line.opens_block:
|
is_empty_first_line_ok = (
|
||||||
|
Preview.allow_empty_first_line_before_new_block_or_comment
|
||||||
|
in current_line.mode
|
||||||
|
and (
|
||||||
|
# If it's a standalone comment
|
||||||
|
current_line.leaves[0].type == STANDALONE_COMMENT
|
||||||
|
# If it opens a new block
|
||||||
|
or current_line.opens_block
|
||||||
|
# If it's a triple quote comment (but not at the start of a funcdef)
|
||||||
|
or (
|
||||||
|
is_docstring(current_line.leaves[0])
|
||||||
|
and self.previous_line
|
||||||
|
and self.previous_line.leaves[0]
|
||||||
|
and self.previous_line.leaves[0].parent
|
||||||
|
and not is_funcdef(self.previous_line.leaves[0].parent)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
if (
|
||||||
|
self.previous_line
|
||||||
|
and self.previous_line.opens_block
|
||||||
|
and not is_empty_first_line_ok
|
||||||
|
):
|
||||||
return 0, 0
|
return 0, 0
|
||||||
return before, 0
|
return before, 0
|
||||||
|
|
||||||
|
@ -190,6 +190,7 @@ class Preview(Enum):
|
|||||||
module_docstring_newlines = auto()
|
module_docstring_newlines = auto()
|
||||||
accept_raw_docstrings = auto()
|
accept_raw_docstrings = auto()
|
||||||
fix_power_op_line_length = auto()
|
fix_power_op_line_length = auto()
|
||||||
|
allow_empty_first_line_before_new_block_or_comment = auto()
|
||||||
|
|
||||||
|
|
||||||
class Deprecated(UserWarning):
|
class Deprecated(UserWarning):
|
||||||
|
@ -718,6 +718,10 @@ def is_multiline_string(leaf: Leaf) -> bool:
|
|||||||
return has_triple_quotes(leaf.value) and "\n" in leaf.value
|
return has_triple_quotes(leaf.value) and "\n" in leaf.value
|
||||||
|
|
||||||
|
|
||||||
|
def is_funcdef(node: Node) -> bool:
|
||||||
|
return node.type == syms.funcdef
|
||||||
|
|
||||||
|
|
||||||
def is_stub_suite(node: Node) -> bool:
|
def is_stub_suite(node: Node) -> bool:
|
||||||
"""Return True if `node` is a suite with a stub body."""
|
"""Return True if `node` is a suite with a stub body."""
|
||||||
|
|
||||||
|
@ -0,0 +1,106 @@
|
|||||||
|
# flags: --preview
|
||||||
|
def foo():
|
||||||
|
"""
|
||||||
|
Docstring
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Here we go
|
||||||
|
if x:
|
||||||
|
|
||||||
|
# This is also now fine
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
else:
|
||||||
|
# But not necessary
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
if y:
|
||||||
|
|
||||||
|
while True:
|
||||||
|
|
||||||
|
"""
|
||||||
|
Long comment here
|
||||||
|
"""
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
if z:
|
||||||
|
|
||||||
|
for _ in range(100):
|
||||||
|
a = 123
|
||||||
|
else:
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
# this should be ok
|
||||||
|
a = 123
|
||||||
|
except:
|
||||||
|
|
||||||
|
"""also this"""
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
|
||||||
|
def bar():
|
||||||
|
|
||||||
|
if x:
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
|
||||||
|
def baz():
|
||||||
|
|
||||||
|
# OK
|
||||||
|
if x:
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
# output
|
||||||
|
|
||||||
|
def foo():
|
||||||
|
"""
|
||||||
|
Docstring
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Here we go
|
||||||
|
if x:
|
||||||
|
|
||||||
|
# This is also now fine
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
else:
|
||||||
|
# But not necessary
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
if y:
|
||||||
|
|
||||||
|
while True:
|
||||||
|
|
||||||
|
"""
|
||||||
|
Long comment here
|
||||||
|
"""
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
if z:
|
||||||
|
|
||||||
|
for _ in range(100):
|
||||||
|
a = 123
|
||||||
|
else:
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
# this should be ok
|
||||||
|
a = 123
|
||||||
|
except:
|
||||||
|
|
||||||
|
"""also this"""
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
|
||||||
|
def bar():
|
||||||
|
|
||||||
|
if x:
|
||||||
|
a = 123
|
||||||
|
|
||||||
|
|
||||||
|
def baz():
|
||||||
|
|
||||||
|
# OK
|
||||||
|
if x:
|
||||||
|
a = 123
|
Loading…
Reference in New Issue
Block a user