Fix the decorator blank line issues E304.

This commit is contained in:
Dave Halter
2017-07-06 00:14:36 +02:00
parent fdad958b64
commit da841adcb9
2 changed files with 20 additions and 10 deletions

View File

@@ -292,9 +292,11 @@ class PEP8Normalizer(Normalizer):
val = actual_leaf.value val = actual_leaf.value
needs_lines = ( needs_lines = (
val == '@' and actual_leaf.parent.type == 'decorator' val == '@' and actual_leaf.parent.type == 'decorator'
or val == 'class' or (
or val == 'async' and actual_leaf.get_next_leaf() == 'def' val == 'class'
or val == 'def' and self._actual_previous_leaf != 'async' or val == 'async' and actual_leaf.get_next_leaf() == 'def'
or val == 'def' and self._actual_previous_leaf != 'async'
) and actual_leaf.parent.parent.type != 'decorated'
) )
if needs_lines and actual < wanted: if needs_lines and actual < wanted:
# The first leaf should not be added. # The first leaf should not be added.
@@ -340,23 +342,29 @@ class PEP8Normalizer(Normalizer):
def _old_normalize(self, leaf, spacing, actual_leaf): def _old_normalize(self, leaf, spacing, actual_leaf):
value = leaf.value value = leaf.value
type_ = leaf.type
# TODO get rid of error_leaf
if value == ',' and leaf.parent.type == 'dictorsetmaker': if value == ',' and leaf.parent.type == 'dictorsetmaker':
self._indentation_tos = self._indentation_tos.parent self._indentation_tos = self._indentation_tos.parent
node = self._indentation_tos node = self._indentation_tos
if leaf.type == 'comment': if type_ == 'comment':
self._reset_newlines(spacing, actual_leaf, is_comment=True) self._reset_newlines(spacing, actual_leaf, is_comment=True)
elif leaf.type == 'newline': elif type_ == 'newline':
if self._newline_count > self._get_wanted_blank_lines_count(): if self._newline_count > self._get_wanted_blank_lines_count():
self.add_issue(303, "Too many blank lines (%s)" % self._newline_count, leaf) self.add_issue(303, "Too many blank lines (%s)" % self._newline_count, leaf)
elif actual_leaf in ('def', 'class') \
and actual_leaf.parent.parent.type == 'decorated':
self.add_issue(304, "Blank lines found after function decorator", leaf)
self._newline_count += 1 self._newline_count += 1
#if | E302 | expected 2 blank lines, found 0 #if | E302 | expected 2 blank lines, found 0
# self.add_issue(302, "Too many blank lines (%s)" % self._newline_count, leaf) # self.add_issue(302, "Too many blank lines (%s)" % self._newline_count, leaf)
if leaf.type == 'backslash': if type_ == 'backslash':
# TODO is this enough checking? What about ==? # TODO is this enough checking? What about ==?
if node.type != IndentationTypes.BACKSLASH: if node.type != IndentationTypes.BACKSLASH:
if node.type != IndentationTypes.SUITE: if node.type != IndentationTypes.SUITE:
@@ -381,7 +389,7 @@ class PEP8Normalizer(Normalizer):
if not self._check_tabs_spaces(spacing): if not self._check_tabs_spaces(spacing):
should_be_indentation = node.indentation should_be_indentation = node.indentation
if leaf.type == 'comment': if type_ == 'comment':
# Comments can be dedented. So we have to care for that. # Comments can be dedented. So we have to care for that.
n = self._last_indentation_tos n = self._last_indentation_tos
while True: while True:
@@ -396,7 +404,7 @@ class PEP8Normalizer(Normalizer):
n = n.parent n = n.parent
if self._new_statement: if self._new_statement:
if leaf.type == 'newline': if type_ == 'newline':
if indentation: if indentation:
self.add_issue(291, 'Trailing whitespace', spacing) self.add_issue(291, 'Trailing whitespace', spacing)
elif indentation != should_be_indentation: elif indentation != should_be_indentation:
@@ -451,7 +459,7 @@ class PEP8Normalizer(Normalizer):
# ------------------------------- # -------------------------------
# Finalizing. Updating the state. # Finalizing. Updating the state.
# ------------------------------- # -------------------------------
if value and value in '()[]{}' and leaf.type != 'error_leaf' \ if value and value in '()[]{}' and type_ != 'error_leaf' \
and leaf.parent.type != 'error_node': and leaf.parent.type != 'error_node':
if value in _OPENING_BRACKETS: if value in _OPENING_BRACKETS:
# Figure out here what the indentation is. For chained brackets # Figure out here what the indentation is. For chained brackets
@@ -482,7 +490,7 @@ class PEP8Normalizer(Normalizer):
parent=self._indentation_tos parent=self._indentation_tos
) )
self._on_newline = leaf.type in ('newline', 'backslash') self._on_newline = type_ in ('newline', 'backslash')
self._previous_leaf = leaf self._previous_leaf = leaf
self._previous_spacing = spacing self._previous_spacing = spacing

View File

@@ -96,6 +96,8 @@ def a():
print print
#: E302+2
a = 3
#: E304+1 #: E304+1
@decorator @decorator