Skip to content

Commit 8f382fa

Browse files
committed
Preserve source order of class methods in output
1 parent ce578d3 commit 8f382fa

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

great_docs/core.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,7 +1132,8 @@ def _categorize_api_objects(self, package_name: str, exports: list) -> dict:
11321132
# Get public methods (exclude private/magic methods)
11331133
# We need to handle each member individually to catch cyclic aliases
11341134
# AND validate each method with quartodoc to catch type hint issues
1135-
method_names = []
1135+
# Collect (method_name, lineno) tuples to preserve source order
1136+
method_entries = []
11361137
skipped_methods = []
11371138
try:
11381139
for member_name, member in obj.members.items():
@@ -1141,6 +1142,8 @@ def _categorize_api_objects(self, package_name: str, exports: list) -> dict:
11411142
try:
11421143
# Accessing member.kind can trigger alias resolution
11431144
if member.kind.value in ("function", "method"):
1145+
# Get line number for source ordering
1146+
lineno = getattr(member, "lineno", float("inf"))
11441147
# Validate with quartodoc if available
11451148
if quartodoc_get_object is not None:
11461149
try:
@@ -1150,12 +1153,12 @@ def _categorize_api_objects(self, package_name: str, exports: list) -> dict:
11501153
# Try to access properties that might fail
11511154
_ = qd_obj.members
11521155
_ = qd_obj.kind
1153-
method_names.append(member_name)
1156+
method_entries.append((member_name, lineno))
11541157
except Exception:
11551158
# Method can't be documented by quartodoc
11561159
skipped_methods.append(member_name)
11571160
else:
1158-
method_names.append(member_name)
1161+
method_entries.append((member_name, lineno))
11591162
except (
11601163
griffe.CyclicAliasError,
11611164
griffe.AliasResolutionError,
@@ -1169,6 +1172,10 @@ def _categorize_api_objects(self, package_name: str, exports: list) -> dict:
11691172
# If we can't even iterate members, class has issues
11701173
skipped_methods.append("<members>")
11711174

1175+
# Sort by line number to preserve source file order
1176+
method_entries.sort(key=lambda x: x[1])
1177+
method_names = [entry[0] for entry in method_entries]
1178+
11721179
if skipped_methods:
11731180
print(
11741181
f" {name}: class with {len(method_names)} public methods "
@@ -1179,7 +1186,7 @@ def _categorize_api_objects(self, package_name: str, exports: list) -> dict:
11791186
print(f" {name}: class with {len(method_names)} public methods")
11801187

11811188
categories["class_methods"][name] = len(method_names)
1182-
categories["class_method_names"][name] = sorted(method_names)
1189+
categories["class_method_names"][name] = method_names
11831190
elif obj.kind.value == "function":
11841191
categories["functions"].append(name)
11851192
else:

0 commit comments

Comments
 (0)