mirror of
https://github.com/astral-sh/ruff.git
synced 2025-08-03 02:13:08 +00:00
549 lines
13 KiB
Text
549 lines
13 KiB
Text
---
|
|
source: crates/ruff_python_formatter/tests/fixtures.rs
|
|
input_file: crates/ruff_python_formatter/resources/test/fixtures/black/simple_cases/function.py
|
|
---
|
|
## Input
|
|
|
|
```py
|
|
#!/usr/bin/env python3
|
|
import asyncio
|
|
import sys
|
|
|
|
from third_party import X, Y, Z
|
|
|
|
from library import some_connection, \
|
|
some_decorator
|
|
f'trigger 3.6 mode'
|
|
def func_no_args():
|
|
a; b; c
|
|
if True: raise RuntimeError
|
|
if False: ...
|
|
for i in range(10):
|
|
print(i)
|
|
continue
|
|
exec("new-style exec", {}, {})
|
|
return None
|
|
async def coroutine(arg, exec=False):
|
|
"Single-line docstring. Multiline is harder to reformat."
|
|
async with some_connection() as conn:
|
|
await conn.do_what_i_mean('SELECT bobby, tables FROM xkcd', timeout=2)
|
|
await asyncio.sleep(1)
|
|
@asyncio.coroutine
|
|
@some_decorator(
|
|
with_args=True,
|
|
many_args=[1,2,3]
|
|
)
|
|
def function_signature_stress_test(number:int,no_annotation=None,text:str="default",* ,debug:bool=False,**kwargs) -> str:
|
|
return text[number:-1]
|
|
def spaces(a=1, b=(), c=[], d={}, e=True, f=-1, g=1 if False else 2, h="", i=r''):
|
|
offset = attr.ib(default=attr.Factory( lambda: _r.uniform(10000, 200000)))
|
|
assert task._cancel_stack[:len(old_stack)] == old_stack
|
|
def spaces_types(a: int = 1, b: tuple = (), c: list = [], d: dict = {}, e: bool = True, f: int = -1, g: int = 1 if False else 2, h: str = "", i: str = r''): ...
|
|
def spaces2(result= _core.Value(None)):
|
|
assert fut is self._read_fut, (fut, self._read_fut)
|
|
|
|
def example(session):
|
|
result = session.query(models.Customer.id).filter(
|
|
models.Customer.account_id == account_id,
|
|
models.Customer.email == email_address,
|
|
).order_by(
|
|
models.Customer.id.asc()
|
|
).all()
|
|
def long_lines():
|
|
if True:
|
|
typedargslist.extend(
|
|
gen_annotated_params(ast_args.kwonlyargs, ast_args.kw_defaults, parameters, implicit_default=True)
|
|
)
|
|
typedargslist.extend(
|
|
gen_annotated_params(
|
|
ast_args.kwonlyargs, ast_args.kw_defaults, parameters, implicit_default=True,
|
|
# trailing standalone comment
|
|
)
|
|
)
|
|
_type_comment_re = re.compile(
|
|
r"""
|
|
^
|
|
[\t ]*
|
|
\#[ ]type:[ ]*
|
|
(?P<type>
|
|
[^#\t\n]+?
|
|
)
|
|
(?<!ignore) # note: this will force the non-greedy + in <type> to match
|
|
# a trailing space which is why we need the silliness below
|
|
(?<!ignore[ ]{1})(?<!ignore[ ]{2})(?<!ignore[ ]{3})(?<!ignore[ ]{4})
|
|
(?<!ignore[ ]{5})(?<!ignore[ ]{6})(?<!ignore[ ]{7})(?<!ignore[ ]{8})
|
|
(?<!ignore[ ]{9})(?<!ignore[ ]{10})
|
|
[\t ]*
|
|
(?P<nl>
|
|
(?:\#[^\n]*)?
|
|
\n?
|
|
)
|
|
$
|
|
""", re.MULTILINE | re.VERBOSE
|
|
)
|
|
def trailing_comma():
|
|
mapping = {
|
|
A: 0.25 * (10.0 / 12),
|
|
B: 0.1 * (10.0 / 12),
|
|
C: 0.1 * (10.0 / 12),
|
|
D: 0.1 * (10.0 / 12),
|
|
}
|
|
def f(
|
|
a,
|
|
**kwargs,
|
|
) -> A:
|
|
return (
|
|
yield from A(
|
|
very_long_argument_name1=very_long_value_for_the_argument,
|
|
very_long_argument_name2=very_long_value_for_the_argument,
|
|
**kwargs,
|
|
)
|
|
)
|
|
def __await__(): return (yield)
|
|
```
|
|
|
|
## Black Differences
|
|
|
|
```diff
|
|
--- Black
|
|
+++ Ruff
|
|
@@ -1,12 +1,11 @@
|
|
#!/usr/bin/env python3
|
|
-import asyncio
|
|
-import sys
|
|
+NOT_YET_IMPLEMENTED_StmtImport
|
|
+NOT_YET_IMPLEMENTED_StmtImport
|
|
|
|
-from third_party import X, Y, Z
|
|
+NOT_YET_IMPLEMENTED_StmtImportFrom
|
|
|
|
-from library import some_connection, some_decorator
|
|
-
|
|
-f"trigger 3.6 mode"
|
|
+NOT_YET_IMPLEMENTED_StmtImportFrom
|
|
+NOT_YET_IMPLEMENTED_ExprJoinedStr
|
|
|
|
|
|
def func_no_args():
|
|
@@ -14,25 +13,24 @@
|
|
b
|
|
c
|
|
if True:
|
|
- raise RuntimeError
|
|
+ NOT_YET_IMPLEMENTED_StmtRaise
|
|
if False:
|
|
...
|
|
- for i in range(10):
|
|
- print(i)
|
|
+ for i in NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg):
|
|
+ NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
continue
|
|
- exec("new-style exec", {}, {})
|
|
+ NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
return None
|
|
|
|
|
|
async def coroutine(arg, exec=False):
|
|
"Single-line docstring. Multiline is harder to reformat."
|
|
- async with some_connection() as conn:
|
|
- await conn.do_what_i_mean("SELECT bobby, tables FROM xkcd", timeout=2)
|
|
- await asyncio.sleep(1)
|
|
+ NOT_YET_IMPLEMENTED_StmtAsyncWith
|
|
+ await NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
|
|
|
|
@asyncio.coroutine
|
|
-@some_decorator(with_args=True, many_args=[1, 2, 3])
|
|
+@NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
def function_signature_stress_test(
|
|
number: int,
|
|
no_annotation=None,
|
|
@@ -41,12 +39,22 @@
|
|
debug: bool = False,
|
|
**kwargs,
|
|
) -> str:
|
|
- return text[number:-1]
|
|
+ return text[number : -1]
|
|
|
|
|
|
-def spaces(a=1, b=(), c=[], d={}, e=True, f=-1, g=1 if False else 2, h="", i=r""):
|
|
- offset = attr.ib(default=attr.Factory(lambda: _r.uniform(10000, 200000)))
|
|
- assert task._cancel_stack[: len(old_stack)] == old_stack
|
|
+def spaces(
|
|
+ a=1,
|
|
+ b=(),
|
|
+ c=[],
|
|
+ d={},
|
|
+ e=True,
|
|
+ f=-1,
|
|
+ g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
|
|
+ h="",
|
|
+ i=r"",
|
|
+):
|
|
+ offset = NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
+ NOT_YET_IMPLEMENTED_StmtAssert
|
|
|
|
|
|
def spaces_types(
|
|
@@ -56,70 +64,26 @@
|
|
d: dict = {},
|
|
e: bool = True,
|
|
f: int = -1,
|
|
- g: int = 1 if False else 2,
|
|
+ g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
|
|
h: str = "",
|
|
i: str = r"",
|
|
):
|
|
...
|
|
|
|
|
|
-def spaces2(result=_core.Value(None)):
|
|
- assert fut is self._read_fut, (fut, self._read_fut)
|
|
+def spaces2(result=NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)):
|
|
+ NOT_YET_IMPLEMENTED_StmtAssert
|
|
|
|
|
|
def example(session):
|
|
- result = (
|
|
- session.query(models.Customer.id)
|
|
- .filter(
|
|
- models.Customer.account_id == account_id,
|
|
- models.Customer.email == email_address,
|
|
- )
|
|
- .order_by(models.Customer.id.asc())
|
|
- .all()
|
|
- )
|
|
+ result = NOT_IMPLEMENTED_call()
|
|
|
|
|
|
def long_lines():
|
|
if True:
|
|
- typedargslist.extend(
|
|
- gen_annotated_params(
|
|
- ast_args.kwonlyargs,
|
|
- ast_args.kw_defaults,
|
|
- parameters,
|
|
- implicit_default=True,
|
|
- )
|
|
- )
|
|
- typedargslist.extend(
|
|
- gen_annotated_params(
|
|
- ast_args.kwonlyargs,
|
|
- ast_args.kw_defaults,
|
|
- parameters,
|
|
- implicit_default=True,
|
|
- # trailing standalone comment
|
|
- )
|
|
- )
|
|
- _type_comment_re = re.compile(
|
|
- r"""
|
|
- ^
|
|
- [\t ]*
|
|
- \#[ ]type:[ ]*
|
|
- (?P<type>
|
|
- [^#\t\n]+?
|
|
- )
|
|
- (?<!ignore) # note: this will force the non-greedy + in <type> to match
|
|
- # a trailing space which is why we need the silliness below
|
|
- (?<!ignore[ ]{1})(?<!ignore[ ]{2})(?<!ignore[ ]{3})(?<!ignore[ ]{4})
|
|
- (?<!ignore[ ]{5})(?<!ignore[ ]{6})(?<!ignore[ ]{7})(?<!ignore[ ]{8})
|
|
- (?<!ignore[ ]{9})(?<!ignore[ ]{10})
|
|
- [\t ]*
|
|
- (?P<nl>
|
|
- (?:\#[^\n]*)?
|
|
- \n?
|
|
- )
|
|
- $
|
|
- """,
|
|
- re.MULTILINE | re.VERBOSE,
|
|
- )
|
|
+ NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
+ NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
+ _type_comment_re = NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
|
|
|
|
def trailing_comma():
|
|
@@ -135,14 +99,8 @@
|
|
a,
|
|
**kwargs,
|
|
) -> A:
|
|
- return (
|
|
- yield from A(
|
|
- very_long_argument_name1=very_long_value_for_the_argument,
|
|
- very_long_argument_name2=very_long_value_for_the_argument,
|
|
- **kwargs,
|
|
- )
|
|
- )
|
|
+ return NOT_YET_IMPLEMENTED_ExprYieldFrom
|
|
|
|
|
|
def __await__():
|
|
- return (yield)
|
|
+ return NOT_YET_IMPLEMENTED_ExprYield
|
|
```
|
|
|
|
## Ruff Output
|
|
|
|
```py
|
|
#!/usr/bin/env python3
|
|
NOT_YET_IMPLEMENTED_StmtImport
|
|
NOT_YET_IMPLEMENTED_StmtImport
|
|
|
|
NOT_YET_IMPLEMENTED_StmtImportFrom
|
|
|
|
NOT_YET_IMPLEMENTED_StmtImportFrom
|
|
NOT_YET_IMPLEMENTED_ExprJoinedStr
|
|
|
|
|
|
def func_no_args():
|
|
a
|
|
b
|
|
c
|
|
if True:
|
|
NOT_YET_IMPLEMENTED_StmtRaise
|
|
if False:
|
|
...
|
|
for i in NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg):
|
|
NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
continue
|
|
NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
return None
|
|
|
|
|
|
async def coroutine(arg, exec=False):
|
|
"Single-line docstring. Multiline is harder to reformat."
|
|
NOT_YET_IMPLEMENTED_StmtAsyncWith
|
|
await NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
|
|
|
|
@asyncio.coroutine
|
|
@NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
def function_signature_stress_test(
|
|
number: int,
|
|
no_annotation=None,
|
|
text: str = "default",
|
|
*,
|
|
debug: bool = False,
|
|
**kwargs,
|
|
) -> str:
|
|
return text[number : -1]
|
|
|
|
|
|
def spaces(
|
|
a=1,
|
|
b=(),
|
|
c=[],
|
|
d={},
|
|
e=True,
|
|
f=-1,
|
|
g=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
|
|
h="",
|
|
i=r"",
|
|
):
|
|
offset = NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
NOT_YET_IMPLEMENTED_StmtAssert
|
|
|
|
|
|
def spaces_types(
|
|
a: int = 1,
|
|
b: tuple = (),
|
|
c: list = [],
|
|
d: dict = {},
|
|
e: bool = True,
|
|
f: int = -1,
|
|
g: int = NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false,
|
|
h: str = "",
|
|
i: str = r"",
|
|
):
|
|
...
|
|
|
|
|
|
def spaces2(result=NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)):
|
|
NOT_YET_IMPLEMENTED_StmtAssert
|
|
|
|
|
|
def example(session):
|
|
result = NOT_IMPLEMENTED_call()
|
|
|
|
|
|
def long_lines():
|
|
if True:
|
|
NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
_type_comment_re = NOT_IMPLEMENTED_call(NOT_IMPLEMENTED_arg)
|
|
|
|
|
|
def trailing_comma():
|
|
mapping = {
|
|
A: 0.25 * (10.0 / 12),
|
|
B: 0.1 * (10.0 / 12),
|
|
C: 0.1 * (10.0 / 12),
|
|
D: 0.1 * (10.0 / 12),
|
|
}
|
|
|
|
|
|
def f(
|
|
a,
|
|
**kwargs,
|
|
) -> A:
|
|
return NOT_YET_IMPLEMENTED_ExprYieldFrom
|
|
|
|
|
|
def __await__():
|
|
return NOT_YET_IMPLEMENTED_ExprYield
|
|
```
|
|
|
|
## Black Output
|
|
|
|
```py
|
|
#!/usr/bin/env python3
|
|
import asyncio
|
|
import sys
|
|
|
|
from third_party import X, Y, Z
|
|
|
|
from library import some_connection, some_decorator
|
|
|
|
f"trigger 3.6 mode"
|
|
|
|
|
|
def func_no_args():
|
|
a
|
|
b
|
|
c
|
|
if True:
|
|
raise RuntimeError
|
|
if False:
|
|
...
|
|
for i in range(10):
|
|
print(i)
|
|
continue
|
|
exec("new-style exec", {}, {})
|
|
return None
|
|
|
|
|
|
async def coroutine(arg, exec=False):
|
|
"Single-line docstring. Multiline is harder to reformat."
|
|
async with some_connection() as conn:
|
|
await conn.do_what_i_mean("SELECT bobby, tables FROM xkcd", timeout=2)
|
|
await asyncio.sleep(1)
|
|
|
|
|
|
@asyncio.coroutine
|
|
@some_decorator(with_args=True, many_args=[1, 2, 3])
|
|
def function_signature_stress_test(
|
|
number: int,
|
|
no_annotation=None,
|
|
text: str = "default",
|
|
*,
|
|
debug: bool = False,
|
|
**kwargs,
|
|
) -> str:
|
|
return text[number:-1]
|
|
|
|
|
|
def spaces(a=1, b=(), c=[], d={}, e=True, f=-1, g=1 if False else 2, h="", i=r""):
|
|
offset = attr.ib(default=attr.Factory(lambda: _r.uniform(10000, 200000)))
|
|
assert task._cancel_stack[: len(old_stack)] == old_stack
|
|
|
|
|
|
def spaces_types(
|
|
a: int = 1,
|
|
b: tuple = (),
|
|
c: list = [],
|
|
d: dict = {},
|
|
e: bool = True,
|
|
f: int = -1,
|
|
g: int = 1 if False else 2,
|
|
h: str = "",
|
|
i: str = r"",
|
|
):
|
|
...
|
|
|
|
|
|
def spaces2(result=_core.Value(None)):
|
|
assert fut is self._read_fut, (fut, self._read_fut)
|
|
|
|
|
|
def example(session):
|
|
result = (
|
|
session.query(models.Customer.id)
|
|
.filter(
|
|
models.Customer.account_id == account_id,
|
|
models.Customer.email == email_address,
|
|
)
|
|
.order_by(models.Customer.id.asc())
|
|
.all()
|
|
)
|
|
|
|
|
|
def long_lines():
|
|
if True:
|
|
typedargslist.extend(
|
|
gen_annotated_params(
|
|
ast_args.kwonlyargs,
|
|
ast_args.kw_defaults,
|
|
parameters,
|
|
implicit_default=True,
|
|
)
|
|
)
|
|
typedargslist.extend(
|
|
gen_annotated_params(
|
|
ast_args.kwonlyargs,
|
|
ast_args.kw_defaults,
|
|
parameters,
|
|
implicit_default=True,
|
|
# trailing standalone comment
|
|
)
|
|
)
|
|
_type_comment_re = re.compile(
|
|
r"""
|
|
^
|
|
[\t ]*
|
|
\#[ ]type:[ ]*
|
|
(?P<type>
|
|
[^#\t\n]+?
|
|
)
|
|
(?<!ignore) # note: this will force the non-greedy + in <type> to match
|
|
# a trailing space which is why we need the silliness below
|
|
(?<!ignore[ ]{1})(?<!ignore[ ]{2})(?<!ignore[ ]{3})(?<!ignore[ ]{4})
|
|
(?<!ignore[ ]{5})(?<!ignore[ ]{6})(?<!ignore[ ]{7})(?<!ignore[ ]{8})
|
|
(?<!ignore[ ]{9})(?<!ignore[ ]{10})
|
|
[\t ]*
|
|
(?P<nl>
|
|
(?:\#[^\n]*)?
|
|
\n?
|
|
)
|
|
$
|
|
""",
|
|
re.MULTILINE | re.VERBOSE,
|
|
)
|
|
|
|
|
|
def trailing_comma():
|
|
mapping = {
|
|
A: 0.25 * (10.0 / 12),
|
|
B: 0.1 * (10.0 / 12),
|
|
C: 0.1 * (10.0 / 12),
|
|
D: 0.1 * (10.0 / 12),
|
|
}
|
|
|
|
|
|
def f(
|
|
a,
|
|
**kwargs,
|
|
) -> A:
|
|
return (
|
|
yield from A(
|
|
very_long_argument_name1=very_long_value_for_the_argument,
|
|
very_long_argument_name2=very_long_value_for_the_argument,
|
|
**kwargs,
|
|
)
|
|
)
|
|
|
|
|
|
def __await__():
|
|
return (yield)
|
|
```
|
|
|
|
|