in src/Tulsi/TulsiCommandlineParser.swift [136:264]
init() {
var args = [String](CommandLine.arguments.dropFirst())
// See if the arguments are intended to be interpreted as commandline args.
if args.first != TulsiCommandlineParser.ParamCommandlineArgumentSentinal {
commandlineSentinalFound = false
arguments = Arguments()
return
}
commandlineSentinalFound = true
args = [String](args.dropFirst())
var parsedArguments = [String: Any]()
func storeValueAt(_ index: Int,
forArgument argumentName: String,
append: Bool = false,
transform: ((AnyObject) -> AnyObject) = { return $0 }) {
guard index < args.count else {
print("Missing required parameter for \(argumentName) option.")
exit(1)
}
let value = transform(args[index] as AnyObject)
if append {
if var existingArgs: [AnyObject] = parsedArguments[argumentName] as? [AnyObject] {
existingArgs.append(value)
parsedArguments[argumentName] = existingArgs as AnyObject?
} else {
parsedArguments[argumentName] = [value]
}
} else {
parsedArguments[argumentName] = value
}
}
var i = 0
while i < args.count {
let arg = args[i]
i += 1
switch arg {
// Commmon:
case TulsiCommandlineParser.ParamHelpShort:
fallthrough
case TulsiCommandlineParser.ParamHelpLong:
TulsiCommandlineParser.printUsage()
exit(1)
case TulsiCommandlineParser.ParamVerboseShort:
fallthrough
case TulsiCommandlineParser.ParamVerboseLong:
parsedArguments[TulsiCommandlineParser.ParamVerboseLong] = true as AnyObject?
case TulsiCommandlineParser.ParamQuietShort:
fallthrough
case TulsiCommandlineParser.ParamQuietLong:
parsedArguments[TulsiCommandlineParser.ParamQuietLong] = true as AnyObject?
case TulsiCommandlineParser.ParamBazel:
storeValueAt(i, forArgument: TulsiCommandlineParser.ParamBazel)
i += 1
case TulsiCommandlineParser.ParamOutputFolderShort:
fallthrough
case TulsiCommandlineParser.ParamOutputFolderLong:
storeValueAt(i, forArgument: TulsiCommandlineParser.ParamOutputFolderLong)
i += 1
case TulsiCommandlineParser.ParamWorkspaceRootShort:
fallthrough
case TulsiCommandlineParser.ParamWorkspaceRootLong:
storeValueAt(i, forArgument: TulsiCommandlineParser.ParamWorkspaceRootLong)
i += 1
case TulsiCommandlineParser.ParamAdditionalPathFilters:
storeValueAt(i, forArgument: TulsiCommandlineParser.ParamAdditionalPathFilters) { value -> AnyObject in
guard let valueString = value as? String else { return Set<String>() as AnyObject }
let pathFilters = valueString.components(separatedBy: " ").map() { path -> String in
if path.hasPrefix("//") {
let index = path.index(path.startIndex, offsetBy: 2)
return String(path[index...])
}
return path
}
return Set(pathFilters) as AnyObject
}
i += 1
// Xcode project generation:
case TulsiCommandlineParser.ParamGeneratorConfigShort:
fallthrough
case TulsiCommandlineParser.ParamGeneratorConfigLong:
storeValueAt(i, forArgument: TulsiCommandlineParser.ParamGeneratorConfigLong)
i += 1
case TulsiCommandlineParser.ParamNoOpenXcode:
parsedArguments[TulsiCommandlineParser.ParamNoOpenXcode] = true as AnyObject?
// Tulsiproj creation:
case TulsiCommandlineParser.ParamCreateTulsiProj:
storeValueAt(i, forArgument: TulsiCommandlineParser.ParamCreateTulsiProj)
i += 1
case TulsiCommandlineParser.ParamBuildStartupOptions:
storeValueAt(i, forArgument: TulsiCommandlineParser.ParamBuildStartupOptions)
i += 1
case TulsiCommandlineParser.ParamBuildOptions:
storeValueAt(i, forArgument: TulsiCommandlineParser.ParamBuildOptions)
i += 1
case TulsiCommandlineParser.ParamBuildTargetShort:
fallthrough
case TulsiCommandlineParser.ParamBuildTargetLong:
storeValueAt(i, forArgument: TulsiCommandlineParser.ParamBuildTargetLong, append: true)
i += 1
case TulsiCommandlineParser.ParamLogToFile:
parsedArguments[TulsiCommandlineParser.ParamLogToFile] = true as AnyObject?
default:
print("Ignoring unknown option \"\(arg)\"")
}
}
arguments = Arguments(dict: parsedArguments)
}