diff --git a/CHANGES.md b/CHANGES.md index a83a4df0023..2cd3f133f6f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,9 @@ +Fix `ASTSafetyError` crash when return type contains one element and comments spanning +multiple lines. (#4444) + ### Preview style diff --git a/src/black/linegen.py b/src/black/linegen.py index 46945ca2a14..cba92a43dc5 100644 --- a/src/black/linegen.py +++ b/src/black/linegen.py @@ -1116,6 +1116,14 @@ def bracket_split_build_line( ) # Don't add one inside parenthesized return annotations and get_annotation_type(leaves[0]) != "return" + # Don't add comment for single element return type with comments + and not ( + sum(leaf.type is not STANDALONE_COMMENT for leaf in leaves) < 2 + and any( + leaf.parent is not None and leaf.parent.type != syms.parameters + for leaf in leaves + ) + ) # Don't add one inside PEP 604 unions and not ( leaves[0].parent diff --git a/tests/data/cases/single_element_parametized_return_type.py b/tests/data/cases/single_element_parametized_return_type.py new file mode 100644 index 00000000000..95d80f4fa64 --- /dev/null +++ b/tests/data/cases/single_element_parametized_return_type.py @@ -0,0 +1,50 @@ +def MyClass(): + pass + + +def create_my_nested_class() -> ( + # test asnkdasldnsalkdnaskldnaklsdnsakln + int +): + class MyNestedClass(MyClass): + pass + return MyNestedClass + + +def create_my_nested_class() -> ( + # test asnkdasldnsalkdnaskldnaklsdnsakln + # test asnkdasldnsalkdnaskldnaklsdnsakln + int + # test asnkdasldnsalkdnaskldnaklsdnsakln +): + class MyNestedClass(MyClass): + pass + return MyNestedClass + +# output + + +def MyClass(): + pass + + +def create_my_nested_class() -> ( + # test asnkdasldnsalkdnaskldnaklsdnsakln + int +): + class MyNestedClass(MyClass): + pass + + return MyNestedClass + + +def create_my_nested_class() -> ( + # test asnkdasldnsalkdnaskldnaklsdnsakln + # test asnkdasldnsalkdnaskldnaklsdnsakln + int + # test asnkdasldnsalkdnaskldnaklsdnsakln +): + class MyNestedClass(MyClass): + pass + + return MyNestedClass