[KLIB tool] Warn on unknown CLI options
This commit is contained in:
committed by
Space Team
parent
b1c9791404
commit
ede77ea29c
@@ -90,8 +90,8 @@ fun printUsage() {
|
||||
)
|
||||
}
|
||||
|
||||
private fun parseArgs(args: Array<String>): Map<String, List<String>> {
|
||||
val commandLine = mutableMapOf<String, MutableList<String>>()
|
||||
private fun parseOptions(args: Array<String>): Map<String, List<String>> {
|
||||
val options = mutableMapOf<String, MutableList<String>>()
|
||||
for (index in args.indices step 2) {
|
||||
val key = args[index]
|
||||
if (key[0] != '-') {
|
||||
@@ -101,13 +101,13 @@ private fun parseArgs(args: Array<String>): Map<String, List<String>> {
|
||||
throw IllegalArgumentException("Expected an value after $key")
|
||||
}
|
||||
val value = listOf(args[index + 1])
|
||||
commandLine[key]?.addAll(value) ?: commandLine.put(key, value.toMutableList())
|
||||
options[key]?.addAll(value) ?: options.put(key, value.toMutableList())
|
||||
}
|
||||
return commandLine
|
||||
return options
|
||||
}
|
||||
|
||||
|
||||
class Command(args: Array<String>) {
|
||||
private class Command(args: Array<String>) {
|
||||
init {
|
||||
if (args.size < 2) {
|
||||
printUsage()
|
||||
@@ -117,11 +117,21 @@ class Command(args: Array<String>) {
|
||||
|
||||
val verb = args[0]
|
||||
val library = args[1]
|
||||
val options: Map<String, List<String>> = parseArgs(args.drop(2).toTypedArray())
|
||||
|
||||
val knownOptions: Map<KnownOption, List<String>> = parseOptions(args.drop(2).toTypedArray<String>())
|
||||
.entries
|
||||
.mapNotNull { (option, values) ->
|
||||
val knownOption = KnownOption.parseOrNull(option)
|
||||
if (knownOption == null) {
|
||||
logWarning("Unrecognized command-line option: $option")
|
||||
return@mapNotNull null
|
||||
}
|
||||
knownOption to values
|
||||
}.toMap()
|
||||
}
|
||||
|
||||
private fun Command.parseSignatureVersion(): KotlinIrSignatureVersion? {
|
||||
val rawSignatureVersion = options["-signature-version"]?.last() ?: return null
|
||||
val rawSignatureVersion = knownOptions[KnownOption.SIGNATURE_VERSION]?.last() ?: return null
|
||||
val signatureVersion = rawSignatureVersion.toIntOrNull()?.let(::KotlinIrSignatureVersion)
|
||||
?: logError("Invalid signature version: $rawSignatureVersion")
|
||||
|
||||
@@ -405,11 +415,21 @@ fun libraryInCurrentDir(name: String) = resolverByName(emptyList(), logger = Kli
|
||||
fun libraryInRepoOrCurrentDir(repository: File, name: String) =
|
||||
resolverByName(listOf(repository.absolutePath), logger = KlibToolLogger).resolve(name)
|
||||
|
||||
private enum class KnownOption(val option: String) {
|
||||
REPOSITORY("-repository"),
|
||||
PRINT_SIGNATURES("-print-signatures"),
|
||||
SIGNATURE_VERSION("-signature-version");
|
||||
|
||||
companion object {
|
||||
fun parseOrNull(option: String): KnownOption? = values().firstOrNull { it.option == option }
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val command = Command(args)
|
||||
|
||||
val repository = command.options["-repository"]?.last()
|
||||
val printSignatures = command.options["-print-signatures"]?.last()?.toBoolean() == true
|
||||
val repository = command.knownOptions[KnownOption.REPOSITORY]?.last()
|
||||
val printSignatures = command.knownOptions[KnownOption.PRINT_SIGNATURES]?.last()?.toBoolean() == true
|
||||
|
||||
val signatureVersion = command.parseSignatureVersion()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user