diff --git a/CHANGELOG.md b/CHANGELOG.md index 3daffcc6b..3278b2d58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ # All notable changes to this project will be documented in this file. # This project adheres to [Semantic Versioning](http://semver.org/). +## '[0.41.0] 'UNRELEASED +### 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 - The verification module has been removed. NOTE: this changes the public APIs 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 c2200a95e..9af05c4df 100644 --- a/yapftests/reformatter_basic_test.py +++ b/yapftests/reformatter_basic_test.py @@ -2277,6 +2277,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) @@ -2309,6 +2311,10 @@ def testSplittingArgumentsTerminatedByComma(self): r = f0( 1, ) + + r = f0( + a=1, + ) """) try: