Consistently add trailing comma on typed parameters (#4164)
Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
parent
1607e9ab20
commit
8bf04549ff
@ -14,6 +14,8 @@
|
|||||||
|
|
||||||
<!-- Changes that affect Black's preview style -->
|
<!-- Changes that affect Black's preview style -->
|
||||||
|
|
||||||
|
- Consistently add trailing comma on typed parameters (#4164)
|
||||||
|
|
||||||
### Configuration
|
### Configuration
|
||||||
|
|
||||||
<!-- Changes to how Black can be configured -->
|
<!-- Changes to how Black can be configured -->
|
||||||
|
@ -26,6 +26,8 @@ Currently, the following features are included in the preview style:
|
|||||||
brackets ([see below](labels/hug-parens))
|
brackets ([see below](labels/hug-parens))
|
||||||
- `no_normalize_fmt_skip_whitespace`: whitespace before `# fmt: skip` comments is no
|
- `no_normalize_fmt_skip_whitespace`: whitespace before `# fmt: skip` comments is no
|
||||||
longer normalized
|
longer normalized
|
||||||
|
- `typed_params_trailing_comma`: consistently add trailing commas to typed function
|
||||||
|
parameters
|
||||||
|
|
||||||
(labels/unstable-features)=
|
(labels/unstable-features)=
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ def parse_pyproject_toml(path_config: str) -> Dict[str, Any]:
|
|||||||
|
|
||||||
|
|
||||||
def infer_target_version(
|
def infer_target_version(
|
||||||
pyproject_toml: Dict[str, Any]
|
pyproject_toml: Dict[str, Any],
|
||||||
) -> Optional[List[TargetVersion]]:
|
) -> Optional[List[TargetVersion]]:
|
||||||
"""Infer Black's target version from the project metadata in pyproject.toml.
|
"""Infer Black's target version from the project metadata in pyproject.toml.
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
is_one_sequence_between,
|
is_one_sequence_between,
|
||||||
is_one_tuple,
|
is_one_tuple,
|
||||||
is_parent_function_or_class,
|
is_parent_function_or_class,
|
||||||
|
is_part_of_annotation,
|
||||||
is_rpar_token,
|
is_rpar_token,
|
||||||
is_stub_body,
|
is_stub_body,
|
||||||
is_stub_suite,
|
is_stub_suite,
|
||||||
@ -1041,7 +1042,14 @@ def bracket_split_build_line(
|
|||||||
no_commas = (
|
no_commas = (
|
||||||
original.is_def
|
original.is_def
|
||||||
and opening_bracket.value == "("
|
and opening_bracket.value == "("
|
||||||
and not any(leaf.type == token.COMMA for leaf in leaves)
|
and not any(
|
||||||
|
leaf.type == token.COMMA
|
||||||
|
and (
|
||||||
|
Preview.typed_params_trailing_comma not in original.mode
|
||||||
|
or not is_part_of_annotation(leaf)
|
||||||
|
)
|
||||||
|
for leaf in leaves
|
||||||
|
)
|
||||||
# In particular, don't add one within a parenthesized return annotation.
|
# In particular, don't add one within a parenthesized return annotation.
|
||||||
# Unfortunately the indicator we're in a return annotation (RARROW) may
|
# Unfortunately the indicator we're in a return annotation (RARROW) may
|
||||||
# be defined directly in the parent node, the parent of the parent ...
|
# be defined directly in the parent node, the parent of the parent ...
|
||||||
|
@ -176,6 +176,7 @@ class Preview(Enum):
|
|||||||
no_normalize_fmt_skip_whitespace = auto()
|
no_normalize_fmt_skip_whitespace = auto()
|
||||||
wrap_long_dict_values_in_parens = auto()
|
wrap_long_dict_values_in_parens = auto()
|
||||||
multiline_string_handling = auto()
|
multiline_string_handling = auto()
|
||||||
|
typed_params_trailing_comma = auto()
|
||||||
|
|
||||||
|
|
||||||
UNSTABLE_FEATURES: Set[Preview] = {
|
UNSTABLE_FEATURES: Set[Preview] = {
|
||||||
|
@ -50,7 +50,7 @@ def lam_sub(grammar: Grammar, node: RawNode) -> NL:
|
|||||||
|
|
||||||
|
|
||||||
def stack_copy(
|
def stack_copy(
|
||||||
stack: List[Tuple[DFAS, int, RawNode]]
|
stack: List[Tuple[DFAS, int, RawNode]],
|
||||||
) -> List[Tuple[DFAS, int, RawNode]]:
|
) -> List[Tuple[DFAS, int, RawNode]]:
|
||||||
"""Nodeless stack copy."""
|
"""Nodeless stack copy."""
|
||||||
return [(dfa, label, DUMMY_NODE) for dfa, label, _ in stack]
|
return [(dfa, label, DUMMY_NODE) for dfa, label, _ in stack]
|
||||||
|
24
tests/data/cases/typed_params_trailing_comma.py
Normal file
24
tests/data/cases/typed_params_trailing_comma.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# flags: --preview
|
||||||
|
def long_function_name_goes_here(
|
||||||
|
x: Callable[List[int]]
|
||||||
|
) -> Union[List[int], float, str, bytes, Tuple[int]]:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def long_function_name_goes_here(
|
||||||
|
x: Callable[[str, Any], int]
|
||||||
|
) -> Union[List[int], float, str, bytes, Tuple[int]]:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# output
|
||||||
|
def long_function_name_goes_here(
|
||||||
|
x: Callable[List[int]],
|
||||||
|
) -> Union[List[int], float, str, bytes, Tuple[int]]:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def long_function_name_goes_here(
|
||||||
|
x: Callable[[str, Any], int],
|
||||||
|
) -> Union[List[int], float, str, bytes, Tuple[int]]:
|
||||||
|
pass
|
Loading…
Reference in New Issue
Block a user