0001 private enum Arg: CustomStringConvertible { 0002 /// A positional argument 0003 case Argument
ArgumentParser.swift:50 private var arguments:[Arg](String) 0004 0005 /// A boolean like option, `--version`, `--help`, `--no-clean`. 0006 case Option
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) 0007 0008 /// A flag 0009 case Flag
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):(Set<Character>) 0010 0011 var description
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)::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:75 return arguments.map { $0.description }.joinWithSeparator(" ")ArgumentParser.swift:83 return arguments.map { $0.description }: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: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: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)`"): String 0037 0038 public init
ArgumentParser.swift:39 self.description = descriptionArgumentParser.swift:45 return lhs.description == rhs.descriptionArgumentParser.swift:45 return lhs.description == rhs.description(_ 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
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)`"): ArgumentConvertible, CustomStringConvertible { 0050 private var arguments
ArgumentConvertible.swift:45 init(parser: ArgumentParser) throwsArgumentConvertible.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 -> ValueTypeArgumentDescription.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) throwsCommandType.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 {:[Arg] 0051 0052 /// Initialises the ArgumentParser with an array of arguments 0053 public init
ArgumentParser.swift:54 self.arguments = arguments.map { argument inArgumentParser.swift:71 arguments = parser.argumentsArgumentParser.swift:71 arguments = parser.argumentsArgumentParser.swift:75 return arguments.map { $0.description }.joinWithSeparator(" ")ArgumentParser.swift:79 return arguments.isEmptyArgumentParser.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 optionArgumentParser.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)(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
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)):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
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 {() -> 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
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 NameGroup.swift:70 if let name = parser.shift() {(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:101 if let value = try parser.shiftValueForOption(name) {(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:144 let values = try parser.shiftValuesForOption(name, count: count)ArgumentParser.swift:104 return try shiftValuesForOption(name)?.first(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: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") {(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:179 if parser.hasFlag(flag) {ArgumentDescription.swift:184 if parser.hasFlag(disabledFlag) {(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
ArgumentDescription.swift:112 if let value = try parser.shiftValueForFlag(flag) {(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
ArgumentParser.swift:197 return try shiftValuesForFlag(flag)?.first