diff --git a/crates/ruff_python_formatter/src/generated.rs b/crates/ruff_python_formatter/src/generated.rs index e83c2746fb..7b3da21655 100644 --- a/crates/ruff_python_formatter/src/generated.rs +++ b/crates/ruff_python_formatter/src/generated.rs @@ -617,46 +617,6 @@ impl<'ast> IntoFormat> for ast::StmtIf { } } -impl FormatRule> - for crate::statement::stmt_if::FormatElifElseClause -{ - #[inline] - fn fmt( - &self, - node: &ast::ElifElseClause, - f: &mut Formatter>, - ) -> FormatResult<()> { - FormatNodeRule::::fmt(self, node, f) - } -} -impl<'ast> AsFormat> for ast::ElifElseClause { - type Format<'a> = FormatRefWithRule< - 'a, - ast::ElifElseClause, - crate::statement::stmt_if::FormatElifElseClause, - PyFormatContext<'ast>, - >; - fn format(&self) -> Self::Format<'_> { - FormatRefWithRule::new( - self, - crate::statement::stmt_if::FormatElifElseClause::default(), - ) - } -} -impl<'ast> IntoFormat> for ast::ElifElseClause { - type Format = FormatOwnedWithRule< - ast::ElifElseClause, - crate::statement::stmt_if::FormatElifElseClause, - PyFormatContext<'ast>, - >; - fn into_format(self) -> Self::Format { - FormatOwnedWithRule::new( - self, - crate::statement::stmt_if::FormatElifElseClause::default(), - ) - } -} - impl FormatRule> for crate::statement::stmt_with::FormatStmtWith { @@ -2974,3 +2934,43 @@ impl<'ast> IntoFormat> for ast::Decorator { FormatOwnedWithRule::new(self, crate::other::decorator::FormatDecorator::default()) } } + +impl FormatRule> + for crate::other::elif_else_clause::FormatElifElseClause +{ + #[inline] + fn fmt( + &self, + node: &ast::ElifElseClause, + f: &mut Formatter>, + ) -> FormatResult<()> { + FormatNodeRule::::fmt(self, node, f) + } +} +impl<'ast> AsFormat> for ast::ElifElseClause { + type Format<'a> = FormatRefWithRule< + 'a, + ast::ElifElseClause, + crate::other::elif_else_clause::FormatElifElseClause, + PyFormatContext<'ast>, + >; + fn format(&self) -> Self::Format<'_> { + FormatRefWithRule::new( + self, + crate::other::elif_else_clause::FormatElifElseClause::default(), + ) + } +} +impl<'ast> IntoFormat> for ast::ElifElseClause { + type Format = FormatOwnedWithRule< + ast::ElifElseClause, + crate::other::elif_else_clause::FormatElifElseClause, + PyFormatContext<'ast>, + >; + fn into_format(self) -> Self::Format { + FormatOwnedWithRule::new( + self, + crate::other::elif_else_clause::FormatElifElseClause::default(), + ) + } +} diff --git a/crates/ruff_python_formatter/src/other/elif_else_clause.rs b/crates/ruff_python_formatter/src/other/elif_else_clause.rs new file mode 100644 index 0000000000..4766178f7b --- /dev/null +++ b/crates/ruff_python_formatter/src/other/elif_else_clause.rs @@ -0,0 +1,16 @@ +use crate::statement::stmt_if::format_elif_else_clause; +use crate::{FormatNodeRule, PyFormatter}; +use ruff_formatter::FormatResult; +use rustpython_parser::ast::ElifElseClause; + +/// Note that this implementation misses the leading newlines before the leading comments because +/// it does not have access to the last node of the previous branch. The `StmtIf` therefore doesn't +/// call this but `format_elif_else_clause` directly. +#[derive(Default)] +pub struct FormatElifElseClause; + +impl FormatNodeRule for FormatElifElseClause { + fn fmt_fields(&self, item: &ElifElseClause, f: &mut PyFormatter) -> FormatResult<()> { + format_elif_else_clause(item, f, None) + } +} diff --git a/crates/ruff_python_formatter/src/other/mod.rs b/crates/ruff_python_formatter/src/other/mod.rs index 76c0b2857d..672e3cda9b 100644 --- a/crates/ruff_python_formatter/src/other/mod.rs +++ b/crates/ruff_python_formatter/src/other/mod.rs @@ -4,6 +4,7 @@ pub(crate) mod arg_with_default; pub(crate) mod arguments; pub(crate) mod comprehension; pub(crate) mod decorator; +pub(crate) mod elif_else_clause; pub(crate) mod except_handler_except_handler; pub(crate) mod identifier; pub(crate) mod keyword; diff --git a/crates/ruff_python_formatter/src/statement/stmt_if.rs b/crates/ruff_python_formatter/src/statement/stmt_if.rs index 4e1391cbe6..344013a5de 100644 --- a/crates/ruff_python_formatter/src/statement/stmt_if.rs +++ b/crates/ruff_python_formatter/src/statement/stmt_if.rs @@ -49,21 +49,9 @@ impl FormatNodeRule for FormatStmtIf { } } -/// Note that this implementation misses the leading newlines before the leading comments because -/// it does not have access to the last node of the previous branch. The `StmtIf` therefore doesn't -/// call this but `format_elif_else_clause` directly. -#[derive(Default)] -pub struct FormatElifElseClause; - -impl FormatNodeRule for FormatElifElseClause { - fn fmt_fields(&self, item: &ElifElseClause, f: &mut PyFormatter) -> FormatResult<()> { - format_elif_else_clause(item, f, None) - } -} - /// Extracted so we can implement `FormatElifElseClause` but also pass in `last_node` from /// `FormatStmtIf` -fn format_elif_else_clause( +pub(crate) fn format_elif_else_clause( item: &ElifElseClause, f: &mut PyFormatter, last_node: Option,