--- 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 [^#\t\n]+? ) (? to match # a trailing space which is why we need the silliness below (? (?:\#[^\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 - [^#\t\n]+? - ) - (? to match - # a trailing space which is why we need the silliness below - (? - (?:\#[^\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 [^#\t\n]+? ) (? to match # a trailing space which is why we need the silliness below (? (?:\#[^\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) ```