Skip to content

Commit f2ac63b

Browse files
committed
fix: store flags as ordered
Fixes #78
1 parent e725aee commit f2ac63b

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Commander Changelog
22

3+
## Master
4+
5+
### Bug Fixes
6+
7+
- Fixed ordering of flags in the "Unknown Arguments" help output of a command.
8+
Flags have previously been stored in an un orderered set and thus upon
9+
printing them back out their order was not persisted and a flag part such as
10+
`-user` can be printed as `-usre`.
11+
[#78](https://github.com/kylef/Commander/issues/78)
12+
313
## 0.9.0 (2019-06-12)
414

515
### Breaking

Sources/Commander/ArgumentParser.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ private enum Arg : CustomStringConvertible, Equatable {
66
case option(String)
77

88
/// A flag
9-
case flag(Set<Character>)
9+
case flag([Character])
1010

1111
var description:String {
1212
switch self {
@@ -78,8 +78,7 @@ public final class ArgumentParser : ArgumentConvertible, CustomStringConvertible
7878
let option = flags[flags.index(after: flags.startIndex)..<flags.endIndex]
7979
return .option(String(option))
8080
}
81-
82-
return .flag(Set(flags))
81+
return .flag(Array(String(flags)))
8382
}
8483

8584
return .argument(argument)
@@ -194,7 +193,7 @@ public final class ArgumentParser : ArgumentConvertible, CustomStringConvertible
194193
case .flag(let option):
195194
var options = option
196195
if options.contains(flag) {
197-
options.remove(flag)
196+
options.removeAll(where: { $0 == flag })
198197
arguments.remove(at: index)
199198

200199
if !options.isEmpty {

Tests/CommanderTests/ArgumentParserSpec.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,4 +151,12 @@ let testArgumentParser: ((ContextType) -> Void) = {
151151
try expect(value2) == "value2"
152152
}
153153
}
154+
155+
$0.describe("#description") {
156+
$0.it("should maintain flag ordering") {
157+
let parser = ArgumentParser(arguments: ["-user", "-one"])
158+
159+
try expect(parser.description) == "-user -one"
160+
}
161+
}
154162
}

0 commit comments

Comments
 (0)