Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow additional text following formatter pragma comments #8876

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1,27 @@
# fmt: off
x = 1
# fmt: on

# fmt: off reason
x = 1
# fmt: on

# fmt: off reason
x = 1
# fmt: on

# fmt: off
x = 1
# fmt: on reason

# fmt: off reason
x = 1
# fmt: on reason

# fmt: off - reason
x = 1
# fmt: on

# fmt: off
x = 1
# fmt: on - reason
@@ -0,0 +1,3 @@
x = 1 # fmt: skip
x = 1 # fmt: skip reason
x = 1 # fmt: skip - reason
9 changes: 8 additions & 1 deletion crates/ruff_python_formatter/src/comments/mod.rs
Expand Up @@ -178,7 +178,14 @@ impl SourceComment {
"off" => Some(SuppressionKind::Off),
"on" => Some(SuppressionKind::On),
"skip" => Some(SuppressionKind::Skip),
_ => None,

// Allow additional context separated by whitespace
command => match command.split_whitespace().next() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we just replace match command.trim_whitespace_start() with match command.trim_whitespace_start(). split_whitespace().next()? That is, could we just always split by whitespace and take the first token, rather than nesting the match expressions?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes that's how I implemented it at first but then I was wondering if we should only allow comments on fmt: off and fmt: skip but not fmt: on which led me to this structure. I decided it'd be weird not to support fmt: on - reason though and I can see if being useful. I left it this way because I figured there may be a performance benefit and it's still easy to read. I'm happy to go back though.

Some("off") => Some(SuppressionKind::Off),
Some("on") => Some(SuppressionKind::On),
Some("skip") => Some(SuppressionKind::Skip),
_ => None,
},
}
} else if let Some(command) = trimmed.strip_prefix("yapf:") {
match command.trim_whitespace_start() {
Expand Down
@@ -0,0 +1,68 @@
---
source: crates/ruff_python_formatter/tests/fixtures.rs
input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_on_off/reason.py
---
## Input
```python
# fmt: off
x = 1
# fmt: on

# fmt: off reason
x = 1
# fmt: on

# fmt: off reason
x = 1
# fmt: on

# fmt: off
x = 1
# fmt: on reason

# fmt: off reason
x = 1
# fmt: on reason

# fmt: off - reason
x = 1
# fmt: on

# fmt: off
x = 1
# fmt: on - reason
```

## Output
```python
# fmt: off
x = 1
# fmt: on

# fmt: off reason
x = 1
# fmt: on

# fmt: off reason
x = 1
# fmt: on

# fmt: off
x = 1
# fmt: on reason

# fmt: off reason
x = 1
# fmt: on reason

# fmt: off - reason
x = 1
# fmt: on

# fmt: off
x = 1
# fmt: on - reason
```



@@ -0,0 +1,20 @@
---
source: crates/ruff_python_formatter/tests/fixtures.rs
input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/fmt_skip/reason.py
---
## Input
```python
x = 1 # fmt: skip
x = 1 # fmt: skip reason
x = 1 # fmt: skip - reason
```

## Output
```python
x = 1 # fmt: skip
x = 1 # fmt: skip reason
x = 1 # fmt: skip - reason
```