Skip to content

Commit

Permalink
Fix fmt:off with trailing child comment
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaReiser committed Oct 26, 2023
1 parent fd07a12 commit 123b4d6
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 7 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Regression test for https://github.com/astral-sh/ruff/issues/8211

# fmt: off
from dataclasses import dataclass

if True:
if False:
x: int # Optional[int]
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Regression test for https://github.com/astral-sh/ruff/issues/8211

# fmt: off
from dataclasses import dataclass

@dataclass
class A:
x: int # Optional[int]
4 changes: 2 additions & 2 deletions crates/ruff_python_formatter/src/statement/suite.rs
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@ impl<'ast> IntoFormat<PyFormatContext<'ast>> for Suite {
}

/// A statement representing a docstring.
#[derive(Copy, Clone)]
#[derive(Copy, Clone, Debug)]
pub(crate) struct DocstringStmt<'a>(&'a Stmt);

impl<'a> DocstringStmt<'a> {
Expand Down Expand Up @@ -589,7 +589,7 @@ impl Format<PyFormatContext<'_>> for DocstringStmt<'_> {
}

/// A Child of a suite.
#[derive(Copy, Clone)]
#[derive(Copy, Clone, Debug)]
pub(crate) enum SuiteChildStatement<'a> {
/// A docstring documenting a class or function definition.
Docstring(DocstringStmt<'a>),
Expand Down
14 changes: 9 additions & 5 deletions crates/ruff_python_formatter/src/verbatim.rs
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ fn write_suppressed_statements<'a>(

for range in CommentRangeIter::in_suppression(comments.trailing(statement), source) {
match range {
// All leading comments are suppressed
// All trailing comments are suppressed
// ```python
// statement
// # suppressed
Expand Down Expand Up @@ -394,10 +394,14 @@ fn write_suppressed_statements<'a>(
statement = SuiteChildStatement::Other(next_statement);
leading_node_comments = comments.leading(next_statement);
} else {
let end = comments
.trailing(statement)
.last()
.map_or(statement.end(), Ranged::end);
let mut nodes =
std::iter::successors(Some(AnyNodeRef::from(statement.statement())), |statement| {
statement.last_child_in_body()
});

let end = nodes
.find_map(|statement| comments.trailing(statement).last().map(Ranged::end))
.unwrap_or(statement.end());

FormatVerbatimStatementRange {
verbatim_range: TextRange::new(format_off_comment.end(), end),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
source: crates/ruff_python_formatter/tests/fixtures.rs
input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/fmt_off_unclosed_deep_nested_trailing_comment.py
---
## Input
```py
# Regression test for https://github.com/astral-sh/ruff/issues/8211
# fmt: off
from dataclasses import dataclass
if True:
if False:
x: int # Optional[int]
```

## Output
```py
# Regression test for https://github.com/astral-sh/ruff/issues/8211
# fmt: off
from dataclasses import dataclass
if True:
if False:
x: int # Optional[int]
```



Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
---
source: crates/ruff_python_formatter/tests/fixtures.rs
input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/fmt_off_unclosed_trailing_comment.py
---
## Input
```py
# Regression test for https://github.com/astral-sh/ruff/issues/8211
# fmt: off
from dataclasses import dataclass
@dataclass
class A:
x: int # Optional[int]
```

## Output
```py
# Regression test for https://github.com/astral-sh/ruff/issues/8211
# fmt: off
from dataclasses import dataclass
@dataclass
class A:
x: int # Optional[int]
```



0 comments on commit 123b4d6

Please sign in to comment.