mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-24 05:25:17 +00:00
Format ExprTuple (#4963)
This implements formatting ExprTuple, including magic trailing comma. I intentionally didn't change the settings mechanism but just added a dummy global const flag. Besides the snapshots, I added custom breaking/joining tests and a deeply nested test case. The diffs look better than previously, proper black compatibility depends on parentheses handling. --------- Co-authored-by: Micha Reiser <micha@reiser.io>
This commit is contained in:
parent
8161757229
commit
e586c27590
25 changed files with 735 additions and 219 deletions
59
crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/tuple_expression.py
vendored
Normal file
59
crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/tuple_expression.py
vendored
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
# Non-wrapping parentheses checks
|
||||||
|
a1 = 1, 2
|
||||||
|
a2 = (1, 2)
|
||||||
|
a3 = (1, 2), 3
|
||||||
|
a4 = ((1, 2), 3)
|
||||||
|
|
||||||
|
# Wrapping parentheses checks
|
||||||
|
b1 = (("Michael", "Ende"), ("Der", "satanarchäolügenialkohöllische", "Wunschpunsch"), ("Beelzebub", "Irrwitzer"), ("Tyrannja", "Vamperl"),)
|
||||||
|
b2 = ("akjdshflkjahdslkfjlasfdahjlfds", "ljklsadhflakfdajflahfdlajfhafldkjalfj", "ljklsadhflakfdajflahfdlajfhafldkjalf2",)
|
||||||
|
b3 = ("The", "Night", "of", "Wishes:", "Or", "the", "Satanarchaeolidealcohellish", "Notion", "Potion",)
|
||||||
|
|
||||||
|
# Nested wrapping parentheses check
|
||||||
|
c1 = (("cicero"), ("Qui", "autem,", "si", "maxime", "hoc", "placeat,", "moderatius", "tamen", "id", "uolunt", "fieri,", "difficilem", "quandam", "temperantiam", "postulant", "in", "eo,", "quod", "semel", "admissum", "coerceri", "reprimique", "non", "potest,", "ut", "propemodum", "iustioribus", "utamur", "illis,", "qui", "omnino", "auocent", "a", "philosophia,", "quam", "his,", "qui", "rebus", "infinitis", "modum", "constituant", "in", "reque", "eo", "meliore,", "quo", "maior", "sit,", "mediocritatem", "desiderent."), ("de", "finibus", "bonorum", "et", "malorum"))
|
||||||
|
|
||||||
|
# Deeply nested parentheses
|
||||||
|
d1 = ((("3D",),),)
|
||||||
|
d2 = (((((((((((((((((((((((((((("¯\_(ツ)_/¯",),),),),),),),),),),),),),),),),),),),),),),),),),),),)
|
||||||
|
|
||||||
|
# Join and magic trailing comma
|
||||||
|
e1 = (
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
)
|
||||||
|
e2 = (
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
)
|
||||||
|
e3 = (
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
e4 = (
|
||||||
|
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor",
|
||||||
|
"incididunt"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Empty tuples and comments
|
||||||
|
f1 = (
|
||||||
|
# empty
|
||||||
|
)
|
||||||
|
f2 = ()
|
||||||
|
|
||||||
|
# Comments in other tuples
|
||||||
|
g1 = ( # a
|
||||||
|
# b
|
||||||
|
1, # c
|
||||||
|
# d
|
||||||
|
) # e
|
||||||
|
g2 = ( # a
|
||||||
|
# b
|
||||||
|
1, # c
|
||||||
|
# d
|
||||||
|
2, # e
|
||||||
|
# f
|
||||||
|
) # g
|
||||||
|
|
||||||
|
# Ensure the correct number of parentheses
|
||||||
|
h1 = ((((1, 2))))
|
||||||
|
h2 = ((((1, "qweiurpoiqwurepqiurpqirpuqoiwrupqoirupqoirupqoiurpqiorupwqiourpqurpqurpqurpqurpqurpqurüqurqpuriq"))))
|
||||||
|
h3 = 1, "qweiurpoiqwurepqiurpqirpuqoiwrupqoirupqoirupqoiurpqiorupwqiourpqurpqurpqurpqurpqurpqurüqurqpuriq"
|
|
@ -1,17 +1,130 @@
|
||||||
use crate::comments::Comments;
|
use crate::comments::{dangling_node_comments, Comments};
|
||||||
|
use crate::context::PyFormatContext;
|
||||||
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_custom_text, FormatNodeRule, PyFormatter};
|
use crate::trivia::Token;
|
||||||
use ruff_formatter::{write, Buffer, FormatResult};
|
use crate::trivia::{first_non_trivia_token, TokenKind};
|
||||||
|
use crate::{AsFormat, FormatNodeRule, FormattedIterExt, PyFormatter, USE_MAGIC_TRAILING_COMMA};
|
||||||
|
use ruff_formatter::formatter::Formatter;
|
||||||
|
use ruff_formatter::prelude::{
|
||||||
|
block_indent, group, if_group_breaks, soft_block_indent, soft_line_break_or_space, text,
|
||||||
|
};
|
||||||
|
use ruff_formatter::{format_args, write, Buffer, Format, FormatResult};
|
||||||
|
use ruff_python_ast::prelude::{Expr, Ranged};
|
||||||
|
use ruff_text_size::TextRange;
|
||||||
use rustpython_parser::ast::ExprTuple;
|
use rustpython_parser::ast::ExprTuple;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct FormatExprTuple;
|
pub struct FormatExprTuple;
|
||||||
|
|
||||||
impl FormatNodeRule<ExprTuple> for FormatExprTuple {
|
impl FormatNodeRule<ExprTuple> for FormatExprTuple {
|
||||||
fn fmt_fields(&self, _item: &ExprTuple, f: &mut PyFormatter) -> FormatResult<()> {
|
fn fmt_fields(&self, item: &ExprTuple, f: &mut PyFormatter) -> FormatResult<()> {
|
||||||
write!(f, [not_yet_implemented_custom_text("(1, 2)")])
|
let ExprTuple {
|
||||||
|
range,
|
||||||
|
elts,
|
||||||
|
ctx: _,
|
||||||
|
} = item;
|
||||||
|
|
||||||
|
// Handle the edge cases of an empty tuple and a tuple with one element
|
||||||
|
let last = match &elts[..] {
|
||||||
|
[] => {
|
||||||
|
return write!(
|
||||||
|
f,
|
||||||
|
[
|
||||||
|
// An empty tuple always needs parentheses, but does not have a comma
|
||||||
|
&text("("),
|
||||||
|
block_indent(&dangling_node_comments(item)),
|
||||||
|
&text(")"),
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
[single] => {
|
||||||
|
return write!(
|
||||||
|
f,
|
||||||
|
[group(&format_args![
|
||||||
|
// A single element tuple always needs parentheses and a trailing comma
|
||||||
|
&text("("),
|
||||||
|
soft_block_indent(&format_args![single.format(), &text(",")]),
|
||||||
|
&text(")"),
|
||||||
|
])]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
[.., last] => last,
|
||||||
|
};
|
||||||
|
|
||||||
|
let magic_trailing_comma = USE_MAGIC_TRAILING_COMMA
|
||||||
|
&& matches!(
|
||||||
|
first_non_trivia_token(last.range().end(), f.context().contents()),
|
||||||
|
Some(Token {
|
||||||
|
kind: TokenKind::Comma,
|
||||||
|
..
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
if magic_trailing_comma {
|
||||||
|
// A magic trailing comma forces us to print in expanded mode since we have more than
|
||||||
|
// one element
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
[
|
||||||
|
// An expanded group always needs parentheses
|
||||||
|
&text("("),
|
||||||
|
block_indent(&ExprSequence::new(elts)),
|
||||||
|
&text(")"),
|
||||||
|
]
|
||||||
|
)?;
|
||||||
|
} else if is_parenthesized(*range, elts, f) {
|
||||||
|
// If the tuple has parentheses, keep them. Note that unlike other expr parentheses,
|
||||||
|
// those are actually part of the range
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
[group(&format_args![
|
||||||
|
// If there were previously parentheses, keep them
|
||||||
|
&text("("),
|
||||||
|
soft_block_indent(&ExprSequence::new(elts)),
|
||||||
|
&text(")"),
|
||||||
|
])]
|
||||||
|
)?;
|
||||||
|
} else {
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
[group(&format_args![
|
||||||
|
// If there were previously no parentheses, add them only if the group breaks
|
||||||
|
if_group_breaks(&text("(")),
|
||||||
|
soft_block_indent(&ExprSequence::new(elts)),
|
||||||
|
if_group_breaks(&text(")")),
|
||||||
|
])]
|
||||||
|
)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn fmt_dangling_comments(&self, _node: &ExprTuple, _f: &mut PyFormatter) -> FormatResult<()> {
|
||||||
|
// Handled in `fmt_fields`
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct ExprSequence<'a> {
|
||||||
|
elts: &'a [Expr],
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> ExprSequence<'a> {
|
||||||
|
const fn new(elts: &'a [Expr]) -> Self {
|
||||||
|
Self { elts }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Format<PyFormatContext<'_>> for ExprSequence<'_> {
|
||||||
|
fn fmt(&self, f: &mut Formatter<PyFormatContext<'_>>) -> FormatResult<()> {
|
||||||
|
f.join_with(&format_args!(text(","), soft_line_break_or_space()))
|
||||||
|
.entries(self.elts.iter().formatted())
|
||||||
|
.finish()?;
|
||||||
|
// Black style has a trailing comma on the last entry of an expanded group
|
||||||
|
write!(f, [if_group_breaks(&text(","))])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,3 +141,29 @@ impl NeedsParentheses for ExprTuple {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check if a tuple has already had parentheses in the input
|
||||||
|
fn is_parenthesized(
|
||||||
|
tuple_range: TextRange,
|
||||||
|
elts: &[Expr],
|
||||||
|
f: &mut Formatter<PyFormatContext<'_>>,
|
||||||
|
) -> bool {
|
||||||
|
let parentheses = '(';
|
||||||
|
let first_char = &f.context().contents()[usize::from(tuple_range.start())..]
|
||||||
|
.chars()
|
||||||
|
.next();
|
||||||
|
let Some(first_char) = first_char else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
if *first_char != parentheses {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Consider `a = (1, 2), 3`: The first char of the current expr starts is a parentheses, but
|
||||||
|
// it's not its own but that of its first tuple child. We know that it belongs to the child
|
||||||
|
// because if it wouldn't, the child would start (at least) a char later
|
||||||
|
let Some(first_child) = elts.first() else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
first_child.range().start() != tuple_range.start()
|
||||||
|
}
|
||||||
|
|
|
@ -30,6 +30,10 @@ mod trivia;
|
||||||
|
|
||||||
include!("../../ruff_formatter/shared_traits.rs");
|
include!("../../ruff_formatter/shared_traits.rs");
|
||||||
|
|
||||||
|
/// TODO(konstin): hook this up to the settings by replacing `SimpleFormatOptions` with a python
|
||||||
|
/// specific struct.
|
||||||
|
pub(crate) const USE_MAGIC_TRAILING_COMMA: bool = true;
|
||||||
|
|
||||||
/// 'ast is the lifetime of the source code (input), 'buf is the lifetime of the buffer (output)
|
/// 'ast is the lifetime of the source code (input), 'buf is the lifetime of the buffer (output)
|
||||||
pub(crate) type PyFormatter<'ast, 'buf> = Formatter<'buf, PyFormatContext<'ast>>;
|
pub(crate) type PyFormatter<'ast, 'buf> = Formatter<'buf, PyFormatContext<'ast>>;
|
||||||
|
|
||||||
|
|
|
@ -122,28 +122,25 @@ if True:
|
||||||
- 2,
|
- 2,
|
||||||
- 3,
|
- 3,
|
||||||
-}
|
-}
|
||||||
-x = (1,)
|
+c = {1, 2, 3}
|
||||||
|
x = (1,)
|
||||||
-y = (narf(),)
|
-y = (narf(),)
|
||||||
-nested = {
|
-nested = {
|
||||||
- (1, 2, 3),
|
- (1, 2, 3),
|
||||||
- (4, 5, 6),
|
- (4, 5, 6),
|
||||||
-}
|
-}
|
||||||
-nested_no_trailing_comma = {(1, 2, 3), (4, 5, 6)}
|
+y = (NOT_IMPLEMENTED_call(),)
|
||||||
+c = {1, 2, 3}
|
+nested = {(1, 2, 3), (4, 5, 6)}
|
||||||
+x = (1, 2)
|
nested_no_trailing_comma = {(1, 2, 3), (4, 5, 6)}
|
||||||
+y = (1, 2)
|
|
||||||
+nested = {(1, 2), (1, 2)}
|
|
||||||
+nested_no_trailing_comma = {(1, 2), (1, 2)}
|
|
||||||
nested_long_lines = [
|
nested_long_lines = [
|
||||||
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
- "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
- "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
- "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
|
||||||
- "cccccccccccccccccccccccccccccccccccccccc",
|
- "cccccccccccccccccccccccccccccccccccccccc",
|
||||||
- (1, 2, 3),
|
+ "NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
+ "NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
+ "NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
(1, 2, 3),
|
||||||
- "dddddddddddddddddddddddddddddddddddddddd",
|
- "dddddddddddddddddddddddddddddddddddddddd",
|
||||||
+ "NOT_YET_IMPLEMENTED_STRING",
|
|
||||||
+ "NOT_YET_IMPLEMENTED_STRING",
|
|
||||||
+ "NOT_YET_IMPLEMENTED_STRING",
|
|
||||||
+ (1, 2),
|
|
||||||
+ "NOT_YET_IMPLEMENTED_STRING",
|
+ "NOT_YET_IMPLEMENTED_STRING",
|
||||||
]
|
]
|
||||||
-{
|
-{
|
||||||
|
@ -161,7 +158,7 @@ if True:
|
||||||
-)
|
-)
|
||||||
+{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
+{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
+{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
+{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
+["NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING" % (1, 2)]
|
+["NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING" % (foo,)]
|
||||||
+x = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
+x = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
+y = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
+y = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
+NOT_YET_IMPLEMENTED_StmtAssert
|
+NOT_YET_IMPLEMENTED_StmtAssert
|
||||||
|
@ -181,9 +178,8 @@ if True:
|
||||||
-]
|
-]
|
||||||
+[1, 2, 3]
|
+[1, 2, 3]
|
||||||
|
|
||||||
-division_result_tuple = (6 / 2,)
|
division_result_tuple = (6 / 2,)
|
||||||
-print("foo %r", (foo.bar,))
|
-print("foo %r", (foo.bar,))
|
||||||
+division_result_tuple = (1, 2)
|
|
||||||
+NOT_IMPLEMENTED_call()
|
+NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
if True:
|
if True:
|
||||||
|
@ -238,20 +234,20 @@ NOT_YET_IMPLEMENTED_StmtImportFrom
|
||||||
a = {1, 2, 3}
|
a = {1, 2, 3}
|
||||||
b = {1, 2, 3}
|
b = {1, 2, 3}
|
||||||
c = {1, 2, 3}
|
c = {1, 2, 3}
|
||||||
x = (1, 2)
|
x = (1,)
|
||||||
y = (1, 2)
|
y = (NOT_IMPLEMENTED_call(),)
|
||||||
nested = {(1, 2), (1, 2)}
|
nested = {(1, 2, 3), (4, 5, 6)}
|
||||||
nested_no_trailing_comma = {(1, 2), (1, 2)}
|
nested_no_trailing_comma = {(1, 2, 3), (4, 5, 6)}
|
||||||
nested_long_lines = [
|
nested_long_lines = [
|
||||||
"NOT_YET_IMPLEMENTED_STRING",
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
"NOT_YET_IMPLEMENTED_STRING",
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
"NOT_YET_IMPLEMENTED_STRING",
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
(1, 2),
|
(1, 2, 3),
|
||||||
"NOT_YET_IMPLEMENTED_STRING",
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
]
|
]
|
||||||
{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
["NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING" % (1, 2)]
|
["NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING" % (foo,)]
|
||||||
x = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
x = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
y = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
y = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
NOT_YET_IMPLEMENTED_StmtAssert
|
NOT_YET_IMPLEMENTED_StmtAssert
|
||||||
|
@ -262,7 +258,7 @@ NOT_YET_IMPLEMENTED_StmtFor
|
||||||
|
|
||||||
[1, 2, 3]
|
[1, 2, 3]
|
||||||
|
|
||||||
division_result_tuple = (1, 2)
|
division_result_tuple = (6 / 2,)
|
||||||
NOT_IMPLEMENTED_call()
|
NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
if True:
|
if True:
|
||||||
|
|
|
@ -137,7 +137,7 @@ aaaaaaaaaaaaa, bbbbbbbbb = map(list, map(itertools.chain.from_iterable, zip(*ite
|
||||||
|
|
||||||
|
|
||||||
def f(
|
def f(
|
||||||
@@ -49,15 +49,10 @@
|
@@ -49,10 +49,8 @@
|
||||||
element = 0 # type: int
|
element = 0 # type: int
|
||||||
another_element = 1 # type: float
|
another_element = 1 # type: float
|
||||||
another_element_with_long_name = 2 # type: int
|
another_element_with_long_name = 2 # type: int
|
||||||
|
@ -148,15 +148,9 @@ aaaaaaaaaaaaa, bbbbbbbbb = map(list, map(itertools.chain.from_iterable, zip(*ite
|
||||||
+ another_really_really_long_element_with_a_unnecessarily_long_name_to_describe_what_it_does_enterprise_style = 3 # type: int
|
+ another_really_really_long_element_with_a_unnecessarily_long_name_to_describe_what_it_does_enterprise_style = 3 # type: int
|
||||||
+ an_element_with_a_long_value = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 # type: bool
|
+ an_element_with_a_long_value = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 # type: bool
|
||||||
|
|
||||||
- tup = (
|
tup = (
|
||||||
- another_element,
|
another_element,
|
||||||
- another_really_really_long_element_with_a_unnecessarily_long_name_to_describe_what_it_does_enterprise_style,
|
@@ -84,35 +82,22 @@
|
||||||
- ) # type: Tuple[int, int]
|
|
||||||
+ tup = (1, 2) # type: Tuple[int, int]
|
|
||||||
|
|
||||||
a = (
|
|
||||||
element
|
|
||||||
@@ -84,35 +79,22 @@
|
|
||||||
|
|
||||||
|
|
||||||
def func(
|
def func(
|
||||||
|
@ -203,7 +197,7 @@ aaaaaaaaaaaaa, bbbbbbbbb = map(list, map(itertools.chain.from_iterable, zip(*ite
|
||||||
+NOT_IMPLEMENTED_call()
|
+NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
-aaaaaaaaaaaaa, bbbbbbbbb = map(list, map(itertools.chain.from_iterable, zip(*items))) # type: ignore[arg-type]
|
-aaaaaaaaaaaaa, bbbbbbbbb = map(list, map(itertools.chain.from_iterable, zip(*items))) # type: ignore[arg-type]
|
||||||
+(1, 2) = NOT_IMPLEMENTED_call() # type: ignore[arg-type]
|
+aaaaaaaaaaaaa, bbbbbbbbb = NOT_IMPLEMENTED_call() # type: ignore[arg-type]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ruff Output
|
## Ruff Output
|
||||||
|
@ -263,7 +257,10 @@ def f(
|
||||||
another_really_really_long_element_with_a_unnecessarily_long_name_to_describe_what_it_does_enterprise_style = 3 # type: int
|
another_really_really_long_element_with_a_unnecessarily_long_name_to_describe_what_it_does_enterprise_style = 3 # type: int
|
||||||
an_element_with_a_long_value = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 # type: bool
|
an_element_with_a_long_value = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2 # type: bool
|
||||||
|
|
||||||
tup = (1, 2) # type: Tuple[int, int]
|
tup = (
|
||||||
|
another_element,
|
||||||
|
another_really_really_long_element_with_a_unnecessarily_long_name_to_describe_what_it_does_enterprise_style,
|
||||||
|
) # type: Tuple[int, int]
|
||||||
|
|
||||||
a = (
|
a = (
|
||||||
element
|
element
|
||||||
|
@ -308,7 +305,7 @@ AAAAAAAAAAAAA = (
|
||||||
|
|
||||||
NOT_IMPLEMENTED_call()
|
NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
(1, 2) = NOT_IMPLEMENTED_call() # type: ignore[arg-type]
|
aaaaaaaaaaaaa, bbbbbbbbb = NOT_IMPLEMENTED_call() # type: ignore[arg-type]
|
||||||
```
|
```
|
||||||
|
|
||||||
## Black Output
|
## Black Output
|
||||||
|
|
|
@ -42,8 +42,7 @@ def function(a:int=42):
|
||||||
+NOT_YET_IMPLEMENTED_StmtImportFrom
|
+NOT_YET_IMPLEMENTED_StmtImportFrom
|
||||||
|
|
||||||
result = 1 # A simple comment
|
result = 1 # A simple comment
|
||||||
-result = (1,) # Another one
|
result = (1,) # Another one
|
||||||
+result = (1, 2) # Another one
|
|
||||||
|
|
||||||
result = 1 # type: ignore
|
result = 1 # type: ignore
|
||||||
result = 1 # This comment is talking about type: ignore
|
result = 1 # This comment is talking about type: ignore
|
||||||
|
@ -68,7 +67,7 @@ def function(a:int=42):
|
||||||
NOT_YET_IMPLEMENTED_StmtImportFrom
|
NOT_YET_IMPLEMENTED_StmtImportFrom
|
||||||
|
|
||||||
result = 1 # A simple comment
|
result = 1 # A simple comment
|
||||||
result = (1, 2) # Another one
|
result = (1,) # Another one
|
||||||
|
|
||||||
result = 1 # type: ignore
|
result = 1 # type: ignore
|
||||||
result = 1 # This comment is talking about type: ignore
|
result = 1 # This comment is talking about type: ignore
|
||||||
|
|
|
@ -342,8 +342,6 @@ last_call()
|
||||||
-{**a, **b, **c}
|
-{**a, **b, **c}
|
||||||
-{"2.7", "3.6", "3.7", "3.8", "3.9", ("4.0" if gilectomy else "3.10")}
|
-{"2.7", "3.6", "3.7", "3.8", "3.9", ("4.0" if gilectomy else "3.10")}
|
||||||
-({"a": "b"}, (True or False), (+value), "string", b"bytes") or None
|
-({"a": "b"}, (True or False), (+value), "string", b"bytes") or None
|
||||||
-()
|
|
||||||
-(1,)
|
|
||||||
+NOT_YET_IMPLEMENTED_ExprUnaryOp
|
+NOT_YET_IMPLEMENTED_ExprUnaryOp
|
||||||
+NOT_YET_IMPLEMENTED_ExprUnaryOp
|
+NOT_YET_IMPLEMENTED_ExprUnaryOp
|
||||||
+NOT_YET_IMPLEMENTED_ExprUnaryOp
|
+NOT_YET_IMPLEMENTED_ExprUnaryOp
|
||||||
|
@ -377,11 +375,10 @@ last_call()
|
||||||
+ (NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false),
|
+ (NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false),
|
||||||
+}
|
+}
|
||||||
+NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
+NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
||||||
+(1, 2)
|
()
|
||||||
+(1, 2)
|
(1,)
|
||||||
+(1, 2)
|
|
||||||
(1, 2)
|
(1, 2)
|
||||||
-(1, 2, 3)
|
(1, 2, 3)
|
||||||
[]
|
[]
|
||||||
-[1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
|
-[1, 2, 3, 4, 5, 6, 7, 8, 9, (10 or A), (11 or B), (12 or C)]
|
||||||
[
|
[
|
||||||
|
@ -395,11 +392,6 @@ last_call()
|
||||||
- *a,
|
- *a,
|
||||||
4,
|
4,
|
||||||
5,
|
5,
|
||||||
-]
|
|
||||||
-[
|
|
||||||
- 4,
|
|
||||||
- *a,
|
|
||||||
- 5,
|
|
||||||
+ 6,
|
+ 6,
|
||||||
+ 7,
|
+ 7,
|
||||||
+ 8,
|
+ 8,
|
||||||
|
@ -408,6 +400,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]
|
||||||
|
@ -541,6 +538,9 @@ last_call()
|
||||||
- int,
|
- int,
|
||||||
- float,
|
- float,
|
||||||
- dict[str, int],
|
- dict[str, int],
|
||||||
|
-]
|
||||||
|
-very_long_variable_name_filters: t.List[
|
||||||
|
- t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
|
||||||
+[
|
+[
|
||||||
+ 1,
|
+ 1,
|
||||||
+ 2,
|
+ 2,
|
||||||
|
@ -555,9 +555,6 @@ 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,
|
||||||
]
|
]
|
||||||
-very_long_variable_name_filters: t.List[
|
|
||||||
- t.Tuple[str, t.Union[str, t.List[t.Optional[str]]]],
|
|
||||||
-]
|
|
||||||
-xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
|
-xxxx_xxxxx_xxxx_xxx: Callable[..., List[SomeClass]] = classmethod( # type: ignore
|
||||||
- sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
- sync(async_xxxx_xxx_xxxx_xxxxx_xxxx_xxx.__func__)
|
||||||
-)
|
-)
|
||||||
|
@ -599,7 +596,7 @@ last_call()
|
||||||
-[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
|
-[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 or A, 11 or B, 12 or C]
|
||||||
(SomeName)
|
(SomeName)
|
||||||
SomeName
|
SomeName
|
||||||
-(Good, Bad, Ugly)
|
(Good, Bad, Ugly)
|
||||||
-(i for i in (1, 2, 3))
|
-(i for i in (1, 2, 3))
|
||||||
-((i**2) for i in (1, 2, 3))
|
-((i**2) for i in (1, 2, 3))
|
||||||
-((i**2) for i, _ in ((1, "a"), (2, "b"), (3, "c")))
|
-((i**2) for i, _ in ((1, "a"), (2, "b"), (3, "c")))
|
||||||
|
@ -614,38 +611,25 @@ last_call()
|
||||||
- "import_session_id": 1,
|
- "import_session_id": 1,
|
||||||
- **kwargs,
|
- **kwargs,
|
||||||
-}
|
-}
|
||||||
-a = (1,)
|
|
||||||
-b = (1,)
|
|
||||||
+(1, 2)
|
|
||||||
+(i for i in [])
|
+(i for i in [])
|
||||||
+(i for i in [])
|
+(i for i in [])
|
||||||
+(i for i in [])
|
+(i for i in [])
|
||||||
+(i for i in [])
|
+(i for i in [])
|
||||||
+(1, 2)
|
+(NOT_YET_IMPLEMENTED_ExprStarred,)
|
||||||
+{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
+{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
+a = (1, 2)
|
a = (1,)
|
||||||
+b = (1, 2)
|
b = (1,)
|
||||||
c = 1
|
c = 1
|
||||||
-d = (1,) + a + (2,)
|
d = (1,) + a + (2,)
|
||||||
-e = (1,).count(1)
|
-e = (1,).count(1)
|
||||||
-f = 1, *range(10)
|
-f = 1, *range(10)
|
||||||
-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
|
||||||
+d = (1, 2) + a + (1, 2)
|
-)
|
||||||
+e = NOT_IMPLEMENTED_call()
|
|
||||||
+f = (1, 2)
|
|
||||||
+g = (1, 2)
|
|
||||||
+what_is_up_with_those_new_coord_names = (
|
|
||||||
+ (coord_names + NOT_IMPLEMENTED_call())
|
|
||||||
+ + NOT_IMPLEMENTED_call()
|
|
||||||
)
|
|
||||||
-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 | NOT_IMPLEMENTED_call())
|
|
||||||
+ - NOT_IMPLEMENTED_call()
|
|
||||||
)
|
|
||||||
-result = (
|
-result = (
|
||||||
- session.query(models.Customer.id)
|
- session.query(models.Customer.id)
|
||||||
- .filter(
|
- .filter(
|
||||||
|
@ -653,7 +637,13 @@ last_call()
|
||||||
- )
|
- )
|
||||||
- .order_by(models.Customer.id.asc())
|
- .order_by(models.Customer.id.asc())
|
||||||
- .all()
|
- .all()
|
||||||
-)
|
+e = NOT_IMPLEMENTED_call()
|
||||||
|
+f = 1, NOT_YET_IMPLEMENTED_ExprStarred
|
||||||
|
+g = 1, NOT_YET_IMPLEMENTED_ExprStarred
|
||||||
|
+what_is_up_with_those_new_coord_names = (
|
||||||
|
+ (coord_names + NOT_IMPLEMENTED_call())
|
||||||
|
+ + NOT_IMPLEMENTED_call()
|
||||||
|
)
|
||||||
-result = (
|
-result = (
|
||||||
- session.query(models.Customer.id)
|
- session.query(models.Customer.id)
|
||||||
- .filter(
|
- .filter(
|
||||||
|
@ -663,7 +653,10 @@ 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()
|
||||||
-mapping = {
|
-mapping = {
|
||||||
|
@ -899,10 +892,10 @@ NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false
|
||||||
(NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false),
|
(NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false),
|
||||||
}
|
}
|
||||||
NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
||||||
|
()
|
||||||
|
(1,)
|
||||||
(1, 2)
|
(1, 2)
|
||||||
(1, 2)
|
(1, 2, 3)
|
||||||
(1, 2)
|
|
||||||
(1, 2)
|
|
||||||
[]
|
[]
|
||||||
[
|
[
|
||||||
1,
|
1,
|
||||||
|
@ -1020,20 +1013,20 @@ NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false
|
||||||
]
|
]
|
||||||
(SomeName)
|
(SomeName)
|
||||||
SomeName
|
SomeName
|
||||||
(1, 2)
|
(Good, Bad, Ugly)
|
||||||
(i for i in [])
|
(i for i in [])
|
||||||
(i for i in [])
|
(i for i in [])
|
||||||
(i for i in [])
|
(i for i in [])
|
||||||
(i for i in [])
|
(i for i in [])
|
||||||
(1, 2)
|
(NOT_YET_IMPLEMENTED_ExprStarred,)
|
||||||
{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
{NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
a = (1, 2)
|
a = (1,)
|
||||||
b = (1, 2)
|
b = (1,)
|
||||||
c = 1
|
c = 1
|
||||||
d = (1, 2) + a + (1, 2)
|
d = (1,) + a + (2,)
|
||||||
e = NOT_IMPLEMENTED_call()
|
e = NOT_IMPLEMENTED_call()
|
||||||
f = (1, 2)
|
f = 1, NOT_YET_IMPLEMENTED_ExprStarred
|
||||||
g = (1, 2)
|
g = 1, NOT_YET_IMPLEMENTED_ExprStarred
|
||||||
what_is_up_with_those_new_coord_names = (
|
what_is_up_with_those_new_coord_names = (
|
||||||
(coord_names + NOT_IMPLEMENTED_call())
|
(coord_names + NOT_IMPLEMENTED_call())
|
||||||
+ NOT_IMPLEMENTED_call()
|
+ NOT_IMPLEMENTED_call()
|
||||||
|
|
|
@ -101,8 +101,8 @@ def test_calculate_fades():
|
||||||
# one is zero/none
|
# one is zero/none
|
||||||
- (0, 4, 0, 0, 10, 0, 0, 6, 10),
|
- (0, 4, 0, 0, 10, 0, 0, 6, 10),
|
||||||
- (None, 4, 0, 0, 10, 0, 0, 6, 10),
|
- (None, 4, 0, 0, 10, 0, 0, 6, 10),
|
||||||
+ (1, 2),
|
+ (0, 4, 0, 0, 10, 0, 0, 6, 10),
|
||||||
+ (1, 2),
|
+ (None, 4, 0, 0, 10, 0, 0, 6, 10),
|
||||||
]
|
]
|
||||||
|
|
||||||
# fmt: on
|
# fmt: on
|
||||||
|
@ -144,8 +144,8 @@ def verify_fader(test):
|
||||||
def test_calculate_fades():
|
def test_calculate_fades():
|
||||||
calcs = [
|
calcs = [
|
||||||
# one is zero/none
|
# one is zero/none
|
||||||
(1, 2),
|
(0, 4, 0, 0, 10, 0, 0, 6, 10),
|
||||||
(1, 2),
|
(None, 4, 0, 0, 10, 0, 0, 6, 10),
|
||||||
]
|
]
|
||||||
|
|
||||||
# fmt: on
|
# fmt: on
|
||||||
|
|
|
@ -207,10 +207,10 @@ d={'a':1,
|
||||||
+NOT_YET_IMPLEMENTED_StmtImport
|
+NOT_YET_IMPLEMENTED_StmtImport
|
||||||
|
|
||||||
-from third_party import X, Y, Z
|
-from third_party import X, Y, Z
|
||||||
-
|
|
||||||
-from library import some_connection, some_decorator
|
|
||||||
+NOT_YET_IMPLEMENTED_StmtImportFrom
|
+NOT_YET_IMPLEMENTED_StmtImportFrom
|
||||||
|
|
||||||
|
-from library import some_connection, some_decorator
|
||||||
|
-
|
||||||
+NOT_YET_IMPLEMENTED_StmtImportFrom
|
+NOT_YET_IMPLEMENTED_StmtImportFrom
|
||||||
# fmt: off
|
# fmt: off
|
||||||
-from third_party import (X,
|
-from third_party import (X,
|
||||||
|
@ -281,7 +281,7 @@ d={'a':1,
|
||||||
- assert task._cancel_stack[: len(old_stack)] == old_stack
|
- assert task._cancel_stack[: len(old_stack)] == old_stack
|
||||||
+def spaces(
|
+def spaces(
|
||||||
+ a=1,
|
+ a=1,
|
||||||
+ b=(1, 2),
|
+ b=(),
|
||||||
+ c=[],
|
+ c=[],
|
||||||
+ d={NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
+ d={NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
||||||
+ e=True,
|
+ e=True,
|
||||||
|
@ -296,8 +296,7 @@ d={'a':1,
|
||||||
|
|
||||||
def spaces_types(
|
def spaces_types(
|
||||||
a: int = 1,
|
a: int = 1,
|
||||||
- b: tuple = (),
|
b: tuple = (),
|
||||||
+ b: tuple = (1, 2),
|
|
||||||
c: list = [],
|
c: list = [],
|
||||||
- d: dict = {},
|
- d: dict = {},
|
||||||
+ d: dict = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
+ d: dict = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
||||||
|
@ -351,7 +350,7 @@ d={'a':1,
|
||||||
# fmt: off
|
# fmt: off
|
||||||
- a , b = *hello
|
- a , b = *hello
|
||||||
- 'unformatted'
|
- 'unformatted'
|
||||||
+ (1, 2) = NOT_YET_IMPLEMENTED_ExprStarred
|
+ a, b = NOT_YET_IMPLEMENTED_ExprStarred
|
||||||
+ "NOT_YET_IMPLEMENTED_STRING"
|
+ "NOT_YET_IMPLEMENTED_STRING"
|
||||||
# fmt: on
|
# fmt: on
|
||||||
|
|
||||||
|
@ -463,9 +462,8 @@ d={'a':1,
|
||||||
|
|
||||||
def single_literal_yapf_disable():
|
def single_literal_yapf_disable():
|
||||||
- """Black does not support this."""
|
- """Black does not support this."""
|
||||||
- BAZ = {(1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)} # yapf: disable
|
|
||||||
+ "NOT_YET_IMPLEMENTED_STRING"
|
+ "NOT_YET_IMPLEMENTED_STRING"
|
||||||
+ BAZ = {(1, 2), (1, 2), (1, 2)} # yapf: disable
|
BAZ = {(1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)} # yapf: disable
|
||||||
|
|
||||||
|
|
||||||
-cfg.rule(
|
-cfg.rule(
|
||||||
|
@ -561,7 +559,7 @@ def function_signature_stress_test(
|
||||||
# fmt: on
|
# fmt: on
|
||||||
def spaces(
|
def spaces(
|
||||||
a=1,
|
a=1,
|
||||||
b=(1, 2),
|
b=(),
|
||||||
c=[],
|
c=[],
|
||||||
d={NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
d={NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
||||||
e=True,
|
e=True,
|
||||||
|
@ -576,7 +574,7 @@ def spaces(
|
||||||
|
|
||||||
def spaces_types(
|
def spaces_types(
|
||||||
a: int = 1,
|
a: int = 1,
|
||||||
b: tuple = (1, 2),
|
b: tuple = (),
|
||||||
c: list = [],
|
c: list = [],
|
||||||
d: dict = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
d: dict = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
||||||
e: bool = True,
|
e: bool = True,
|
||||||
|
@ -608,7 +606,7 @@ def import_as_names():
|
||||||
|
|
||||||
def testlist_star_expr():
|
def testlist_star_expr():
|
||||||
# fmt: off
|
# fmt: off
|
||||||
(1, 2) = NOT_YET_IMPLEMENTED_ExprStarred
|
a, b = NOT_YET_IMPLEMENTED_ExprStarred
|
||||||
"NOT_YET_IMPLEMENTED_STRING"
|
"NOT_YET_IMPLEMENTED_STRING"
|
||||||
# fmt: on
|
# fmt: on
|
||||||
|
|
||||||
|
@ -668,7 +666,7 @@ def long_lines():
|
||||||
|
|
||||||
def single_literal_yapf_disable():
|
def single_literal_yapf_disable():
|
||||||
"NOT_YET_IMPLEMENTED_STRING"
|
"NOT_YET_IMPLEMENTED_STRING"
|
||||||
BAZ = {(1, 2), (1, 2), (1, 2)} # yapf: disable
|
BAZ = {(1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)} # yapf: disable
|
||||||
|
|
||||||
|
|
||||||
NOT_IMPLEMENTED_call()
|
NOT_IMPLEMENTED_call()
|
||||||
|
|
|
@ -25,7 +25,7 @@ f = ["This is a very long line that should be formatted into a clearer line ", "
|
||||||
# fmt: off
|
# fmt: off
|
||||||
-b, c = 1, 2
|
-b, c = 1, 2
|
||||||
-d = 6 # fmt: skip
|
-d = 6 # fmt: skip
|
||||||
+(1, 2) = (1, 2)
|
+b, c = 1, 2
|
||||||
+d = 6 # fmt: skip
|
+d = 6 # fmt: skip
|
||||||
e = 5
|
e = 5
|
||||||
# fmt: on
|
# fmt: on
|
||||||
|
@ -41,7 +41,7 @@ f = ["This is a very long line that should be formatted into a clearer line ", "
|
||||||
```py
|
```py
|
||||||
a = 3
|
a = 3
|
||||||
# fmt: off
|
# fmt: off
|
||||||
(1, 2) = (1, 2)
|
b, c = 1, 2
|
||||||
d = 6 # fmt: skip
|
d = 6 # fmt: skip
|
||||||
e = 5
|
e = 5
|
||||||
# fmt: on
|
# fmt: on
|
||||||
|
|
|
@ -23,14 +23,13 @@ else:
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -1,9 +1,5 @@
|
@@ -1,9 +1,5 @@
|
||||||
-a, b, c = 3, 4, 5
|
a, b, c = 3, 4, 5
|
||||||
-if (
|
-if (
|
||||||
- a == 3
|
- a == 3
|
||||||
- and b != 9 # fmt: skip
|
- and b != 9 # fmt: skip
|
||||||
- and c is not None
|
- and c is not None
|
||||||
-):
|
-):
|
||||||
- print("I'm good!")
|
- print("I'm good!")
|
||||||
+(1, 2) = (1, 2)
|
|
||||||
+if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2:
|
+if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2:
|
||||||
+ NOT_IMPLEMENTED_call()
|
+ NOT_IMPLEMENTED_call()
|
||||||
else:
|
else:
|
||||||
|
@ -41,7 +40,7 @@ else:
|
||||||
## Ruff Output
|
## Ruff Output
|
||||||
|
|
||||||
```py
|
```py
|
||||||
(1, 2) = (1, 2)
|
a, b, c = 3, 4, 5
|
||||||
if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2:
|
if NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2:
|
||||||
NOT_IMPLEMENTED_call()
|
NOT_IMPLEMENTED_call()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -17,9 +17,8 @@ d = 5
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -1,3 +1,3 @@
|
@@ -1,3 +1,3 @@
|
||||||
-a, b = 1, 2
|
a, b = 1, 2
|
||||||
-c = 6 # fmt: skip
|
-c = 6 # fmt: skip
|
||||||
+(1, 2) = (1, 2)
|
|
||||||
+c = 6 # fmt: skip
|
+c = 6 # fmt: skip
|
||||||
d = 5
|
d = 5
|
||||||
```
|
```
|
||||||
|
@ -27,7 +26,7 @@ d = 5
|
||||||
## Ruff Output
|
## Ruff Output
|
||||||
|
|
||||||
```py
|
```py
|
||||||
(1, 2) = (1, 2)
|
a, b = 1, 2
|
||||||
c = 6 # fmt: skip
|
c = 6 # fmt: skip
|
||||||
d = 5
|
d = 5
|
||||||
```
|
```
|
||||||
|
|
|
@ -175,7 +175,7 @@ def __await__(): return (yield)
|
||||||
- assert task._cancel_stack[: len(old_stack)] == old_stack
|
- assert task._cancel_stack[: len(old_stack)] == old_stack
|
||||||
+def spaces(
|
+def spaces(
|
||||||
+ a=1,
|
+ a=1,
|
||||||
+ b=(1, 2),
|
+ b=(),
|
||||||
+ c=[],
|
+ c=[],
|
||||||
+ d={NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
+ d={NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
||||||
+ e=True,
|
+ e=True,
|
||||||
|
@ -190,8 +190,7 @@ def __await__(): return (yield)
|
||||||
|
|
||||||
def spaces_types(
|
def spaces_types(
|
||||||
a: int = 1,
|
a: int = 1,
|
||||||
- b: tuple = (),
|
b: tuple = (),
|
||||||
+ b: tuple = (1, 2),
|
|
||||||
c: list = [],
|
c: list = [],
|
||||||
- d: dict = {},
|
- d: dict = {},
|
||||||
+ d: dict = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
+ d: dict = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
||||||
|
@ -348,7 +347,7 @@ def function_signature_stress_test(
|
||||||
|
|
||||||
def spaces(
|
def spaces(
|
||||||
a=1,
|
a=1,
|
||||||
b=(1, 2),
|
b=(),
|
||||||
c=[],
|
c=[],
|
||||||
d={NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
d={NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
||||||
e=True,
|
e=True,
|
||||||
|
@ -363,7 +362,7 @@ def spaces(
|
||||||
|
|
||||||
def spaces_types(
|
def spaces_types(
|
||||||
a: int = 1,
|
a: int = 1,
|
||||||
b: tuple = (1, 2),
|
b: tuple = (),
|
||||||
c: list = [],
|
c: list = [],
|
||||||
d: dict = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
d: dict = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value},
|
||||||
e: bool = True,
|
e: bool = True,
|
||||||
|
|
|
@ -74,19 +74,18 @@ some_module.some_function(
|
||||||
```diff
|
```diff
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -1,69 +1,30 @@
|
@@ -1,9 +1,7 @@
|
||||||
def f(
|
def f(
|
||||||
a,
|
a,
|
||||||
):
|
):
|
||||||
- d = {
|
- d = {
|
||||||
- "key": "value",
|
- "key": "value",
|
||||||
- }
|
- }
|
||||||
- tup = (1,)
|
|
||||||
+ d = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
+ d = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
+ tup = (1, 2)
|
tup = (1,)
|
||||||
|
|
||||||
|
|
||||||
def f2(
|
@@ -11,10 +9,7 @@
|
||||||
a,
|
a,
|
||||||
b,
|
b,
|
||||||
):
|
):
|
||||||
|
@ -94,14 +93,11 @@ some_module.some_function(
|
||||||
- "key": "value",
|
- "key": "value",
|
||||||
- "key2": "value2",
|
- "key2": "value2",
|
||||||
- }
|
- }
|
||||||
- tup = (
|
|
||||||
- 1,
|
|
||||||
- 2,
|
|
||||||
- )
|
|
||||||
+ d = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
+ d = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
+ tup = (1, 2)
|
tup = (
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
@@ -24,46 +19,15 @@
|
||||||
def f(
|
def f(
|
||||||
a: int = 1,
|
a: int = 1,
|
||||||
):
|
):
|
||||||
|
@ -154,7 +150,7 @@ some_module.some_function(
|
||||||
|
|
||||||
|
|
||||||
# The type annotation shouldn't get a trailing comma since that would change its type.
|
# The type annotation shouldn't get a trailing comma since that would change its type.
|
||||||
@@ -80,35 +41,16 @@
|
@@ -80,35 +44,16 @@
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@ -203,7 +199,7 @@ def f(
|
||||||
a,
|
a,
|
||||||
):
|
):
|
||||||
d = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
d = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
tup = (1, 2)
|
tup = (1,)
|
||||||
|
|
||||||
|
|
||||||
def f2(
|
def f2(
|
||||||
|
@ -211,7 +207,10 @@ def f2(
|
||||||
b,
|
b,
|
||||||
):
|
):
|
||||||
d = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
d = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
tup = (1, 2)
|
tup = (
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def f(
|
def f(
|
||||||
|
|
|
@ -96,11 +96,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)
|
||||||
-m = [([2**63], [1, 2**63])]
|
|
||||||
-n = count <= 10**5
|
|
||||||
-o = settings(max_examples=10**6)
|
|
||||||
-p = {(k, k**2): v**2 for k, v in pairs}
|
|
||||||
-q = [10**i for i in range(6)]
|
|
||||||
+a = 5**NOT_YET_IMPLEMENTED_ExprUnaryOp
|
+a = 5**NOT_YET_IMPLEMENTED_ExprUnaryOp
|
||||||
+b = 5 ** NOT_IMPLEMENTED_call()
|
+b = 5 ** NOT_IMPLEMENTED_call()
|
||||||
+c = NOT_YET_IMPLEMENTED_ExprUnaryOp
|
+c = NOT_YET_IMPLEMENTED_ExprUnaryOp
|
||||||
|
@ -113,7 +108,11 @@ return np.divide(
|
||||||
+j = NOT_IMPLEMENTED_call().NOT_IMPLEMENTED_attr ** 5
|
+j = NOT_IMPLEMENTED_call().NOT_IMPLEMENTED_attr ** 5
|
||||||
+k = [i for i in []]
|
+k = [i for i in []]
|
||||||
+l = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
+l = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
||||||
+m = [(1, 2)]
|
m = [([2**63], [1, 2**63])]
|
||||||
|
-n = count <= 10**5
|
||||||
|
-o = settings(max_examples=10**6)
|
||||||
|
-p = {(k, k**2): v**2 for k, v in pairs}
|
||||||
|
-q = [10**i for i in range(6)]
|
||||||
+n = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
+n = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
||||||
+o = NOT_IMPLEMENTED_call()
|
+o = NOT_IMPLEMENTED_call()
|
||||||
+p = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value for key, value in NOT_IMPLEMENTED_dict}
|
+p = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value for key, value in NOT_IMPLEMENTED_dict}
|
||||||
|
@ -132,11 +131,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)
|
||||||
-m = [([2.0**63.0], [1.0, 2**63.0])]
|
|
||||||
-n = count <= 10**5.0
|
|
||||||
-o = settings(max_examples=10**6.0)
|
|
||||||
-p = {(k, k**2): v**2.0 for k, v in pairs}
|
|
||||||
-q = [10.5**i for i in range(6)]
|
|
||||||
+a = 5.0**NOT_YET_IMPLEMENTED_ExprUnaryOp
|
+a = 5.0**NOT_YET_IMPLEMENTED_ExprUnaryOp
|
||||||
+b = 5.0 ** NOT_IMPLEMENTED_call()
|
+b = 5.0 ** NOT_IMPLEMENTED_call()
|
||||||
+c = NOT_YET_IMPLEMENTED_ExprUnaryOp
|
+c = NOT_YET_IMPLEMENTED_ExprUnaryOp
|
||||||
|
@ -149,7 +143,11 @@ return np.divide(
|
||||||
+j = NOT_IMPLEMENTED_call().NOT_IMPLEMENTED_attr ** 5.0
|
+j = NOT_IMPLEMENTED_call().NOT_IMPLEMENTED_attr ** 5.0
|
||||||
+k = [i for i in []]
|
+k = [i for i in []]
|
||||||
+l = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
+l = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
||||||
+m = [(1, 2)]
|
m = [([2.0**63.0], [1.0, 2**63.0])]
|
||||||
|
-n = count <= 10**5.0
|
||||||
|
-o = settings(max_examples=10**6.0)
|
||||||
|
-p = {(k, k**2): v**2.0 for k, v in pairs}
|
||||||
|
-q = [10.5**i for i in range(6)]
|
||||||
+n = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
+n = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
||||||
+o = NOT_IMPLEMENTED_call()
|
+o = NOT_IMPLEMENTED_call()
|
||||||
+p = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value for key, value in NOT_IMPLEMENTED_dict}
|
+p = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value for key, value in NOT_IMPLEMENTED_dict}
|
||||||
|
@ -201,7 +199,7 @@ i = NOT_IMPLEMENTED_call() ** 5
|
||||||
j = NOT_IMPLEMENTED_call().NOT_IMPLEMENTED_attr ** 5
|
j = NOT_IMPLEMENTED_call().NOT_IMPLEMENTED_attr ** 5
|
||||||
k = [i for i in []]
|
k = [i for i in []]
|
||||||
l = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
l = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
||||||
m = [(1, 2)]
|
m = [([2**63], [1, 2**63])]
|
||||||
n = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
n = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
||||||
o = NOT_IMPLEMENTED_call()
|
o = NOT_IMPLEMENTED_call()
|
||||||
p = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value for key, value in NOT_IMPLEMENTED_dict}
|
p = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value for key, value in NOT_IMPLEMENTED_dict}
|
||||||
|
@ -220,7 +218,7 @@ i = NOT_IMPLEMENTED_call() ** 5.0
|
||||||
j = NOT_IMPLEMENTED_call().NOT_IMPLEMENTED_attr ** 5.0
|
j = NOT_IMPLEMENTED_call().NOT_IMPLEMENTED_attr ** 5.0
|
||||||
k = [i for i in []]
|
k = [i for i in []]
|
||||||
l = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
l = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
||||||
m = [(1, 2)]
|
m = [([2.0**63.0], [1.0, 2**63.0])]
|
||||||
n = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
n = NOT_IMPLEMENTED_left < NOT_IMPLEMENTED_right
|
||||||
o = NOT_IMPLEMENTED_call()
|
o = NOT_IMPLEMENTED_call()
|
||||||
p = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value for key, value in NOT_IMPLEMENTED_dict}
|
p = {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value for key, value in NOT_IMPLEMENTED_dict}
|
||||||
|
|
|
@ -25,22 +25,15 @@ xxxxxxxxx_yyy_zzzzzzzz[xx.xxxxxx(x_yyy_zzzzzz.xxxxx[0]), x_yyy_zzzzzz.xxxxxx(xxx
|
||||||
```diff
|
```diff
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -2,20 +2,8 @@
|
@@ -9,13 +9,8 @@
|
||||||
|
m2,
|
||||||
# Left hand side fits in a single line but will still be exploded by the
|
),
|
||||||
# magic trailing comma.
|
third_value,
|
||||||
-(
|
|
||||||
- first_value,
|
|
||||||
- (
|
|
||||||
- m1,
|
|
||||||
- m2,
|
|
||||||
- ),
|
|
||||||
- third_value,
|
|
||||||
-) = xxxxxx_yyyyyy_zzzzzz_wwwwww_uuuuuuu_vvvvvvvvvvv(
|
-) = xxxxxx_yyyyyy_zzzzzz_wwwwww_uuuuuuu_vvvvvvvvvvv(
|
||||||
- arg1,
|
- arg1,
|
||||||
- arg2,
|
- arg2,
|
||||||
-)
|
-)
|
||||||
+(1, 2) = NOT_IMPLEMENTED_call()
|
+) = NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
# Make when when the left side of assignment plus the opening paren "... = (" is
|
# Make when when the left side of assignment plus the opening paren "... = (" is
|
||||||
# exactly line length limit + 1, it won't be split like that.
|
# exactly line length limit + 1, it won't be split like that.
|
||||||
|
@ -57,7 +50,14 @@ xxxxxxxxx_yyy_zzzzzzzz[xx.xxxxxx(x_yyy_zzzzzz.xxxxx[0]), x_yyy_zzzzzz.xxxxxx(xxx
|
||||||
|
|
||||||
# Left hand side fits in a single line but will still be exploded by the
|
# Left hand side fits in a single line but will still be exploded by the
|
||||||
# magic trailing comma.
|
# magic trailing comma.
|
||||||
(1, 2) = NOT_IMPLEMENTED_call()
|
(
|
||||||
|
first_value,
|
||||||
|
(
|
||||||
|
m1,
|
||||||
|
m2,
|
||||||
|
),
|
||||||
|
third_value,
|
||||||
|
) = NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
# Make when when the left side of assignment plus the opening paren "... = (" is
|
# Make when when the left side of assignment plus the opening paren "... = (" is
|
||||||
# exactly line length limit + 1, it won't be split like that.
|
# exactly line length limit + 1, it won't be split like that.
|
||||||
|
|
|
@ -114,12 +114,7 @@ def example8():
|
||||||
|
|
||||||
|
|
||||||
def example4():
|
def example4():
|
||||||
@@ -46,39 +34,15 @@
|
@@ -50,35 +38,11 @@
|
||||||
|
|
||||||
|
|
||||||
def example5():
|
|
||||||
- return ()
|
|
||||||
+ return (1, 2)
|
|
||||||
|
|
||||||
|
|
||||||
def example6():
|
def example6():
|
||||||
|
@ -198,7 +193,7 @@ def example4():
|
||||||
|
|
||||||
|
|
||||||
def example5():
|
def example5():
|
||||||
return (1, 2)
|
return ()
|
||||||
|
|
||||||
|
|
||||||
def example6():
|
def example6():
|
||||||
|
|
|
@ -60,7 +60,7 @@ func(
|
||||||
```diff
|
```diff
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -1,25 +1,25 @@
|
@@ -1,25 +1,30 @@
|
||||||
# We should not remove the trailing comma in a single-element subscript.
|
# We should not remove the trailing comma in a single-element subscript.
|
||||||
-a: tuple[int,]
|
-a: tuple[int,]
|
||||||
-b = tuple[int,]
|
-b = tuple[int,]
|
||||||
|
@ -82,8 +82,7 @@ func(
|
||||||
+set_of_types = {NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]}
|
+set_of_types = {NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]}
|
||||||
|
|
||||||
# Except single element tuples
|
# Except single element tuples
|
||||||
-small_tuple = (1,)
|
small_tuple = (1,)
|
||||||
+small_tuple = (1, 2)
|
|
||||||
|
|
||||||
# Trailing commas in multiple chained non-nested parens.
|
# Trailing commas in multiple chained non-nested parens.
|
||||||
-zero(one).two(three).four(five)
|
-zero(one).two(three).four(five)
|
||||||
|
@ -93,7 +92,12 @@ func(
|
||||||
+NOT_IMPLEMENTED_call()
|
+NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
-(a, b, c, d) = func1(arg1) and func2(arg2)
|
-(a, b, c, d) = func1(arg1) and func2(arg2)
|
||||||
+(1, 2) = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
+(
|
||||||
|
+ a,
|
||||||
|
+ b,
|
||||||
|
+ c,
|
||||||
|
+ d,
|
||||||
|
+) = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
||||||
|
|
||||||
-func(argument1, (one, two), argument4, argument5, argument6)
|
-func(argument1, (one, two), argument4, argument5, argument6)
|
||||||
+NOT_IMPLEMENTED_call()
|
+NOT_IMPLEMENTED_call()
|
||||||
|
@ -117,14 +121,19 @@ small_set = {1}
|
||||||
set_of_types = {NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]}
|
set_of_types = {NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]}
|
||||||
|
|
||||||
# Except single element tuples
|
# Except single element tuples
|
||||||
small_tuple = (1, 2)
|
small_tuple = (1,)
|
||||||
|
|
||||||
# Trailing commas in multiple chained non-nested parens.
|
# Trailing commas in multiple chained non-nested parens.
|
||||||
NOT_IMPLEMENTED_call()
|
NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
NOT_IMPLEMENTED_call()
|
NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
(1, 2) = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
(
|
||||||
|
a,
|
||||||
|
b,
|
||||||
|
c,
|
||||||
|
d,
|
||||||
|
) = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
||||||
|
|
||||||
NOT_IMPLEMENTED_call()
|
NOT_IMPLEMENTED_call()
|
||||||
```
|
```
|
||||||
|
|
|
@ -76,7 +76,7 @@ x[
|
||||||
```diff
|
```diff
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -1,59 +1,38 @@
|
@@ -1,59 +1,48 @@
|
||||||
-slice[a.b : c.d]
|
-slice[a.b : c.d]
|
||||||
-slice[d :: d + 1]
|
-slice[d :: d + 1]
|
||||||
-slice[d + 1 :: d]
|
-slice[d + 1 :: d]
|
||||||
|
@ -125,12 +125,22 @@ x[
|
||||||
# These are from PEP-8:
|
# These are from PEP-8:
|
||||||
-ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
|
-ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
|
||||||
-ham[lower:upper], ham[lower:upper:], ham[lower::step]
|
-ham[lower:upper], ham[lower:upper:], ham[lower::step]
|
||||||
+(1, 2)
|
+(
|
||||||
+(1, 2)
|
+ NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
+ NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
+ NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
+ NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
+ NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
+)
|
||||||
|
+(
|
||||||
|
+ NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
+ NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
+ NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
+)
|
||||||
# ham[lower+offset : upper+offset]
|
# ham[lower+offset : upper+offset]
|
||||||
-ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
|
-ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
|
||||||
-ham[lower + offset : upper + offset]
|
-ham[lower + offset : upper + offset]
|
||||||
+(1, 2)
|
+NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key], NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
|
||||||
+NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
|
+NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
|
||||||
|
|
||||||
-slice[::, ::]
|
-slice[::, ::]
|
||||||
|
@ -196,10 +206,20 @@ async def f():
|
||||||
|
|
||||||
|
|
||||||
# These are from PEP-8:
|
# These are from PEP-8:
|
||||||
(1, 2)
|
(
|
||||||
(1, 2)
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
)
|
||||||
|
(
|
||||||
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key],
|
||||||
|
)
|
||||||
# ham[lower+offset : upper+offset]
|
# ham[lower+offset : upper+offset]
|
||||||
(1, 2)
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key], NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
|
||||||
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
|
||||||
|
|
||||||
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
|
NOT_IMPLEMENTED_value[NOT_IMPLEMENTED_key]
|
||||||
|
|
|
@ -33,7 +33,7 @@ def docstring_multiline():
|
||||||
```diff
|
```diff
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -1,20 +1,18 @@
|
@@ -1,20 +1,36 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
-name = "Łukasz"
|
-name = "Łukasz"
|
||||||
|
@ -42,15 +42,33 @@ def docstring_multiline():
|
||||||
-("", "")
|
-("", "")
|
||||||
-(r"", R"")
|
-(r"", R"")
|
||||||
+name = "NOT_YET_IMPLEMENTED_STRING"
|
+name = "NOT_YET_IMPLEMENTED_STRING"
|
||||||
+(1, 2)
|
+(NOT_YET_IMPLEMENTED_ExprJoinedStr, NOT_YET_IMPLEMENTED_ExprJoinedStr)
|
||||||
+(1, 2)
|
+(b"NOT_YET_IMPLEMENTED_BYTE_STRING", b"NOT_YET_IMPLEMENTED_BYTE_STRING")
|
||||||
+(1, 2)
|
+("NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING")
|
||||||
+(1, 2)
|
+("NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING")
|
||||||
|
|
||||||
-(rf"", rf"", Rf"", Rf"", rf"", rf"", Rf"", Rf"")
|
-(rf"", rf"", Rf"", Rf"", rf"", rf"", Rf"", Rf"")
|
||||||
-(rb"", rb"", Rb"", Rb"", rb"", rb"", Rb"", Rb"")
|
-(rb"", rb"", Rb"", Rb"", rb"", rb"", Rb"", Rb"")
|
||||||
+(1, 2)
|
+(
|
||||||
+(1, 2)
|
+ NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
+ NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
+ NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
+ NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
+ NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
+ NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
+ NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
+ NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
+)
|
||||||
|
+(
|
||||||
|
+ b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
+ b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
+ b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
+ b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
+ b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
+ b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
+ b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
+ b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
+)
|
||||||
|
|
||||||
|
|
||||||
def docstring_singleline():
|
def docstring_singleline():
|
||||||
|
@ -71,13 +89,31 @@ def docstring_multiline():
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
name = "NOT_YET_IMPLEMENTED_STRING"
|
name = "NOT_YET_IMPLEMENTED_STRING"
|
||||||
(1, 2)
|
(NOT_YET_IMPLEMENTED_ExprJoinedStr, NOT_YET_IMPLEMENTED_ExprJoinedStr)
|
||||||
(1, 2)
|
(b"NOT_YET_IMPLEMENTED_BYTE_STRING", b"NOT_YET_IMPLEMENTED_BYTE_STRING")
|
||||||
(1, 2)
|
("NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING")
|
||||||
(1, 2)
|
("NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING")
|
||||||
|
|
||||||
(1, 2)
|
(
|
||||||
(1, 2)
|
NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
NOT_YET_IMPLEMENTED_ExprJoinedStr,
|
||||||
|
)
|
||||||
|
(
|
||||||
|
b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
b"NOT_YET_IMPLEMENTED_BYTE_STRING",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def docstring_singleline():
|
def docstring_singleline():
|
||||||
|
|
|
@ -42,11 +42,9 @@ assert (
|
||||||
```diff
|
```diff
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -1,58 +1,22 @@
|
@@ -2,57 +2,21 @@
|
||||||
importA
|
|
||||||
(
|
(
|
||||||
- ()
|
()
|
||||||
+ (1, 2)
|
|
||||||
<< 0
|
<< 0
|
||||||
- ** 101234234242352525425252352352525234890264906820496920680926538059059209922523523525
|
- ** 101234234242352525425252352352525234890264906820496920680926538059059209922523523525
|
||||||
+ **101234234242352525425252352352525234890264906820496920680926538059059209922523523525
|
+ **101234234242352525425252352352525234890264906820496920680926538059059209922523523525
|
||||||
|
@ -114,7 +112,7 @@ assert (
|
||||||
```py
|
```py
|
||||||
importA
|
importA
|
||||||
(
|
(
|
||||||
(1, 2)
|
()
|
||||||
<< 0
|
<< 0
|
||||||
**101234234242352525425252352352525234890264906820496920680926538059059209922523523525
|
**101234234242352525425252352352525234890264906820496920680926538059059209922523523525
|
||||||
) #
|
) #
|
||||||
|
|
|
@ -46,7 +46,7 @@ assert xxxxxxxxx.xxxxxxxxx.xxxxxxxxx(
|
||||||
```diff
|
```diff
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -1,50 +1,21 @@
|
@@ -1,50 +1,26 @@
|
||||||
-zero(
|
-zero(
|
||||||
- one,
|
- one,
|
||||||
-).two(
|
-).two(
|
||||||
|
@ -67,15 +67,15 @@ assert xxxxxxxxx.xxxxxxxxx.xxxxxxxxx(
|
||||||
-func1(arg1).func2(arg1, (one_tuple,)).func3(arg3)
|
-func1(arg1).func2(arg1, (one_tuple,)).func3(arg3)
|
||||||
+NOT_IMPLEMENTED_call()
|
+NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
-(
|
(
|
||||||
- a,
|
a,
|
||||||
- b,
|
b,
|
||||||
- c,
|
c,
|
||||||
- d,
|
d,
|
||||||
-) = func1(
|
-) = func1(
|
||||||
- arg1
|
- arg1
|
||||||
-) and func2(arg2)
|
-) and func2(arg2)
|
||||||
+(1, 2) = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
+) = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
||||||
|
|
||||||
|
|
||||||
# Example from https://github.com/psf/black/issues/3229
|
# Example from https://github.com/psf/black/issues/3229
|
||||||
|
@ -116,7 +116,12 @@ NOT_IMPLEMENTED_call()
|
||||||
# Inner one-element tuple shouldn't explode
|
# Inner one-element tuple shouldn't explode
|
||||||
NOT_IMPLEMENTED_call()
|
NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
(1, 2) = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
(
|
||||||
|
a,
|
||||||
|
b,
|
||||||
|
c,
|
||||||
|
d,
|
||||||
|
) = NOT_IMPLEMENTED_bool_op1 and NOT_IMPLEMENTED_bool_op2
|
||||||
|
|
||||||
|
|
||||||
# Example from https://github.com/psf/black/issues/3229
|
# Example from https://github.com/psf/black/issues/3229
|
||||||
|
|
|
@ -20,34 +20,36 @@ this_will_be_wrapped_in_parens, = struct.unpack(b"12345678901234567890")
|
||||||
```diff
|
```diff
|
||||||
--- Black
|
--- Black
|
||||||
+++ Ruff
|
+++ Ruff
|
||||||
@@ -1,12 +1,7 @@
|
@@ -4,9 +4,9 @@
|
||||||
# This is a standalone comment.
|
sdfjsdfjlksdljkfsdlkf,
|
||||||
-(
|
sdfsdjfklsdfjlksdljkf,
|
||||||
- sdfjklsdfsjldkflkjsf,
|
sdsfsdfjskdflsfsdf,
|
||||||
- sdfjsdfjlksdljkfsdlkf,
|
|
||||||
- sdfsdjfklsdfjlksdljkf,
|
|
||||||
- sdsfsdfjskdflsfsdf,
|
|
||||||
-) = (1, 2, 3)
|
-) = (1, 2, 3)
|
||||||
+(1, 2) = (1, 2)
|
+) = 1, 2, 3
|
||||||
|
|
||||||
# This is as well.
|
# This is as well.
|
||||||
-(this_will_be_wrapped_in_parens,) = struct.unpack(b"12345678901234567890")
|
-(this_will_be_wrapped_in_parens,) = struct.unpack(b"12345678901234567890")
|
||||||
+(1, 2) = NOT_IMPLEMENTED_call()
|
+(this_will_be_wrapped_in_parens,) = NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
-(a,) = call()
|
-(a,) = call()
|
||||||
+(1, 2) = NOT_IMPLEMENTED_call()
|
+(a,) = NOT_IMPLEMENTED_call()
|
||||||
```
|
```
|
||||||
|
|
||||||
## Ruff Output
|
## Ruff Output
|
||||||
|
|
||||||
```py
|
```py
|
||||||
# This is a standalone comment.
|
# This is a standalone comment.
|
||||||
(1, 2) = (1, 2)
|
(
|
||||||
|
sdfjklsdfsjldkflkjsf,
|
||||||
|
sdfjsdfjlksdljkfsdlkf,
|
||||||
|
sdfsdjfklsdfjlksdljkf,
|
||||||
|
sdsfsdfjskdflsfsdf,
|
||||||
|
) = 1, 2, 3
|
||||||
|
|
||||||
# This is as well.
|
# This is as well.
|
||||||
(1, 2) = NOT_IMPLEMENTED_call()
|
(this_will_be_wrapped_in_parens,) = NOT_IMPLEMENTED_call()
|
||||||
|
|
||||||
(1, 2) = NOT_IMPLEMENTED_call()
|
(a,) = NOT_IMPLEMENTED_call()
|
||||||
```
|
```
|
||||||
|
|
||||||
## Black Output
|
## Black Output
|
||||||
|
|
|
@ -86,7 +86,12 @@ aaaaaaaaaaaaaa + [
|
||||||
dddddddddddddddd,
|
dddddddddddddddd,
|
||||||
eeeeeee,
|
eeeeeee,
|
||||||
]
|
]
|
||||||
aaaaaaaaaaaaaa + (1, 2)
|
aaaaaaaaaaaaaa + (
|
||||||
|
bbbbbbbbbbbbbbbbbbbbbb,
|
||||||
|
ccccccccccccccccccccc,
|
||||||
|
dddddddddddddddd,
|
||||||
|
eeeeeee,
|
||||||
|
)
|
||||||
aaaaaaaaaaaaaa + {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
aaaaaaaaaaaaaa + {NOT_IMPLEMENTED_dict_key: NOT_IMPLEMENTED_dict_value}
|
||||||
aaaaaaaaaaaaaa + {
|
aaaaaaaaaaaaaa + {
|
||||||
bbbbbbbbbbbbbbbbbbbbbb,
|
bbbbbbbbbbbbbbbbbbbbbb,
|
||||||
|
|
|
@ -0,0 +1,267 @@
|
||||||
|
---
|
||||||
|
source: crates/ruff_python_formatter/src/lib.rs
|
||||||
|
expression: snapshot
|
||||||
|
---
|
||||||
|
## Input
|
||||||
|
```py
|
||||||
|
# Non-wrapping parentheses checks
|
||||||
|
a1 = 1, 2
|
||||||
|
a2 = (1, 2)
|
||||||
|
a3 = (1, 2), 3
|
||||||
|
a4 = ((1, 2), 3)
|
||||||
|
|
||||||
|
# Wrapping parentheses checks
|
||||||
|
b1 = (("Michael", "Ende"), ("Der", "satanarchäolügenialkohöllische", "Wunschpunsch"), ("Beelzebub", "Irrwitzer"), ("Tyrannja", "Vamperl"),)
|
||||||
|
b2 = ("akjdshflkjahdslkfjlasfdahjlfds", "ljklsadhflakfdajflahfdlajfhafldkjalfj", "ljklsadhflakfdajflahfdlajfhafldkjalf2",)
|
||||||
|
b3 = ("The", "Night", "of", "Wishes:", "Or", "the", "Satanarchaeolidealcohellish", "Notion", "Potion",)
|
||||||
|
|
||||||
|
# Nested wrapping parentheses check
|
||||||
|
c1 = (("cicero"), ("Qui", "autem,", "si", "maxime", "hoc", "placeat,", "moderatius", "tamen", "id", "uolunt", "fieri,", "difficilem", "quandam", "temperantiam", "postulant", "in", "eo,", "quod", "semel", "admissum", "coerceri", "reprimique", "non", "potest,", "ut", "propemodum", "iustioribus", "utamur", "illis,", "qui", "omnino", "auocent", "a", "philosophia,", "quam", "his,", "qui", "rebus", "infinitis", "modum", "constituant", "in", "reque", "eo", "meliore,", "quo", "maior", "sit,", "mediocritatem", "desiderent."), ("de", "finibus", "bonorum", "et", "malorum"))
|
||||||
|
|
||||||
|
# Deeply nested parentheses
|
||||||
|
d1 = ((("3D",),),)
|
||||||
|
d2 = (((((((((((((((((((((((((((("¯\_(ツ)_/¯",),),),),),),),),),),),),),),),),),),),),),),),),),),),)
|
||||||
|
|
||||||
|
# Join and magic trailing comma
|
||||||
|
e1 = (
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
)
|
||||||
|
e2 = (
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
)
|
||||||
|
e3 = (
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
e4 = (
|
||||||
|
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor",
|
||||||
|
"incididunt"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Empty tuples and comments
|
||||||
|
f1 = (
|
||||||
|
# empty
|
||||||
|
)
|
||||||
|
f2 = ()
|
||||||
|
|
||||||
|
# Comments in other tuples
|
||||||
|
g1 = ( # a
|
||||||
|
# b
|
||||||
|
1, # c
|
||||||
|
# d
|
||||||
|
) # e
|
||||||
|
g2 = ( # a
|
||||||
|
# b
|
||||||
|
1, # c
|
||||||
|
# d
|
||||||
|
2, # e
|
||||||
|
# f
|
||||||
|
) # g
|
||||||
|
|
||||||
|
# Ensure the correct number of parentheses
|
||||||
|
h1 = ((((1, 2))))
|
||||||
|
h2 = ((((1, "qweiurpoiqwurepqiurpqirpuqoiwrupqoirupqoirupqoiurpqiorupwqiourpqurpqurpqurpqurpqurpqurüqurqpuriq"))))
|
||||||
|
h3 = 1, "qweiurpoiqwurepqiurpqirpuqoiwrupqoirupqoirupqoiurpqiorupwqiourpqurpqurpqurpqurpqurpqurüqurqpuriq"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Output
|
||||||
|
```py
|
||||||
|
# Non-wrapping parentheses checks
|
||||||
|
a1 = 1, 2
|
||||||
|
a2 = (1, 2)
|
||||||
|
a3 = (1, 2), 3
|
||||||
|
a4 = ((1, 2), 3)
|
||||||
|
|
||||||
|
# Wrapping parentheses checks
|
||||||
|
b1 = (
|
||||||
|
("NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING"),
|
||||||
|
(
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
),
|
||||||
|
("NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING"),
|
||||||
|
("NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING"),
|
||||||
|
)
|
||||||
|
b2 = (
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
)
|
||||||
|
b3 = (
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Nested wrapping parentheses check
|
||||||
|
c1 = (
|
||||||
|
("NOT_YET_IMPLEMENTED_STRING"),
|
||||||
|
(
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Deeply nested parentheses
|
||||||
|
d1 = ((("NOT_YET_IMPLEMENTED_STRING",),),)
|
||||||
|
d2 = (
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
(
|
||||||
|
"NOT_YET_IMPLEMENTED_STRING",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
# Join and magic trailing comma
|
||||||
|
e1 = (1, 2)
|
||||||
|
e2 = (
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
)
|
||||||
|
e3 = (1,)
|
||||||
|
e4 = ("NOT_YET_IMPLEMENTED_STRING", "NOT_YET_IMPLEMENTED_STRING")
|
||||||
|
|
||||||
|
# Empty tuples and comments
|
||||||
|
f1 = (
|
||||||
|
# empty
|
||||||
|
)
|
||||||
|
f2 = ()
|
||||||
|
|
||||||
|
# Comments in other tuples
|
||||||
|
g1 = (
|
||||||
|
# a
|
||||||
|
# b
|
||||||
|
1, # c
|
||||||
|
# d
|
||||||
|
) # e
|
||||||
|
g2 = (
|
||||||
|
# a
|
||||||
|
# b
|
||||||
|
1, # c
|
||||||
|
# d
|
||||||
|
2, # e
|
||||||
|
# f
|
||||||
|
) # g
|
||||||
|
|
||||||
|
# Ensure the correct number of parentheses
|
||||||
|
h1 = (1, 2)
|
||||||
|
h2 = (1, "NOT_YET_IMPLEMENTED_STRING")
|
||||||
|
h3 = 1, "NOT_YET_IMPLEMENTED_STRING"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue