1.4.1 release #10
@@ -1,7 +1,7 @@
|
||||
package com.infendro.cli.argument
|
||||
|
||||
import com.infendro.cli.error.build.InvalidArgumentName
|
||||
import com.infendro.cli.error.build.InvalidRange
|
||||
import com.infendro.cli.exception.InvalidArgumentName
|
||||
import com.infendro.cli.exception.InvalidRange
|
||||
import com.infendro.cli.parser.Parser
|
||||
import com.infendro.cli.util.Regex.ARGUMENT
|
||||
|
||||
|
||||
@@ -6,8 +6,8 @@ import com.infendro.cli.command.context.Context
|
||||
import com.infendro.cli.command.context.ContextParser
|
||||
import com.infendro.cli.command.help.DefaultHelpRenderer
|
||||
import com.infendro.cli.command.help.HelpRenderer
|
||||
import com.infendro.cli.exception.*
|
||||
import com.infendro.cli.option.Option
|
||||
import com.infendro.cli.error.build.*
|
||||
import com.infendro.cli.parser.Parser
|
||||
import com.infendro.cli.util.Regex
|
||||
|
||||
@@ -33,7 +33,7 @@ sealed class Command private constructor(
|
||||
if (help != null) print(help)
|
||||
}
|
||||
is ContextParser.Result.Failure -> {
|
||||
println("error: ${result.failure.message}")
|
||||
println("error: ${result.error.message}")
|
||||
val command = result.path.last()
|
||||
val help = command.renderer.render(result.path)
|
||||
if (help != null) print("\n$help")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.infendro.cli.command.context
|
||||
|
||||
import com.infendro.cli.command.Command
|
||||
import com.infendro.cli.error.run.*
|
||||
import com.infendro.cli.error.*
|
||||
import com.infendro.cli.parser.Parser
|
||||
|
||||
internal class ContextParser(
|
||||
@@ -19,13 +19,13 @@ internal class ContextParser(
|
||||
|
||||
data class Failure(
|
||||
val path: List<Command>,
|
||||
val failure: RuntimeFailure,
|
||||
val error: Error,
|
||||
) : Result()
|
||||
}
|
||||
|
||||
private fun success(context: Context) = Result.Success(context)
|
||||
private fun help(path: List<Command>) = Result.Help(path)
|
||||
private fun failure(path: List<Command>, exception: RuntimeFailure) = Result.Failure(path, exception)
|
||||
private fun failure(path: List<Command>, error: Error) = Result.Failure(path, error)
|
||||
|
||||
private var index = 0
|
||||
private val current: String
|
||||
@@ -63,7 +63,7 @@ internal class ContextParser(
|
||||
if (cmd is Command.Fallback<*>) {
|
||||
val value = when (val result = cmd.parser.parse(current)) {
|
||||
is Parser.Result.Success<*> -> result.value
|
||||
is Parser.Result.Failure<*> -> return failure(path, result.failure)
|
||||
is Parser.Result.Failure<*> -> return failure(path, result.error)
|
||||
}
|
||||
commands[cmd.key] = value
|
||||
}
|
||||
@@ -91,7 +91,7 @@ internal class ContextParser(
|
||||
|
||||
val value = when (val result = argument.parser.parse(current)) {
|
||||
is Parser.Result.Success<*> -> result.value
|
||||
is Parser.Result.Failure<*> -> return failure(path, result.failure)
|
||||
is Parser.Result.Failure<*> -> return failure(path, result.error)
|
||||
}
|
||||
arguments[argument]!! += value
|
||||
argumentCount++
|
||||
@@ -141,7 +141,7 @@ internal class ContextParser(
|
||||
text != null ->
|
||||
when (val result = option.parser.parse(text)) {
|
||||
is Parser.Result.Success<*> -> result.value
|
||||
is Parser.Result.Failure<*> -> return failure(path, result.failure)
|
||||
is Parser.Result.Failure<*> -> return failure(path, result.error)
|
||||
}
|
||||
option.flag -> option.fallback!!
|
||||
else -> return failure(path, MissingOptionValue(option))
|
||||
|
||||
5
src/commonMain/kotlin/com/infendro/cli/error/Error.kt
Normal file
5
src/commonMain/kotlin/com/infendro/cli/error/Error.kt
Normal file
@@ -0,0 +1,5 @@
|
||||
package com.infendro.cli.error
|
||||
|
||||
abstract class Error {
|
||||
abstract val message: String
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.infendro.cli.error.run
|
||||
package com.infendro.cli.error
|
||||
|
||||
import com.infendro.cli.argument.Argument
|
||||
|
||||
class InvalidArgumentCount(
|
||||
val argument: Argument<*>,
|
||||
val count: Int,
|
||||
) : RuntimeFailure() {
|
||||
) : Error() {
|
||||
override val message: String
|
||||
get() {
|
||||
val expected = when {
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.infendro.cli.error.run
|
||||
package com.infendro.cli.error
|
||||
|
||||
import com.infendro.cli.option.Option
|
||||
|
||||
class InvalidOptionCount(
|
||||
val option: Option<*>,
|
||||
val count: Int,
|
||||
) : RuntimeFailure() {
|
||||
) : Error() {
|
||||
override val message: String
|
||||
get() {
|
||||
val expected = when {
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.infendro.cli.error.run
|
||||
package com.infendro.cli.error
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
class InvalidValue(
|
||||
val value: String,
|
||||
val type: KClass<*>,
|
||||
) : RuntimeFailure() {
|
||||
) : Error() {
|
||||
override val message: String
|
||||
get() = """"$value" cannot be converted to ${type.simpleName ?: "Unknown"}."""
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.infendro.cli.error.run
|
||||
package com.infendro.cli.error
|
||||
|
||||
class MalformedOption(
|
||||
val option: String,
|
||||
) : RuntimeFailure() {
|
||||
) : Error() {
|
||||
override val message: String
|
||||
get() = """Malformed option "$option"."""
|
||||
}
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.infendro.cli.error.run
|
||||
package com.infendro.cli.error
|
||||
|
||||
import com.infendro.cli.option.Option
|
||||
|
||||
class MissingOptionValue(
|
||||
val option: Option<*>,
|
||||
) : RuntimeFailure() {
|
||||
) : Error() {
|
||||
override val message: String
|
||||
get() = """No value provided for option "${option.name}"."""
|
||||
}
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.infendro.cli.error.run
|
||||
package com.infendro.cli.error
|
||||
|
||||
class UnexpectedArgument(
|
||||
val argument: String,
|
||||
) : RuntimeFailure() {
|
||||
) : Error() {
|
||||
override val message: String
|
||||
get() = """Unexpected argument "$argument"."""
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.run
|
||||
package com.infendro.cli.error
|
||||
|
||||
import com.infendro.cli.command.Command
|
||||
import com.infendro.cli.util.distance
|
||||
@@ -8,7 +8,7 @@ import kotlin.math.min
|
||||
class UnknownCommand(
|
||||
val command: Command,
|
||||
val name: String,
|
||||
) : RuntimeFailure() {
|
||||
) : Error() {
|
||||
override val message: String
|
||||
get() = buildString {
|
||||
val suggestion = command.commands
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.run
|
||||
package com.infendro.cli.error
|
||||
|
||||
import com.infendro.cli.command.Command
|
||||
import com.infendro.cli.util.distance
|
||||
@@ -8,7 +8,7 @@ import kotlin.math.min
|
||||
class UnknownOption(
|
||||
val command: Command,
|
||||
val name: String,
|
||||
) : RuntimeFailure() {
|
||||
) : Error() {
|
||||
override val message: String
|
||||
get() = buildString {
|
||||
val suggestion = command.options
|
||||
@@ -1,5 +0,0 @@
|
||||
package com.infendro.cli.error.run
|
||||
|
||||
abstract class RuntimeFailure {
|
||||
abstract val message: String
|
||||
}
|
||||
@@ -1,3 +1,3 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
abstract class BuildException : Exception()
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
import com.infendro.cli.argument.Argument
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
import com.infendro.cli.command.Command
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class DuplicateExecute : BuildException() {
|
||||
override val message: String
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
import com.infendro.cli.option.Option
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class DuplicateRenderer : BuildException() {
|
||||
override val message: String
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class InvalidArgumentName(
|
||||
val name: String,
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class InvalidArgumentOrder : BuildException() {
|
||||
override val message: String
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class InvalidCommandName(
|
||||
val name: String,
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class InvalidCommandOrder : BuildException() {
|
||||
override val message: String
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class InvalidFallback : BuildException() {
|
||||
override val message: String
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class InvalidOptionName(
|
||||
val name: String,
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class InvalidRange : BuildException() {
|
||||
override val message: String
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.infendro.cli.error.build
|
||||
package com.infendro.cli.exception
|
||||
|
||||
class MissingOptionName : BuildException() {
|
||||
override val message: String
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.infendro.cli.option
|
||||
|
||||
import com.infendro.cli.error.build.InvalidOptionName
|
||||
import com.infendro.cli.error.build.InvalidRange
|
||||
import com.infendro.cli.error.build.MissingOptionName
|
||||
import com.infendro.cli.exception.InvalidOptionName
|
||||
import com.infendro.cli.exception.InvalidRange
|
||||
import com.infendro.cli.exception.MissingOptionName
|
||||
import com.infendro.cli.parser.Parser
|
||||
import com.infendro.cli.util.Regex.OPTION
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.infendro.cli.parser
|
||||
|
||||
import com.infendro.cli.error.run.InvalidValue
|
||||
import com.infendro.cli.error.run.RuntimeFailure
|
||||
import com.infendro.cli.error.Error
|
||||
import com.infendro.cli.error.InvalidValue
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
abstract class Parser<T : Any>(
|
||||
@@ -13,7 +13,7 @@ abstract class Parser<T : Any>(
|
||||
) : Result<T>()
|
||||
|
||||
data class Failure<T : Any>(
|
||||
val failure: RuntimeFailure,
|
||||
val error: Error,
|
||||
) : Result<T>()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user