mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-02 18:02:23 +00:00
Fix fmt:off
with trailing child comment (#8234)
This commit is contained in:
parent
3c3d9ab173
commit
6983d96d27
6 changed files with 87 additions and 7 deletions
|
@ -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]
|
|
@ -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]
|
|
@ -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> {
|
||||
|
@ -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>),
|
||||
|
|
|
@ -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
|
||||
|
@ -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),
|
||||
|
|
|
@ -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]
|
||||
```
|
||||
|
||||
|
||||
|
|
@ -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]
|
||||
```
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue