Skip to content

Commit

Permalink
Avoid trailing comma for single-argument with positional separator (#…
Browse files Browse the repository at this point in the history
…9076)

## Summary

In #8921, we changed our parameter
formatting behavior to add a trailing comma whenever a single-argument
function breaks. This introduced a deviation in the case that a function
contains a single argument, but _also_ includes a positional-only or
keyword-only separator.

Closes #9074.
  • Loading branch information
charliermarsh authored Dec 9, 2023
1 parent 6c2613b commit febc69a
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -410,3 +410,13 @@ def default_arg_comments2(#
#
):
print(x)

def function_with_one_argument_and_a_positional_separator(
argument: str, /
) -> ReallyReallyReallyReallyReallyReallyReallyReallyLongName:
pass

def function_with_one_argument_and_a_keyword_separator(
*, argument: str
) -> ReallyReallyReallyReallyReallyReallyReallyReallyLongName:
pass
2 changes: 1 addition & 1 deletion crates/ruff_python_formatter/src/other/parameters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ impl FormatNodeRule<Parameters> for FormatParameters {
let mut f = WithNodeLevel::new(NodeLevel::ParenthesizedExpression, f);
// No parameters, format any dangling comments between `()`
write!(f, [empty_parenthesized("(", dangling, ")")])
} else if num_parameters == 1 {
} else if num_parameters == 1 && posonlyargs.is_empty() && kwonlyargs.is_empty() {
// If we have a single argument, avoid the inner group, to ensure that we insert a
// trailing comma if the outer group breaks.
let mut f = WithNodeLevel::new(NodeLevel::ParenthesizedExpression, f);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,16 @@ def default_arg_comments2(#
#
):
print(x)

def function_with_one_argument_and_a_positional_separator(
argument: str, /
) -> ReallyReallyReallyReallyReallyReallyReallyReallyLongName:
pass

def function_with_one_argument_and_a_keyword_separator(
*, argument: str
) -> ReallyReallyReallyReallyReallyReallyReallyReallyLongName:
pass
```

## Output
Expand Down Expand Up @@ -993,6 +1003,18 @@ def default_arg_comments2( #
#
):
print(x)


def function_with_one_argument_and_a_positional_separator(
argument: str, /
) -> ReallyReallyReallyReallyReallyReallyReallyReallyLongName:
pass


def function_with_one_argument_and_a_keyword_separator(
*, argument: str
) -> ReallyReallyReallyReallyReallyReallyReallyReallyLongName:
pass
```


Expand Down

0 comments on commit febc69a

Please sign in to comment.