mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-16 00:20:38 +00:00
Implement the fix_power_op_line_length
preview style (#8947)
This commit is contained in:
parent
58bf6f5762
commit
5aaf99b856
3 changed files with 30 additions and 360 deletions
|
@ -3,7 +3,7 @@ use std::ops::{Deref, Index};
|
||||||
|
|
||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
|
|
||||||
use ruff_formatter::write;
|
use ruff_formatter::{write, FormatContext};
|
||||||
use ruff_python_ast::{
|
use ruff_python_ast::{
|
||||||
Expr, ExprAttribute, ExprBinOp, ExprBoolOp, ExprCompare, ExprUnaryOp, UnaryOp,
|
Expr, ExprAttribute, ExprBinOp, ExprBoolOp, ExprCompare, ExprUnaryOp, UnaryOp,
|
||||||
};
|
};
|
||||||
|
@ -13,10 +13,10 @@ use ruff_text_size::{Ranged, TextRange};
|
||||||
|
|
||||||
use crate::comments::{leading_comments, trailing_comments, Comments, SourceComment};
|
use crate::comments::{leading_comments, trailing_comments, Comments, SourceComment};
|
||||||
use crate::expression::parentheses::{
|
use crate::expression::parentheses::{
|
||||||
in_parentheses_only_group, in_parentheses_only_soft_line_break,
|
in_parentheses_only_group, in_parentheses_only_if_group_breaks,
|
||||||
in_parentheses_only_soft_line_break_or_space, is_expression_parenthesized,
|
in_parentheses_only_soft_line_break, in_parentheses_only_soft_line_break_or_space,
|
||||||
write_in_parentheses_only_group_end_tag, write_in_parentheses_only_group_start_tag,
|
is_expression_parenthesized, write_in_parentheses_only_group_end_tag,
|
||||||
Parentheses,
|
write_in_parentheses_only_group_start_tag, Parentheses,
|
||||||
};
|
};
|
||||||
use crate::expression::string::{AnyString, FormatString, StringLayout};
|
use crate::expression::string::{AnyString, FormatString, StringLayout};
|
||||||
use crate::expression::OperatorPrecedence;
|
use crate::expression::OperatorPrecedence;
|
||||||
|
@ -718,7 +718,11 @@ impl Format<PyFormatContext<'_>> for FlatBinaryExpressionSlice<'_> {
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
hard_line_break().fmt(f)?;
|
hard_line_break().fmt(f)?;
|
||||||
} else if !is_pow {
|
} else if is_pow {
|
||||||
|
if f.context().options().preview().is_enabled() {
|
||||||
|
in_parentheses_only_if_group_breaks(&space()).fmt(f)?;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
space().fmt(f)?;
|
space().fmt(f)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -355,6 +355,26 @@ pub(super) fn write_in_parentheses_only_group_end_tag(f: &mut PyFormatter) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Shows prints `content` only if the expression is enclosed by (optional) parentheses (`()`, `[]`, or `{}`)
|
||||||
|
/// and splits across multiple lines.
|
||||||
|
pub(super) fn in_parentheses_only_if_group_breaks<'a, T>(
|
||||||
|
content: T,
|
||||||
|
) -> impl Format<PyFormatContext<'a>>
|
||||||
|
where
|
||||||
|
T: Format<PyFormatContext<'a>>,
|
||||||
|
{
|
||||||
|
format_with(move |f: &mut PyFormatter| match f.context().node_level() {
|
||||||
|
NodeLevel::TopLevel(_) | NodeLevel::CompoundStatement | NodeLevel::Expression(None) => {
|
||||||
|
// no-op, not parenthesized
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
NodeLevel::Expression(Some(parentheses_id)) => if_group_breaks(&content)
|
||||||
|
.with_group_id(Some(parentheses_id))
|
||||||
|
.fmt(f),
|
||||||
|
NodeLevel::ParenthesizedExpression => if_group_breaks(&content).fmt(f),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/// Format comments inside empty parentheses, brackets or curly braces.
|
/// Format comments inside empty parentheses, brackets or curly braces.
|
||||||
///
|
///
|
||||||
/// Empty `()`, `[]` and `{}` are special because there can be dangling comments, and they can be in
|
/// Empty `()`, `[]` and `{}` are special because there can be dangling comments, and they can be in
|
||||||
|
|
|
@ -1,354 +0,0 @@
|
||||||
---
|
|
||||||
source: crates/ruff_python_formatter/tests/fixtures.rs
|
|
||||||
input_file: crates/ruff_python_formatter/resources/test/fixtures/black/cases/preview_power_op_spacing.py
|
|
||||||
---
|
|
||||||
## Input
|
|
||||||
|
|
||||||
```python
|
|
||||||
a = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
b = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
c = 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1 ** 1
|
|
||||||
d = 1**1 ** 1**1 ** 1**1 ** 1**1 ** 1**1**1 ** 1 ** 1**1 ** 1**1**1**1**1 ** 1 ** 1**1**1 **1**1** 1 ** 1 ** 1
|
|
||||||
e = 𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟
|
|
||||||
f = 𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟
|
|
||||||
|
|
||||||
a = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
b = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
c = 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0 ** 1.0
|
|
||||||
d = 1.0**1.0 ** 1.0**1.0 ** 1.0**1.0 ** 1.0**1.0 ** 1.0**1.0**1.0 ** 1.0 ** 1.0**1.0 ** 1.0**1.0**1.0
|
|
||||||
```
|
|
||||||
|
|
||||||
## Black Differences
|
|
||||||
|
|
||||||
```diff
|
|
||||||
--- Black
|
|
||||||
+++ Ruff
|
|
||||||
@@ -1,83 +1,83 @@
|
|
||||||
a = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
b = (
|
|
||||||
1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
- ** 1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
+ **1
|
|
||||||
)
|
|
||||||
c = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
d = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
e = 𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟
|
|
||||||
f = (
|
|
||||||
𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
- ** 𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
+ **𨉟
|
|
||||||
)
|
|
||||||
|
|
||||||
a = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
b = (
|
|
||||||
1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
- ** 1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
+ **1.0
|
|
||||||
)
|
|
||||||
c = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
d = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
```
|
|
||||||
|
|
||||||
## Ruff Output
|
|
||||||
|
|
||||||
```python
|
|
||||||
a = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
b = (
|
|
||||||
1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
**1
|
|
||||||
)
|
|
||||||
c = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
d = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
e = 𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟
|
|
||||||
f = (
|
|
||||||
𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
**𨉟
|
|
||||||
)
|
|
||||||
|
|
||||||
a = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
b = (
|
|
||||||
1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
**1.0
|
|
||||||
)
|
|
||||||
c = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
d = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
```
|
|
||||||
|
|
||||||
## Black Output
|
|
||||||
|
|
||||||
```python
|
|
||||||
a = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
b = (
|
|
||||||
1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
** 1
|
|
||||||
)
|
|
||||||
c = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
d = 1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1**1
|
|
||||||
e = 𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟**𨉟
|
|
||||||
f = (
|
|
||||||
𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
** 𨉟
|
|
||||||
)
|
|
||||||
|
|
||||||
a = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
b = (
|
|
||||||
1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
** 1.0
|
|
||||||
)
|
|
||||||
c = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
d = 1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0**1.0
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue