Open Helveg opened 3 months ago
I did some digging and it seems that code sorting (sort_reexports
and the undocumented and quasi-untested sort comments # isort: list
, # isort: unique-list
, etc) is the only feature that uses isort.literal.assigments
. This function relies on the Python stdlib pprint
formatting, and completely ignores the config
, except for line_length
:
class ISortPrettyPrinter(PrettyPrinter):
"""an isort customized pretty printer for sorted literals"""
def __init__(self, config: Config):
super().__init__(width=config.line_length, compact=True)
There is no regard for the config.multi_line_output
, config.include_trailing_comma
, config.split_on_trailing_comma
, and likely many more that I am not aware of as a first-time contributor.
I believe fixing this would require us to write our own formatting logic, since pprint
does not support any of the configurable formatting features isort
needs.
I would need the input of the developers here, since there are no tests to form a de facto specification, but I believe that code sorting should follow the Config
formatting options, and the pprint
logic should be dropped and an isort algorithm like the ones in isort.output
should be used or custom written for it.
@timothycrosley Hi, sorry for the direct ping, I'm sure you're very busy! Would you have a moment to confirm my suspicions that the code_sorting
logic is insufficient, and preapprove my attempts to rewrite it? If I have your green light I can get started on it.
I already have a PR open for fixing similar sort_reexport
problems that would require your attention: https://github.com/PyCQA/isort/pull/2283
Hope to hear from you, and have a good day
Problem
Attempting to sort a multiline
__all__
attribute that is longer than the line limit withisort . --sort-reexports --profile=black
wraps the lines in a non-black compatible way:Before
After
Env
PS: Very willing to fix this myself and to PR it if someone can triage this and point me in the right direction.