## Summary
This PR implements the formatting of `raise` statements. I haven't
looked at the black implementation, this is inspired from from the
`return` statements formatting.
## Test Plan
The black differences with insta.
I also compared manually some edge cases with very long string and call
chaining and it seems to do the same formatting as black.
There is one issue:
```python
# input
raise OsError(
"aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa"
) from a.aaaaa(aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa).a(aaaa)
# black
raise OsError(
"aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa"
) from a.aaaaa(
aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa
).a(
aaaa
)
# ruff
raise OsError(
"aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa"
) from a.aaaaa(
aksjdhflsakhdflkjsadlfajkslhfdkjsaldajlahflashdfljahlfksajlhfajfjfsaahflakjslhdfkjalhdskjfa
).a(aaaa)
```
But I'm not sure this diff is the raise formatting implementation.
---------
Co-authored-by: Louis Dispa <ldispa@deezer.com>
42 lines
1.0 KiB
Rust
42 lines
1.0 KiB
Rust
use crate::expression::parentheses::Parenthesize;
|
|
use crate::{AsFormat, FormatNodeRule, PyFormatter};
|
|
use ruff_formatter::prelude::{space, text};
|
|
use ruff_formatter::{write, Buffer, Format, FormatResult};
|
|
|
|
use rustpython_parser::ast::StmtRaise;
|
|
|
|
#[derive(Default)]
|
|
pub struct FormatStmtRaise;
|
|
|
|
impl FormatNodeRule<StmtRaise> for FormatStmtRaise {
|
|
fn fmt_fields(&self, item: &StmtRaise, f: &mut PyFormatter) -> FormatResult<()> {
|
|
let StmtRaise {
|
|
range: _,
|
|
exc,
|
|
cause,
|
|
} = item;
|
|
|
|
text("raise").fmt(f)?;
|
|
|
|
if let Some(value) = exc {
|
|
write!(
|
|
f,
|
|
[space(), value.format().with_options(Parenthesize::Optional)]
|
|
)?;
|
|
}
|
|
|
|
if let Some(value) = cause {
|
|
write!(
|
|
f,
|
|
[
|
|
space(),
|
|
text("from"),
|
|
space(),
|
|
value.format().with_options(Parenthesize::Optional)
|
|
]
|
|
)?;
|
|
}
|
|
Ok(())
|
|
}
|
|
}
|