1
1
mirror of https://github.com/github/semantic.git synced 2024-12-24 07:25:44 +03:00
semantic/prototype/doubt-difftool/Argument.swift
2015-11-02 13:07:33 -05:00

44 lines
1.0 KiB
Swift

/// A list of arguments for the difftool.
enum Argument {
indirect case OutputFlag(Output, Argument)
case Sources(Source, Source)
var sources: (Source, Source) {
switch self {
case let .Sources(a, b):
return (a, b)
case let .OutputFlag(_, rest):
return rest.sources
}
}
var output: Output {
switch self {
case let .OutputFlag(output, _):
return output
default:
return .Split
}
}
enum Output {
case Unified
case Split
}
}
private let flag: Madness.Parser<[String], Argument.Output>.Function =
const(Argument.Output.Unified) <^> satisfy { $0 == "--unified" }
<|> const(Argument.Output.Split) <^> satisfy { $0 == "--split" }
<|> pure(Argument.Output.Split)
private let source: Madness.Parser<[String], Source>.Function =
{ try! Source($0) } <^> satisfy { !$0.hasPrefix("--") }
let argumentsParser: Madness.Parser<[String], Argument>.Function = any // skip the path to the difftool
*> (curry(Argument.OutputFlag) <^> flag)
<*> (curry(Argument.Sources) <^> source <*> source)
import Madness
import Prelude