From eb2b22614222b0c83e3bfb60d73f89d94aa1490d Mon Sep 17 00:00:00 2001 From: Charlie Marsh Date: Wed, 30 Aug 2023 02:20:28 -0400 Subject: [PATCH] Unset `after_class_docstring` state on every iteration (#7001) --- .../ruff/statement/class_definition.py | 16 ++++++++++ .../src/statement/suite.rs | 2 +- ...format@statement__class_definition.py.snap | 32 +++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/class_definition.py b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/class_definition.py index 442441465e..296b4a79ad 100644 --- a/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/class_definition.py +++ b/crates/ruff_python_formatter/resources/test/fixtures/ruff/statement/class_definition.py @@ -206,3 +206,19 @@ class TestTypeParams[Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa class TestTypeParams[A, B, C](meta=Aaaaaaaaaaaaaaaaaaaaaa): pass + + +# Regression test for: https://github.com/astral-sh/ruff/pull/7001 +class QuerySet(AltersData): + """Represent a lazy database lookup for a set of objects.""" + + def as_manager(cls): + # Address the circular dependency between `Queryset` and `Manager`. + from django.db.models.manager import Manager + + manager = Manager.from_queryset(cls)() + manager._built_with_as_manager = True + return manager + + as_manager.queryset_only = True + as_manager = classmethod(as_manager) diff --git a/crates/ruff_python_formatter/src/statement/suite.rs b/crates/ruff_python_formatter/src/statement/suite.rs index e266554d74..6d1595b5e5 100644 --- a/crates/ruff_python_formatter/src/statement/suite.rs +++ b/crates/ruff_python_formatter/src/statement/suite.rs @@ -255,7 +255,6 @@ impl FormatRule> for FormatSuite { // ... // ``` empty_line().fmt(f)?; - after_class_docstring = false; } else { // Insert the appropriate number of empty lines based on the node level, e.g.: // * [`NodeLevel::Module`]: Up to two empty lines @@ -320,6 +319,7 @@ impl FormatRule> for FormatSuite { following.format().fmt(f)?; preceding = following; } + after_class_docstring = false; } Ok(()) diff --git a/crates/ruff_python_formatter/tests/snapshots/format@statement__class_definition.py.snap b/crates/ruff_python_formatter/tests/snapshots/format@statement__class_definition.py.snap index 185579f079..9258c1ca71 100644 --- a/crates/ruff_python_formatter/tests/snapshots/format@statement__class_definition.py.snap +++ b/crates/ruff_python_formatter/tests/snapshots/format@statement__class_definition.py.snap @@ -212,6 +212,22 @@ class TestTypeParams[Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa class TestTypeParams[A, B, C](meta=Aaaaaaaaaaaaaaaaaaaaaa): pass + + +# Regression test for: https://github.com/astral-sh/ruff/pull/7001 +class QuerySet(AltersData): + """Represent a lazy database lookup for a set of objects.""" + + def as_manager(cls): + # Address the circular dependency between `Queryset` and `Manager`. + from django.db.models.manager import Manager + + manager = Manager.from_queryset(cls)() + manager._built_with_as_manager = True + return manager + + as_manager.queryset_only = True + as_manager = classmethod(as_manager) ``` ## Output @@ -459,6 +475,22 @@ class TestTypeParams[ class TestTypeParams[A, B, C](meta=Aaaaaaaaaaaaaaaaaaaaaa): pass + + +# Regression test for: https://github.com/astral-sh/ruff/pull/7001 +class QuerySet(AltersData): + """Represent a lazy database lookup for a set of objects.""" + + def as_manager(cls): + # Address the circular dependency between `Queryset` and `Manager`. + from django.db.models.manager import Manager + + manager = Manager.from_queryset(cls)() + manager._built_with_as_manager = True + return manager + + as_manager.queryset_only = True + as_manager = classmethod(as_manager) ```