From e264241adc7dd372581d2f1e51a835b61b8847b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Noord?= <13665637+DanielNoord@users.noreply.github.com> Date: Sat, 18 Jan 2025 12:38:26 +0100 Subject: [PATCH 1/5] Ensure that split_on_trailing_comma works with `as` imports --- isort/output.py | 2 +- tests/unit/test_isort.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/isort/output.py b/isort/output.py index 3cb3c08b0..9011df6c6 100644 --- a/isort/output.py +++ b/isort/output.py @@ -509,7 +509,7 @@ def _with_from_imports( ): do_multiline_reformat = True - if config.split_on_trailing_comma and module in parsed.trailing_commas: + if import_statement and config.split_on_trailing_comma and module in parsed.trailing_commas: import_statement = wrap.import_statement( import_start=import_start, from_imports=from_import_section, diff --git a/tests/unit/test_isort.py b/tests/unit/test_isort.py index 29834bd32..8f68d3100 100644 --- a/tests/unit/test_isort.py +++ b/tests/unit/test_isort.py @@ -5576,6 +5576,17 @@ def test_split_on_trailing_comma() -> None: assert output == expected_output +def test_split_on_trailing_comma_wih_as() -> None: + test_input = "from lib import (a as b,)" + expected_output = """from lib import a as b +""" + + output = isort.code(test_input, split_on_trailing_comma=True) + assert output == expected_output + + output = isort.code(expected_output, split_on_trailing_comma=True) + assert output == expected_output + def test_infinite_loop_in_unmatched_parenthesis() -> None: test_input = "from os import (" From 311061895dff30a231035f60240fb3c9f96fd6a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Noord?= <13665637+DanielNoord@users.noreply.github.com> Date: Sat, 18 Jan 2025 12:41:40 +0100 Subject: [PATCH 2/5] Also fix styling issues --- isort/output.py | 6 +++++- tests/unit/profiles/test_black.py | 4 ++-- tests/unit/test_isort.py | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/isort/output.py b/isort/output.py index 9011df6c6..792c0ca26 100644 --- a/isort/output.py +++ b/isort/output.py @@ -509,7 +509,11 @@ def _with_from_imports( ): do_multiline_reformat = True - if import_statement and config.split_on_trailing_comma and module in parsed.trailing_commas: + if ( + import_statement + and config.split_on_trailing_comma + and module in parsed.trailing_commas + ): import_statement = wrap.import_statement( import_start=import_start, from_imports=from_import_section, diff --git a/tests/unit/profiles/test_black.py b/tests/unit/profiles/test_black.py index 8f7501005..209d83d82 100644 --- a/tests/unit/profiles/test_black.py +++ b/tests/unit/profiles/test_black.py @@ -447,8 +447,8 @@ def sub(a: np.ndarray, b: np.ndarray) -> np.ndarray: ... def test_black_trailing_comma(): black_test( - "from x import (a, b, c,)\n", - """\ + "from x import (a, b, c,)\n", + """\ from x import ( a, b, diff --git a/tests/unit/test_isort.py b/tests/unit/test_isort.py index 8f68d3100..8a256fbad 100644 --- a/tests/unit/test_isort.py +++ b/tests/unit/test_isort.py @@ -5587,6 +5587,7 @@ def test_split_on_trailing_comma_wih_as() -> None: output = isort.code(expected_output, split_on_trailing_comma=True) assert output == expected_output + def test_infinite_loop_in_unmatched_parenthesis() -> None: test_input = "from os import (" From a5d83cfadd73757c0753d233ca032685dc65b75b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Noord?= <13665637+DanielNoord@users.noreply.github.com> Date: Sat, 18 Jan 2025 12:43:35 +0100 Subject: [PATCH 3/5] Ignore DeepSource --- isort/output.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/isort/output.py b/isort/output.py index 792c0ca26..ba9f119cc 100644 --- a/isort/output.py +++ b/isort/output.py @@ -239,7 +239,9 @@ def sorted_imports( return _output_as_string(formatted_output, parsed.line_separator) - +# Ignore DeepSource cyclomatic complexity check for this function. It was +# already complex when this check was enabled. +# skipcq: PY-R1000 def _with_from_imports( parsed: parse.ParsedContent, config: Config, From fa2abe9c53fc472df6a85b7270fd3ebcdd11ad78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Noord?= <13665637+DanielNoord@users.noreply.github.com> Date: Sat, 18 Jan 2025 12:45:07 +0100 Subject: [PATCH 4/5] Add correct ignore --- isort/output.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/isort/output.py b/isort/output.py index ba9f119cc..ade4ad293 100644 --- a/isort/output.py +++ b/isort/output.py @@ -239,8 +239,9 @@ def sorted_imports( return _output_as_string(formatted_output, parsed.line_separator) + # Ignore DeepSource cyclomatic complexity check for this function. It was -# already complex when this check was enabled. +# already complex when this check was enabled. # skipcq: PY-R1000 def _with_from_imports( parsed: parse.ParsedContent, From b96c0eabbcbe38aed9265383c54c44f775418985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20van=20Noord?= <13665637+DanielNoord@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:52:20 +0100 Subject: [PATCH 5/5] Add `xfail` for `django` --- tests/integration/test_projects_using_isort.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/integration/test_projects_using_isort.py b/tests/integration/test_projects_using_isort.py index 515fc0841..61f66e7e7 100644 --- a/tests/integration/test_projects_using_isort.py +++ b/tests/integration/test_projects_using_isort.py @@ -13,6 +13,8 @@ from subprocess import check_call from typing import Generator, Sequence +import pytest + from isort.main import main @@ -26,6 +28,10 @@ def run_isort(arguments: Generator[str, None, None] | Sequence[str]): main(["--check-only", "--diff", *arguments]) +@pytest.mark.xfail( + reason="Project is incorrectly formatted after PR #2236, should be fixed " + "after a release and the project formatting again." +) def test_django(tmpdir): git_clone("https://github.com/django/django.git", tmpdir) run_isort(