Show-Help-Optik verbessert, Kommantare ergänzt

This commit is contained in:
Hartmut Bauer committed 2026-01-19 01:13:02 +01:00
1 parent b580e64e76
commit 66244db097
5 files changed
+49 -14

No files matched your search

+2 -2
View File
@@ -1,3 +1,3 @@
#auto generated
#Sun Jan 18 23:38:13 CET 2026
build.number=114
#Mon Jan 19 01:08:01 CET 2026
build.number=117
+1 -1
View File
@@ -19,7 +19,7 @@ dependencyResolutionManagement {
versionCatalogs {
create("masterLibs") {
// from(files("gradle/masterlibs.versions.toml"))
from("net.keinekekse:version-catalog:113")
from("net.keinekekse:version-catalog:116")
}
}
}
@@ -1,5 +1,6 @@
package net.keinekekse.args
import net.keinekekse.util.VERSION
import net.keinekekse.version.Version
/**
@@ -26,9 +27,18 @@ expect fun isStdInputReady(): Boolean
class VerifyParameterException(message: String) : RuntimeException(message)
/**
* Throws a [VerifyParameterException] with the specified error message.
* This function is used to signal that there was an error during argument parsing.
*
* For use in the application. The exception will be caught by the command-line parser
* and displayed to the user via showHelp().
*
* @param msg The error message to include in the exception.
* @throws VerifyParameterException with the provided error message.
*/
fun showParsingError(msg: String): Nothing {
println(ArgumentParserException.PARSING_ERROR_MSG + msg + "\n")
exitApplication(2)
throw VerifyParameterException("*** ERROR parsing arguments: $msg")
}
/**
@@ -48,6 +58,18 @@ fun interface RunProgram {
fun run(remaining: List<String>)
}
/**
* Represents a subcommand that can be added to a command-line argument parser.
*
* A `SubCommand` is used to define and configure subcommands in a CLI application,
* allowing for structured argument parsing and execution of specific logic based
* on the subcommand invoked. It provides mechanisms to add parameters to the
* subcommand, define execution logic, and manage case sensitivity for argument
* names.
*
* @property obj Internal data container for subcommand-specific configuration and parameters.
* @property ignoreCase Defines whether argument names are case-insensitive. Defaults to `false`.
*/
class SubCommand private constructor(
internal val obj: SubCommandData,
val ignoreCase: Boolean = false,
@@ -133,6 +155,18 @@ class SubCommand private constructor(
}
/**
* Represents a command-line interface for parsing and executing commands, subcommands, and parameters.
*
* This class facilitates defining global parameters and subcommands, parsing provided arguments,
* validating inputs, and executing the corresponding actions. It supports various types of parameters,
* including strings, long integers, and booleans, with both optional and mandatory requirements.
* Additionally, it provides options for ignoring case sensitivity and handling remaining parameters.
*
* @param programVersion The version information of the program, including display name and copyright.
* @param ignoreCase Determines whether the parsing should ignore case sensitivity for commands and parameters.
* @param remainingDescription The description for remaining command-line arguments, or null if no arguments are allowed.
*/
class CommandLine(
val programVersion: Version,
val ignoreCase: Boolean = false,
@@ -320,7 +354,7 @@ class CommandLine(
val globalParam = globalSubCommand.obj.params.isNotEmpty()
val remain = remainingDescription != null
println("${programVersion.displayName} ${programVersion.version} ${programVersion.copyright}\n")
println("\n${programVersion.displayName} ${programVersion.version} ${programVersion.copyright}\n")
println(programVersion.description)
println()
println(
@@ -351,8 +385,8 @@ class CommandLine(
e?.message?.let {
println()
println(ArgumentParserException.PARSING_ERROR_MSG + it + "\n")
println()
}
println()
exitApplication(0)
}
@@ -384,7 +418,7 @@ class CommandLine(
}
private fun showVersion(): Nothing {
println("${programVersion.displayName} ${programVersion.fullVersion} ${programVersion.copyright}\n")
println("\n${programVersion.displayName} ${programVersion.fullVersion} ${programVersion.copyright}\n\n(${VERSION.displayName} ${VERSION.fullVersion} ${VERSION.copyright})\n")
exitApplication(0)
}
@@ -152,7 +152,7 @@ interface AddParameter {
internal class ArgumentParserException(message: String?) : RuntimeException(message) {
companion object {
const val PARSING_ERROR_MSG = "\n*** ERROR parsing arguments: "
const val DEFINITION_ERROR_MSG = "\n*** ERROR defining arguments: "
const val DEFINITION_ERROR_MSG = "\n***\n*** ERROR defining arguments in source code: "
fun showHelp() = ArgumentParserException(null)
fun noHelpOrVersion() =
ArgumentParserException("Option 'help' and option 'version' are not allowed.")
@@ -224,6 +224,7 @@ internal fun matchSubCommand(cmd: String) =
internal fun matchArgument(arg: String): Pair<String, String>? =
ARGUMENT_PATTERN.matchEntire(arg)?.groupValues?.let { Pair(it[1] + it[2], it[3]) }
// Fehler im Quellcode anzeigen
internal fun showDefiningError(msg: String): Nothing {
println(ArgumentParserException.DEFINITION_ERROR_MSG + msg + "\n")
exitApplication(1)
@@ -3,14 +3,14 @@ package net.keinekekse.util
import net.keinekekse.version.Version
object VERSION: Version {
override val version = "0.3.0-beta.5+build.114"
override val fullVersion = "0.3.0-beta.5+build.114"
override val version = "0.3.0-beta.8+build.117"
override val fullVersion = "0.3.0-beta.8+build.117"
override val major = 0
override val minor = 3
override val patch = 0
override val preRelease = "beta.5"
override val buildMetadata = "build.114"
override val buildDate = "2026-01-18T22:38:13.309402Z"
override val preRelease = "beta.8"
override val buildMetadata = "build.117"
override val buildDate = "2026-01-19T00:08:01.397532Z"
override val displayName = "Utility Library"
override val copyright = "Copyright (c) 2025-2026 Hartmut Bauer"
override val name = "util"