mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-22 20:45:11 +00:00
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:
parent
3973836420
commit
1336ca601b
13 changed files with 623 additions and 115 deletions
138
crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/unary.py
vendored
Normal file
138
crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/unary.py
vendored
Normal 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
|
|
@ -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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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:
|
||||||
...
|
...
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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",
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
```
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue