mirror of
https://github.com/github/semantic.git
synced 2024-12-28 09:21:35 +03:00
44 lines
1.0 KiB
Swift
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
|