@@ -238,7 +238,8 @@ def maximum_line_length(physical_line, max_line_length, multiline, noqa):
238
238
239
239
def blank_lines (logical_line , blank_lines , indent_level , line_number ,
240
240
blank_before , previous_logical ,
241
- previous_unindented_logical_line , previous_indent_level ):
241
+ previous_unindented_logical_line , previous_indent_level ,
242
+ lines ):
242
243
r"""Separate top-level function and class definitions with two blank lines.
243
244
244
245
Method definitions inside a class are separated by a single blank line.
@@ -270,7 +271,19 @@ def blank_lines(logical_line, blank_lines, indent_level, line_number,
270
271
if indent_level :
271
272
if not (blank_before or previous_indent_level < indent_level or
272
273
DOCSTRING_REGEX .match (previous_logical )):
273
- yield 0 , "E301 expected 1 blank line, found 0"
274
+ ancestor_level = indent_level
275
+ nested = False
276
+ for line in lines [line_number - 2 ::- 1 ]:
277
+ if line .strip () and expand_indent (line ) < ancestor_level :
278
+ ancestor_level = expand_indent (line )
279
+ nested = line .lstrip ().startswith ('def ' )
280
+ if nested or ancestor_level == 0 :
281
+ break
282
+ if nested :
283
+ yield 0 , "E306 expected 1 blank line, found 0" \
284
+ " (nested definition)"
285
+ else :
286
+ yield 0 , "E301 expected 1 blank line, found 0"
274
287
elif blank_before != 2 :
275
288
yield 0 , "E302 expected 2 blank lines, found %d" % blank_before
276
289
elif (logical_line and not indent_level and blank_before != 2 and
0 commit comments