[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>> {
|
private fun parseOptions(args: Array<String>): Map<String, List<String>> {
|
||||||
val commandLine = mutableMapOf<String, MutableList<String>>()
|
val options = mutableMapOf<String, MutableList<String>>()
|
||||||
for (index in args.indices step 2) {
|
for (index in args.indices step 2) {
|
||||||
val key = args[index]
|
val key = args[index]
|
||||||
if (key[0] != '-') {
|
if (key[0] != '-') {
|
||||||
@@ -101,13 +101,13 @@ private fun parseArgs(args: Array<String>): Map<String, List<String>> {
|
|||||||
throw IllegalArgumentException("Expected an value after $key")
|
throw IllegalArgumentException("Expected an value after $key")
|
||||||
}
|
}
|
||||||
val value = listOf(args[index + 1])
|
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 {
|
init {
|
||||||
if (args.size < 2) {
|
if (args.size < 2) {
|
||||||
printUsage()
|
printUsage()
|
||||||
@@ -117,11 +117,21 @@ class Command(args: Array<String>) {
|
|||||||
|
|
||||||
val verb = args[0]
|
val verb = args[0]
|
||||||
val library = args[1]
|
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? {
|
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)
|
val signatureVersion = rawSignatureVersion.toIntOrNull()?.let(::KotlinIrSignatureVersion)
|
||||||
?: logError("Invalid signature version: $rawSignatureVersion")
|
?: logError("Invalid signature version: $rawSignatureVersion")
|
||||||
|
|
||||||
@@ -405,11 +415,21 @@ fun libraryInCurrentDir(name: String) = resolverByName(emptyList(), logger = Kli
|
|||||||
fun libraryInRepoOrCurrentDir(repository: File, name: String) =
|
fun libraryInRepoOrCurrentDir(repository: File, name: String) =
|
||||||
resolverByName(listOf(repository.absolutePath), logger = KlibToolLogger).resolve(name)
|
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>) {
|
fun main(args: Array<String>) {
|
||||||
val command = Command(args)
|
val command = Command(args)
|
||||||
|
|
||||||
val repository = command.options["-repository"]?.last()
|
val repository = command.knownOptions[KnownOption.REPOSITORY]?.last()
|
||||||
val printSignatures = command.options["-print-signatures"]?.last()?.toBoolean() == true
|
val printSignatures = command.knownOptions[KnownOption.PRINT_SIGNATURES]?.last()?.toBoolean() == true
|
||||||
|
|
||||||
val signatureVersion = command.parseSignatureVersion()
|
val signatureVersion = command.parseSignatureVersion()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user