diff --git a/pylsp/_utils.py b/pylsp/_utils.py index 0ce0e8cb..743f9912 100644 --- a/pylsp/_utils.py +++ b/pylsp/_utils.py @@ -187,7 +187,7 @@ def _merge_dicts_(a, b): if isinstance(a[key], dict) and isinstance(b[key], dict): yield (key, dict(_merge_dicts_(a[key], b[key]))) elif isinstance(a[key], list) and isinstance(b[key], list): - yield (key, list(set(a[key] + b[key]))) + yield (key, list(dict.fromkeys(a[key] + b[key]))) elif b[key] is not None: yield (key, b[key]) else: diff --git a/test/test_utils.py b/test/test_utils.py index 5d58dc55..0cfc213f 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -222,6 +222,17 @@ def test_merge_dicts() -> None: ) == {"a": False, "b": {"x": 123, "y": [], "z": 987}} +def test_merge_dicts_preserves_list_order() -> None: + assert _utils.merge_dicts({"items": [3, 2]}, {"items": [1, 3]}) == { + "items": [3, 2, 1] + } + + overrides = ["--python-executable", "/tmp/venv/bin/python", True] + assert _utils.merge_dicts({"overrides": []}, {"overrides": overrides}) == { + "overrides": overrides + } + + def test_clip_column() -> None: assert _utils.clip_column(0, [], 0) == 0 assert _utils.clip_column(2, ["123"], 0) == 2