@@ -108,7 +108,7 @@ private String generateDocument(String module, CommandLine commander) {
108108 sb .append ("```shell\n $ " );
109109 sb .append (this .commander .getCommandName ()).append (" " );
110110 sb .append (module ).append (" " ).append (subK ).append (" options" ).append ("\n ```\n \n " );
111- List <ArgSpec > argSpecs = subV .getCommandSpec ().args ();
111+ List <ArgSpec > argSpecs = getSortedArgs ( subV .getCommandSpec ().args () );
112112 if (argSpecs .size () > 0 ) {
113113 sb .append ("|Flag|Description|Default|\n " );
114114 sb .append ("|---|---|---|\n " );
@@ -128,7 +128,7 @@ private String generateDocument(String module, CommandLine commander) {
128128 sb .append (" options" ).append ("\n ```" ).append ("\n \n " );
129129 sb .append ("|Flag|Description|Default|\n " );
130130 sb .append ("|---|---|---|\n " );
131- List <ArgSpec > argSpecs = commander .getCommandSpec ().args ();
131+ List <ArgSpec > argSpecs = getSortedArgs ( commander .getCommandSpec ().args () );
132132 argSpecs .forEach (option -> {
133133 if (option .hidden () || !(option instanceof OptionSpec )) {
134134 return ;
@@ -144,6 +144,27 @@ private String generateDocument(String module, CommandLine commander) {
144144 return sb .toString ();
145145 }
146146
147+ /**
148+ * Returns a sorted copy of the argument specifications list, ordered by the
149+ * OptionSpec order attribute for option specs. Non-option arguments
150+ * retain their relative ordering.
151+ *
152+ * @param args the list of argument specifications to sort
153+ * @return a new sorted list
154+ */
155+ private List <ArgSpec > getSortedArgs (List <ArgSpec > args ) {
156+ List <ArgSpec > sorted = new ArrayList <>(args );
157+ sorted .sort ((a , b ) -> {
158+ if (a instanceof OptionSpec && b instanceof OptionSpec ) {
159+ OptionSpec optA = (OptionSpec ) a ;
160+ OptionSpec optB = (OptionSpec ) b ;
161+ return Integer .compare (optA .order (), optB .order ());
162+ }
163+ return 0 ;
164+ });
165+ return sorted ;
166+ }
167+
147168 @ Override
148169 public Integer call () throws Exception {
149170 if (commandNames .size () == 0 ) {
0 commit comments