Skip to content

Commit

Permalink
fixed issue with flags parsed twice on multiflags.
Browse files Browse the repository at this point in the history
  • Loading branch information
dastrobu committed May 1, 2018
1 parent 7d55ac9 commit 81f39b1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
9 changes: 8 additions & 1 deletion Sources/parsers/MultiFlag.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,14 @@ public class MultiFlag: Parser, ParserNode, ParsePathSegment {
return 1
}
}
return try parseTree(arguments: arguments, atIndex: i, path: path + [self], childParsers: parsers)
// parse flag normally
for parser in parsers {
let tokensConsumed = try parser.parse(arguments: arguments, atIndex: i, path: path + [self])
if tokensConsumed > 0 {
return tokensConsumed
}
}
return 0
}

public var description: [(argument: String, description: String)] {
Expand Down
17 changes: 16 additions & 1 deletion Tests/argtreeTests/parsers/MultiFlagTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ final class MultiFlagTests: XCTestCase {
func testFlagParsing() {
var xPath: [ParsePathSegment] = []
var yPath: [ParsePathSegment] = []
let tokensConsumed = try? ArgTree(parsers: [
let tokensConsumed = try! ArgTree(parsers: [
MultiFlag(parsers: [
Flag(shortName: "x", parsed: { path in
xPath = path
Expand All @@ -22,6 +22,21 @@ final class MultiFlagTests: XCTestCase {
XCTAssertEqual(yPath.count, 1, "yPath \(yPath)")
}

func testFlagParsingWithOneFlag() {
var xPath: [ParsePathSegment] = []
let tokensConsumed = try! ArgTree(parsers: [
MultiFlag(parsers: [
Flag(shortName: "x", parsed: { path in
xPath = path
}),
]),
VarArgs(),
]).parse(arguments: ["ignored", "foo", "-x"])

XCTAssertEqual(tokensConsumed, 3)
XCTAssertEqual(xPath.count, 1, "xPath \(xPath)")
}

func testFlagParsingStopToken() {
var xPath: [ParsePathSegment] = []
var yPath: [ParsePathSegment] = []
Expand Down

0 comments on commit 81f39b1

Please sign in to comment.