diff --git a/diktat/pom.xml b/diktat/pom.xml
index 66af555f35..1893b9cdec 100644
--- a/diktat/pom.xml
+++ b/diktat/pom.xml
@@ -18,6 +18,10 @@
diktat-rules
${project.version}
+
+ org.jetbrains.kotlinx
+ kotlinx-cli-jvm
+
org.cqfn.diktat
diff --git a/diktat/src/main/kotlin/org/cqfn/diktat/DiktatMain.kt b/diktat/src/main/kotlin/org/cqfn/diktat/DiktatMain.kt
index c53fdd5111..305caa4eb5 100644
--- a/diktat/src/main/kotlin/org/cqfn/diktat/DiktatMain.kt
+++ b/diktat/src/main/kotlin/org/cqfn/diktat/DiktatMain.kt
@@ -1,5 +1,58 @@
package org.cqfn.diktat
+import org.cqfn.diktat.api.DiktatLogLevel
+import org.cqfn.diktat.api.DiktatReporterType
+import org.cqfn.diktat.common.config.rules.DIKTAT_ANALYSIS_CONF
+import kotlinx.cli.ArgParser
+import kotlinx.cli.ArgType
+import kotlinx.cli.default
+
fun main(args: Array) {
+ val parser = ArgParser("diktat")
+ val configOption = parser.option(
+ type = ArgType.String,
+ fullName = "config",
+ shortName = "c",
+ description = """
+ Specify the location of the YAML configuration file.
+ By default, $DIKTAT_ANALYSIS_CONF in the current
+ directory is used.
+ """.trimIndent(),
+ ).default(DIKTAT_ANALYSIS_CONF)
+ val config: String by configOption
+
+ val formatOption = parser.option(
+ type = ArgType.Boolean,
+ fullName = "format",
+ shortName = "F",
+ description = "Fix any deviations from the code style."
+ ).default(false)
+ val format: Boolean by formatOption
+
+ val reporterOption = parser.option(
+ type = ArgType.Choice(),
+ fullName = "reporter",
+ shortName = "r",
+ description = "The reporter to use",
+ ).default(DiktatReporterType.PLAIN)
+ val reporter: DiktatReporterType by reporterOption
+
+ val outputOption = parser.option(
+ type = ArgType.String,
+ fullName = "output",
+ shortName = "o",
+ description = "Redirect the reporter output to a file.",
+ )
+ val output: String? by outputOption
+
+ val logLevelOption = parser.option(
+ type = ArgType.Choice(),
+ fullName = "log-level",
+ shortName = "l",
+ description = "Enable the output of specified level",
+ ).default(DiktatLogLevel.INFO)
+ val logLevel: DiktatLogLevel by logLevelOption
+
+ parser.parse(args)
}
diff --git a/diktat/src/main/kotlin/org/cqfn/diktat/api/DiktatLogLevel.kt b/diktat/src/main/kotlin/org/cqfn/diktat/api/DiktatLogLevel.kt
new file mode 100644
index 0000000000..a383b93201
--- /dev/null
+++ b/diktat/src/main/kotlin/org/cqfn/diktat/api/DiktatLogLevel.kt
@@ -0,0 +1,7 @@
+package org.cqfn.diktat.api
+
+enum class DiktatLogLevel {
+ DEBUG,
+ INFO,
+ TRACE,
+}
diff --git a/diktat/src/main/kotlin/org/cqfn/diktat/api/DiktatReporterType.kt b/diktat/src/main/kotlin/org/cqfn/diktat/api/DiktatReporterType.kt
new file mode 100644
index 0000000000..a39516b0a8
--- /dev/null
+++ b/diktat/src/main/kotlin/org/cqfn/diktat/api/DiktatReporterType.kt
@@ -0,0 +1,23 @@
+package org.cqfn.diktat.api
+
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+
+/**
+ * Type of reporting in `diktat`
+ */
+@Serializable
+enum class DiktatReporterType {
+ @SerialName("plain")
+ PLAIN,
+ @SerialName("plain_group_by_file")
+ PLAIN_GROUP_BY_FILE,
+ @SerialName("json")
+ JSON,
+ @SerialName("sarif")
+ SARIF,
+ @SerialName("checkstyle")
+ CHECKSTYLE,
+ @SerialName("html")
+ HTML,
+}
diff --git a/diktat/src/main/kotlin/org/cqfn/diktat/cli/DiktatProperties.kt b/diktat/src/main/kotlin/org/cqfn/diktat/cli/DiktatProperties.kt
index 11341cccf9..74d74f08ad 100644
--- a/diktat/src/main/kotlin/org/cqfn/diktat/cli/DiktatProperties.kt
+++ b/diktat/src/main/kotlin/org/cqfn/diktat/cli/DiktatProperties.kt
@@ -1,7 +1,10 @@
package org.cqfn.diktat.cli
+import org.cqfn.diktat.api.DiktatLogLevel
+
data class DiktatProperties(
val config: String,
val reporter: String,
val output: String,
+ val logLevel: DiktatLogLevel,
)
diff --git a/pom.xml b/pom.xml
index 1d24f62f83..1613a411e4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,7 @@
true
official
1.4.1
+ 0.3.5
0.47.1
5.9.1
1.9.1
@@ -132,6 +133,16 @@
kotlinx-serialization-json-jvm
${kotlinx.serialization.version}
+
+ org.jetbrains.kotlinx
+ kotlinx-cli
+ ${kotlinx-cli.version}
+
+
+ org.jetbrains.kotlinx
+ kotlinx-cli-jvm
+ ${kotlinx-cli.version}
+
com.pinterest.ktlint
ktlint-core