Avoid printing continuations within import identifiers (#7744)
## Summary
It turns out that _some_ identifiers can contain newlines --
specifically, dot-delimited import identifiers, like:
```python
import foo\
.bar
```
At present, we print all identifiers verbatim, which causes us to retain
the `\` in the formatted output. This also leads to violating some debug
assertions (see the linked issue, though that's a symptom of this
formatting failure).
This PR adds detection for import identifiers that contain newlines, and
formats them via `text` (slow) rather than `source_code_slice` (fast) in
those cases.
Closes https://github.com/astral-sh/ruff/issues/7734.
## Test Plan
`cargo test`
This commit is contained in:
@@ -6,6 +6,7 @@ use ruff_text_size::Ranged;
|
||||
use crate::builders::{parenthesize_if_expands, PyFormatterExtensions, TrailingComma};
|
||||
use crate::comments::{SourceComment, SuppressionKind};
|
||||
use crate::expression::parentheses::parenthesized;
|
||||
use crate::other::identifier::DotDelimitedIdentifier;
|
||||
use crate::prelude::*;
|
||||
|
||||
#[derive(Default)]
|
||||
@@ -31,7 +32,7 @@ impl FormatNodeRule<StmtImportFrom> for FormatStmtImportFrom {
|
||||
}
|
||||
Ok(())
|
||||
}),
|
||||
module.as_ref().map(AsFormat::format),
|
||||
module.as_ref().map(DotDelimitedIdentifier::new),
|
||||
space(),
|
||||
token("import"),
|
||||
space(),
|
||||
|
||||
Reference in New Issue
Block a user