From c88969ef5223e9a7fc0efd287606cc9e8b73649a Mon Sep 17 00:00:00 2001 From: Qrytics Pilot Date: Tue, 10 Nov 2026 09:32:20 -0600 Subject: [PATCH] Fix crash when boolean flags are set via pyproject.toml Setting a boolean flag such as fix, dry, quiet, count or verbose under [tool.deadcode] crashed with AttributeError because the pyproject merge path unconditionally called list.extend on the parsed value. Boolean flags are now assigned instead of extended. --- deadcode/actions/parse_arguments.py | 3 +++ tests/cli_args/test_parsing.py | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/deadcode/actions/parse_arguments.py b/deadcode/actions/parse_arguments.py index 9524048..0a8a91b 100644 --- a/deadcode/actions/parse_arguments.py +++ b/deadcode/actions/parse_arguments.py @@ -225,6 +225,9 @@ def parse_arguments(args: list[str] | None) -> Args: for key, item in parse_pyproject_toml().items(): if key not in parsed_args: continue + if isinstance(parsed_args[key], bool): + parsed_args[key] = bool(item) + continue if isinstance(item, str) and isinstance(parsed_args[key], list): item = [item] parsed_args[key].extend(item) diff --git a/tests/cli_args/test_parsing.py b/tests/cli_args/test_parsing.py index 930f272..8f5b72f 100644 --- a/tests/cli_args/test_parsing.py +++ b/tests/cli_args/test_parsing.py @@ -238,6 +238,19 @@ def test_sys_argv_used_when_no_arguments_provided(monkeypatch: pytest.MonkeyPatc assert args.count is True +def test_boolean_pyproject_setting_enables_flag(tmp_path, monkeypatch: pytest.MonkeyPatch): + # Having + (tmp_path / 'pyproject.toml').write_text('[tool.deadcode]\nfix = true\ncount = true\n') + monkeypatch.chdir(tmp_path) + + # When + args = parse_arguments(['foo.py']) + + # Then + assert args.fix is True + assert args.count is True + + def test_unknown_pyproject_setting_is_ignored(tmp_path, monkeypatch: pytest.MonkeyPatch): # Having (tmp_path / 'pyproject.toml').write_text('[tool.deadcode]\nunknown_setting = true\n')