diff --git a/CHANGELOG.md b/CHANGELOG.md index 14f671fb7..d8127cf62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,9 @@ ### Changes - Remove dependency on importlib-metadata - Remove dependency on tomli when using >= py311 - +### Fixed +- Fix SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED for one-item named argument lists + by taking precedence over SPLIT_BEFORE_NAMED_ASSIGNS. ## [0.40.2] 2023-09-22 ### Changes diff --git a/yapf/yapflib/format_decision_state.py b/yapf/yapflib/format_decision_state.py index bc7f977a7..ce743139a 100644 --- a/yapf/yapflib/format_decision_state.py +++ b/yapf/yapflib/format_decision_state.py @@ -373,6 +373,16 @@ def SurroundedByParens(token): ########################################################################### # Argument List Splitting + + if style.Get('SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED'): + # Split before arguments in a function call or definition if the + # arguments are terminated by a comma. + opening = _GetOpeningBracket(current) + if opening and opening.previous_token and opening.previous_token.is_name: + if previous.value in '(,': + if opening.matching_bracket.previous_token.value == ',': + return True + if (style.Get('SPLIT_BEFORE_NAMED_ASSIGNS') and not current.is_comment and subtypes.DEFAULT_OR_NAMED_ASSIGN_ARG_LIST in current.subtypes): if (previous.value not in {'=', ':', '*', '**'} and @@ -409,15 +419,6 @@ def SurroundedByParens(token): self._ArgumentListHasDictionaryEntry(current)): return True - if style.Get('SPLIT_ARGUMENTS_WHEN_COMMA_TERMINATED'): - # Split before arguments in a function call or definition if the - # arguments are terminated by a comma. - opening = _GetOpeningBracket(current) - if opening and opening.previous_token and opening.previous_token.is_name: - if previous.value in '(,': - if opening.matching_bracket.previous_token.value == ',': - return True - if ((current.is_name or current.value in {'*', '**'}) and previous.value == ','): # If we have a function call within an argument list and it won't fit on diff --git a/yapftests/reformatter_basic_test.py b/yapftests/reformatter_basic_test.py index ebc2cd3ee..24f34a694 100644 --- a/yapftests/reformatter_basic_test.py +++ b/yapftests/reformatter_basic_test.py @@ -2274,6 +2274,8 @@ def testSplittingArgumentsTerminatedByComma(self): r =f0 (1, 2,3,) r =f0 (1,) + + r =f0 (a=1,) """) # noqa expected_formatted_code = textwrap.dedent("""\ function_name(argument_name_1=1, argument_name_2=2, argument_name_3=3) @@ -2306,6 +2308,10 @@ def testSplittingArgumentsTerminatedByComma(self): r = f0( 1, ) + + r = f0( + a=1, + ) """) try: