small refactor

This commit is contained in:
2025-12-13 20:23:34 +01:00
parent ebd698e611
commit 757011af85
3 changed files with 18 additions and 37 deletions

View File

@@ -1,6 +1,5 @@
package com.infendro.cli.command
import com.infendro.cli.command.Execution
import com.infendro.cli.argument.Argument
import com.infendro.cli.exception.build.*
import com.infendro.cli.exception.run.ArgumentCountException
@@ -24,8 +23,7 @@ class Command private constructor(
fun run(
args: Array<String>,
) {
val index = args
.withIndex()
val index = args.withIndex()
.find { (_, value) -> value.startsWith("--") }
?.index ?: args.size
@@ -89,12 +87,11 @@ class Command private constructor(
result += Execution.Arg(name, value)
}
arguments
.forEach { argument ->
val count = result.count { it.name == argument.name }
if (count !in argument.min..argument.max)
throw ArgumentCountException(argument.name, argument.min, argument.max)
}
arguments.forEach { argument ->
val count = result.count { it.name == argument.name }
if (count !in argument.min..argument.max)
throw ArgumentCountException(argument.name, argument.min, argument.max)
}
return result
}
@@ -164,7 +161,7 @@ class Command private constructor(
}
}
class Key(
class Key internal constructor(
internal val index: Int,
)
}

View File

@@ -19,45 +19,29 @@ class Execution(
operator fun Command.Key.getValue(
thisRef: Any?,
property: KProperty<*>,
): String {
return commands[index]
.name
}
): String = commands[index].name
operator fun <T> Argument.Single<T>.getValue(
thisRef: Any?,
property: KProperty<*>,
): T {
return arguments
.single { it.name == name }
.let { parser.parse(it.value) }
}
): T = arguments.single { it.name == name }
.let { parser.parse(it.value) }
operator fun <T> Argument.SingleOrElse<T>.getValue(
thisRef: Any?,
property: KProperty<*>,
): T {
return arguments
.singleOrNull { it.name == name }
?.let { parser.parse(it.value) }
?: other
}
): T = arguments.singleOrNull { it.name == name }
?.let { parser.parse(it.value) } ?: other
operator fun <T> Argument.SingleOrNull<T>.getValue(
thisRef: Any?,
property: KProperty<*>,
): T? {
return arguments
.singleOrNull { it.name == name }
?.let { parser.parse(it.value) }
}
): T? = arguments.singleOrNull { it.name == name }
?.let { parser.parse(it.value) }
operator fun <T> Argument.Multiple<T>.getValue(
thisRef: Any?,
property: KProperty<*>,
): List<T> {
return arguments
.filter { it.name == name }
.map { parser.parse(it.value) }
}
}
): List<T> = arguments.filter { it.name == name }
.map { parser.parse(it.value) }
}

View File

@@ -4,4 +4,4 @@ internal object Regex {
val COMMAND_NAME = """[a-z]+(?:-[a-z]+)*""".toRegex()
val ARGUMENT_NAME = """[a-z]+(?:[\-.][a-z]+)*""".toRegex()
val ARGUMENT = """--(?<name>[a-z]+(?:[\-.][a-z]+)*)(?:=(?<value>.*))?""".toRegex()
}
}