black icon indicating copy to clipboard operation
black copied to clipboard

Improved string processing: add parentheses around implicit string concatenations to increase readability in certain contexts

Open yilei opened this issue 3 years ago • 1 comments

Describe the style change

When splitting long string literals in Black's --preview Improved string processing style, add parentheses around implicit string concatenations to increase readability in certain contexts.

"certain contexts" include:

  • Function parameters
  • Sequence elements

Examples of unformatted code

                    flash(
                        'None of the email addresses or domains you entered are valid',
                        'error',
                    )
some_list = [
    ' lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua Ut enim ad minim',
    ' veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo',
]

Examples in the current Black style

                    flash(
                        'None of the email addresses or domains you entered'
                        ' are valid',
                        'error',
                    )
some_list = [
    " lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor"
    " incididunt ut labore et dolore magna aliqua Ut enim ad minim",
    " veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo",
]

Desired style

                    flash(
                        (
                            'None of the email addresses or domains you entered'
                            ' are valid'
                        ),
                        'error',
                    )
some_list = [
    (
        " lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor"
        " incididunt ut labore et dolore magna aliqua Ut enim ad minim"
    ),
    " veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo",
]

Additional context

This issue was raised originally in https://github.com/psf/black/issues/2188#issuecomment-1009041704. Per @JelleZijlstra, I'm starting a new issue separately here to track the work.

The "certain contexts" list isn't exhaustive. I plan to read the code and play around with an implementation, then report back here.

yilei avatar Jul 06 '22 22:07 yilei

Alternative solution for the issue here, as suggested by @haridsv, is an indentation:

                    flash(
                        'None of the email addresses or domains you entered'
                            ' are valid',
                        'error',
                    )
some_list = [
    " lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor"
        " incididunt ut labore et dolore magna aliqua Ut enim ad minim",
    " veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo",
]

m-aciek avatar Jul 12 '22 09:07 m-aciek