Format UnaryExpr

<!--
Thank you for contributing to Ruff! To help us out with reviewing, please consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

This PR adds basic formatting for unary expressions.

<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan

I added a new `unary.py` with custom test cases
This commit is contained in:
Micha Reiser 2023-06-21 10:09:47 +02:00 committed by GitHub
parent 3973836420
commit 1336ca601b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 623 additions and 115 deletions

View file

@ -0,0 +1,138 @@
if not aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb:
pass
a = True
not a
b = 10
-b
+b
## Leading operand comments
if not (
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if ~(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if -(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if +(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if (
not
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
~
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if (
-
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if (
+
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
## Parentheses
if (
# unary comment
not
# operand comment
(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
):
pass
if (not (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
):
pass
if aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa & (not (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
):
pass
if (
not (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
& aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
):
pass
## Trailing operator comments
if (
not # comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
~ # comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
- # comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
+ # comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
## Varia
if not \
a:
pass

View file

@ -323,6 +323,10 @@ fn can_break(expr: &Expr) -> bool {
}) => !expressions.is_empty(), }) => !expressions.is_empty(),
Expr::Call(ExprCall { args, keywords, .. }) => !(args.is_empty() && keywords.is_empty()), Expr::Call(ExprCall { args, keywords, .. }) => !(args.is_empty() && keywords.is_empty()),
Expr::ListComp(_) | Expr::SetComp(_) | Expr::DictComp(_) | Expr::GeneratorExp(_) => true, Expr::ListComp(_) | Expr::SetComp(_) | Expr::DictComp(_) | Expr::GeneratorExp(_) => true,
Expr::UnaryOp(ExprUnaryOp { operand, .. }) => match operand.as_ref() {
Expr::BinOp(_) => true,
_ => can_break(operand.as_ref()),
},
_ => false, _ => false,
} }
} }

View file

@ -1,17 +1,68 @@
use crate::comments::Comments; use crate::comments::{trailing_comments, Comments};
use crate::expression::parentheses::{ use crate::expression::parentheses::{
default_expression_needs_parentheses, NeedsParentheses, Parentheses, Parenthesize, default_expression_needs_parentheses, NeedsParentheses, Parentheses, Parenthesize,
}; };
use crate::{not_yet_implemented, FormatNodeRule, PyFormatter}; use crate::prelude::*;
use ruff_formatter::{write, Buffer, FormatResult}; use crate::trivia::{SimpleTokenizer, TokenKind};
use rustpython_parser::ast::ExprUnaryOp; use crate::FormatNodeRule;
use ruff_formatter::FormatContext;
use ruff_python_ast::prelude::UnaryOp;
use ruff_text_size::{TextLen, TextRange};
use rustpython_parser::ast::{ExprUnaryOp, Ranged};
#[derive(Default)] #[derive(Default)]
pub struct FormatExprUnaryOp; pub struct FormatExprUnaryOp;
impl FormatNodeRule<ExprUnaryOp> for FormatExprUnaryOp { impl FormatNodeRule<ExprUnaryOp> for FormatExprUnaryOp {
fn fmt_fields(&self, item: &ExprUnaryOp, f: &mut PyFormatter) -> FormatResult<()> { fn fmt_fields(&self, item: &ExprUnaryOp, f: &mut PyFormatter) -> FormatResult<()> {
write!(f, [not_yet_implemented(item)]) let ExprUnaryOp {
range: _,
op,
operand,
} = item;
let operator = match op {
UnaryOp::Invert => "~",
UnaryOp::Not => "not",
UnaryOp::UAdd => "+",
UnaryOp::USub => "-",
};
text(operator).fmt(f)?;
let comments = f.context().comments().clone();
// Split off the comments that follow after the operator and format them as trailing comments.
// ```python
// (not # comment
// a)
// ```
let leading_operand_comments = comments.leading_comments(operand.as_ref());
let trailing_operator_comments_end =
leading_operand_comments.partition_point(|p| p.position().is_end_of_line());
let (trailing_operator_comments, leading_operand_comments) =
leading_operand_comments.split_at(trailing_operator_comments_end);
if !trailing_operator_comments.is_empty() {
trailing_comments(trailing_operator_comments).fmt(f)?;
}
// Insert a line break if the operand has comments but itself is not parenthesized.
// ```python
// if (
// not
// # comment
// a)
// ```
if !leading_operand_comments.is_empty()
&& !is_operand_parenthesized(item, f.context().source_code().as_str())
{
hard_line_break().fmt(f)?;
} else if op.is_not() {
space().fmt(f)?;
}
operand.format().fmt(f)
} }
} }
@ -22,6 +73,37 @@ impl NeedsParentheses for ExprUnaryOp {
source: &str, source: &str,
comments: &Comments, comments: &Comments,
) -> Parentheses { ) -> Parentheses {
default_expression_needs_parentheses(self.into(), parenthesize, source, comments) match default_expression_needs_parentheses(self.into(), parenthesize, source, comments) {
Parentheses::Optional => {
// We preserve the parentheses of the operand. It should not be necessary to break this expression.
if is_operand_parenthesized(self, source) {
Parentheses::Never
} else {
Parentheses::Optional
}
}
parentheses => parentheses,
}
}
}
fn is_operand_parenthesized(unary: &ExprUnaryOp, source: &str) -> bool {
let operator_len = match unary.op {
UnaryOp::Invert => '~'.text_len(),
UnaryOp::Not => "not".text_len(),
UnaryOp::UAdd => '+'.text_len(),
UnaryOp::USub => '-'.text_len(),
};
let trivia_range = TextRange::new(unary.range.start() + operator_len, unary.operand.start());
if let Some(token) = SimpleTokenizer::new(source, trivia_range)
.skip_trivia()
.next()
{
debug_assert_eq!(token.kind(), TokenKind::LParen);
true
} else {
false
} }
} }

View file

@ -42,7 +42,7 @@ pub(super) fn default_expression_needs_parentheses(
} }
/// Configures if the expression should be parenthesized. /// Configures if the expression should be parenthesized.
#[derive(Copy, Clone, Debug, Default)] #[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
pub enum Parenthesize { pub enum Parenthesize {
/// Parenthesize the expression if it has parenthesis in the source. /// Parenthesize the expression if it has parenthesis in the source.
#[default] #[default]
@ -56,11 +56,11 @@ pub enum Parenthesize {
} }
impl Parenthesize { impl Parenthesize {
const fn is_if_breaks(self) -> bool { pub(crate) const fn is_if_breaks(self) -> bool {
matches!(self, Parenthesize::IfBreaks) matches!(self, Parenthesize::IfBreaks)
} }
const fn is_preserve(self) -> bool { pub(crate) const fn is_preserve(self) -> bool {
matches!(self, Parenthesize::Preserve) matches!(self, Parenthesize::Preserve)
} }
} }

View file

@ -411,11 +411,10 @@ Formatted twice:
#[test] #[test]
fn quick_test() { fn quick_test() {
let src = r#" let src = r#"
if [
def foo( aaaaaa,
b=3 BBBB,ccccccccc,ddddddd,eeeeeeeeee,ffffff
+ 2 # comment ] & bbbbbbbbbbbbbbbbbbddddddddddddddddddddddddddddbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb:
):
... ...
"#; "#;
// Tokenize once // Tokenize once

View file

@ -67,7 +67,7 @@ y = 100(no)
+x = NOT_IMPLEMENTED_call() +x = NOT_IMPLEMENTED_call()
+x = 0O777 .NOT_IMPLEMENTED_attr +x = 0O777 .NOT_IMPLEMENTED_attr
+x = NOT_IMPLEMENTED_call() +x = NOT_IMPLEMENTED_call()
+x = NOT_YET_IMPLEMENTED_ExprUnaryOp +x = -100.0000J
-if (10).real: -if (10).real:
+if 10 .NOT_IMPLEMENTED_attr: +if 10 .NOT_IMPLEMENTED_attr:
@ -97,7 +97,7 @@ x = NOT_IMPLEMENTED_call()
x = NOT_IMPLEMENTED_call() x = NOT_IMPLEMENTED_call()
x = 0O777 .NOT_IMPLEMENTED_attr x = 0O777 .NOT_IMPLEMENTED_attr
x = NOT_IMPLEMENTED_call() x = NOT_IMPLEMENTED_call()
x = NOT_YET_IMPLEMENTED_ExprUnaryOp x = -100.0000J
if 10 .NOT_IMPLEMENTED_attr: if 10 .NOT_IMPLEMENTED_attr:
... ...

View file

@ -105,7 +105,7 @@ def g():
```diff ```diff
--- Black --- Black
+++ Ruff +++ Ruff
@@ -1,89 +1,70 @@ @@ -1,47 +1,35 @@
-"""Docstring.""" -"""Docstring."""
+"NOT_YET_IMPLEMENTED_STRING" +"NOT_YET_IMPLEMENTED_STRING"
@ -137,11 +137,10 @@ def g():
+ NOT_YET_IMPLEMENTED_StmtAssert + NOT_YET_IMPLEMENTED_StmtAssert
- prev = leaf.prev_sibling - prev = leaf.prev_sibling
- if not prev: + prev = leaf.NOT_IMPLEMENTED_attr
if not prev:
- prevp = preceding_leaf(p) - prevp = preceding_leaf(p)
- if not prevp or prevp.type in OPENING_BRACKETS: - if not prevp or prevp.type in OPENING_BRACKETS:
+ prev = leaf.NOT_IMPLEMENTED_attr
+ if NOT_YET_IMPLEMENTED_ExprUnaryOp:
+ prevp = NOT_IMPLEMENTED_call() + prevp = NOT_IMPLEMENTED_call()
+ if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2: + if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2:
return NO return NO
@ -171,11 +170,11 @@ def g():
return NO return NO
############################################################################### @@ -49,41 +37,34 @@
# SECTION BECAUSE SECTIONS # SECTION BECAUSE SECTIONS
############################################################################### ###############################################################################
-
-
def g(): def g():
- NO = "" - NO = ""
- SPACE = " " - SPACE = " "
@ -205,10 +204,9 @@ def g():
+ NOT_YET_IMPLEMENTED_StmtAssert + NOT_YET_IMPLEMENTED_StmtAssert
- prev = leaf.prev_sibling - prev = leaf.prev_sibling
- if not prev:
- prevp = preceding_leaf(p)
+ prev = leaf.NOT_IMPLEMENTED_attr + prev = leaf.NOT_IMPLEMENTED_attr
+ if NOT_YET_IMPLEMENTED_ExprUnaryOp: if not prev:
- prevp = preceding_leaf(p)
+ prevp = NOT_IMPLEMENTED_call() + prevp = NOT_IMPLEMENTED_call()
- if not prevp or prevp.type in OPENING_BRACKETS: - if not prevp or prevp.type in OPENING_BRACKETS:
@ -254,7 +252,7 @@ def f():
NOT_YET_IMPLEMENTED_StmtAssert NOT_YET_IMPLEMENTED_StmtAssert
prev = leaf.NOT_IMPLEMENTED_attr prev = leaf.NOT_IMPLEMENTED_attr
if NOT_YET_IMPLEMENTED_ExprUnaryOp: if not prev:
prevp = NOT_IMPLEMENTED_call() prevp = NOT_IMPLEMENTED_call()
if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2: if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2:
return NO return NO
@ -292,7 +290,7 @@ def g():
NOT_YET_IMPLEMENTED_StmtAssert NOT_YET_IMPLEMENTED_StmtAssert
prev = leaf.NOT_IMPLEMENTED_attr prev = leaf.NOT_IMPLEMENTED_attr
if NOT_YET_IMPLEMENTED_ExprUnaryOp: if not prev:
prevp = NOT_IMPLEMENTED_call() prevp = NOT_IMPLEMENTED_call()
if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2: if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2:

View file

@ -276,7 +276,7 @@ last_call()
Name Name
None None
True True
@@ -7,226 +8,225 @@ @@ -7,18 +8,18 @@
1 1
1.0 1.0
1j 1j
@ -307,12 +307,10 @@ last_call()
v1 << 2 v1 << 2
1 >> v2 1 >> v2
1 % finished 1 % finished
1 + v2 - v3 * 4 ^ 5**v6 / 7 // 8 @@ -28,205 +29,204 @@
((1 + v2) - (v3 * 4)) ^ (((5**v6) / 7) // 8) ~great
-not great +value
-~great -1
-+value
--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)))
@ -339,13 +337,9 @@ last_call()
-) -)
-{"2.7": dead, "3.7": (long_live or die_hard)} -{"2.7": dead, "3.7": (long_live or die_hard)}
-{"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}} -{"2.7": dead, "3.7": (long_live or die_hard), **{"3.6": verygood}}
+NOT_YET_IMPLEMENTED_ExprUnaryOp
+NOT_YET_IMPLEMENTED_ExprUnaryOp
+NOT_YET_IMPLEMENTED_ExprUnaryOp
+NOT_YET_IMPLEMENTED_ExprUnaryOp
+NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 +NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
+NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 +NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
+NOT_YET_IMPLEMENTED_ExprUnaryOp ++really ** -confusing ** ~operator**-precedence
+NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 +NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
+lambda x: True +lambda x: True
+lambda x: True +lambda x: True
@ -402,11 +396,6 @@ last_call()
- *a, - *a,
4, 4,
5, 5,
-]
-[
- 4,
- *a,
- 5,
+ 6, + 6,
+ 7, + 7,
+ 8, + 8,
@ -415,6 +404,11 @@ last_call()
+ (NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2), + (NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2),
+ (NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2), + (NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2),
] ]
-[
- 4,
- *a,
- 5,
-]
+[1, 2, 3] +[1, 2, 3]
+[NOT_YET_IMPLEMENTED_ExprStarred] +[NOT_YET_IMPLEMENTED_ExprStarred]
+[NOT_YET_IMPLEMENTED_ExprStarred] +[NOT_YET_IMPLEMENTED_ExprStarred]
@ -644,17 +638,6 @@ last_call()
-g = 1, *"ten" -g = 1, *"ten"
-what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set( -what_is_up_with_those_new_coord_names = (coord_names + set(vars_to_create)) + set(
- vars_to_remove - vars_to_remove
-)
-what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(
- vars_to_remove
-)
-result = (
- session.query(models.Customer.id)
- .filter(
- models.Customer.account_id == account_id, models.Customer.email == email_address
- )
- .order_by(models.Customer.id.asc())
- .all()
+e = NOT_IMPLEMENTED_call() +e = NOT_IMPLEMENTED_call()
+f = 1, NOT_YET_IMPLEMENTED_ExprStarred +f = 1, NOT_YET_IMPLEMENTED_ExprStarred
+g = 1, NOT_YET_IMPLEMENTED_ExprStarred +g = 1, NOT_YET_IMPLEMENTED_ExprStarred
@ -662,6 +645,20 @@ last_call()
+ (coord_names + NOT_IMPLEMENTED_call()) + (coord_names + NOT_IMPLEMENTED_call())
+ + NOT_IMPLEMENTED_call() + + NOT_IMPLEMENTED_call()
) )
-what_is_up_with_those_new_coord_names = (coord_names | set(vars_to_create)) - set(
- vars_to_remove
+what_is_up_with_those_new_coord_names = (
+ (coord_names | NOT_IMPLEMENTED_call())
+ - NOT_IMPLEMENTED_call()
)
-result = (
- session.query(models.Customer.id)
- .filter(
- models.Customer.account_id == account_id, models.Customer.email == email_address
- )
- .order_by(models.Customer.id.asc())
- .all()
-)
-result = ( -result = (
- session.query(models.Customer.id) - session.query(models.Customer.id)
- .filter( - .filter(
@ -671,10 +668,7 @@ last_call()
- models.Customer.id.asc(), - models.Customer.id.asc(),
- ) - )
- .all() - .all()
+what_is_up_with_those_new_coord_names = ( -)
+ (coord_names | NOT_IMPLEMENTED_call())
+ - NOT_IMPLEMENTED_call()
)
-Ø = set() -Ø = set()
-authors.łukasz.say_thanks() -authors.łukasz.say_thanks()
+result = NOT_IMPLEMENTED_call() +result = NOT_IMPLEMENTED_call()
@ -714,6 +708,14 @@ last_call()
-for (x,) in (1,), (2,), (3,): -for (x,) in (1,), (2,), (3,):
- ... - ...
-for y in (): -for y in ():
- ...
-for z in (i for i in (1, 2, 3)):
- ...
-for i in call():
- ...
-for j in 1 + (2 + 3):
- ...
-while this and that:
+NOT_IMPLEMENTED_call() +NOT_IMPLEMENTED_call()
+NOT_IMPLEMENTED_call() +NOT_IMPLEMENTED_call()
+NOT_IMPLEMENTED_call() +NOT_IMPLEMENTED_call()
@ -727,14 +729,6 @@ last_call()
+NOT_YET_IMPLEMENTED_StmtFor +NOT_YET_IMPLEMENTED_StmtFor
+while NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2: +while NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2:
... ...
-for z in (i for i in (1, 2, 3)):
- ...
-for i in call():
- ...
-for j in 1 + (2 + 3):
- ...
-while this and that:
- ...
-for ( -for (
- addr_family, - addr_family,
- addr_type, - addr_type,
@ -779,7 +773,7 @@ last_call()
if ( if (
- ~aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e - ~aaaa.a + aaaa.b - aaaa.c * aaaa.d / aaaa.e
- | aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l**aaaa.m // aaaa.n - | aaaa.f & aaaa.g % aaaa.h ^ aaaa.i << aaaa.k >> aaaa.l**aaaa.m // aaaa.n
+ NOT_YET_IMPLEMENTED_ExprUnaryOp + ~aaaa.NOT_IMPLEMENTED_attr
+ + aaaa.NOT_IMPLEMENTED_attr + + aaaa.NOT_IMPLEMENTED_attr
+ - aaaa.NOT_IMPLEMENTED_attr * aaaa.NOT_IMPLEMENTED_attr / aaaa.NOT_IMPLEMENTED_attr + - aaaa.NOT_IMPLEMENTED_attr * aaaa.NOT_IMPLEMENTED_attr / aaaa.NOT_IMPLEMENTED_attr
+ | aaaa.NOT_IMPLEMENTED_attr + | aaaa.NOT_IMPLEMENTED_attr
@ -793,7 +787,7 @@ last_call()
- ~aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e - ~aaaaaaaa.a + aaaaaaaa.b - aaaaaaaa.c @ aaaaaaaa.d / aaaaaaaa.e
- | aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h - | aaaaaaaa.f & aaaaaaaa.g % aaaaaaaa.h
- ^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l**aaaaaaaa.m // aaaaaaaa.n - ^ aaaaaaaa.i << aaaaaaaa.k >> aaaaaaaa.l**aaaaaaaa.m // aaaaaaaa.n
+ NOT_YET_IMPLEMENTED_ExprUnaryOp + ~aaaaaaaa.NOT_IMPLEMENTED_attr
+ + aaaaaaaa.NOT_IMPLEMENTED_attr + + aaaaaaaa.NOT_IMPLEMENTED_attr
+ - aaaaaaaa.NOT_IMPLEMENTED_attr + - aaaaaaaa.NOT_IMPLEMENTED_attr
+ @ aaaaaaaa.NOT_IMPLEMENTED_attr + @ aaaaaaaa.NOT_IMPLEMENTED_attr
@ -815,7 +809,7 @@ last_call()
- ^ aaaaaaaaaaaaaaaa.i - ^ aaaaaaaaaaaaaaaa.i
- << aaaaaaaaaaaaaaaa.k - << aaaaaaaaaaaaaaaa.k
- >> aaaaaaaaaaaaaaaa.l**aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n - >> aaaaaaaaaaaaaaaa.l**aaaaaaaaaaaaaaaa.m // aaaaaaaaaaaaaaaa.n
+ NOT_YET_IMPLEMENTED_ExprUnaryOp + ~aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr
+ + aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr + + aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr
+ - aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr + - aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr
+ * aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr + * aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr
@ -874,13 +868,13 @@ v1 << 2
1 % finished 1 % finished
1 + v2 - v3 * 4 ^ 5**v6 / 7 // 8 1 + v2 - v3 * 4 ^ 5**v6 / 7 // 8
((1 + v2) - (v3 * 4)) ^ (((5**v6) / 7) // 8) ((1 + v2) - (v3 * 4)) ^ (((5**v6) / 7) // 8)
NOT_YET_IMPLEMENTED_ExprUnaryOp not great
NOT_YET_IMPLEMENTED_ExprUnaryOp ~great
NOT_YET_IMPLEMENTED_ExprUnaryOp +value
NOT_YET_IMPLEMENTED_ExprUnaryOp -1
NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
NOT_YET_IMPLEMENTED_ExprUnaryOp +really ** -confusing ** ~operator**-precedence
NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
lambda x: True lambda x: True
lambda x: True lambda x: True
@ -1146,7 +1140,7 @@ if (
): ):
return True return True
if ( if (
NOT_YET_IMPLEMENTED_ExprUnaryOp ~aaaa.NOT_IMPLEMENTED_attr
+ aaaa.NOT_IMPLEMENTED_attr + aaaa.NOT_IMPLEMENTED_attr
- aaaa.NOT_IMPLEMENTED_attr * aaaa.NOT_IMPLEMENTED_attr / aaaa.NOT_IMPLEMENTED_attr - aaaa.NOT_IMPLEMENTED_attr * aaaa.NOT_IMPLEMENTED_attr / aaaa.NOT_IMPLEMENTED_attr
| aaaa.NOT_IMPLEMENTED_attr | aaaa.NOT_IMPLEMENTED_attr
@ -1157,7 +1151,7 @@ if (
): ):
return True return True
if ( if (
NOT_YET_IMPLEMENTED_ExprUnaryOp ~aaaaaaaa.NOT_IMPLEMENTED_attr
+ aaaaaaaa.NOT_IMPLEMENTED_attr + aaaaaaaa.NOT_IMPLEMENTED_attr
- aaaaaaaa.NOT_IMPLEMENTED_attr - aaaaaaaa.NOT_IMPLEMENTED_attr
@ aaaaaaaa.NOT_IMPLEMENTED_attr @ aaaaaaaa.NOT_IMPLEMENTED_attr
@ -1172,7 +1166,7 @@ if (
): ):
return True return True
if ( if (
NOT_YET_IMPLEMENTED_ExprUnaryOp ~aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr
+ aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr + aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr
- aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr - aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr
* aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr * aaaaaaaaaaaaaaaa.NOT_IMPLEMENTED_attr

View file

@ -286,7 +286,7 @@ d={'a':1,
+ c=[], + c=[],
+ d={}, + d={},
+ e=True, + e=True,
+ f=NOT_YET_IMPLEMENTED_ExprUnaryOp, + f=-1,
+ g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false, + g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
+ h="NOT_YET_IMPLEMENTED_STRING", + h="NOT_YET_IMPLEMENTED_STRING",
+ i="NOT_YET_IMPLEMENTED_STRING", + i="NOT_YET_IMPLEMENTED_STRING",
@ -296,15 +296,13 @@ d={'a':1,
def spaces_types( def spaces_types(
@@ -50,77 +69,62 @@ @@ -51,76 +70,61 @@
c: list = [],
d: dict = {}, d: dict = {},
e: bool = True, e: bool = True,
- f: int = -1, f: int = -1,
- g: int = 1 if False else 2, - g: int = 1 if False else 2,
- h: str = "", - h: str = "",
- i: str = r"", - i: str = r"",
+ f: int = NOT_YET_IMPLEMENTED_ExprUnaryOp,
+ g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false, + g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
+ h: str = "NOT_YET_IMPLEMENTED_STRING", + h: str = "NOT_YET_IMPLEMENTED_STRING",
+ i: str = "NOT_YET_IMPLEMENTED_STRING", + i: str = "NOT_YET_IMPLEMENTED_STRING",
@ -425,13 +423,11 @@ d={'a':1,
- implicit_default=True, - implicit_default=True,
- ) - )
- ) - )
+ NOT_IMPLEMENTED_call() - # fmt: off
# fmt: off
- a = ( - a = (
- unnecessary_bracket() - unnecessary_bracket()
- ) - )
+ a = NOT_IMPLEMENTED_call() - # fmt: on
# fmt: on
- _type_comment_re = re.compile( - _type_comment_re = re.compile(
- r""" - r"""
- ^ - ^
@ -452,9 +448,11 @@ d={'a':1,
- ) - )
- $ - $
- """, - """,
- # fmt: off + NOT_IMPLEMENTED_call()
# fmt: off
- re.MULTILINE|re.VERBOSE - re.MULTILINE|re.VERBOSE
- # fmt: on + a = NOT_IMPLEMENTED_call()
# fmt: on
- ) - )
+ _type_comment_re = NOT_IMPLEMENTED_call() + _type_comment_re = NOT_IMPLEMENTED_call()
@ -563,7 +561,7 @@ def spaces(
c=[], c=[],
d={}, d={},
e=True, e=True,
f=NOT_YET_IMPLEMENTED_ExprUnaryOp, f=-1,
g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false, g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
h="NOT_YET_IMPLEMENTED_STRING", h="NOT_YET_IMPLEMENTED_STRING",
i="NOT_YET_IMPLEMENTED_STRING", i="NOT_YET_IMPLEMENTED_STRING",
@ -578,7 +576,7 @@ def spaces_types(
c: list = [], c: list = [],
d: dict = {}, d: dict = {},
e: bool = True, e: bool = True,
f: int = NOT_YET_IMPLEMENTED_ExprUnaryOp, f: int = -1,
g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false, g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
h: str = "NOT_YET_IMPLEMENTED_STRING", h: str = "NOT_YET_IMPLEMENTED_STRING",
i: str = "NOT_YET_IMPLEMENTED_STRING", i: str = "NOT_YET_IMPLEMENTED_STRING",

View file

@ -179,7 +179,7 @@ def __await__(): return (yield)
+ c=[], + c=[],
+ d={}, + d={},
+ e=True, + e=True,
+ f=NOT_YET_IMPLEMENTED_ExprUnaryOp, + f=-1,
+ g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false, + g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
+ h="NOT_YET_IMPLEMENTED_STRING", + h="NOT_YET_IMPLEMENTED_STRING",
+ i="NOT_YET_IMPLEMENTED_STRING", + i="NOT_YET_IMPLEMENTED_STRING",
@ -189,15 +189,13 @@ def __await__(): return (yield)
def spaces_types( def spaces_types(
@@ -55,71 +61,27 @@ @@ -56,70 +62,26 @@
c: list = [],
d: dict = {}, d: dict = {},
e: bool = True, e: bool = True,
- f: int = -1, f: int = -1,
- g: int = 1 if False else 2, - g: int = 1 if False else 2,
- h: str = "", - h: str = "",
- i: str = r"", - i: str = r"",
+ f: int = NOT_YET_IMPLEMENTED_ExprUnaryOp,
+ g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false, + g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
+ h: str = "NOT_YET_IMPLEMENTED_STRING", + h: str = "NOT_YET_IMPLEMENTED_STRING",
+ i: str = "NOT_YET_IMPLEMENTED_STRING", + i: str = "NOT_YET_IMPLEMENTED_STRING",
@ -341,7 +339,7 @@ def spaces(
c=[], c=[],
d={}, d={},
e=True, e=True,
f=NOT_YET_IMPLEMENTED_ExprUnaryOp, f=-1,
g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false, g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
h="NOT_YET_IMPLEMENTED_STRING", h="NOT_YET_IMPLEMENTED_STRING",
i="NOT_YET_IMPLEMENTED_STRING", i="NOT_YET_IMPLEMENTED_STRING",
@ -356,7 +354,7 @@ def spaces_types(
c: list = [], c: list = [],
d: dict = {}, d: dict = {},
e: bool = True, e: bool = True,
f: int = NOT_YET_IMPLEMENTED_ExprUnaryOp, f: int = -1,
g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false, g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
h: str = "NOT_YET_IMPLEMENTED_STRING", h: str = "NOT_YET_IMPLEMENTED_STRING",
i: str = "NOT_YET_IMPLEMENTED_STRING", i: str = "NOT_YET_IMPLEMENTED_STRING",

View file

@ -76,13 +76,13 @@ return np.divide(
```diff ```diff
--- Black --- Black
+++ Ruff +++ Ruff
@@ -11,53 +11,46 @@ @@ -12,52 +12,45 @@
{**a, **b, **c}
-a = 5**~4 a = 5**~4
-b = 5 ** f() -b = 5 ** f()
-c = -(5**2) +b = 5 ** NOT_IMPLEMENTED_call()
c = -(5**2)
-d = 5 ** f["hi"] -d = 5 ** f["hi"]
-e = lazy(lambda **kwargs: 5) -e = lazy(lambda **kwargs: 5)
-f = f() ** 5 -f = f() ** 5
@ -92,9 +92,6 @@ return np.divide(
-j = super().name ** 5 -j = super().name ** 5
-k = [(2**idx, value) for idx, value in pairs] -k = [(2**idx, value) for idx, value in pairs]
-l = mod.weights_[0] == pytest.approx(0.95**100, abs=0.001) -l = mod.weights_[0] == pytest.approx(0.95**100, abs=0.001)
+a = 5**NOT_YET_IMPLEMENTED_ExprUnaryOp
+b = 5 ** NOT_IMPLEMENTED_call()
+c = NOT_YET_IMPLEMENTED_ExprUnaryOp
+d = 5 ** NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key] +d = 5 ** NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
+e = NOT_IMPLEMENTED_call() +e = NOT_IMPLEMENTED_call()
+f = NOT_IMPLEMENTED_call() ** 5 +f = NOT_IMPLEMENTED_call() ** 5
@ -115,9 +112,10 @@ return np.divide(
+q = [i for i in []] +q = [i for i in []]
r = x**y r = x**y
-a = 5.0**~4.0 a = 5.0**~4.0
-b = 5.0 ** f() -b = 5.0 ** f()
-c = -(5.0**2.0) +b = 5.0 ** NOT_IMPLEMENTED_call()
c = -(5.0**2.0)
-d = 5.0 ** f["hi"] -d = 5.0 ** f["hi"]
-e = lazy(lambda **kwargs: 5) -e = lazy(lambda **kwargs: 5)
-f = f() ** 5.0 -f = f() ** 5.0
@ -127,9 +125,6 @@ return np.divide(
-j = super().name ** 5.0 -j = super().name ** 5.0
-k = [(2.0**idx, value) for idx, value in pairs] -k = [(2.0**idx, value) for idx, value in pairs]
-l = mod.weights_[0] == pytest.approx(0.95**100, abs=0.001) -l = mod.weights_[0] == pytest.approx(0.95**100, abs=0.001)
+a = 5.0**NOT_YET_IMPLEMENTED_ExprUnaryOp
+b = 5.0 ** NOT_IMPLEMENTED_call()
+c = NOT_YET_IMPLEMENTED_ExprUnaryOp
+d = 5.0 ** NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key] +d = 5.0 ** NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
+e = NOT_IMPLEMENTED_call() +e = NOT_IMPLEMENTED_call()
+f = NOT_IMPLEMENTED_call() ** 5.0 +f = NOT_IMPLEMENTED_call() ** 5.0
@ -183,9 +178,9 @@ def function_dont_replace_spaces():
{**a, **b, **c} {**a, **b, **c}
a = 5**NOT_YET_IMPLEMENTED_ExprUnaryOp a = 5**~4
b = 5 ** NOT_IMPLEMENTED_call() b = 5 ** NOT_IMPLEMENTED_call()
c = NOT_YET_IMPLEMENTED_ExprUnaryOp c = -(5**2)
d = 5 ** NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key] d = 5 ** NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
e = NOT_IMPLEMENTED_call() e = NOT_IMPLEMENTED_call()
f = NOT_IMPLEMENTED_call() ** 5 f = NOT_IMPLEMENTED_call() ** 5
@ -202,9 +197,9 @@ p = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value for key, value in NOT_
q = [i for i in []] q = [i for i in []]
r = x**y r = x**y
a = 5.0**NOT_YET_IMPLEMENTED_ExprUnaryOp a = 5.0**~4.0
b = 5.0 ** NOT_IMPLEMENTED_call() b = 5.0 ** NOT_IMPLEMENTED_call()
c = NOT_YET_IMPLEMENTED_ExprUnaryOp c = -(5.0**2.0)
d = 5.0 ** NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key] d = 5.0 ** NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
e = NOT_IMPLEMENTED_call() e = NOT_IMPLEMENTED_call()
f = NOT_IMPLEMENTED_call() ** 5.0 f = NOT_IMPLEMENTED_call() ** 5.0

View file

@ -251,7 +251,7 @@ aaaaaaaaaaaaaa + NOT_YET_IMPLEMENTED_ExprSetComp
# But only for expressions that have a statement parent. # But only for expressions that have a statement parent.
NOT_YET_IMPLEMENTED_ExprUnaryOp not (aaaaaaaaaaaaaa + NOT_YET_IMPLEMENTED_ExprSetComp)
[NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right] [NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right]

View file

@ -0,0 +1,302 @@
---
source: crates/ruff_python_formatter/src/lib.rs
expression: snapshot
---
## Input
```py
if not aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb:
pass
a = True
not a
b = 10
-b
+b
## Leading operand comments
if not (
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if ~(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if -(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if +(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if (
not
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
~
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if (
-
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
if (
+
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb):
pass
## Parentheses
if (
# unary comment
not
# operand comment
(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
):
pass
if (not (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
):
pass
if aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa & (not (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
):
pass
if (
not (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
& aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
):
pass
## Trailing operator comments
if (
not # comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
~ # comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
- # comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
+ # comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
## Varia
if not \
a:
pass
```
## Output
```py
if (
not aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
a = True
not a
b = 10
-b
+b
## Leading operand comments
if not (
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if ~(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if -(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if +(
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
not
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
~
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
-
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
+
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
## Parentheses
if (
# unary comment
not (
# operand comment
# comment
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
):
pass
if not (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa & (
not (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
):
pass
if (
not (
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
)
& aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
):
pass
## Trailing operator comments
if (
not aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # comment
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
~aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # comment
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # comment
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
if (
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa # comment
+ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
):
pass
## Varia
if not a:
pass
```