0001
0009 public class FlagOption| Options.swift:65 | var flagOptions: [String: FlagOption] = [:] |
| Options.swift:69 | var allFlagOptions: [String: FlagOption] = [:] |
| Options.swift:88 | public func onFlags(flags: [String], usage: String = "", block: FlagOption.FlagBlock?) { |
| Options.swift:89 | addFlagOption(FlagOption(flags: flags, usage: usage, block: block)) |
| Options.swift:107 | private func addFlagOption(flagOption: FlagOption) { |
{
0010
0011 public typealias FlagBlock| Options.swift:15 | let block: FlagBlock? |
| Options.swift:17 | convenience init(flag: String, usage: String, block: FlagBlock?) { |
| Options.swift:21 | init(flags: [String], usage: String, block: FlagBlock?) { |
| Options.swift:88 | public func onFlags(flags: [String], usage: String = "", block: FlagOption.FlagBlock?) { |
= (flag: String) -> ()
0012
0013 let flags| Options.swift:22 | self.flags = flags |
| Options.swift:108 | flagOptions[flagOption.flags.first!] = flagOption |
| Options.swift:110 | flagOption.flags.each { self.allFlagOptions[$0] = flagOption } |
: [String]
0014 let usage| CommandMessageGenerator.swift:28 | let usage = options.flagOptions[key]?.usage ?? options.keyOptions[key]?.usage ?? "" |
| Options.swift:27 | self.usage = "\(flagsString)\(paddedUsage)" |
: String
0015 let block| Options.swift:23 | self.block = block |
| Options.swift:132 | flagOption.block?(flag: option) |
: FlagBlock?
0016
0017 convenience init(flag: String, usage: String, block: FlagBlock?) {
0018 self.init(flags: [flag], usage: usage, block: block)
0019 }
0020
0021 init| Options.swift:18 | self.init(flags: [flag], usage: usage, block: block) |
| Options.swift:89 | addFlagOption(FlagOption(flags: flags, usage: usage, block: block)) |
(flags: [String], usage: String, block: FlagBlock?) {
0022 self.flags = flags
0023 self.block = block
0024
0025 let flagsString = flags.joinWithSeparator(", ")
0026 let paddedUsage = usage.padFront(totalLength: 40 - flagsString.characters.count)
0027 self.usage = "\(flagsString)\(paddedUsage)"
0028 }
0029
0030 }
0031
0032 public class KeyOption| Options.swift:58 | public func == (lhs: KeyOption, rhs: KeyOption) -> Bool { |
| Options.swift:58 | public func == (lhs: KeyOption, rhs: KeyOption) -> Bool { |
| Options.swift:66 | var keyOptions: [String: KeyOption] = [:] |
| Options.swift:70 | var allKeyOptions: [String: KeyOption] = [:] |
| Options.swift:103 | public func onKeys(keys: [String], usage: String = "", valueSignature: String = "value", block: KeyOption.KeyBlock?) { |
| Options.swift:104 | addKeyOption(KeyOption(keys: keys, usage: usage, valueSignature: valueSignature, block: block)) |
| Options.swift:113 | private func addKeyOption(keyOption: KeyOption) { |
: Equatable {
0033
0034 public typealias KeyBlock| Options.swift:39 | let block: KeyBlock? |
| Options.swift:41 | convenience init(key: String, usage: String, valueSignature: String, block: KeyBlock?) { |
| Options.swift:45 | init(keys: [String], usage: String, valueSignature: String, block: KeyBlock?) { |
| Options.swift:103 | public func onKeys(keys: [String], usage: String = "", valueSignature: String = "value", block: KeyOption.KeyBlock?) { |
= (key: String, value: String) -> ()
0035
0036 let keys| Options.swift:46 | self.keys = keys |
| Options.swift:59 | return lhs.keys == rhs.keys |
| Options.swift:59 | return lhs.keys == rhs.keys |
| Options.swift:114 | keyOptions[keyOption.keys.first!] = keyOption |
| Options.swift:116 | keyOption.keys.each { self.allKeyOptions[$0] = keyOption } |
: [String]
0037 let usage| CommandMessageGenerator.swift:28 | let usage = options.flagOptions[key]?.usage ?? options.keyOptions[key]?.usage ?? "" |
| Options.swift:53 | self.usage = "\(firstPart)\(paddedUsage)" |
: String
0038 let valueSignature| Options.swift:47 | self.valueSignature = valueSignature |
: String
0039 let block| Options.swift:48 | self.block = block |
| Options.swift:138 | keyOption.block?(key: option, value: keyValue) |
: KeyBlock?
0040
0041 convenience init(key: String, usage: String, valueSignature: String, block: KeyBlock?) {
0042 self.init(keys: [key], usage: usage, valueSignature: valueSignature, block: block)
0043 }
0044
0045 init| Options.swift:42 | self.init(keys: [key], usage: usage, valueSignature: valueSignature, block: block) |
| Options.swift:104 | addKeyOption(KeyOption(keys: keys, usage: usage, valueSignature: valueSignature, block: block)) |
(keys: [String], usage: String, valueSignature: String, block: KeyBlock?) {
0046 self.keys = keys
0047 self.valueSignature = valueSignature
0048 self.block = block
0049
0050 let keysString = keys.joinWithSeparator(", ")
0051 let firstPart = "\(keysString) <\(valueSignature)>"
0052 let paddedUsage = usage.padFront(totalLength: 40 - firstPart.characters.count)
0053 self.usage = "\(firstPart)\(paddedUsage)"
0054 }
0055
0056 }
0057
0058 public func == (lhs: KeyOption, rhs: KeyOption) -> Bool {
0059 return lhs.keys == rhs.keys
0060 }
0061
0062 public class Options| CLI.swift:146 | let options = Options() |
| Command.swift:53 | func setupOptions(options: Options) |
| Command.swift:79 | func internalSetupOptions(options: Options) { |
| CommandMessageGenerator.swift:11 | class func generateUsageStatement(command command: CommandType, options: Options?) -> String { |
| CommandMessageGenerator.swift:40 | class func generateMisusedOptionsStatement(command command: CommandType, options: Options) -> String? { |
| LightweightCommand.swift:22 | public typealias OptionsSetupBlock = (options: Options) -> () |
| LightweightCommand.swift:31 | public func setupOptions(options: Options) { |
{
0063
0064 var flagOptions| CommandMessageGenerator.swift:22 | if let options = options where !options.flagOptions.isEmpty || !options.keyOptions.isEmpty { |
| CommandMessageGenerator.swift:25 | let allKeys = Array(options.flagOptions.keys) + Array(options.keyOptions.keys) |
| CommandMessageGenerator.swift:28 | let usage = options.flagOptions[key]?.usage ?? options.keyOptions[key]?.usage ?? "" |
| Options.swift:108 | flagOptions[flagOption.flags.first!] = flagOption |
: [String: FlagOption] = [:]
0066 var keyOptions| CommandMessageGenerator.swift:22 | if let options = options where !options.flagOptions.isEmpty || !options.keyOptions.isEmpty { |
| CommandMessageGenerator.swift:25 | let allKeys = Array(options.flagOptions.keys) + Array(options.keyOptions.keys) |
| CommandMessageGenerator.swift:28 | let usage = options.flagOptions[key]?.usage ?? options.keyOptions[key]?.usage ?? "" |
| Options.swift:114 | keyOptions[keyOption.keys.first!] = keyOption |
: [String: KeyOption] = [:]
0067
0068 var allFlagOptions| Options.swift:110 | flagOption.flags.each { self.allFlagOptions[$0] = flagOption } |
| Options.swift:131 | if let flagOption = allFlagOptions[option] { |
: [String: FlagOption] = [:]
0070 var allKeyOptions| Options.swift:116 | keyOption.keys.each { self.allKeyOptions[$0] = keyOption } |
| Options.swift:133 | } else if let keyOption = allKeyOptions[option] { |
: [String: KeyOption] = [:]
0071
0072 var unrecognizedOptions| Options.swift:143 | unrecognizedOptions.append(option) |
| Options.swift:171 | return unrecognizedOptions.count > 0 || keysNotGivenValue.count > 0 |
| Options.swift:177 | if unrecognizedOptions.count > 0 { |
| Options.swift:179 | for option in unrecognizedOptions { |
: [String] = []
0073 var keysNotGivenValue| Options.swift:140 | keysNotGivenValue.append(option) |
| Options.swift:171 | return unrecognizedOptions.count > 0 || keysNotGivenValue.count > 0 |
| Options.swift:186 | if keysNotGivenValue.count > 0 { |
| Options.swift:188 | for option in keysNotGivenValue { |
: [String] = []
0074
0075 var exitEarlyOptions| Command.swift:89 | options.exitEarlyOptions += helpFlags |
| Options.swift:146 | if exitEarlyOptions.contains(option) { |
: [String] = []
0076 var exitEarly| CLI.swift:151 | if options.exitEarly { // True if -h flag given (show help but exit early before executing command) |
| Options.swift:147 | exitEarly = true |
= false
0077
0078
0080 ParameterParameterParameter
0088 public func onFlags| Command.swift:85 | options.onFlags(helpFlags, usage: "Show help information for this command") {(flag) in |
(flags: [String], usage: String = "", block: FlagOption.FlagBlock?) {
0089 addFlagOption(FlagOption(flags: flags, usage: usage, block: block))
0090 }
0091
0092 ParameterParameterParameterParameter
0103 public func onKeys(keys: [String], usage: String = "", valueSignature: String = "value", block: KeyOption.KeyBlock?) {
0104 addKeyOption(KeyOption(keys: keys, usage: usage, valueSignature: valueSignature, block: block))
0105 }
0106
0107 private func addFlagOption| Options.swift:89 | addFlagOption(FlagOption(flags: flags, usage: usage, block: block)) |
(flagOption: FlagOption) {
0108 flagOptions[flagOption.flags.first!] = flagOption
0109
0110 flagOption.flags.each { self.allFlagOptions[$0] = flagOption }
0111 }
0112
0113 private func addKeyOption| Options.swift:104 | addKeyOption(KeyOption(keys: keys, usage: usage, valueSignature: valueSignature, block: block)) |
(keyOption: KeyOption) {
0114 keyOptions[keyOption.keys.first!] = keyOption
0115
0116 keyOption.keys.each { self.allKeyOptions[$0] = keyOption }
0117 }
0118
0119
0121 func recognizeOptionsInArguments| CLI.swift:149 | options.recognizeOptionsInArguments(arguments) |
(rawArguments: RawArguments) {
0122 var passedOptions: [String] = []
0123 rawArguments.unclassifiedArguments().each {(argument) in
0124 if argument.hasPrefix("-") {
0125 passedOptions += self.optionsForRawOption(argument)
0126 rawArguments.classifyArgument(argument: argument, type: .Option)
0127 }
0128 }
0129
0130 for option in passedOptions {
0131 if let flagOption = allFlagOptions[option] {
0132 flagOption.block?(flag: option)
0133 } else if let keyOption = allKeyOptions[option] {
0134 if let keyValue = rawArguments.argumentFollowingArgument(option)
0135 where !keyValue.hasPrefix("-") {
0136 rawArguments.classifyArgument(argument: keyValue, type: .Option)
0137
0138 keyOption.block?(key: option, value: keyValue)
0139 } else {
0140 keysNotGivenValue.append(option)
0141 }
0142 } else {
0143 unrecognizedOptions.append(option)
0144 }
0145
0146 if exitEarlyOptions.contains(option) {
0147 exitEarly = true
0148 }
0149 }
0150 }
0151
0152 private func optionsForRawOption| Options.swift:125 | passedOptions += self.optionsForRawOption(argument) |
(rawOption: String) -> [String] {
0153 if rawOption.hasPrefix("--") {
0154 return [rawOption]
0155 }
0156
0157 var chars: [String] = []
0158
0159 for (index, character) in rawOption.characters.enumerate() {
0160 if index > 0 {
0161 chars.append("-\(character)")
0162 }
0163 }
0164
0165 return chars
0166 }
0167
0168
0170 func misusedOptionsPresent| CLI.swift:155 | if options.misusedOptionsPresent() { |
() -> Bool {
0171 return unrecognizedOptions.count > 0 || keysNotGivenValue.count > 0
0172 }
0173
0174 func misusedOptionsMessage| CommandMessageGenerator.swift:51 | return options.misusedOptionsMessage() |
| CommandMessageGenerator.swift:53 | return generateUsageStatement(command: command, options: options) + "\n" + options.misusedOptionsMessage() |
() -> String {
0175 var message = ""
0176
0177 if unrecognizedOptions.count > 0 {
0178 message += "Unrecognized options:"
0179 for option in unrecognizedOptions {
0180 message += "\n\t\(option)"
0181 }
0182
0183 message += "\n"
0184 }
0185
0186 if keysNotGivenValue.count > 0 {
0187 message += "Required values for options but given none:"
0188 for option in keysNotGivenValue {
0189 message += "\n\t\(option)"
0190 }
0191
0192 message += "\n"
0193 }
0194
0195 return message
0196 }
0197
0198 }
0199