diff --git a/crates/ruff_linter/resources/test/fixtures/pycodestyle/E30.py b/crates/ruff_linter/resources/test/fixtures/pycodestyle/E30.py index 3439d9982389c6..d09f9e67a95b01 100644 --- a/crates/ruff_linter/resources/test/fixtures/pycodestyle/E30.py +++ b/crates/ruff_linter/resources/test/fixtures/pycodestyle/E30.py @@ -349,6 +349,13 @@ class Class: # end +# no error +def f(): + def f(): + pass +# end + + # E301 class Class(object): @@ -656,13 +663,6 @@ def baz(): # end -# E306 -def f(): - def f(): - pass -# end - - # E306 def a(): x = 2 diff --git a/crates/ruff_linter/src/rules/pycodestyle/rules/logical_lines/blank_lines.rs b/crates/ruff_linter/src/rules/pycodestyle/rules/logical_lines/blank_lines.rs index c9db7a8d4961c7..c925d56b57d69a 100644 --- a/crates/ruff_linter/src/rules/pycodestyle/rules/logical_lines/blank_lines.rs +++ b/crates/ruff_linter/src/rules/pycodestyle/rules/logical_lines/blank_lines.rs @@ -315,7 +315,6 @@ impl AlwaysFixableViolation for BlankLinesAfterFunctionOrClass { /// Use instead: /// ```python /// def outer(): -/// /// def inner(): /// pass /// @@ -535,8 +534,8 @@ pub(crate) fn blank_lines( && !tracked_vars.follows_decorator // The class's docstring can directly precede the first function. && !tracked_vars.follows_docstring - // Do not trigger when the def/class follows an "indenting token" (if/while/etc...), unless that "indenting token" is a def. - && prev_indent_level.is_some_and(|prev_indent_level| prev_indent_level >= indent_level || tracked_vars.follows_def) + // Do not trigger when the def/class follows an "indenting token" (if/while/etc...). + && prev_indent_level.is_some_and(|prev_indent_level| prev_indent_level >= indent_level) // Allow groups of one-liners. && !(tracked_vars.follows_def && line diff --git a/crates/ruff_linter/src/rules/pycodestyle/snapshots/ruff_linter__rules__pycodestyle__tests__E306_E30.py.snap b/crates/ruff_linter/src/rules/pycodestyle/snapshots/ruff_linter__rules__pycodestyle__tests__E306_E30.py.snap index d045a07886b180..140ce8be3df3a5 100644 --- a/crates/ruff_linter/src/rules/pycodestyle/snapshots/ruff_linter__rules__pycodestyle__tests__E306_E30.py.snap +++ b/crates/ruff_linter/src/rules/pycodestyle/snapshots/ruff_linter__rules__pycodestyle__tests__E306_E30.py.snap @@ -121,26 +121,6 @@ E30.py:638:5: E306 [*] Expected 1 blank line before a nested definition, found 0 639 640 | pass 640 641 | # end -E30.py:645:5: E306 [*] Expected 1 blank line before a nested definition, found 0 - | -643 | # E306 -644 | def foo(): -645 | def bar(): - | ^^^ E306 -646 | pass -647 | def baz(): pass - | - = help: Add missing blank line - -ℹ Safe fix -642 642 | -643 643 | # E306 -644 644 | def foo(): - 645 |+ -645 646 | def bar(): -646 647 | pass -647 648 | def baz(): pass - E30.py:647:5: E306 [*] Expected 1 blank line before a nested definition, found 0 | 645 | def bar(): @@ -180,26 +160,6 @@ E30.py:654:5: E306 [*] Expected 1 blank line before a nested definition, found 0 655 656 | pass 656 657 | # end -E30.py:661:5: E306 [*] Expected 1 blank line before a nested definition, found 0 - | -659 | # E306 -660 | def f(): -661 | def f(): - | ^^^ E306 -662 | pass -663 | # end - | - = help: Add missing blank line - -ℹ Safe fix -658 658 | -659 659 | # E306 -660 660 | def f(): - 661 |+ -661 662 | def f(): -662 663 | pass -663 664 | # end - E30.py:669:5: E306 [*] Expected 1 blank line before a nested definition, found 0 | 667 | def a():