Compare commits
3 Commits
indent-lam
...
confusable
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
292bf7fd15 | ||
|
|
25bccf0555 | ||
|
|
e8879d5eda |
@@ -2313,14 +2313,6 @@ impl Parameters {
|
||||
&& self.vararg.is_none()
|
||||
&& self.kwarg.is_none()
|
||||
}
|
||||
|
||||
pub fn len(&self) -> usize {
|
||||
self.posonlyargs.len()
|
||||
+ self.args.len()
|
||||
+ usize::from(self.vararg.is_some())
|
||||
+ self.kwonlyargs.len()
|
||||
+ usize::from(self.kwarg.is_some())
|
||||
}
|
||||
}
|
||||
|
||||
/// An alternative type of AST `arg`. This is used for each function argument that might have a default value.
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
[
|
||||
{
|
||||
"preview": "disabled"
|
||||
},
|
||||
{
|
||||
"preview": "enabled"
|
||||
}
|
||||
]
|
||||
@@ -125,13 +125,6 @@ lambda a, /, c: a
|
||||
*x: x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment
|
||||
*x,
|
||||
**y: x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment 1
|
||||
@@ -142,17 +135,6 @@ lambda a, /, c: a
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment 1
|
||||
*
|
||||
# comment 2
|
||||
x,
|
||||
**y:
|
||||
# comment 3
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # comment 1
|
||||
* # comment 2
|
||||
@@ -160,14 +142,6 @@ lambda a, /, c: a
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # comment 1
|
||||
* # comment 2
|
||||
x,
|
||||
y: # comment 3
|
||||
x
|
||||
)
|
||||
|
||||
lambda *x\
|
||||
:x
|
||||
|
||||
@@ -222,17 +196,6 @@ lambda: ( # comment
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # 1
|
||||
# 2
|
||||
x, # 3
|
||||
# 4
|
||||
y
|
||||
: # 5
|
||||
# 6
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
x,
|
||||
@@ -240,93 +203,3 @@ lambda: ( # comment
|
||||
y:
|
||||
z
|
||||
)
|
||||
|
||||
|
||||
# Leading
|
||||
lambda x: (
|
||||
lambda y: lambda z: x
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ z # Trailing
|
||||
) # Trailing
|
||||
|
||||
|
||||
# Leading
|
||||
lambda x: lambda y: lambda z: [
|
||||
x,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
z
|
||||
] # Trailing
|
||||
# Trailing
|
||||
|
||||
lambda self, araa, kkkwargs=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs), e=1, f=2, g=2: d
|
||||
|
||||
# Regression tests for https://github.com/astral-sh/ruff/issues/8179
|
||||
def a():
|
||||
return b(
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f=lambda self, *args, **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
|
||||
*args, **kwargs
|
||||
),
|
||||
)
|
||||
|
||||
def a():
|
||||
return b(
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f=lambda self, araa, kkkwargs,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
|
||||
args,kwargs,
|
||||
e=1, f=2, g=2: d,
|
||||
g = 10
|
||||
)
|
||||
|
||||
|
||||
@@ -1,206 +0,0 @@
|
||||
comment_string = "Long lines with inline comments should have their comments appended to the reformatted string's enclosing right parentheses." # This comment gets thrown to the top.
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
## Parenthesized
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
)
|
||||
|
||||
# 88 characters
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
## Expression and statement comments
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb # c
|
||||
) # d
|
||||
|
||||
# 88 characters
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvv # c
|
||||
) # d
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvv # c
|
||||
) # d
|
||||
|
||||
## Strings
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv" # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv" # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv" # c
|
||||
|
||||
# Always parenthesize if implicit concatenated
|
||||
____aaa = (
|
||||
"aaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvvvvv"
|
||||
) # c
|
||||
|
||||
## Numbers
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = 1111111111111111111111111111111111111111111111111111111111111111111111111 # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = 1111111111111111111111111111111111111111111111111111111111111111111111111111111 # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = 11111111111111111111111111111111111111111111111111111111111111111111111111111111 # c
|
||||
|
||||
## Breaking left
|
||||
|
||||
# Should break `[a]` first
|
||||
____[a] = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
|
||||
____[
|
||||
a
|
||||
] = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # cc
|
||||
)
|
||||
|
||||
(
|
||||
# some weird comments
|
||||
____[aaaaaaaaa]
|
||||
# some weird comments 2
|
||||
) = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
|
||||
# Preserve trailing assignment comments when the expression has own line comments
|
||||
____aaa = (
|
||||
# leading
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv
|
||||
# trailing
|
||||
) # cc
|
||||
|
||||
def setUpTestData(cls):
|
||||
cls.happening = (
|
||||
Happening.objects.create()
|
||||
) # make sure the defaults are working (#20158)
|
||||
|
||||
def setUpTestData(cls):
|
||||
cls.happening = (
|
||||
Happening.objects.create # make sure the defaults are working (#20158)
|
||||
)
|
||||
|
||||
if True:
|
||||
if True:
|
||||
if True:
|
||||
# Black layout
|
||||
model.config.use_cache = (
|
||||
False # FSTM still requires this hack -> FSTM should probably be refactored s
|
||||
)
|
||||
|
||||
## Annotated Assign
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____a : a = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
)
|
||||
|
||||
# 88 characters
|
||||
____a: a = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____a: a = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
_a: a[b] = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
## Augmented Assign
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aa += (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
)
|
||||
|
||||
# 88 characters
|
||||
____aa += (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aa += (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
## Return
|
||||
|
||||
def test():
|
||||
# 88 characters unparenthesized
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
|
||||
def test2():
|
||||
# 88 characters
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvv # c
|
||||
|
||||
def test3():
|
||||
# 89 characters parenthesized (collapse)
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvv # c
|
||||
|
||||
## Return Parenthesized
|
||||
|
||||
def test4():
|
||||
# 88 characters unparenthesized
|
||||
return (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
)
|
||||
|
||||
def test5():
|
||||
# 88 characters
|
||||
return (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvv # c
|
||||
)
|
||||
|
||||
def test6():
|
||||
# 89 characters parenthesized (collapse)
|
||||
return (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvv # c
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -43,14 +43,6 @@ impl<'a> PyFormatContext<'a> {
|
||||
pub(crate) fn comments(&self) -> &Comments<'a> {
|
||||
&self.comments
|
||||
}
|
||||
|
||||
pub(crate) const fn is_preview(&self) -> bool {
|
||||
self.options.preview().is_enabled()
|
||||
}
|
||||
|
||||
pub(crate) const fn is_stable(&self) -> bool {
|
||||
!self.is_preview()
|
||||
}
|
||||
}
|
||||
|
||||
impl FormatContext for PyFormatContext<'_> {
|
||||
|
||||
@@ -20,7 +20,7 @@ impl FormatNodeRule<ExprAwait> for FormatExprAwait {
|
||||
[
|
||||
token("await"),
|
||||
space(),
|
||||
maybe_parenthesize_expression(value, item, Parenthesize::IfRequired)
|
||||
maybe_parenthesize_expression(value, item, Parenthesize::IfBreaks)
|
||||
]
|
||||
)
|
||||
}
|
||||
@@ -39,7 +39,6 @@ impl NeedsParentheses for ExprAwait {
|
||||
context.comments().ranges(),
|
||||
context.source(),
|
||||
) {
|
||||
// Prefer splitting the value if it is parenthesized.
|
||||
OptionalParentheses::Never
|
||||
} else {
|
||||
self.value.needs_parentheses(self.into(), context)
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
use ruff_formatter::{format_args, write};
|
||||
use ruff_formatter::write;
|
||||
use ruff_python_ast::AnyNodeRef;
|
||||
use ruff_python_ast::ExprLambda;
|
||||
use ruff_text_size::Ranged;
|
||||
|
||||
use crate::comments::{dangling_comments, leading_comments, SourceComment};
|
||||
use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses, Parenthesize};
|
||||
use crate::expression::{has_own_parentheses, maybe_parenthesize_expression};
|
||||
use crate::comments::{dangling_comments, SourceComment};
|
||||
use crate::expression::parentheses::{NeedsParentheses, OptionalParentheses};
|
||||
use crate::other::parameters::ParametersParentheses;
|
||||
use crate::prelude::*;
|
||||
|
||||
@@ -26,49 +25,31 @@ impl FormatNodeRule<ExprLambda> for FormatExprLambda {
|
||||
write!(f, [token("lambda")])?;
|
||||
|
||||
if let Some(parameters) = parameters {
|
||||
// In this context, a dangling comment can either be a comment between the `lambda` and the
|
||||
// In this context, a dangling comment can either be a comment between the `lambda` the
|
||||
// parameters, or a comment between the parameters and the body.
|
||||
let (dangling_before_parameters, dangling_after_parameters) = dangling
|
||||
.split_at(dangling.partition_point(|comment| comment.end() < parameters.start()));
|
||||
|
||||
if dangling_before_parameters.is_empty() {
|
||||
write!(f, [space()])?;
|
||||
} else {
|
||||
write!(f, [dangling_comments(dangling_before_parameters)])?;
|
||||
}
|
||||
|
||||
group(&format_with(|f: &mut PyFormatter| {
|
||||
if f.context().node_level().is_parenthesized()
|
||||
&& (parameters.len() > 1 || !dangling_before_parameters.is_empty())
|
||||
{
|
||||
let end_of_line_start = dangling_before_parameters
|
||||
.partition_point(|comment| comment.line_position().is_end_of_line());
|
||||
let (same_line_comments, own_line_comments) =
|
||||
dangling_before_parameters.split_at(end_of_line_start);
|
||||
write!(
|
||||
f,
|
||||
[parameters
|
||||
.format()
|
||||
.with_options(ParametersParentheses::Never)]
|
||||
)?;
|
||||
|
||||
dangling_comments(same_line_comments).fmt(f)?;
|
||||
write!(f, [token(":")])?;
|
||||
|
||||
soft_block_indent(&format_args![
|
||||
leading_comments(own_line_comments),
|
||||
parameters
|
||||
.format()
|
||||
.with_options(ParametersParentheses::Never),
|
||||
])
|
||||
.fmt(f)
|
||||
} else {
|
||||
parameters
|
||||
.format()
|
||||
.with_options(ParametersParentheses::Never)
|
||||
.fmt(f)
|
||||
}?;
|
||||
|
||||
token(":").fmt(f)?;
|
||||
|
||||
if dangling_after_parameters.is_empty() {
|
||||
space().fmt(f)
|
||||
} else {
|
||||
dangling_comments(dangling_after_parameters).fmt(f)
|
||||
}
|
||||
}))
|
||||
.fmt(f)?;
|
||||
if dangling_after_parameters.is_empty() {
|
||||
write!(f, [space()])?;
|
||||
} else {
|
||||
write!(f, [dangling_comments(dangling_after_parameters)])?;
|
||||
}
|
||||
} else {
|
||||
write!(f, [token(":")])?;
|
||||
|
||||
@@ -80,12 +61,7 @@ impl FormatNodeRule<ExprLambda> for FormatExprLambda {
|
||||
}
|
||||
}
|
||||
|
||||
// Avoid parenthesizing lists, dictionaries, etc.
|
||||
if f.context().is_stable() || has_own_parentheses(body, f.context()).is_some() {
|
||||
body.format().fmt(f)
|
||||
} else {
|
||||
maybe_parenthesize_expression(body, item, Parenthesize::IfBreaksOrIfRequired).fmt(f)
|
||||
}
|
||||
write!(f, [body.format()])
|
||||
}
|
||||
|
||||
fn fmt_dangling_comments(
|
||||
|
||||
@@ -69,7 +69,6 @@ impl NeedsParentheses for ExprNamedExpr {
|
||||
|| parent.is_stmt_delete()
|
||||
|| parent.is_stmt_for()
|
||||
|| parent.is_stmt_function_def()
|
||||
|| parent.is_expr_lambda()
|
||||
{
|
||||
OptionalParentheses::Always
|
||||
} else {
|
||||
|
||||
@@ -59,10 +59,7 @@ impl NeedsParentheses for AnyExpressionYield<'_> {
|
||||
OptionalParentheses::Never
|
||||
} else {
|
||||
// Ex) `x = yield f(1, 2, 3)`
|
||||
match value.needs_parentheses(self.into(), context) {
|
||||
OptionalParentheses::BestFit => OptionalParentheses::Never,
|
||||
parentheses => parentheses,
|
||||
}
|
||||
value.needs_parentheses(self.into(), context)
|
||||
}
|
||||
} else {
|
||||
// Ex) `x = yield`
|
||||
|
||||
@@ -12,9 +12,7 @@ use ruff_python_trivia::CommentRanges;
|
||||
use ruff_text_size::Ranged;
|
||||
|
||||
use crate::builders::parenthesize_if_expands;
|
||||
use crate::comments::{
|
||||
leading_comments, trailing_comments, LeadingDanglingTrailingComments, SourceComment,
|
||||
};
|
||||
use crate::comments::{leading_comments, trailing_comments, LeadingDanglingTrailingComments};
|
||||
use crate::context::{NodeLevel, WithNodeLevel};
|
||||
use crate::expression::expr_generator_exp::is_generator_parenthesized;
|
||||
use crate::expression::expr_tuple::is_tuple_parenthesized;
|
||||
@@ -376,8 +374,10 @@ impl Format<PyFormatContext<'_>> for MaybeParenthesizeExpression<'_> {
|
||||
return expression.format().with_options(Parentheses::Always).fmt(f);
|
||||
}
|
||||
|
||||
let comments = f.context().comments().clone();
|
||||
let node_comments = comments.leading_dangling_trailing(*expression);
|
||||
let node_comments = f
|
||||
.context()
|
||||
.comments()
|
||||
.leading_dangling_trailing(*expression);
|
||||
|
||||
// If the expression has comments, we always want to preserve the parentheses. This also
|
||||
// ensures that we correctly handle parenthesized comments, and don't need to worry about
|
||||
@@ -426,106 +426,15 @@ impl Format<PyFormatContext<'_>> for MaybeParenthesizeExpression<'_> {
|
||||
expression.format().with_options(Parentheses::Never).fmt(f)
|
||||
}
|
||||
Parenthesize::IfBreaks => {
|
||||
// Is the expression the last token in the parent statement.
|
||||
// Excludes `await` and `yield` for which Black doesn't seem to apply the layout?
|
||||
let last_expression = parent.is_stmt_assign()
|
||||
|| parent.is_stmt_ann_assign()
|
||||
|| parent.is_stmt_aug_assign()
|
||||
|| parent.is_stmt_return();
|
||||
|
||||
// Format the statements and value's trailing end of line comments:
|
||||
// * after the expression if the expression needs no parentheses (necessary or the `expand_parent` makes the group never fit).
|
||||
// * inside the parentheses if the expression exceeds the line-width.
|
||||
//
|
||||
// ```python
|
||||
// a = long # with_comment
|
||||
// b = (
|
||||
// short # with_comment
|
||||
// )
|
||||
//
|
||||
// # formatted
|
||||
// a = (
|
||||
// long # with comment
|
||||
// )
|
||||
// b = short # with comment
|
||||
// ```
|
||||
// This matches Black's formatting with the exception that ruff applies this style also for
|
||||
// attribute chains and non-fluent call expressions. See https://github.com/psf/black/issues/4001#issuecomment-1786681792
|
||||
//
|
||||
// This logic isn't implemented in [`place_comment`] by associating trailing statement comments to the expression because
|
||||
// doing so breaks the suite empty lines formatting that relies on trailing comments to be stored on the statement.
|
||||
let (inline_comments, expression_trailing_comments) = if last_expression
|
||||
&& !(
|
||||
// Ignore non-fluent attribute chains for black compatibility.
|
||||
// See https://github.com/psf/black/issues/4001#issuecomment-1786681792
|
||||
expression.is_attribute_expr()
|
||||
|| expression.is_call_expr()
|
||||
|| expression.is_yield_from_expr()
|
||||
|| expression.is_yield_expr()
|
||||
|| expression.is_await_expr()
|
||||
) {
|
||||
let parent_trailing_comments = comments.trailing(*parent);
|
||||
let after_end_of_line = parent_trailing_comments
|
||||
.partition_point(|comment| comment.line_position().is_end_of_line());
|
||||
let (stmt_inline_comments, _) =
|
||||
parent_trailing_comments.split_at(after_end_of_line);
|
||||
|
||||
let after_end_of_line = node_comments
|
||||
.trailing
|
||||
.partition_point(|comment| comment.line_position().is_end_of_line());
|
||||
|
||||
let (expression_inline_comments, expression_trailing_comments) =
|
||||
node_comments.trailing.split_at(after_end_of_line);
|
||||
|
||||
(
|
||||
OptionalParenthesesInlinedComments {
|
||||
expression: expression_inline_comments,
|
||||
statement: stmt_inline_comments,
|
||||
},
|
||||
expression_trailing_comments,
|
||||
)
|
||||
if node_comments.has_trailing() {
|
||||
expression.format().with_options(Parentheses::Always).fmt(f)
|
||||
} else {
|
||||
(
|
||||
OptionalParenthesesInlinedComments::default(),
|
||||
node_comments.trailing,
|
||||
)
|
||||
};
|
||||
|
||||
if expression_trailing_comments.is_empty() {
|
||||
// The group id is necessary because the nested expressions may reference it.
|
||||
let group_id = f.group_id("optional_parentheses");
|
||||
let f = &mut WithNodeLevel::new(NodeLevel::Expression(Some(group_id)), f);
|
||||
|
||||
best_fit_parenthesize(&format_with(|f| {
|
||||
inline_comments.mark_formatted();
|
||||
|
||||
expression
|
||||
.format()
|
||||
.with_options(Parentheses::Never)
|
||||
.fmt(f)?;
|
||||
|
||||
if !inline_comments.is_empty() {
|
||||
// If the expressions exceeds the line width, format the comments in the parentheses
|
||||
if_group_breaks(&inline_comments)
|
||||
.with_group_id(Some(group_id))
|
||||
.fmt(f)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}))
|
||||
.with_group_id(Some(group_id))
|
||||
.fmt(f)?;
|
||||
|
||||
if !inline_comments.is_empty() {
|
||||
// If the line fits into the line width, format the comments after the parenthesized expression
|
||||
if_group_fits_on_line(&inline_comments)
|
||||
.with_group_id(Some(group_id))
|
||||
.fmt(f)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
} else {
|
||||
expression.format().with_options(Parentheses::Always).fmt(f)
|
||||
best_fit_parenthesize(&expression.format().with_options(Parentheses::Never))
|
||||
.with_group_id(Some(group_id))
|
||||
.fmt(f)
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1160,41 +1069,3 @@ impl From<ast::Operator> for OperatorPrecedence {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default)]
|
||||
struct OptionalParenthesesInlinedComments<'a> {
|
||||
expression: &'a [SourceComment],
|
||||
statement: &'a [SourceComment],
|
||||
}
|
||||
|
||||
impl<'a> OptionalParenthesesInlinedComments<'a> {
|
||||
fn is_empty(&self) -> bool {
|
||||
self.expression.is_empty() && self.statement.is_empty()
|
||||
}
|
||||
|
||||
fn iter_comments(&self) -> impl Iterator<Item = &'a SourceComment> {
|
||||
self.expression.iter().chain(self.statement)
|
||||
}
|
||||
|
||||
fn mark_formatted(&self) {
|
||||
for comment in self.iter_comments() {
|
||||
comment.mark_formatted();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Format<PyFormatContext<'_>> for OptionalParenthesesInlinedComments<'_> {
|
||||
fn fmt(&self, f: &mut Formatter<PyFormatContext<'_>>) -> FormatResult<()> {
|
||||
for comment in self.iter_comments() {
|
||||
comment.mark_unformatted();
|
||||
}
|
||||
|
||||
write!(
|
||||
f,
|
||||
[
|
||||
trailing_comments(self.expression),
|
||||
trailing_comments(self.statement)
|
||||
]
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,7 +108,7 @@ impl PyFormatOptions {
|
||||
self.line_ending
|
||||
}
|
||||
|
||||
pub const fn preview(&self) -> PreviewMode {
|
||||
pub fn preview(&self) -> PreviewMode {
|
||||
self.preview
|
||||
}
|
||||
|
||||
|
||||
@@ -102,15 +102,7 @@ impl FormatNodeRule<Parameters> for FormatParameters {
|
||||
dangling.split_at(parenthesis_comments_end);
|
||||
|
||||
let format_inner = format_with(|f: &mut PyFormatter| {
|
||||
let separator = format_with(|f: &mut PyFormatter| {
|
||||
token(",").fmt(f)?;
|
||||
|
||||
if f.context().node_level().is_parenthesized() {
|
||||
soft_line_break_or_space().fmt(f)
|
||||
} else {
|
||||
space().fmt(f)
|
||||
}
|
||||
});
|
||||
let separator = format_with(|f| write!(f, [token(","), soft_line_break_or_space()]));
|
||||
let mut joiner = f.join_with(separator);
|
||||
let mut last_node: Option<AnyNodeRef> = None;
|
||||
|
||||
@@ -240,19 +232,23 @@ impl FormatNodeRule<Parameters> for FormatParameters {
|
||||
Ok(())
|
||||
});
|
||||
|
||||
let num_parameters = item.len();
|
||||
let mut f = WithNodeLevel::new(NodeLevel::ParenthesizedExpression, f);
|
||||
|
||||
let num_parameters = posonlyargs.len()
|
||||
+ args.len()
|
||||
+ usize::from(vararg.is_some())
|
||||
+ kwonlyargs.len()
|
||||
+ usize::from(kwarg.is_some());
|
||||
|
||||
if self.parentheses == ParametersParentheses::Never {
|
||||
write!(f, [format_inner, dangling_comments(dangling)])
|
||||
write!(f, [group(&format_inner), dangling_comments(dangling)])
|
||||
} else if num_parameters == 0 {
|
||||
let mut f = WithNodeLevel::new(NodeLevel::ParenthesizedExpression, f);
|
||||
// No parameters, format any dangling comments between `()`
|
||||
write!(f, [empty_parenthesized("(", dangling, ")")])
|
||||
} else {
|
||||
// Intentionally avoid `parenthesized`, which groups the entire formatted contents.
|
||||
// We want parameters to be grouped alongside return types, one level up, so we
|
||||
// format them "inline" here.
|
||||
let mut f = WithNodeLevel::new(NodeLevel::ParenthesizedExpression, f);
|
||||
write!(
|
||||
f,
|
||||
[
|
||||
|
||||
@@ -93,7 +93,7 @@ async def main():
|
||||
```diff
|
||||
--- Black
|
||||
+++ Ruff
|
||||
@@ -21,7 +21,9 @@
|
||||
@@ -21,11 +21,15 @@
|
||||
|
||||
# Check comments
|
||||
async def main():
|
||||
@@ -103,6 +103,13 @@ async def main():
|
||||
+ )
|
||||
|
||||
|
||||
async def main():
|
||||
- await asyncio.sleep(1) # Hello
|
||||
+ await (
|
||||
+ asyncio.sleep(1) # Hello
|
||||
+ )
|
||||
|
||||
|
||||
async def main():
|
||||
```
|
||||
|
||||
@@ -138,7 +145,9 @@ async def main():
|
||||
|
||||
|
||||
async def main():
|
||||
await asyncio.sleep(1) # Hello
|
||||
await (
|
||||
asyncio.sleep(1) # Hello
|
||||
)
|
||||
|
||||
|
||||
async def main():
|
||||
|
||||
@@ -131,13 +131,6 @@ lambda a, /, c: a
|
||||
*x: x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment
|
||||
*x,
|
||||
**y: x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment 1
|
||||
@@ -148,17 +141,6 @@ lambda a, /, c: a
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment 1
|
||||
*
|
||||
# comment 2
|
||||
x,
|
||||
**y:
|
||||
# comment 3
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # comment 1
|
||||
* # comment 2
|
||||
@@ -166,14 +148,6 @@ lambda a, /, c: a
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # comment 1
|
||||
* # comment 2
|
||||
x,
|
||||
y: # comment 3
|
||||
x
|
||||
)
|
||||
|
||||
lambda *x\
|
||||
:x
|
||||
|
||||
@@ -228,17 +202,6 @@ lambda: ( # comment
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # 1
|
||||
# 2
|
||||
x, # 3
|
||||
# 4
|
||||
y
|
||||
: # 5
|
||||
# 6
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
x,
|
||||
@@ -246,109 +209,9 @@ lambda: ( # comment
|
||||
y:
|
||||
z
|
||||
)
|
||||
|
||||
|
||||
# Leading
|
||||
lambda x: (
|
||||
lambda y: lambda z: x
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ z # Trailing
|
||||
) # Trailing
|
||||
|
||||
|
||||
# Leading
|
||||
lambda x: lambda y: lambda z: [
|
||||
x,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
z
|
||||
] # Trailing
|
||||
# Trailing
|
||||
|
||||
lambda self, araa, kkkwargs=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs), e=1, f=2, g=2: d
|
||||
|
||||
# Regression tests for https://github.com/astral-sh/ruff/issues/8179
|
||||
def a():
|
||||
return b(
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f=lambda self, *args, **kwargs: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
|
||||
*args, **kwargs
|
||||
),
|
||||
)
|
||||
|
||||
def a():
|
||||
return b(
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f=lambda self, araa, kkkwargs,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
|
||||
args,kwargs,
|
||||
e=1, f=2, g=2: d,
|
||||
g = 10
|
||||
)
|
||||
|
||||
```
|
||||
|
||||
## Outputs
|
||||
### Output 1
|
||||
```
|
||||
indent-style = space
|
||||
line-width = 88
|
||||
indent-width = 4
|
||||
quote-style = Double
|
||||
magic-trailing-comma = Respect
|
||||
preview = Disabled
|
||||
```
|
||||
|
||||
## Output
|
||||
```py
|
||||
# Leading
|
||||
lambda x: x # Trailing
|
||||
@@ -412,10 +275,8 @@ a = (
|
||||
)
|
||||
|
||||
a = (
|
||||
lambda
|
||||
x, # Dangling
|
||||
y
|
||||
: 1
|
||||
lambda x, # Dangling
|
||||
y: 1
|
||||
)
|
||||
|
||||
# Regression test: lambda empty arguments ranges were too long, leading to unstable
|
||||
@@ -476,54 +337,23 @@ lambda a, /, c: a
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment
|
||||
*x
|
||||
: x
|
||||
# comment
|
||||
*x: x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment
|
||||
*x,
|
||||
**y
|
||||
: x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment 1
|
||||
# comment 2
|
||||
*x
|
||||
:
|
||||
# comment 3
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment 1
|
||||
# comment 2
|
||||
*x,
|
||||
**y
|
||||
:
|
||||
# comment 1
|
||||
# comment 2
|
||||
*x:
|
||||
# comment 3
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # comment 1
|
||||
# comment 2
|
||||
*x
|
||||
: # comment 3
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # comment 1
|
||||
# comment 2
|
||||
*x,
|
||||
y
|
||||
: # comment 3
|
||||
# comment 2
|
||||
*x: # comment 3
|
||||
x
|
||||
)
|
||||
|
||||
@@ -531,9 +361,8 @@ lambda *x: x
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment
|
||||
*x
|
||||
: x
|
||||
# comment
|
||||
*x: x
|
||||
)
|
||||
|
||||
lambda: ( # comment
|
||||
@@ -571,356 +400,8 @@ lambda: ( # comment
|
||||
|
||||
(
|
||||
lambda # 1
|
||||
# 2
|
||||
x
|
||||
: # 3
|
||||
# 4
|
||||
# 5
|
||||
# 6
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # 1
|
||||
# 2
|
||||
x, # 3
|
||||
# 4
|
||||
y
|
||||
: # 5
|
||||
# 6
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
x,
|
||||
# comment
|
||||
y
|
||||
: z
|
||||
)
|
||||
|
||||
|
||||
# Leading
|
||||
lambda x: (
|
||||
lambda y: lambda z: x
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ z # Trailing
|
||||
) # Trailing
|
||||
|
||||
|
||||
# Leading
|
||||
lambda x: lambda y: lambda z: [
|
||||
x,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
z,
|
||||
] # Trailing
|
||||
# Trailing
|
||||
|
||||
lambda self, araa, kkkwargs=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
|
||||
*args, **kwargs
|
||||
), e=1, f=2, g=2: d
|
||||
|
||||
|
||||
# Regression tests for https://github.com/astral-sh/ruff/issues/8179
|
||||
def a():
|
||||
return b(
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f=lambda
|
||||
self,
|
||||
*args,
|
||||
**kwargs
|
||||
: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs),
|
||||
)
|
||||
|
||||
|
||||
def a():
|
||||
return b(
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f=lambda
|
||||
self,
|
||||
araa,
|
||||
kkkwargs,
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
|
||||
args,
|
||||
kwargs,
|
||||
e=1,
|
||||
f=2,
|
||||
g=2
|
||||
: d,
|
||||
g=10,
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
### Output 2
|
||||
```
|
||||
indent-style = space
|
||||
line-width = 88
|
||||
indent-width = 4
|
||||
quote-style = Double
|
||||
magic-trailing-comma = Respect
|
||||
preview = Enabled
|
||||
```
|
||||
|
||||
```py
|
||||
# Leading
|
||||
lambda x: x # Trailing
|
||||
# Trailing
|
||||
|
||||
# Leading
|
||||
lambda x, y: x # Trailing
|
||||
# Trailing
|
||||
|
||||
# Leading
|
||||
lambda x, y: x, y # Trailing
|
||||
# Trailing
|
||||
|
||||
# Leading
|
||||
lambda x, /, y: x # Trailing
|
||||
# Trailing
|
||||
|
||||
# Leading
|
||||
lambda x: lambda y: lambda z: x # Trailing
|
||||
# Trailing
|
||||
|
||||
# Leading
|
||||
lambda x: lambda y: lambda z: (x, y, z) # Trailing
|
||||
# Trailing
|
||||
|
||||
# Leading
|
||||
lambda x: lambda y: lambda z: (x, y, z) # Trailing
|
||||
# Trailing
|
||||
|
||||
# Leading
|
||||
lambda x: (
|
||||
lambda y: (
|
||||
lambda z: (x, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, y, z)
|
||||
)
|
||||
) # Trailing
|
||||
# Trailing
|
||||
|
||||
a = (
|
||||
lambda: # Dangling
|
||||
1
|
||||
)
|
||||
|
||||
a = (
|
||||
lambda
|
||||
x, # Dangling
|
||||
y
|
||||
: 1
|
||||
)
|
||||
|
||||
# Regression test: lambda empty arguments ranges were too long, leading to unstable
|
||||
# formatting
|
||||
(
|
||||
lambda: ( #
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
# lambda arguments don't have parentheses, so we never add a magic trailing comma ...
|
||||
def f(
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa: bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb = lambda x: (
|
||||
y
|
||||
),
|
||||
):
|
||||
pass
|
||||
|
||||
|
||||
# ...but we do preserve a trailing comma after the arguments
|
||||
a = lambda b,: 0
|
||||
|
||||
lambda a,: 0
|
||||
lambda *args,: 0
|
||||
lambda **kwds,: 0
|
||||
lambda a, *args,: 0
|
||||
lambda a, **kwds,: 0
|
||||
lambda *args, b,: 0
|
||||
lambda *, b,: 0
|
||||
lambda *args, **kwds,: 0
|
||||
lambda a, *args, b,: 0
|
||||
lambda a, *, b,: 0
|
||||
lambda a, *args, **kwds,: 0
|
||||
lambda *args, b, **kwds,: 0
|
||||
lambda *, b, **kwds,: 0
|
||||
lambda a, *args, b, **kwds,: 0
|
||||
lambda a, *, b, **kwds,: 0
|
||||
lambda a, /: a
|
||||
lambda a, /, c: a
|
||||
|
||||
# Dangling comments without parameters.
|
||||
(
|
||||
lambda: # 3
|
||||
None
|
||||
)
|
||||
|
||||
(
|
||||
lambda:
|
||||
# 3
|
||||
None
|
||||
)
|
||||
|
||||
(
|
||||
lambda: # 1
|
||||
# 2
|
||||
# 3
|
||||
# 4
|
||||
None # 5
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment
|
||||
*x
|
||||
: x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment
|
||||
*x,
|
||||
**y
|
||||
: x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment 1
|
||||
# comment 2
|
||||
*x
|
||||
:
|
||||
# comment 3
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment 1
|
||||
# comment 2
|
||||
*x,
|
||||
**y
|
||||
:
|
||||
# comment 3
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # comment 1
|
||||
# comment 2
|
||||
*x
|
||||
: # comment 3
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda # comment 1
|
||||
# comment 2
|
||||
*x,
|
||||
y
|
||||
: # comment 3
|
||||
x
|
||||
)
|
||||
|
||||
lambda *x: x
|
||||
|
||||
(
|
||||
lambda
|
||||
# comment
|
||||
*x
|
||||
: x
|
||||
)
|
||||
|
||||
lambda: ( # comment
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda: # comment
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda:
|
||||
# comment
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda: # comment
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda:
|
||||
# comment
|
||||
x
|
||||
)
|
||||
|
||||
(
|
||||
lambda: # comment
|
||||
( # comment
|
||||
x
|
||||
)
|
||||
)
|
||||
|
||||
(
|
||||
lambda # 1
|
||||
# 2
|
||||
x
|
||||
: # 3
|
||||
x: # 3
|
||||
# 4
|
||||
# 5
|
||||
# 6
|
||||
@@ -928,134 +409,10 @@ lambda: ( # comment
|
||||
)
|
||||
|
||||
(
|
||||
lambda # 1
|
||||
# 2
|
||||
x, # 3
|
||||
# 4
|
||||
y
|
||||
: # 5
|
||||
# 6
|
||||
x
|
||||
lambda x,
|
||||
# comment
|
||||
y: z
|
||||
)
|
||||
|
||||
(
|
||||
lambda
|
||||
x,
|
||||
# comment
|
||||
y
|
||||
: z
|
||||
)
|
||||
|
||||
|
||||
# Leading
|
||||
lambda x: (
|
||||
lambda y: (
|
||||
lambda z: (
|
||||
x
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ y
|
||||
+ z
|
||||
)
|
||||
) # Trailing
|
||||
) # Trailing
|
||||
|
||||
|
||||
# Leading
|
||||
lambda x: (
|
||||
lambda y: (
|
||||
lambda z: [
|
||||
x,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
y,
|
||||
z,
|
||||
]
|
||||
)
|
||||
) # Trailing
|
||||
# Trailing
|
||||
|
||||
lambda self, araa, kkkwargs=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(
|
||||
*args, **kwargs
|
||||
), e=1, f=2, g=2: d
|
||||
|
||||
|
||||
# Regression tests for https://github.com/astral-sh/ruff/issues/8179
|
||||
def a():
|
||||
return b(
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f=lambda
|
||||
self,
|
||||
*args,
|
||||
**kwargs
|
||||
: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(*args, **kwargs),
|
||||
)
|
||||
|
||||
|
||||
def a():
|
||||
return b(
|
||||
c,
|
||||
d,
|
||||
e,
|
||||
f=lambda
|
||||
self,
|
||||
araa,
|
||||
kkkwargs,
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
|
||||
args,
|
||||
kwargs,
|
||||
e=1,
|
||||
f=2,
|
||||
g=2
|
||||
: d,
|
||||
g=10,
|
||||
)
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -1,424 +0,0 @@
|
||||
---
|
||||
source: crates/ruff_python_formatter/tests/fixtures.rs
|
||||
input_file: crates/ruff_python_formatter/resources/test/fixtures/ruff/expression/optional_parentheses_comments.py
|
||||
---
|
||||
## Input
|
||||
```py
|
||||
comment_string = "Long lines with inline comments should have their comments appended to the reformatted string's enclosing right parentheses." # This comment gets thrown to the top.
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
## Parenthesized
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
)
|
||||
|
||||
# 88 characters
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
## Expression and statement comments
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb # c
|
||||
) # d
|
||||
|
||||
# 88 characters
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvv # c
|
||||
) # d
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvv # c
|
||||
) # d
|
||||
|
||||
## Strings
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv" # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv" # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv" # c
|
||||
|
||||
# Always parenthesize if implicit concatenated
|
||||
____aaa = (
|
||||
"aaaaaaaaaaaaaaaaaaaaa" "aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvvvvv"
|
||||
) # c
|
||||
|
||||
## Numbers
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = 1111111111111111111111111111111111111111111111111111111111111111111111111 # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = 1111111111111111111111111111111111111111111111111111111111111111111111111111111 # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = 11111111111111111111111111111111111111111111111111111111111111111111111111111111 # c
|
||||
|
||||
## Breaking left
|
||||
|
||||
# Should break `[a]` first
|
||||
____[a] = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
|
||||
____[
|
||||
a
|
||||
] = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # cc
|
||||
)
|
||||
|
||||
(
|
||||
# some weird comments
|
||||
____[aaaaaaaaa]
|
||||
# some weird comments 2
|
||||
) = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
|
||||
# Preserve trailing assignment comments when the expression has own line comments
|
||||
____aaa = (
|
||||
# leading
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv
|
||||
# trailing
|
||||
) # cc
|
||||
|
||||
def setUpTestData(cls):
|
||||
cls.happening = (
|
||||
Happening.objects.create()
|
||||
) # make sure the defaults are working (#20158)
|
||||
|
||||
def setUpTestData(cls):
|
||||
cls.happening = (
|
||||
Happening.objects.create # make sure the defaults are working (#20158)
|
||||
)
|
||||
|
||||
if True:
|
||||
if True:
|
||||
if True:
|
||||
# Black layout
|
||||
model.config.use_cache = (
|
||||
False # FSTM still requires this hack -> FSTM should probably be refactored s
|
||||
)
|
||||
|
||||
## Annotated Assign
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____a : a = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
)
|
||||
|
||||
# 88 characters
|
||||
____a: a = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____a: a = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
_a: a[b] = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
## Augmented Assign
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aa += (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
)
|
||||
|
||||
# 88 characters
|
||||
____aa += (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aa += (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
## Return
|
||||
|
||||
def test():
|
||||
# 88 characters unparenthesized
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
|
||||
def test2():
|
||||
# 88 characters
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvv # c
|
||||
|
||||
def test3():
|
||||
# 89 characters parenthesized (collapse)
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvv # c
|
||||
|
||||
## Return Parenthesized
|
||||
|
||||
def test4():
|
||||
# 88 characters unparenthesized
|
||||
return (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
)
|
||||
|
||||
def test5():
|
||||
# 88 characters
|
||||
return (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvv # c
|
||||
)
|
||||
|
||||
def test6():
|
||||
# 89 characters parenthesized (collapse)
|
||||
return (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvv # c
|
||||
)
|
||||
|
||||
|
||||
|
||||
```
|
||||
|
||||
## Output
|
||||
```py
|
||||
comment_string = "Long lines with inline comments should have their comments appended to the reformatted string's enclosing right parentheses." # This comment gets thrown to the top.
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
## Parenthesized
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
## Expression and statement comments
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb # c # d
|
||||
|
||||
# 88 characters
|
||||
____aaa = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvv # c # d
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvv # c # d
|
||||
|
||||
## Strings
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv" # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = (
|
||||
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv" # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv" # c
|
||||
|
||||
# Always parenthesize if implicit concatenated
|
||||
____aaa = (
|
||||
"aaaaaaaaaaaaaaaaaaaaa"
|
||||
"aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvvvvv"
|
||||
) # c
|
||||
|
||||
## Numbers
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aaa = 1111111111111111111111111111111111111111111111111111111111111111111111111 # c
|
||||
|
||||
# 88 characters
|
||||
____aaa = (
|
||||
1111111111111111111111111111111111111111111111111111111111111111111111111111111 # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aaa = 11111111111111111111111111111111111111111111111111111111111111111111111111111111 # c
|
||||
|
||||
## Breaking left
|
||||
|
||||
# Should break `[a]` first
|
||||
____[
|
||||
a
|
||||
] = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
|
||||
____[
|
||||
a
|
||||
] = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # cc
|
||||
|
||||
(
|
||||
# some weird comments
|
||||
____[aaaaaaaaa]
|
||||
# some weird comments 2
|
||||
) = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
|
||||
# Preserve trailing assignment comments when the expression has own line comments
|
||||
____aaa = (
|
||||
# leading
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv
|
||||
# trailing
|
||||
) # cc
|
||||
|
||||
|
||||
def setUpTestData(cls):
|
||||
cls.happening = (
|
||||
Happening.objects.create()
|
||||
) # make sure the defaults are working (#20158)
|
||||
|
||||
|
||||
def setUpTestData(cls):
|
||||
cls.happening = (
|
||||
Happening.objects.create # make sure the defaults are working (#20158)
|
||||
)
|
||||
|
||||
|
||||
if True:
|
||||
if True:
|
||||
if True:
|
||||
# Black layout
|
||||
model.config.use_cache = False # FSTM still requires this hack -> FSTM should probably be refactored s
|
||||
|
||||
## Annotated Assign
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____a: a = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____a: a = (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____a: a = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
_a: a[
|
||||
b
|
||||
] = aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
## Augmented Assign
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____aa += (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
# 88 characters unparenthesized
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvv # c
|
||||
|
||||
# 88 characters
|
||||
____aa += (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvv # c
|
||||
)
|
||||
|
||||
# 89 characters parenthesized (collapse)
|
||||
____aa += aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvvvvvv # c
|
||||
|
||||
## Return
|
||||
|
||||
|
||||
def test():
|
||||
# 88 characters unparenthesized
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
|
||||
|
||||
def test2():
|
||||
# 88 characters
|
||||
return (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvv # c
|
||||
)
|
||||
|
||||
|
||||
def test3():
|
||||
# 89 characters parenthesized (collapse)
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvv # c
|
||||
|
||||
|
||||
## Return Parenthesized
|
||||
|
||||
|
||||
def test4():
|
||||
# 88 characters unparenthesized
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvv # c
|
||||
|
||||
|
||||
def test5():
|
||||
# 88 characters
|
||||
return (
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvv # c
|
||||
)
|
||||
|
||||
|
||||
def test6():
|
||||
# 89 characters parenthesized (collapse)
|
||||
return aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbvvvvvvvv # c
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -164,7 +164,9 @@ for converter in connection.ops.get_db_converters(
|
||||
pass
|
||||
|
||||
|
||||
aaa = bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # awkward comment
|
||||
aaa = (
|
||||
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb # awkward comment
|
||||
)
|
||||
|
||||
|
||||
def test():
|
||||
@@ -200,9 +202,13 @@ if True:
|
||||
if True:
|
||||
if True:
|
||||
# Black layout
|
||||
model.config.use_cache = False # FSTM still requires this hack -> FSTM should probably be refactored s
|
||||
model.config.use_cache = (
|
||||
False # FSTM still requires this hack -> FSTM should probably be refactored s
|
||||
)
|
||||
# Ruff layout
|
||||
model.config.use_cache = False # FSTM still requires this hack -> FSTM should probably be refactored s
|
||||
model.config.use_cache = (
|
||||
False
|
||||
) # FSTM still requires this hack -> FSTM should probably be refactored s
|
||||
|
||||
|
||||
# Regression test for https://github.com/astral-sh/ruff/issues/7463
|
||||
|
||||
@@ -146,7 +146,9 @@ list_with_parenthesized_elements5 = [
|
||||
(2), # trailing outer
|
||||
]
|
||||
|
||||
nested_parentheses1 = 1 # i # j # k
|
||||
nested_parentheses1 = (
|
||||
1 # i # j
|
||||
) # k
|
||||
nested_parentheses2 = [
|
||||
(
|
||||
1 # i
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
PyYAML==6.0.1
|
||||
PyYAML==6.0
|
||||
black==23.10.0
|
||||
mkdocs==1.5.0
|
||||
git+ssh://git@github.com/astral-sh/mkdocs-material-insiders.git@38c0b8187325c3bab386b666daf3518ac036f2f4
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
PyYAML==6.0.1
|
||||
PyYAML==6.0
|
||||
black==23.10.0
|
||||
mkdocs==1.5.0
|
||||
mkdocs-material==9.1.18
|
||||
|
||||
@@ -107,7 +107,6 @@ export default function SourceEditor({
|
||||
<Editor
|
||||
beforeMount={handleMount}
|
||||
options={{
|
||||
fixedOverflowWidgets: true,
|
||||
readOnly: false,
|
||||
minimap: { enabled: false },
|
||||
fontSize: 14,
|
||||
|
||||
@@ -28,7 +28,8 @@ html,
|
||||
|
||||
@font-face {
|
||||
font-family: "Alliance Text";
|
||||
src: url("../fonts/Alliance-TextRegular.woff2") format("woff2"),
|
||||
src:
|
||||
url("../fonts/Alliance-TextRegular.woff2") format("woff2"),
|
||||
url("../fonts/Alliance-TextRegular.woff") format("woff");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
@@ -37,7 +38,8 @@ html,
|
||||
|
||||
@font-face {
|
||||
font-family: "Alliance Text";
|
||||
src: url("../fonts/Alliance-TextMedium.woff2") format("woff2"),
|
||||
src:
|
||||
url("../fonts/Alliance-TextMedium.woff2") format("woff2"),
|
||||
url("../fonts/Alliance-TextMedium.woff") format("woff");
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
@@ -46,7 +48,8 @@ html,
|
||||
|
||||
@font-face {
|
||||
font-family: "Alliance Platt";
|
||||
src: url("../fonts/Alliance-PlattMedium.woff2") format("woff2"),
|
||||
src:
|
||||
url("../fonts/Alliance-PlattMedium.woff2") format("woff2"),
|
||||
url("../fonts/Alliance-PlattMedium.woff") format("woff");
|
||||
font-weight: 500;
|
||||
font-style: normal;
|
||||
@@ -55,7 +58,8 @@ html,
|
||||
|
||||
@font-face {
|
||||
font-family: "Alliance Platt";
|
||||
src: url("../fonts/Alliance-PlattRegular.woff2") format("woff2"),
|
||||
src:
|
||||
url("../fonts/Alliance-PlattRegular.woff2") format("woff2"),
|
||||
url("../fonts/Alliance-PlattRegular.woff") format("woff");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
|
||||
@@ -45,8 +45,8 @@ def format_number(number: int) -> str:
|
||||
number = str(number)
|
||||
number = "_".join(number[i : i + 3] for i in range(0, len(number), 3))
|
||||
return f"{number}_u32"
|
||||
|
||||
return f"{number}u32"
|
||||
else:
|
||||
return f"{number}u32"
|
||||
|
||||
|
||||
def format_confusables_rs(raw_data: dict[str, list[int]]) -> str:
|
||||
|
||||
Reference in New Issue
Block a user