Skip to content

Commit 948d659

Browse files
committed
Fix IsPositional ordering properly
1 parent c0333af commit 948d659

File tree

2 files changed

+2
-6
lines changed

2 files changed

+2
-6
lines changed

Src/CmdLineExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,6 @@ public static ConsoleColoredString FormatParameterUsage(this FieldInfo field, bo
7171
public static IEnumerable<FieldInfo> GetCommandLineFields(this Type type) =>
7272
type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
7373
.Where(f => f.IsDefined<OptionAttribute>() || f.IsDefined<EnumOptionsAttribute>() || f.IsDefined<IsPositionalAttribute>())
74-
.OrderBy(f => f.DeclaringType.SelectChain(t => t.BaseType).Count());
74+
.OrderBy(f => f.GetCustomAttribute<IsPositionalAttribute>()?.Order)
75+
.ThenBy(f => f.DeclaringType.SelectChain(t => t.BaseType).Count());
7576
}

Src/CommandLineParser.cs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,6 @@ private static object parseCommandLine(string[] args, Type type, int i, Func<Con
476476
throw new UnsupportedTypeException($"{type.Name}.{field.Name}", getHelpGenerator(type, helpProcessor));
477477
}
478478

479-
positionals = positionals.OrderBy(p => p.Order).ToList(); // Don’t use List<T>.Sort because it’s not a stable sort
480479
for (var pIx = 0; pIx < positionals.Count - 1; pIx++)
481480
if (positionals[pIx + 1].IsMandatory && !positionals[pIx].IsMandatory)
482481
throw new InvalidOrderOfPositionalParametersException(positionals[pIx].Field, positionals[pIx + 1].Field, getHelpGenerator(type, helpProcessor));
@@ -770,10 +769,6 @@ private static void getFieldsForHelp(Type type, out List<FieldInfo> optionalOpti
770769
: (field.IsDefined<IsPositionalAttribute>() ? optionalPositional : optionalOptions);
771770
fieldInfos.Add(field);
772771
}
773-
774-
// Don’t use List<T>.Sort because it’s not a stable sort
775-
mandatoryPositional = mandatoryPositional.OrderBy(f => f.GetCustomAttribute<IsPositionalAttribute>().Order).ToList();
776-
optionalPositional = optionalPositional.OrderBy(f => f.GetCustomAttribute<IsPositionalAttribute>().Order).ToList();
777772
}
778773

779774
private static ConsoleColoredString getDocumentation(MemberInfo member, Func<ConsoleColoredString, ConsoleColoredString> helpProcessor) =>

0 commit comments

Comments
 (0)