Comments (2)
From a quick inspection, it looks like the issue is with this bit of code, which determines the list of parameters that a CommandSchema
is constructed with:
CliFx/CliFx/Schema/CommandSchema.cs
Lines 90 to 93 in a9ef693
This list of parameters is enumerated in that order by HelpConsoleFormatter
:
CliFx/CliFx/Formatting/HelpConsoleFormatter.cs
Lines 74 to 82 in a9ef693
If I print out the properties of each type of command in the minimal repro code, I get the properties back in different orders:
public static async Task<int> Main()
{
var doesNotInheritFromBaseCommandProperties = typeof(DoesNotInheritFromBaseCommand).GetProperties();
var inheritFromBaseCommandProperties = typeof(InheritFromBaseCommand).GetProperties();
return 1;
}
doesNotInheritFromBaseCommandProperties
{System.Reflection.PropertyInfo[2]}
[0]: {Int64 Foo}
[1]: {Int64 Bar}
inheritFromBaseCommandProperties
{System.Reflection.PropertyInfo[2]}
[0]: {Int64 Bar}
[1]: {Int64 Foo}
Since ParameterSchema
has the Order
property associated with it, it might be possible to order the list of parameters by this property before passing it to the CommandSchema
constructor e.g.
var parameterSchemas = type.GetProperties()
.Select(ParameterSchema.TryResolve)
.Where(p => p is not null)
.OrderBy(p => p.Order)
.ToArray();
from clifx.
Hi, thanks for the report. Yes, the parameters need to be sorted by order in the help text renderer, it's a mistake that they aren't. PRs are welcome.
from clifx.
Related Issues (20)
- Add IConsole.Clear()
- Separation of model from business logic HOT 7
- Check `BindingConverter<T>` and `BindingValidator<T>` types in analyzers
- Executable name does not appear in help text in some terminals HOT 4
- How do you wrap help output? HOT 1
- Add multi-language output message support HOT 5
- Command examples HOT 3
- Drop support for targets below net5.0 HOT 11
- ConsoleWriter is not thread-safe HOT 1
- `IConsole.ReadKey` should return the key that was read HOT 1
- Support `=` (equal sign) as value separator in argument syntax HOT 4
- Assembly binding confusion results in many AD0001 analyzer warnings HOT 11
- `FakeInMemoryConsole.Clear()` has no effect HOT 4
- Capturing Trace and Debug output HOT 1
- Default `IsRequired` for options based on whether the `required` modifier is used on the property
- CliFx.Analyzers produces hundreds of CS8032 warnings in build HOT 9
- Publishing an exe as "PublishSingleFile=true" with version 2.3.4 fails HOT 2
- Calling commands from other rcommands HOT 3
- Allow the non scalar parameter to be optional or have default value HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from clifx.