diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt index 3dc7cda1f39..a146de88406 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/CliArgs.kt @@ -173,6 +173,12 @@ class CliArgs : Args { ) var jvmTarget: JvmTarget = JvmTarget.DEFAULT + @Parameter( + names = ["--version"], + description = "Prints the detekt CLI version." + ) + var showVersion: Boolean = false + val inputPaths: List by lazy { MultipleExistingPathConverter().convert(input ?: System.getProperty("user.dir")) } diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/Main.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/Main.kt index 203df522d49..b2e5bbc2782 100644 --- a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/Main.kt +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/Main.kt @@ -8,6 +8,7 @@ import io.gitlab.arturbosch.detekt.cli.runners.ConfigExporter import io.gitlab.arturbosch.detekt.cli.runners.Executable import io.gitlab.arturbosch.detekt.cli.runners.Runner import io.gitlab.arturbosch.detekt.cli.runners.SingleRuleRunner +import io.gitlab.arturbosch.detekt.cli.runners.VersionPrinter import java.io.PrintStream import kotlin.system.exitProcess @@ -48,6 +49,7 @@ fun buildRunner( } } return when { + arguments.showVersion -> VersionPrinter(outputPrinter) arguments.generateConfig -> ConfigExporter(arguments) arguments.runRule != null -> SingleRuleRunner(arguments) arguments.printAst -> AstPrinter(arguments) diff --git a/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinter.kt b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinter.kt new file mode 100644 index 00000000000..81aa1c94229 --- /dev/null +++ b/detekt-cli/src/main/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinter.kt @@ -0,0 +1,16 @@ +package io.gitlab.arturbosch.detekt.cli.runners + +import io.gitlab.arturbosch.detekt.core.whichDetekt +import java.io.PrintStream + +class VersionPrinter(private val outputPrinter: PrintStream) : Executable { + + override fun execute() { + val version = whichDetekt() + if (version != null) { + outputPrinter.println(version) + } else { + throw IllegalStateException("Can't find the detekt version") + } + } +} diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/MainSpec.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/MainSpec.kt index 08230698e1c..50c6d67c732 100644 --- a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/MainSpec.kt +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/MainSpec.kt @@ -4,6 +4,7 @@ import io.gitlab.arturbosch.detekt.cli.runners.AstPrinter import io.gitlab.arturbosch.detekt.cli.runners.ConfigExporter import io.gitlab.arturbosch.detekt.cli.runners.Runner import io.gitlab.arturbosch.detekt.cli.runners.SingleRuleRunner +import io.gitlab.arturbosch.detekt.cli.runners.VersionPrinter import org.assertj.core.api.Assertions.assertThat import org.spekframework.spek2.Spek import org.spekframework.spek2.style.specification.describe @@ -22,10 +23,12 @@ class MainSpec : Spek({ arrayOf("--generate-config"), arrayOf("--run-rule", "Rule"), arrayOf("--print-ast"), + arrayOf("--version"), emptyArray() ).forEach { args -> val expectedRunnerClass = when { + args.contains("--version") -> VersionPrinter::class args.contains("--generate-config") -> ConfigExporter::class args.contains("--run-rule") -> SingleRuleRunner::class args.contains("--print-ast") -> AstPrinter::class diff --git a/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinterSpec.kt b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinterSpec.kt new file mode 100644 index 00000000000..940c5fa8210 --- /dev/null +++ b/detekt-cli/src/test/kotlin/io/gitlab/arturbosch/detekt/cli/runners/VersionPrinterSpec.kt @@ -0,0 +1,24 @@ +package io.gitlab.arturbosch.detekt.cli.runners + +import io.gitlab.arturbosch.detekt.core.Detektor +import org.assertj.core.api.Assertions.assertThat +import org.spekframework.spek2.Spek +import org.spekframework.spek2.style.specification.describe +import java.io.ByteArrayOutputStream +import java.io.PrintStream +import java.nio.charset.Charset + +class VersionPrinterSpec : Spek({ + + describe("version printer") { + + it("print the version") { + val byteArrayOutputStream = ByteArrayOutputStream() + + VersionPrinter(PrintStream(byteArrayOutputStream)).execute() + + assertThat(String(byteArrayOutputStream.toByteArray(), Charset.forName("UTF-8"))) + .isEqualTo("1.6.0" + System.lineSeparator()) + } + } +}) diff --git a/detekt-cli/src/test/resources/META-INF/MANIFEST.MF b/detekt-cli/src/test/resources/META-INF/MANIFEST.MF new file mode 100644 index 00000000000..59f281cd2e4 --- /dev/null +++ b/detekt-cli/src/test/resources/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +DetektVersion: 1.6.0 +