Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

short imports are not squeezed to one line #1782

Closed
radkujawa opened this issue Oct 23, 2020 · 3 comments
Closed

short imports are not squeezed to one line #1782

radkujawa opened this issue Oct 23, 2020 · 3 comments
Labels
F: trailing comma Full of magic R: not a bug This is deliberate behavior of Black.

Comments

@radkujawa
Copy link

To Reproduce Steps to reproduce the behavior:

  1. Take this file:
from a import (
    b,
    c,
)
  1. run black on it
  2. file does not change

Expected behavior I would expect this file to be formatted in the following way:

from a import b, c

Environment

  • Version: master, 20.8b1
  • OS and Python version: python 3.7.9, ubuntu 20
  • black config file (pyproject.toml):
[tool.black]
line-length = 120
target-version = ['py37']
skip-string-normalization = true

Does this bug also happen on master? yes

Remark
the following (without trailing comma after c) is formatted correclty:

from a import (
    b,
    c
)
@radkujawa radkujawa added the T: bug Something isn't working label Oct 23, 2020
@hugovk
Copy link
Contributor

hugovk commented Oct 23, 2020

This works as designed, it's called the "magic trailing comma":

@ichard26 ichard26 added R: not a bug This is deliberate behavior of Black. F: trailing comma Full of magic and removed T: bug Something isn't working labels Oct 23, 2020
@ichard26
Copy link
Collaborator

Black used to remove the trailing comma if the expression fits in a single line, but this was changed by #826 and #1288. Now a trailing comma tells Black to always explode the expression. This change was made mostly for the cases where you know a collection or whatever will grow in the future. Having it always exploded as one element per line reduces diff noise when adding elements. Before the "magic trailing comma" feature, you couldn't anticipate a collection's growth reliably since collections that fitted in one line were ruthlessly collapsed regardless of your intentions. One of Black's goals is reducing diff noise, so this was a good pragmatic change.

So no, this is not a bug, but an intended feature. The reason why you're filing this issue is probably since we say the following in the (outdated) style documentation:

Unnecessary trailing commas are removed if an expression fits in one line. This makes it 1% more likely that your line won't exceed the allotted line length limit. Moreover, in this scenario, if you added another argument to your call, you'd probably fit it in the same line anyway. That doesn't make diffs any larger.

We missed that this paragraph became incorrect when the "magic trailing comma" feature was introduced. It was eventually fixed in commit 6b935a3, but that was after the stable documentation was released alongside Black 20.8b1.

Anyway, here's the documentation on the "magic trailing comma". Hopefully that helps and sorry for the possible confusion.

@radkujawa
Copy link
Author

thanks for quick response!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
F: trailing comma Full of magic R: not a bug This is deliberate behavior of Black.
Projects
None yet
Development

No branches or pull requests

3 participants