--- 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 - -from third_party import X, Y, Z +NOT_YET_IMPLEMENTED_StmtImport +NOT_YET_IMPLEMENTED_StmtImport -from library import some_connection, some_decorator +NOT_YET_IMPLEMENTED_StmtImportFrom -f"trigger 3.6 mode" +NOT_YET_IMPLEMENTED_StmtImportFrom +NOT_YET_IMPLEMENTED_ExprJoinedStr def func_no_args(): @@ -14,7 +13,7 @@ b c if True: - raise RuntimeError + NOT_YET_IMPLEMENTED_StmtRaise if False: ... for i in range(10): @@ -41,12 +40,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 = attr.ib(default=attr.Factory(lambda x: True)) + NOT_YET_IMPLEMENTED_StmtAssert def spaces_types( @@ -56,7 +65,7 @@ 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"", ): @@ -64,19 +73,16 @@ def spaces2(result=_core.Value(None)): - assert fut is self._read_fut, (fut, self._read_fut) + 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 = 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(): @@ -87,7 +93,7 @@ ast_args.kw_defaults, parameters, implicit_default=True, - ) + ), ) typedargslist.extend( gen_annotated_params( @@ -96,7 +102,7 @@ parameters, implicit_default=True, # trailing standalone comment - ) + ), ) _type_comment_re = re.compile( r""" @@ -118,7 +124,8 @@ ) $ """, - re.MULTILINE | re.VERBOSE, + re.MULTILINE + | re.VERBOSE, ) @@ -135,14 +142,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 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=NOT_IMPLEMENTED_true if NOT_IMPLEMENTED_cond else NOT_IMPLEMENTED_false, h="", i=r"", ): offset = attr.ib(default=attr.Factory(lambda x: True)) 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=_core.Value(None)): 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() 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 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) ```