@@ -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