mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-26 11:59:35 +00:00
Force parentheses for power operations in unary expressions (#7955)
## Summary E.g., given `-10**100`, reformat as `-(10**100)`. Black special cases this (https://github.com/psf/black/pull/909) and it's currently a deviation. Closes https://github.com/astral-sh/ruff/issues/7951.
This commit is contained in:
parent
b6e75e58c9
commit
3d03e75a9d
2 changed files with 10 additions and 12 deletions
|
@ -4,7 +4,7 @@ use ruff_python_ast::UnaryOp;
|
||||||
|
|
||||||
use crate::comments::{trailing_comments, SourceComment};
|
use crate::comments::{trailing_comments, SourceComment};
|
||||||
use crate::expression::parentheses::{
|
use crate::expression::parentheses::{
|
||||||
is_expression_parenthesized, NeedsParentheses, OptionalParentheses,
|
is_expression_parenthesized, NeedsParentheses, OptionalParentheses, Parentheses,
|
||||||
};
|
};
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
|
|
||||||
|
@ -57,7 +57,14 @@ impl FormatNodeRule<ExprUnaryOp> for FormatExprUnaryOp {
|
||||||
space().fmt(f)?;
|
space().fmt(f)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
operand.format().fmt(f)
|
if operand
|
||||||
|
.as_bin_op_expr()
|
||||||
|
.is_some_and(|bin_op| bin_op.op.is_pow())
|
||||||
|
{
|
||||||
|
operand.format().with_options(Parentheses::Always).fmt(f)
|
||||||
|
} else {
|
||||||
|
operand.format().fmt(f)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fmt_dangling_comments(
|
fn fmt_dangling_comments(
|
||||||
|
|
|
@ -266,15 +266,6 @@ last_call()
|
||||||
```diff
|
```diff
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -31,7 +31,7 @@
|
|
||||||
-1
|
|
||||||
~int and not v1 ^ 123 + v2 | True
|
|
||||||
(~int) and (not ((v1 ^ (123 + v2)) | True))
|
|
||||||
-+(really ** -(confusing ** ~(operator**-precedence)))
|
|
||||||
++really ** -confusing ** ~operator**-precedence
|
|
||||||
flags & ~select.EPOLLIN and waiters.write_task is not None
|
|
||||||
lambda arg: None
|
|
||||||
lambda a=True: a
|
|
||||||
@@ -115,7 +115,7 @@
|
@@ -115,7 +115,7 @@
|
||||||
arg,
|
arg,
|
||||||
another,
|
another,
|
||||||
|
@ -322,7 +313,7 @@ not great
|
||||||
-1
|
-1
|
||||||
~int and not v1 ^ 123 + v2 | True
|
~int and not v1 ^ 123 + v2 | True
|
||||||
(~int) and (not ((v1 ^ (123 + v2)) | True))
|
(~int) and (not ((v1 ^ (123 + v2)) | True))
|
||||||
+really ** -confusing ** ~operator**-precedence
|
+(really ** -(confusing ** ~(operator**-precedence)))
|
||||||
flags & ~select.EPOLLIN and waiters.write_task is not None
|
flags & ~select.EPOLLIN and waiters.write_task is not None
|
||||||
lambda arg: None
|
lambda arg: None
|
||||||
lambda a=True: a
|
lambda a=True: a
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue