0001    private enum Arg
ArgumentParser.swift:50
  private var arguments:[Arg]
: CustomStringConvertible { 0002 /// A positional argument 0003 case Argument
ArgumentParser.swift:13
    case .Argument(let value):
ArgumentParser.swift:24
    case .Argument:
ArgumentParser.swift:66
      return .Argument(argument)
ArgumentParser.swift:91
      case .Argument(let value):
ArgumentParser.swift:135
          case .Argument(let value):
ArgumentParser.swift:229
          case .Argument(let value):
(String) 0004 0005 /// A boolean like option, `--version`, `--help`, `--no-clean`. 0006 case Option
ArgumentParser.swift:15
    case .Option(let key):
ArgumentParser.swift:26
    case .Option:
ArgumentParser.swift:60
          return .Option(option)
ArgumentParser.swift:114
      case .Option(let option):
ArgumentParser.swift:154
      case .Option(let option):
(String) 0007 0008 /// A flag 0009 case Flag
ArgumentParser.swift:17
    case .Flag(let flags):
ArgumentParser.swift:28
    case .Flag:
ArgumentParser.swift:63
        return .Flag(Set(flags.characters))
ArgumentParser.swift:174
      case .Flag(let option):
ArgumentParser.swift:181
            arguments.insert(.Flag(options), atIndex: index)
ArgumentParser.swift:207
      case .Flag(let flags):
(Set<Character>) 0010 0011 var description
ArgumentParser.swift:75
    return arguments.map { $0.description }.joinWithSeparator(" ")
ArgumentParser.swift:83
    return arguments.map { $0.description }
:String { 0012 switch self { 0013 case .Argument(let value): 0014 return value 0015 case .Option(let key): 0016 return "--\(key)" 0017 case .Flag(let flags): 0018 return "-\(String(flags))" 0019 } 0020 } 0021 0022 var type
ArgumentParser.swift:138
            throw ArgumentParserError("Unexpected \(argument.type) `\(argument)` as a value for `--\(name)`")
ArgumentParser.swift:232
            throw ArgumentParserError("Unexpected \(argument.type) `\(argument)` as a value for `-\(flag)`")
:String { 0023 switch self { 0024 case .Argument: 0025 return "argument" 0026 case .Option: 0027 return "option" 0028 case .Flag: 0029 return "flag" 0030 } 0031 } 0032 } 0033 0034 0035 public struct ArgumentParserError
ArgumentParser.swift:44
public func ==(lhs: ArgumentParserError, rhs: ArgumentParserError) -> Bool {
ArgumentParser.swift:44
public func ==(lhs: ArgumentParserError, rhs: ArgumentParserError) -> Bool {
ArgumentParser.swift:138
            throw ArgumentParserError("Unexpected \(argument.type) `\(argument)` as a value for `--\(name)`")
ArgumentParser.swift:232
            throw ArgumentParserError("Unexpected \(argument.type) `\(argument)` as a value for `-\(flag)`")
: ErrorType, Equatable, CustomStringConvertible { 0036 public let description
ArgumentParser.swift:39
    self.description = description
ArgumentParser.swift:45
  return lhs.description == rhs.description
ArgumentParser.swift:45
  return lhs.description == rhs.description
: String 0037 0038 public init
ArgumentParser.swift:138
            throw ArgumentParserError("Unexpected \(argument.type) `\(argument)` as a value for `--\(name)`")
ArgumentParser.swift:232
            throw ArgumentParserError("Unexpected \(argument.type) `\(argument)` as a value for `-\(flag)`")
(_ description: String) { 0039 self.description = description 0040 } 0041 } 0042 0043 0044 public func ==(lhs: ArgumentParserError, rhs: ArgumentParserError) -> Bool { 0045 return lhs.description == rhs.description 0046 } 0047 0048 0049 public final class ArgumentParser
ArgumentConvertible.swift:45
  init(parser: ArgumentParser) throws
ArgumentConvertible.swift:49
  public init(parser: ArgumentParser) throws {
ArgumentConvertible.swift:63
  public init(parser: ArgumentParser) throws {
ArgumentConvertible.swift:78
  public init(parser: ArgumentParser) throws {
ArgumentConvertible.swift:93
  public init(parser: ArgumentParser) throws {
ArgumentConvertible.swift:108
  public init(parser: ArgumentParser) throws {
ArgumentDescription.swift:18
  func parse(parser:ArgumentParser) throws -> ValueType
ArgumentDescription.swift:23
    try self.init(parser: ArgumentParser(arguments: [string]))
ArgumentDescription.swift:40
  public func parse(parser: ArgumentParser) throws -> ValueType {
ArgumentDescription.swift:61
  public func parse(parser:ArgumentParser) throws -> ValueType {
ArgumentDescription.swift:100
  public func parse(parser:ArgumentParser) throws -> ValueType {
ArgumentDescription.swift:143
  public func parse(parser:ArgumentParser) throws -> ValueType {
ArgumentDescription.swift:169
  public func parse(parser:ArgumentParser) throws -> ValueType {
ArgumentParser.swift:70
  public init(parser: ArgumentParser) throws {
Command.swift:3
  var closure:ArgumentParser throws -> ()
Command.swift:5
  init(_ closure:(ArgumentParser throws -> ())) {
Command.swift:9
  func run(parser:ArgumentParser) throws {
CommandRunner.swift:12
    let parser = ArgumentParser(arguments: Process.arguments)
CommandType.swift:3
  func run(parser:ArgumentParser) throws
CommandType.swift:11
    try run(ArgumentParser(arguments: arguments))
Group.swift:53
  public var unknownCommand: ((name: String, parser: ArgumentParser) throws -> ())?
Group.swift:69
  public func run(parser: ArgumentParser) throws {
: ArgumentConvertible, CustomStringConvertible { 0050 private var arguments
ArgumentParser.swift:54
    self.arguments = arguments.map { argument in
ArgumentParser.swift:71
    arguments = parser.arguments
ArgumentParser.swift:71
    arguments = parser.arguments
ArgumentParser.swift:75
    return arguments.map { $0.description }.joinWithSeparator(" ")
ArgumentParser.swift:79
    return arguments.isEmpty
ArgumentParser.swift:83
    return arguments.map { $0.description }
ArgumentParser.swift:89
    for (index, argument) in arguments.enumerate() {
ArgumentParser.swift:92
        arguments.removeAtIndex(index)
ArgumentParser.swift:112
    for argument in arguments {
ArgumentParser.swift:130
      arguments.removeAtIndex(index)  // Pop option
ArgumentParser.swift:132
        if arguments.count > index {
ArgumentParser.swift:133
          let argument = arguments.removeAtIndex(index)
ArgumentParser.swift:152
    for argument in arguments {
ArgumentParser.swift:156
          arguments.removeAtIndex(index)
ArgumentParser.swift:172
    for argument in arguments {
ArgumentParser.swift:178
          arguments.removeAtIndex(index)
ArgumentParser.swift:181
            arguments.insert(.Flag(options), atIndex: index)
ArgumentParser.swift:205
    for argument in arguments {
ArgumentParser.swift:223
      arguments.removeAtIndex(index)
ArgumentParser.swift:226
        if arguments.count > index {
ArgumentParser.swift:227
          let argument = arguments.removeAtIndex(index)
:[Arg] 0051 0052 /// Initialises the ArgumentParser with an array of arguments 0053 public init
ArgumentDescription.swift:23
    try self.init(parser: ArgumentParser(arguments: [string]))
CommandRunner.swift:12
    let parser = ArgumentParser(arguments: Process.arguments)
CommandType.swift:11
    try run(ArgumentParser(arguments: arguments))
(arguments: [String]) { 0054 self.arguments = arguments.map { argument in 0055 if argument.characters.first == "-" { 0056 let flags = argument[argument.startIndex.successor()..<argument.endIndex] 0057 0058 if flags.characters.first == "-" { 0059 let option = flags[flags.startIndex.successor()..<flags.endIndex] 0060 return .Option(option) 0061 } 0062 0063 return .Flag(Set(flags.characters)) 0064 } 0065 0066 return .Argument(argument) 0067 } 0068 } 0069 0070 public init(parser: ArgumentParser) throws { 0071 arguments = parser.arguments 0072 } 0073 0074 public var description:String { 0075 return arguments.map { $0.description }.joinWithSeparator(" ") 0076 } 0077 0078 public var isEmpty
Commands.swift:121
    if !parser.isEmpty {
Commands.swift:144
    if !parser.isEmpty {
Commands.swift:169
    if !parser.isEmpty {
Commands.swift:196
    if !parser.isEmpty {
Commands.swift:225
    if !parser.isEmpty {
Commands.swift:256
    if !parser.isEmpty {
Commands.swift:289
    if !parser.isEmpty {
Commands.swift:324
    if !parser.isEmpty {
Commands.swift:361
    if !parser.isEmpty {
Commands.swift:400
    if !parser.isEmpty {
Commands.swift:441
    if !parser.isEmpty {
Commands.swift:484
    if !parser.isEmpty {
Commands.swift:529
    if !parser.isEmpty {
Commands.swift:576
    if !parser.isEmpty {
:Bool { 0079 return arguments.isEmpty 0080 } 0081 0082 public var remainder:[String] { 0083 return arguments.map { $0.description } 0084 } 0085 0086 /// Returns the first positional argument in the remaining arguments. 0087 /// This will remove the argument from the remaining arguments. 0088 public func shift
ArgumentConvertible.swift:50
    if let value = parser.shift() {
ArgumentConvertible.swift:64
    if let value = parser.shift() {
ArgumentConvertible.swift:79
    if let value = parser.shift() {
ArgumentConvertible.swift:94
    if let value = parser.shift() {
CommandRunner.swift:21
    let executableName = parser.shift()!  // Executable Name
Group.swift:70
    if let name = parser.shift() {
() -> String? { 0089 for (index, argument) in arguments.enumerate() { 0090 switch argument { 0091 case .Argument(let value): 0092 arguments.removeAtIndex(index) 0093 return value 0094 default: 0095 continue 0096 } 0097 } 0098 0099 return nil 0100 } 0101 0102 /// Returns the value for an option (--name Kyle, --name=Kyle) 0103 public func shiftValueForOption
ArgumentDescription.swift:101
    if let value = try parser.shiftValueForOption(name) {
(name:String) throws -> String? { 0104 return try shiftValuesForOption(name)?.first 0105 } 0106 0107 /// Returns the value for an option (--name Kyle, --name=Kyle) 0108 public func shiftValuesForOption
ArgumentDescription.swift:144
    let values = try parser.shiftValuesForOption(name, count: count)
ArgumentParser.swift:104
    return try shiftValuesForOption(name)?.first
(name:String, count:Int = 1) throws -> [String]? { 0109 var index = 0 0110 var hasOption = false 0111 0112 for argument in arguments { 0113 switch argument { 0114 case .Option(let option): 0115 if option == name { 0116 hasOption = true 0117 break 0118 } 0119 fallthrough 0120 default: 0121 index += 1 0122 } 0123 0124 if hasOption { 0125 break 0126 } 0127 } 0128 0129 if hasOption { 0130 arguments.removeAtIndex(index) // Pop option 0131 return try (0..<count).map { i in 0132 if arguments.count > index { 0133 let argument = arguments.removeAtIndex(index) 0134 switch argument { 0135 case .Argument(let value): 0136 return value 0137 default: 0138 throw ArgumentParserError("Unexpected \(argument.type) `\(argument)` as a value for `--\(name)`") 0139 } 0140 } 0141 0142 throw ArgumentError.MissingValue(argument: "--\(name)") 0143 } 0144 } 0145 0146 return nil 0147 } 0148 0149 /// Returns whether an option was specified in the arguments 0150 public func hasOption
ArgumentDescription.swift:170
    if parser.hasOption(disabledName) {
ArgumentDescription.swift:174
    if parser.hasOption(name) {
CommandRunner.swift:14
    if parser.hasOption("version") && !parser.hasOption("help") {
CommandRunner.swift:14
    if parser.hasOption("version") && !parser.hasOption("help") {
Commands.swift:115
    if parser.hasOption("help") {
Commands.swift:137
    if parser.hasOption("help") {
Commands.swift:161
    if parser.hasOption("help") {
Commands.swift:187
    if parser.hasOption("help") {
Commands.swift:215
    if parser.hasOption("help") {
Commands.swift:245
    if parser.hasOption("help") {
Commands.swift:277
    if parser.hasOption("help") {
Commands.swift:311
    if parser.hasOption("help") {
Commands.swift:347
    if parser.hasOption("help") {
Commands.swift:385
    if parser.hasOption("help") {
Commands.swift:425
    if parser.hasOption("help") {
Commands.swift:467
    if parser.hasOption("help") {
Commands.swift:511
    if parser.hasOption("help") {
Commands.swift:557
    if parser.hasOption("help") {
(name:String) -> Bool { 0151 var index = 0 0152 for argument in arguments { 0153 switch argument { 0154 case .Option(let option): 0155 if option == name { 0156 arguments.removeAtIndex(index) 0157 return true 0158 } 0159 default: 0160 break 0161 } 0162 0163 index += 1 0164 } 0165 0166 return false 0167 } 0168 0169 /// Returns whether a flag was specified in the arguments 0170 public func hasFlag
ArgumentDescription.swift:179
      if parser.hasFlag(flag) {
ArgumentDescription.swift:184
      if parser.hasFlag(disabledFlag) {
(flag:Character) -> Bool { 0171 var index = 0 0172 for argument in arguments { 0173 switch argument { 0174 case .Flag(let option): 0175 var options = option 0176 if options.contains(flag) { 0177 options.remove(flag) 0178 arguments.removeAtIndex(index) 0179 0180 if !options.isEmpty { 0181 arguments.insert(.Flag(options), atIndex: index) 0182 } 0183 return true 0184 } 0185 default: 0186 break 0187 } 0188 0189 index += 1 0190 } 0191 0192 return false 0193 } 0194 0195 /// Returns the value for a flag (-n Kyle) 0196 public func shiftValueForFlag
ArgumentDescription.swift:112
      if let value = try parser.shiftValueForFlag(flag) {
(flag:Character) throws -> String? { 0197 return try shiftValuesForFlag(flag)?.first 0198 } 0199 0200 /// Returns the value for a flag (-n Kyle) 0201 public func shiftValuesForFlag
ArgumentParser.swift:197
    return try shiftValuesForFlag(flag)?.first
(flag:Character, count:Int = 1) throws -> [String]? { 0202 var index = 0 0203 var hasFlag = false 0204 0205 for argument in arguments { 0206 switch argument { 0207 case .Flag(let flags): 0208 if flags.contains(flag) { 0209 hasFlag = true 0210 break 0211 } 0212 fallthrough 0213 default: 0214 index += 1 0215 } 0216 0217 if hasFlag { 0218 break 0219 } 0220 } 0221 0222 if hasFlag { 0223 arguments.removeAtIndex(index) 0224 0225 return try (0..<count).map { i in 0226 if arguments.count > index { 0227 let argument = arguments.removeAtIndex(index) 0228 switch argument { 0229 case .Argument(let value): 0230 return value 0231 default: 0232 throw ArgumentParserError("Unexpected \(argument.type) `\(argument)` as a value for `-\(flag)`") 0233 } 0234 } 0235 0236 throw ArgumentError.MissingValue(argument: "-\(flag)") 0237 } 0238 } 0239 0240 return nil 0241 } 0242 } 0243