From 5fb563d9ee1d46db1444c1201f768a6c84f5e7e4 Mon Sep 17 00:00:00 2001 From: Martin Visser Date: Mon, 23 Oct 2023 09:10:28 +0200 Subject: [PATCH] Reformat based on ktlint 3 plugin --- .../zsh/ZshAutocompletionGenerator.kt | 24 ++++---- .../zsh/ZshAutocompletionTemplate.kt | 60 ++++++++++--------- .../rabobank/ret/command/ConfigureCommand.kt | 4 +- .../ret/config/CommandLineConfiguration.kt | 15 +++-- .../rabobank/ret/config/EnvironmentManager.kt | 5 +- .../ret/config/ExceptionMessageHandler.kt | 26 ++++---- .../rabobank/ret/context/ExecutionContext.kt | 3 +- .../io/rabobank/ret/context/GitContext.kt | 1 - .../ret/plugins/PluginExtensionLoader.kt | 6 +- .../io/rabobank/ret/plugins/PluginLoader.kt | 23 +++---- .../ret/command/ConfigureCommandTest.kt | 1 - .../io/rabobank/ret/context/GitContextTest.kt | 12 ++-- .../rabobank/ret/plugins/PluginLoaderTest.kt | 7 ++- .../ret/util/ExceptionMessageHandlerTest.kt | 19 +++--- .../kotlin/io/rabobank/ret/IntelliSearch.kt | 10 ++-- .../main/kotlin/io/rabobank/ret/RetConsole.kt | 11 ++-- .../io/rabobank/ret/configuration/Config.kt | 10 +++- .../ret/configuration/Configurable.kt | 16 +++-- .../rabobank/ret/configuration/RetConfig.kt | 10 +++- .../ret/configuration/version/MdcConfig.kt | 5 +- .../version/RetVersionProvider.kt | 1 - .../version/VersionProperties.kt | 1 - .../ret/picocli/mixin/ContextAwareness.kt | 1 - .../io/rabobank/ret/util/BrowserUtils.kt | 1 - .../util/CommaDelimitedToListDeserializer.kt | 6 +- .../ret/util/CommandLoggingInterceptor.kt | 1 - .../io/rabobank/ret/util/IntrospectionUtil.kt | 43 +++++++------ .../io/rabobank/ret/IntelliSearchTest.kt | 7 ++- 28 files changed, 191 insertions(+), 138 deletions(-) diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/autocompletion/zsh/ZshAutocompletionGenerator.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/autocompletion/zsh/ZshAutocompletionGenerator.kt index d2465aa..36b2ecc 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/autocompletion/zsh/ZshAutocompletionGenerator.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/autocompletion/zsh/ZshAutocompletionGenerator.kt @@ -8,7 +8,6 @@ private const val SHEBANG = "#!/bin/zsh" @ApplicationScoped class ZshAutocompletionGenerator(private val template: ZshAutocompletionTemplate) { - /** * This function generates the full ZSH autocompletion script for the command that's provided and all subcommands */ @@ -40,14 +39,16 @@ class ZshAutocompletionGenerator(private val template: ZshAutocompletionTemplate ): List { val functionName = "${functionPrefix}_${commandLine.commandName}" - val subcommands = commandLine.subcommands.values - .filterNot { it.commandSpec.usageMessage().hidden() } - .sortedBy { it.commandName } + val subcommands = + commandLine.subcommands.values + .filterNot { it.commandSpec.usageMessage().hidden() } + .sortedBy { it.commandName } - val options = commandLine.commandSpec - .options() - .filterNot { it.hidden() } - .sortedBy { it.shortestName() } + val options = + commandLine.commandSpec + .options() + .filterNot { it.hidden() } + .sortedBy { it.shortestName() } val positionalParameters = commandLine.commandSpec.positionalParameters() @@ -56,9 +57,10 @@ class ZshAutocompletionGenerator(private val template: ZshAutocompletionTemplate return if (shouldGenerateFunction) { val function = template.applyForCommand(functionName, subcommands, positionalParameters, options, isRootFunction) - val subcommandFunctions = subcommands.flatMap { - generateFunctionForCommandsRecursively(it, functionName, false) - } + val subcommandFunctions = + subcommands.flatMap { + generateFunctionForCommandsRecursively(it, functionName, false) + } listOf(function) + subcommandFunctions } else { listOf() diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/autocompletion/zsh/ZshAutocompletionTemplate.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/autocompletion/zsh/ZshAutocompletionTemplate.kt index 8392c0a..405f54a 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/autocompletion/zsh/ZshAutocompletionTemplate.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/autocompletion/zsh/ZshAutocompletionTemplate.kt @@ -10,7 +10,6 @@ private const val AUTOCOMPLETION_FUNCTION_PREFIX = "function:" @ApplicationScoped class ZshAutocompletionTemplate { - /** * Generates a ZSH function for a command containing either subcommands * or positional parameters and possibly options(/flags). @@ -22,11 +21,12 @@ class ZshAutocompletionTemplate { options: List, isRootFunction: Boolean, ): String { - val commandOrParameterSpecActionPairs = when { - subcommands.isNotEmpty() -> generateSubcommandSpecActionPairs(subcommands, functionName) - positionalParameters.isNotEmpty() -> generatePositionalParameterSpecActionPairs(positionalParameters) - else -> emptyList() - } + val commandOrParameterSpecActionPairs = + when { + subcommands.isNotEmpty() -> generateSubcommandSpecActionPairs(subcommands, functionName) + positionalParameters.isNotEmpty() -> generatePositionalParameterSpecActionPairs(positionalParameters) + else -> emptyList() + } val allSpecActionPairs = commandOrParameterSpecActionPairs + generateOptionSpecActionPairs(options) @@ -54,22 +54,25 @@ function $functionName() { subcommands: List, parentFunctionName: String, ): List { - val overviewValues = subcommands.joinToString(" ") { - val description = it.commandSpec.usageMessage().description().firstOrNull() ?: "" - "'${it.commandName}[$description]'" - } + val overviewValues = + subcommands.joinToString(" ") { + val description = it.commandSpec.usageMessage().description().firstOrNull() ?: "" + "'${it.commandName}[$description]'" + } val overviewTitle = parentFunctionName.replace("_", " ") - val subcommandOverview = ArgumentSpecActionPair( - "\"1:$overviewTitle subcommands:->subcommands_overview\"", - "subcommands_overview) _values \"autocompletion candidates\" $overviewValues;;", - ) - - val subcommandActions = ArgumentSpecActionPair( - "\"*::arg:->call_subcommand\"", - "call_subcommand) function=\"${parentFunctionName}_${'$'}{line[1]}\"; " + - "_call_function_if_exists \"${'$'}function\";;", - ) + val subcommandOverview = + ArgumentSpecActionPair( + "\"1:$overviewTitle subcommands:->subcommands_overview\"", + "subcommands_overview) _values \"autocompletion candidates\" $overviewValues;;", + ) + + val subcommandActions = + ArgumentSpecActionPair( + "\"*::arg:->call_subcommand\"", + "call_subcommand) function=\"${parentFunctionName}_${'$'}{line[1]}\"; " + + "_call_function_if_exists \"${'$'}function\";;", + ) return listOf(subcommandOverview, subcommandActions) } @@ -77,13 +80,14 @@ function $functionName() { private fun generateOptionSpecActionPairs(options: List) = options.withIndex().map { val orderedOptionNames = it.value.names().sortedBy { name -> name.length } - val namesDefinition = if (orderedOptionNames.size == 1) { - it.value.names()[0] - } else { - val optionNamesSpaceSeparated = orderedOptionNames.joinToString(" ") - val optionNamesCommaSeparated = orderedOptionNames.joinToString(",") - "($optionNamesSpaceSeparated)'{$optionNamesCommaSeparated}'" - } + val namesDefinition = + if (orderedOptionNames.size == 1) { + it.value.names()[0] + } else { + val optionNamesSpaceSeparated = orderedOptionNames.joinToString(" ") + val optionNamesCommaSeparated = orderedOptionNames.joinToString(",") + "($optionNamesSpaceSeparated)'{$optionNamesCommaSeparated}'" + } val description = it.value.description().joinToString("") val isFlagOption = it.value.type() == java.lang.Boolean.TYPE || it.value.type() == Boolean::class.java @@ -153,6 +157,8 @@ function $functionName() { sealed interface AutoCompleteAction data object NoAction : AutoCompleteAction + data class FunctionCallAction(val functionName: String) : AutoCompleteAction + data class StaticValuesAction(val staticValues: String) : AutoCompleteAction } diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/command/ConfigureCommand.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/command/ConfigureCommand.kt index afd162a..50c40d4 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/command/ConfigureCommand.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/command/ConfigureCommand.kt @@ -26,7 +26,9 @@ class ConfigureCommand( name = "autocomplete", description = ["Prints the command to install autocomplete. Supported shells are: zsh"], ) - fun printInstallAutocompleteCommand(@Parameters(description = ["shells"]) shell: String) { + fun printInstallAutocompleteCommand( + @Parameters(description = ["shells"]) shell: String, + ) { if (shell.lowercase() == "zsh") { printConfigureZsh() } else { diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/config/CommandLineConfiguration.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/config/CommandLineConfiguration.kt index c5983cd..a2a09b9 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/config/CommandLineConfiguration.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/config/CommandLineConfiguration.kt @@ -11,13 +11,16 @@ import picocli.CommandLine.Help.ColorScheme @ApplicationScoped class CommandLineConfiguration(private val pluginLoader: PluginLoader) { - @Produces - fun customCommandLine(factory: PicocliCommandLineFactory, retConsole: RetConsole): CommandLine { - val commandLine = factory.create() - .setExecutionExceptionHandler(ExceptionMessageHandler(retConsole)) - .setExecutionStrategy { CommandLine.RunLast().execute(it) } - .setColorScheme(ColorScheme.Builder().ansi(AUTO).build()) + fun customCommandLine( + factory: PicocliCommandLineFactory, + retConsole: RetConsole, + ): CommandLine { + val commandLine = + factory.create() + .setExecutionExceptionHandler(ExceptionMessageHandler(retConsole)) + .setExecutionStrategy { CommandLine.RunLast().execute(it) } + .setColorScheme(ColorScheme.Builder().ansi(AUTO).build()) pluginLoader.getPluginCommands(commandLine).forEach { commandLine.addSubcommand(it.name, it.commandSpec) diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/config/EnvironmentManager.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/config/EnvironmentManager.kt index 9246d38..a672015 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/config/EnvironmentManager.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/config/EnvironmentManager.kt @@ -9,9 +9,10 @@ import org.eclipse.microprofile.config.inject.ConfigProperty @ApplicationScoped class EnvironmentManager { - @Produces - fun environment(@ConfigProperty(name = "ret.env", defaultValue = "CLI") retEnvironment: String): Environment = + fun environment( + @ConfigProperty(name = "ret.env", defaultValue = "CLI") retEnvironment: String, + ): Environment = runCatching { Log.debug("ret.env value is $retEnvironment") valueOf(retEnvironment) diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/config/ExceptionMessageHandler.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/config/ExceptionMessageHandler.kt index 22f05dc..bf61dcb 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/config/ExceptionMessageHandler.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/config/ExceptionMessageHandler.kt @@ -7,16 +7,18 @@ import picocli.CommandLine.IExecutionExceptionHandler import picocli.CommandLine.ParseResult class ExceptionMessageHandler(private val retConsole: RetConsole) : IExecutionExceptionHandler { - - override fun handleExecutionException(ex: Exception, commandLine: CommandLine, parseResult: ParseResult) = - if (ex is IllegalArgumentException) { - Log.warn("Input error occurred", ex) - ex.message?.let { retConsole.errorOut(it) } - retConsole.errorOut(commandLine.usageMessage) - commandLine.commandSpec.exitCodeOnInvalidInput() - } else { - ex.message?.let { retConsole.errorOut(it) } - Log.error("An error occurred", ex) - commandLine.commandSpec.exitCodeOnExecutionException() - } + override fun handleExecutionException( + ex: Exception, + commandLine: CommandLine, + parseResult: ParseResult, + ) = if (ex is IllegalArgumentException) { + Log.warn("Input error occurred", ex) + ex.message?.let { retConsole.errorOut(it) } + retConsole.errorOut(commandLine.usageMessage) + commandLine.commandSpec.exitCodeOnInvalidInput() + } else { + ex.message?.let { retConsole.errorOut(it) } + Log.error("An error occurred", ex) + commandLine.commandSpec.exitCodeOnExecutionException() + } } diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/context/ExecutionContext.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/context/ExecutionContext.kt index b3789ce..a306b13 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/context/ExecutionContext.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/context/ExecutionContext.kt @@ -5,10 +5,11 @@ import jakarta.enterprise.context.ApplicationScoped @ApplicationScoped class ExecutionContext(private val versionProperties: VersionProperties = VersionProperties()) { - private val gitContext = GitContext.create() fun repositoryName() = gitContext?.repositoryName() + fun branchName() = gitContext?.branchName() + fun version() = versionProperties.getAppVersion() } diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/context/GitContext.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/context/GitContext.kt index 5eaf1d3..80e7f30 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/context/GitContext.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/context/GitContext.kt @@ -4,7 +4,6 @@ import org.eclipse.jgit.lib.Repository import org.eclipse.jgit.storage.file.FileRepositoryBuilder internal class GitContext internal constructor(private val repository: Repository) { - fun repositoryName(): String? { val remoteOriginURL: String? = repository.config.getString("remote", "origin", "url") return remoteOriginURL?.substringAfterLast("/") diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/plugins/PluginExtensionLoader.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/plugins/PluginExtensionLoader.kt index 2da3efb..d311c60 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/plugins/PluginExtensionLoader.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/plugins/PluginExtensionLoader.kt @@ -13,11 +13,13 @@ import kotlin.io.path.walk @ApplicationScoped class PluginExtensionLoader { - @OptIn(ExperimentalPathApi::class) @Produces @ApplicationScoped - fun plugins(osUtils: OsUtils, objectMapper: ObjectMapper): List = + fun plugins( + osUtils: OsUtils, + objectMapper: ObjectMapper, + ): List = osUtils.getRetPluginsDirectory().let { pluginPath -> pluginPath.walk() .map(Path::toFile) diff --git a/ret-cli/src/main/kotlin/io/rabobank/ret/plugins/PluginLoader.kt b/ret-cli/src/main/kotlin/io/rabobank/ret/plugins/PluginLoader.kt index 7f136ef..f0c0cad 100644 --- a/ret-cli/src/main/kotlin/io/rabobank/ret/plugins/PluginLoader.kt +++ b/ret-cli/src/main/kotlin/io/rabobank/ret/plugins/PluginLoader.kt @@ -21,7 +21,6 @@ class PluginLoader( private val executionContext: ExecutionContext, private val environment: Environment, ) { - fun getPluginCommands(commandLine: CommandLine): List = plugins.flatMap { plugin -> plugin.pluginDefinition.commands.map { @@ -36,14 +35,15 @@ class PluginLoader( commandLine: CommandLine, plugin: Plugin, ): CommandSpec { - val commandSpec = CommandSpec.wrapWithoutInspection( - Runnable { - System.load(plugin.pluginLocation.pathString) - val retContext = createRetContext(commandLine.parseResult, topCommand) - val isolate = RetPlugin.createIsolate() - RetPlugin.invoke(isolate, objectMapper.writeValueAsString(retContext)) - }, - ) + val commandSpec = + CommandSpec.wrapWithoutInspection( + Runnable { + System.load(plugin.pluginLocation.pathString) + val retContext = createRetContext(commandLine.parseResult, topCommand) + val isolate = RetPlugin.createIsolate() + RetPlugin.invoke(isolate, objectMapper.writeValueAsString(retContext)) + }, + ) commandSpec.usageMessage().description(command.description) commandSpec.usageMessage().hidden(command.hidden) @@ -75,7 +75,10 @@ class PluginLoader( return commandSpec } - private fun createRetContext(parseResult: ParseResult, topCommand: String): RetContext = + private fun createRetContext( + parseResult: ParseResult, + topCommand: String, + ): RetContext = RetContext( parseResult.originalArgs().filter { it != topCommand }, environment.name, diff --git a/ret-cli/src/test/kotlin/io/rabobank/ret/command/ConfigureCommandTest.kt b/ret-cli/src/test/kotlin/io/rabobank/ret/command/ConfigureCommandTest.kt index 7721848..51b3fae 100644 --- a/ret-cli/src/test/kotlin/io/rabobank/ret/command/ConfigureCommandTest.kt +++ b/ret-cli/src/test/kotlin/io/rabobank/ret/command/ConfigureCommandTest.kt @@ -10,7 +10,6 @@ import org.junit.jupiter.api.Test import picocli.CommandLine.Model.CommandSpec internal class ConfigureCommandTest { - private lateinit var command: ConfigureCommand private val retConsole = mockk(relaxed = true) diff --git a/ret-cli/src/test/kotlin/io/rabobank/ret/context/GitContextTest.kt b/ret-cli/src/test/kotlin/io/rabobank/ret/context/GitContextTest.kt index 12093e2..e43b271 100644 --- a/ret-cli/src/test/kotlin/io/rabobank/ret/context/GitContextTest.kt +++ b/ret-cli/src/test/kotlin/io/rabobank/ret/context/GitContextTest.kt @@ -7,17 +7,17 @@ import org.eclipse.jgit.lib.Repository import org.junit.jupiter.api.Test internal class GitContextTest { - private val mockedGitRepository = mockk() private val gitContext = GitContext(mockedGitRepository) @Test fun getRepositoryFromRemoteURL() { - every { mockedGitRepository.config } returns mockk { - every { - getString("remote", "origin", "url") - } returns "git@ssh.dev.azure.com:v3/raboweb/Skunk%20Works/rabobank-engineering-tools" - } + every { mockedGitRepository.config } returns + mockk { + every { + getString("remote", "origin", "url") + } returns "git@ssh.dev.azure.com:v3/raboweb/Skunk%20Works/rabobank-engineering-tools" + } val actualRepositoryName = gitContext.repositoryName() diff --git a/ret-cli/src/test/kotlin/io/rabobank/ret/plugins/PluginLoaderTest.kt b/ret-cli/src/test/kotlin/io/rabobank/ret/plugins/PluginLoaderTest.kt index d66695f..7711fb2 100644 --- a/ret-cli/src/test/kotlin/io/rabobank/ret/plugins/PluginLoaderTest.kt +++ b/ret-cli/src/test/kotlin/io/rabobank/ret/plugins/PluginLoaderTest.kt @@ -62,9 +62,10 @@ class PluginLoaderTest { } private fun loadPlugin(file: String): Plugin { - val definition = this.javaClass.classLoader.getResourceAsStream("testdata/$file")!! - .bufferedReader() - .readText() + val definition = + this.javaClass.classLoader.getResourceAsStream("testdata/$file")!! + .bufferedReader() + .readText() return objectMapper.readValue(definition, PluginDefinition::class.java).let { Plugin(it, Path.of(it.libName)) diff --git a/ret-cli/src/test/kotlin/io/rabobank/ret/util/ExceptionMessageHandlerTest.kt b/ret-cli/src/test/kotlin/io/rabobank/ret/util/ExceptionMessageHandlerTest.kt index c5d9ff0..8624d5b 100644 --- a/ret-cli/src/test/kotlin/io/rabobank/ret/util/ExceptionMessageHandlerTest.kt +++ b/ret-cli/src/test/kotlin/io/rabobank/ret/util/ExceptionMessageHandlerTest.kt @@ -11,17 +11,17 @@ import picocli.CommandLine import picocli.CommandLine.Model.CommandSpec class ExceptionMessageHandlerTest { - private val retConsole = mockk(relaxed = true) private val exceptionHandler = ExceptionMessageHandler(retConsole) @Test fun `another exception results in exit code 1`() { val ex = IllegalStateException("Boom!") - val commandLine = mockk { - every { usageMessage } returns "Use this correctly" - every { commandSpec } returns CommandSpec.create() - } + val commandLine = + mockk { + every { usageMessage } returns "Use this correctly" + every { commandSpec } returns CommandSpec.create() + } val exitCode = exceptionHandler.handleExecutionException(ex, commandLine, mockk()) @@ -32,10 +32,11 @@ class ExceptionMessageHandlerTest { @Test fun `illegal argument results in exit code 2`() { val ex = IllegalArgumentException("Boom!") - val commandLine = mockk { - every { usageMessage } returns "Use this correctly" - every { commandSpec } returns CommandSpec.create() - } + val commandLine = + mockk { + every { usageMessage } returns "Use this correctly" + every { commandSpec } returns CommandSpec.create() + } val exitCode = exceptionHandler.handleExecutionException(ex, commandLine, mockk()) diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/IntelliSearch.kt b/ret-core/src/main/kotlin/io/rabobank/ret/IntelliSearch.kt index 0a3f762..450b457 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/IntelliSearch.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/IntelliSearch.kt @@ -33,11 +33,10 @@ data class FilterRound(val filter: String, val startIndex: Int, val endIndex: In */ @ApplicationScoped class IntelliSearch { - companion object { + private const val MAX_LOOP_ROUNDS = 1000 val BREAK_CHARACTER_REGEX = "[\\s_-]+".toRegex() val UPPERCASE_REGEX = "(?=\\p{Upper})".toRegex() - private const val maxLoopRounds = 1000 } /** @@ -46,7 +45,10 @@ class IntelliSearch { * Example: [filter] "as" will positively match "Admin Service". * @return whether the result is a match. */ - fun matches(filter: String, candidate: String): Boolean { + fun matches( + filter: String, + candidate: String, + ): Boolean { if (BREAK_CHARACTER_REGEX.replace(candidate, "").contains(BREAK_CHARACTER_REGEX.replace(filter, ""), true)) { return true } @@ -68,7 +70,7 @@ class IntelliSearch { var loopRounds = 0 var lastSearchHit: SearchHit? = null - filterPartLoop@ while (!filterRound.hasSucceeded() && loopRounds++ < maxLoopRounds) { + filterPartLoop@ while (!filterRound.hasSucceeded() && loopRounds++ < MAX_LOOP_ROUNDS) { val filterPart = filterRound.value Log.trace("Searching filterPart $filterRound") diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/RetConsole.kt b/ret-core/src/main/kotlin/io/rabobank/ret/RetConsole.kt index fbb7549..eb12653 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/RetConsole.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/RetConsole.kt @@ -12,9 +12,9 @@ import picocli.CommandLine.ParseResult */ @ApplicationScoped class RetConsole(parseResult: ParseResult) { - - private val commandLine = parseResult.commandSpec().commandLine() - .setColorScheme(ColorScheme.Builder().ansi(CommandLine.Help.Ansi.AUTO).build()) + private val commandLine = + parseResult.commandSpec().commandLine() + .setColorScheme(ColorScheme.Builder().ansi(CommandLine.Help.Ansi.AUTO).build()) /** * Prints the [message] to the user. @@ -34,7 +34,10 @@ class RetConsole(parseResult: ParseResult) { * Prompts the user with [message] and mentions the [currentValue], if provided before. * @return the answer, as entered by the user. */ - fun prompt(message: String, currentValue: String?): String { + fun prompt( + message: String, + currentValue: String?, + ): String { val messageWithDefault = if (currentValue.isNullOrEmpty()) message else "$message [$currentValue]" out(messageWithDefault) return readln() diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/Config.kt b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/Config.kt index a773672..d710150 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/Config.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/Config.kt @@ -4,9 +4,17 @@ import java.nio.file.Path interface Config { operator fun get(key: String): Any? - operator fun set(key: String, value: Any?) + + operator fun set( + key: String, + value: Any?, + ) + fun load(): PluginConfig + fun configure(function: (ConfigurationProperty) -> Unit) + fun configFile(): Path + fun pluginConfigDirectory(): Path } diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/Configurable.kt b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/Configurable.kt index d33bf48..3d899c0 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/Configurable.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/Configurable.kt @@ -107,7 +107,10 @@ class PluginConfig(val config: MutableMap) { } } - operator fun set(key: String, value: Any?) { + operator fun set( + key: String, + value: Any?, + ) { config[key] = value } } @@ -115,11 +118,12 @@ class PluginConfig(val config: MutableMap) { class PluginConfigLoader(pluginName: String, private val objectMapper: ObjectMapper, osUtils: OsUtils) { private val pluginFile = osUtils.getPluginConfig(pluginName).toFile() - fun load() = PluginConfig( - runCatching { objectMapper.readValue>(pluginFile) } - .getOrDefault(emptyMap()) - .toMutableMap(), - ) + fun load() = + PluginConfig( + runCatching { objectMapper.readValue>(pluginFile) } + .getOrDefault(emptyMap()) + .toMutableMap(), + ) fun saveAndReload(pluginConfig: PluginConfig): PluginConfig { if (!pluginFile.parentFile.exists() && !pluginFile.parentFile.mkdirs()) { diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/RetConfig.kt b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/RetConfig.kt index 238958d..11f78e6 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/RetConfig.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/RetConfig.kt @@ -50,8 +50,9 @@ class RetConfig( } private fun migrateConfig() { - val oldProperties = Properties() - .apply { load(oldConfigFile.inputStream()) } + val oldProperties = + Properties() + .apply { load(oldConfigFile.inputStream()) } properties = objectMapper.convertValue>(oldProperties) if (!oldConfigFile.renameTo(oldConfigFileBackup)) { @@ -71,7 +72,10 @@ class RetConfig( * Set the [value] to property [key] in the user configurations. * This is automatically called when initializing a plugin, so you normally do not call this yourself. */ - override operator fun set(key: String, value: Any?) { + override operator fun set( + key: String, + value: Any?, + ) { properties[key] = value } diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/MdcConfig.kt b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/MdcConfig.kt index 7d5c33e..e306910 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/MdcConfig.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/MdcConfig.kt @@ -13,9 +13,10 @@ import org.jboss.logging.MDC */ @ApplicationScoped class MdcConfig(private val versionProperties: VersionProperties) { - @Suppress("unused") - fun onStart(@Observes ev: StartupEvent) { + fun onStart( + @Observes ev: StartupEvent, + ) { MDC.put("os", versionProperties.getOs()) MDC.put("version", versionProperties.getAppVersion()) MDC.put("commit", versionProperties.getCommitHash()) diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/RetVersionProvider.kt b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/RetVersionProvider.kt index 42c5a1f..ab5a479 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/RetVersionProvider.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/RetVersionProvider.kt @@ -15,7 +15,6 @@ import picocli.CommandLine @ApplicationScoped class RetVersionProvider(private val versionProperties: VersionProperties = VersionProperties()) : CommandLine.IVersionProvider { - override fun getVersion() = arrayOf( "RET Version: ${versionProperties.getAppVersion()}", diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/VersionProperties.kt b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/VersionProperties.kt index ee987d7..2c389b1 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/VersionProperties.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/configuration/version/VersionProperties.kt @@ -14,7 +14,6 @@ private const val GIT_PROPERTIES = "git.properties" */ @ApplicationScoped class VersionProperties { - private val properties = Properties() private val config = ConfigProvider.getConfig() diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/picocli/mixin/ContextAwareness.kt b/ret-core/src/main/kotlin/io/rabobank/ret/picocli/mixin/ContextAwareness.kt index 2727d00..f0f3524 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/picocli/mixin/ContextAwareness.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/picocli/mixin/ContextAwareness.kt @@ -12,7 +12,6 @@ import picocli.CommandLine.Option */ @Command class ContextAwareness { - @Option( names = ["--ignore-context-aware", "-ica"], description = ["Ignore context awareness"], diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/util/BrowserUtils.kt b/ret-core/src/main/kotlin/io/rabobank/ret/util/BrowserUtils.kt index b6200c7..3112d0d 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/util/BrowserUtils.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/util/BrowserUtils.kt @@ -13,7 +13,6 @@ import java.net.URL */ @ApplicationScoped class BrowserUtils { - /** * Open the provided [url] in a browser. */ diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/util/CommaDelimitedToListDeserializer.kt b/ret-core/src/main/kotlin/io/rabobank/ret/util/CommaDelimitedToListDeserializer.kt index 9c41461..3b13fe2 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/util/CommaDelimitedToListDeserializer.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/util/CommaDelimitedToListDeserializer.kt @@ -6,8 +6,10 @@ import com.fasterxml.jackson.databind.deser.std.StdDeserializer import java.io.Serial class CommaDelimitedToListDeserializer : StdDeserializer>(String::class.java) { - override fun deserialize(p: JsonParser, ctxt: DeserializationContext?) = - p.valueAsString?.run { split(",").map { it.trim() } }.orEmpty() + override fun deserialize( + p: JsonParser, + ctxt: DeserializationContext?, + ) = p.valueAsString?.run { split(",").map { it.trim() } }.orEmpty() companion object { @Serial diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/util/CommandLoggingInterceptor.kt b/ret-core/src/main/kotlin/io/rabobank/ret/util/CommandLoggingInterceptor.kt index 9f1d47c..8d20d6e 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/util/CommandLoggingInterceptor.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/util/CommandLoggingInterceptor.kt @@ -18,7 +18,6 @@ annotation class Logged @Logged @Priority(0) class CommandLoggingInterceptor { - @AroundInvoke fun intercept(context: InvocationContext): Any? { val targetClass = context.method.declaringClass.name diff --git a/ret-core/src/main/kotlin/io/rabobank/ret/util/IntrospectionUtil.kt b/ret-core/src/main/kotlin/io/rabobank/ret/util/IntrospectionUtil.kt index 3147c27..64849d4 100644 --- a/ret-core/src/main/kotlin/io/rabobank/ret/util/IntrospectionUtil.kt +++ b/ret-core/src/main/kotlin/io/rabobank/ret/util/IntrospectionUtil.kt @@ -7,8 +7,10 @@ import io.rabobank.ret.plugin.PluginDefinition import picocli.CommandLine.Model.CommandSpec object IntrospectionUtil { - - fun introspect(commandSpec: CommandSpec, pluginName: String) = PluginDefinition( + fun introspect( + commandSpec: CommandSpec, + pluginName: String, + ) = PluginDefinition( pluginName, listOf(generateCommand(commandSpec)), loadCustomZshAutocompletion(), @@ -22,23 +24,30 @@ object IntrospectionUtil { private fun generateCommand(commandSpec: CommandSpec): PluginCommand { val commandName = commandSpec.name() - val arguments = commandSpec.positionalParameters().map { - Argument( - it.paramLabel(), - it.index().toString(), - it.completionCandidates()?.toList() ?: emptyList(), - it.arity().toString(), - ) - } - val options = commandSpec.options() - .map { - Option(it.names().toList(), it.type().canonicalName, it.completionCandidates()?.toList() ?: emptyList()) + val arguments = + commandSpec.positionalParameters().map { + Argument( + it.paramLabel(), + it.index().toString(), + it.completionCandidates()?.toList() ?: emptyList(), + it.arity().toString(), + ) } + val options = + commandSpec.options() + .map { + Option( + it.names().toList(), + it.type().canonicalName, + it.completionCandidates()?.toList() ?: emptyList(), + ) + } - val subcommands = commandSpec.subcommands().values - .map { - generateCommand(it.commandSpec) - } + val subcommands = + commandSpec.subcommands().values + .map { + generateCommand(it.commandSpec) + } val description = commandSpec.usageMessage().description().joinToString(" | ") diff --git a/ret-core/src/test/kotlin/io/rabobank/ret/IntelliSearchTest.kt b/ret-core/src/test/kotlin/io/rabobank/ret/IntelliSearchTest.kt index a576f52..e273750 100644 --- a/ret-core/src/test/kotlin/io/rabobank/ret/IntelliSearchTest.kt +++ b/ret-core/src/test/kotlin/io/rabobank/ret/IntelliSearchTest.kt @@ -6,7 +6,6 @@ import org.junit.jupiter.params.provider.Arguments import org.junit.jupiter.params.provider.MethodSource internal class IntelliSearchTest { - companion object { @JvmStatic fun arguments(): List = @@ -39,7 +38,11 @@ internal class IntelliSearchTest { @ParameterizedTest @MethodSource("arguments") - fun test(filter: String, candidate: String, expectedValue: Boolean) { + fun test( + filter: String, + candidate: String, + expectedValue: Boolean, + ) { assertThat(target.matches(filter, candidate)).isEqualTo(expectedValue) } }