Skip to content

Commit

Permalink
Remove sorting of allowedHelp maps
Browse files Browse the repository at this point in the history
Closes #845

It is idiomatic to treat the key order of a Dart map as meaningful
given that map literals and default Map type preserve key insertion
order. It is more useful to allow the caller to decide this order than
to mandate an alpha sorting by key. Callers which need this order can
construct the map appropriately, and callers which prefer a different
order now have the capability.

Releasing as a non-breaking change since specific usage output is
considered an implementation detail. This is expected to impact some CI
statuf for packages with tests hardcoding a strict dependency on the
output.

No additional tests are necessary since updating the order in existing
tests demonstrates the same behavior as adding a non-sorting specific
test.
  • Loading branch information
natebosch committed Jan 17, 2025
1 parent a59cbea commit f477bdd
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 5 deletions.
2 changes: 2 additions & 0 deletions pkgs/args/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
## 2.6.1-wip

* Remove sorting of the `allowedHelp` argument in usage output. Ordering will
depend on key order for the passed `Map`.
* Fix the repository URL in `pubspec.yaml`.
* Added option `hideNegatedUsage` to `ArgParser.flag()` allowing a flag to be
`negatable` without showing it in the usage text.
Expand Down
3 changes: 1 addition & 2 deletions pkgs/args/lib/src/usage.dart
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,7 @@ class _Usage {
if (option.help != null) _write(2, option.help!);

if (option.allowedHelp != null) {
var allowedNames = option.allowedHelp!.keys.toList();
allowedNames.sort();
var allowedNames = [...option.allowedHelp!.keys];
_newline();
for (var name in allowedNames) {
_write(1, _allowedTitle(option, name));
Expand Down
6 changes: 3 additions & 3 deletions pkgs/args/test/usage_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -216,10 +216,10 @@ void main() {
validateUsage(parser, '''
--suit Like in cards
[spades] Swords of a soldier
[clubs] Weapons of war
[diamonds] Money for this art
[hearts] The shape of my heart
[spades] Swords of a soldier
''');
});

Expand All @@ -244,10 +244,10 @@ void main() {
validateUsage(parser, '''
--suit Like in cards
[spades] Swords of a soldier
[clubs] (default) Weapons of war
[diamonds] Money for this art
[hearts] The shape of my heart
[spades] Swords of a soldier
''');
});

Expand All @@ -271,10 +271,10 @@ void main() {
validateUsage(parser, '''
--suit Like in cards
[spades] Swords of a soldier
[clubs] (default) Weapons of war
[diamonds] Money for this art
[hearts] (default) The shape of my heart
[spades] Swords of a soldier
''');
});

Expand Down

0 comments on commit f477bdd

Please sign in to comment.