diff --git a/src/code_gen.rs b/src/code_gen.rs index 0a7ab34dfc..0c113cc318 100644 --- a/src/code_gen.rs +++ b/src/code_gen.rs @@ -55,18 +55,14 @@ impl SourceGenerator { } fn newline(&mut self) -> fmt::Result { - if self.initial { - self.initial = false; - } else { + if !self.initial { self.new_lines = std::cmp::max(self.new_lines, 1); } Ok(()) } fn newlines(&mut self, extra: usize) -> fmt::Result { - if self.initial { - self.initial = false; - } else { + if !self.initial { self.new_lines = std::cmp::max(self.new_lines, 1 + extra); } Ok(()) @@ -121,6 +117,7 @@ impl SourceGenerator { self.newline()?; self.p(&" ".repeat(self.indentation))?; $body + self.initial = false; }}; } @@ -145,12 +142,11 @@ impl SourceGenerator { self.unparse_expr(returns, precedence::EXPR)?; } self.p(":")?; - self.body(body)?; - - if self.indentation == 0 { - self.newlines(2)?; - } - }) + }); + self.body(body)?; + if self.indentation == 0 { + self.newlines(2)?; + } } StmtKind::AsyncFunctionDef { name, @@ -172,11 +168,11 @@ impl SourceGenerator { self.unparse_expr(returns, precedence::EXPR)?; } self.p(":")?; - self.body(body)?; - if self.indentation == 0 { - self.newlines(2)?; - } - }) + }); + self.body(body)?; + if self.indentation == 0 { + self.newlines(2)?; + } } StmtKind::ClassDef { name, @@ -209,11 +205,11 @@ impl SourceGenerator { } self.p_if(!first, ")")?; self.p(":")?; - self.body(body)?; - if self.indentation == 0 { - self.newlines(2)?; - } - }) + }); + self.body(body)?; + if self.indentation == 0 { + self.newlines(2)?; + } } StmtKind::Return { value } => { statement!({ @@ -299,14 +295,14 @@ impl SourceGenerator { self.p(" in ")?; self.unparse_expr(iter, precedence::TEST)?; self.p(":")?; - self.body(body)?; - if !orelse.is_empty() { - statement!({ - self.p("else:")?; - self.body(orelse)?; - }); - } - }) + }); + self.body(body)?; + if !orelse.is_empty() { + statement!({ + self.p("else:")?; + }); + self.body(orelse)?; + } } StmtKind::AsyncFor { target, @@ -321,59 +317,59 @@ impl SourceGenerator { self.p(" in ")?; self.unparse_expr(iter, precedence::TEST)?; self.p(":")?; - self.body(body)?; - if !orelse.is_empty() { - statement!({ - self.p("else:")?; - self.body(orelse)?; - }); - } - }) + }); + self.body(body)?; + if !orelse.is_empty() { + statement!({ + self.p("else:")?; + }); + self.body(orelse)?; + } } StmtKind::While { test, body, orelse } => { statement!({ self.p("while ")?; self.unparse_expr(test, precedence::TEST)?; self.p(":")?; - self.body(body)?; - if !orelse.is_empty() { - statement!({ - self.p("else:")?; - self.body(orelse)?; - }); - } - }) + }); + self.body(body)?; + if !orelse.is_empty() { + statement!({ + self.p("else:")?; + }); + self.body(orelse)?; + } } StmtKind::If { test, body, orelse } => { statement!({ self.p("if ")?; self.unparse_expr(test, precedence::TEST)?; self.p(":")?; - self.body(body)?; - - let mut orelse_: &Vec> = orelse; - loop { - if orelse_.len() == 1 && matches!(orelse_[0].node, StmtKind::If { .. }) { - if let StmtKind::If { body, test, orelse } = &orelse_[0].node { - statement!({ - self.p("elif ")?; - self.unparse_expr(test, precedence::TEST)?; - self.p(":")?; - self.body(body)?; - }); - orelse_ = orelse; - } - } else { - if !orelse_.is_empty() { - statement!({ - self.p("else:")?; - self.body(orelse_)?; - }); - } - break; - } - } }); + self.body(body)?; + + let mut orelse_: &Vec> = orelse; + loop { + if orelse_.len() == 1 && matches!(orelse_[0].node, StmtKind::If { .. }) { + if let StmtKind::If { body, test, orelse } = &orelse_[0].node { + statement!({ + self.p("elif ")?; + self.unparse_expr(test, precedence::TEST)?; + self.p(":")?; + }); + self.body(body)?; + orelse_ = orelse; + } + } else { + if !orelse_.is_empty() { + statement!({ + self.p("else:")?; + }); + self.body(orelse_)?; + } + break; + } + } } StmtKind::With { items, body, .. } => { statement!({ @@ -384,8 +380,8 @@ impl SourceGenerator { self.unparse_withitem(item)?; } self.p(":")?; - self.body(body)?; - }) + }); + self.body(body)?; } StmtKind::AsyncWith { items, body, .. } => { statement!({ @@ -396,8 +392,8 @@ impl SourceGenerator { self.unparse_withitem(item)?; } self.p(":")?; - self.body(body)?; - }) + }); + self.body(body)?; } StmtKind::Match { .. } => {} StmtKind::Raise { exc, cause } => { @@ -421,27 +417,27 @@ impl SourceGenerator { } => { statement!({ self.p("try:")?; - self.body(body)?; + }); + self.body(body)?; - for handler in handlers { - statement!({ - self.unparse_excepthandler(handler)?; - }); - } + for handler in handlers { + statement!({ + self.unparse_excepthandler(handler)?; + }); + } - if !orelse.is_empty() { - statement!({ - self.p("else:")?; - self.body(orelse)?; - }); - } - if !finalbody.is_empty() { - statement!({ - self.p("finally:")?; - self.body(finalbody)?; - }); - } - }) + if !orelse.is_empty() { + statement!({ + self.p("else:")?; + }); + self.body(orelse)?; + } + if !finalbody.is_empty() { + statement!({ + self.p("finally:")?; + }); + self.body(finalbody)?; + } } StmtKind::Assert { test, msg } => { statement!({ diff --git a/src/snapshots/ruff__linter__tests__U013_U013.py.snap b/src/snapshots/ruff__linter__tests__U013_U013.py.snap index ee60463df2..d44748c578 100644 --- a/src/snapshots/ruff__linter__tests__U013_U013.py.snap +++ b/src/snapshots/ruff__linter__tests__U013_U013.py.snap @@ -11,7 +11,7 @@ expression: checks column: 52 fix: patch: - content: "\nclass MyType1(TypedDict):\n a: int\n b: str" + content: "class MyType1(TypedDict):\n a: int\n b: str" location: row: 4 column: 0 @@ -28,7 +28,7 @@ expression: checks column: 50 fix: patch: - content: "\nclass MyType2(TypedDict):\n a: int\n b: str" + content: "class MyType2(TypedDict):\n a: int\n b: str" location: row: 7 column: 0 @@ -45,7 +45,7 @@ expression: checks column: 44 fix: patch: - content: "\nclass MyType3(TypedDict):\n a: int\n b: str" + content: "class MyType3(TypedDict):\n a: int\n b: str" location: row: 10 column: 0 @@ -62,7 +62,7 @@ expression: checks column: 30 fix: patch: - content: "\nclass MyType4(TypedDict):\n pass" + content: "class MyType4(TypedDict):\n pass" location: row: 13 column: 0 @@ -79,7 +79,7 @@ expression: checks column: 46 fix: patch: - content: "\nclass MyType5(TypedDict):\n a: 'hello'" + content: "class MyType5(TypedDict):\n a: 'hello'" location: row: 16 column: 0 @@ -96,7 +96,7 @@ expression: checks column: 41 fix: patch: - content: "\nclass MyType6(TypedDict):\n a: 'hello'" + content: "class MyType6(TypedDict):\n a: 'hello'" location: row: 17 column: 0 @@ -113,7 +113,7 @@ expression: checks column: 56 fix: patch: - content: "\nclass MyType7(TypedDict):\n a: NotRequired[dict]" + content: "class MyType7(TypedDict):\n a: NotRequired[dict]" location: row: 20 column: 0 @@ -130,7 +130,7 @@ expression: checks column: 65 fix: patch: - content: "\nclass MyType8(TypedDict, total=False):\n x: int\n y: int" + content: "class MyType8(TypedDict, total=False):\n x: int\n y: int" location: row: 23 column: 0 @@ -147,7 +147,7 @@ expression: checks column: 59 fix: patch: - content: "\nclass MyType10(TypedDict):\n key: Literal['value']" + content: "class MyType10(TypedDict):\n key: Literal['value']" location: row: 29 column: 0