diff --git a/CHANGELOG.md b/CHANGELOG.md
index d8a46c10..ad7209c1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,14 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+## [1.2.1](https://github.com/mkdocstrings/python/releases/tag/1.2.1) - 2023-07-20
+
+[Compare with 1.2.0](https://github.com/mkdocstrings/python/compare/1.2.0...1.2.1)
+
+### Bug Fixes
+
+- Fix members ordering when members are specified with a boolean ([c69f9c3](https://github.com/mkdocstrings/python/commit/c69f9c3b3ddde915619eded6620f7ddada977b00) by Timothée Mazzucotelli). [Issue #89](https://github.com/mkdocstrings/python/issues/89)
+
## [1.2.0](https://github.com/mkdocstrings/python/releases/tag/1.2.0) - 2023-07-14
[Compare with 1.1.2](https://github.com/mkdocstrings/python/compare/1.1.2...1.2.0)
diff --git a/src/mkdocstrings_handlers/python/rendering.py b/src/mkdocstrings_handlers/python/rendering.py
index 81538212..ce6cf9cb 100644
--- a/src/mkdocstrings_handlers/python/rendering.py
+++ b/src/mkdocstrings_handlers/python/rendering.py
@@ -109,7 +109,7 @@ def do_format_signature(
def do_order_members(
members: Sequence[Object | Alias],
order: Order,
- members_list: list[str] | None,
+ members_list: bool | list[str] | None,
) -> Sequence[Object | Alias]:
"""Order members given an ordering method.
@@ -121,7 +121,7 @@ def do_order_members(
Returns:
The same members, ordered.
"""
- if members_list:
+ if isinstance(members_list, list) and members_list:
sorted_members = []
members_dict = {member.name: member for member in members}
for name in members_list:
diff --git a/tests/test_rendering.py b/tests/test_rendering.py
index 5d35c121..b7b7af82 100644
--- a/tests/test_rendering.py
+++ b/tests/test_rendering.py
@@ -131,3 +131,35 @@ def main(self): ...
filtered = rendering.do_filter_objects(objects, members_list=members, inherited_members=inherited_members)
names = {obj.name for obj in filtered}
assert names == expected_names
+
+
+@pytest.mark.parametrize(
+ ("order", "members_list", "expected_names"),
+ [
+ (rendering.Order.alphabetical, None, ["a", "b", "c"]),
+ (rendering.Order.source, None, ["c", "b", "a"]),
+ (rendering.Order.alphabetical, ["c", "b"], ["c", "b"]),
+ (rendering.Order.source, ["a", "c"], ["a", "c"]),
+ (rendering.Order.alphabetical, [], ["a", "b", "c"]),
+ (rendering.Order.source, [], ["c", "b", "a"]),
+ (rendering.Order.alphabetical, True, ["a", "b", "c"]),
+ (rendering.Order.source, False, ["c", "b", "a"]),
+ ],
+)
+def test_ordering_members(order: rendering.Order, members_list: list[str | None], expected_names: list[str]) -> None:
+ """Assert the objects are correctly ordered.
+
+ Parameters:
+ order: The order to use (alphabetical or source).
+ members_list: The user specified members list.
+ expected_names: The expected ordered list of object names.
+ """
+
+ class Obj:
+ def __init__(self, name: str, lineno: int | None = None) -> None:
+ self.name = name
+ self.lineno = lineno
+
+ members = [Obj("a", 10), Obj("b", 9), Obj("c", 8)]
+ ordered = rendering.do_order_members(members, order, members_list) # type: ignore[arg-type]
+ assert [obj.name for obj in ordered] == expected_names