-
-
Notifications
You must be signed in to change notification settings - Fork 755
/
Main.kt
58 lines (54 loc) · 2.02 KB
/
Main.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@file:JvmName("Main")
package io.gitlab.arturbosch.detekt.cli
import io.gitlab.arturbosch.detekt.cli.config.InvalidConfig
import io.gitlab.arturbosch.detekt.cli.runners.AstPrinter
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
@Suppress("TooGenericExceptionCaught")
fun main(args: Array<String>) {
try {
buildRunner(args).execute()
} catch (_: HelpRequest) {
// handled by JCommander, exit normally
} catch (e: InvalidConfig) {
println(e.message)
exitProcess(ExitCode.INVALID_CONFIG.number)
} catch (e: BuildFailure) {
println(e.message)
exitProcess(ExitCode.MAX_ISSUES_REACHED.number)
} catch (e: HandledArgumentViolation) {
// messages are handled when parsing arguments
exitProcess(ExitCode.UNEXPECTED_DETEKT_ERROR.number)
} catch (e: Exception) {
e.printStackTrace()
exitProcess(ExitCode.UNEXPECTED_DETEKT_ERROR.number)
}
exitProcess(ExitCode.NORMAL_RUN.number)
}
fun buildRunner(
args: Array<String>,
outputPrinter: PrintStream = System.out,
errorPrinter: PrintStream = System.err
): Executable {
val arguments = parseArguments<CliArgs>(
args,
outputPrinter,
errorPrinter
) { messages ->
if (createBaseline && baseline == null) {
messages += "Creating a baseline.xml requires the --baseline parameter to specify a path."
}
}
return when {
arguments.showVersion -> VersionPrinter(outputPrinter)
arguments.generateConfig -> ConfigExporter(arguments)
arguments.runRule != null -> SingleRuleRunner(arguments)
arguments.printAst -> AstPrinter(arguments)
else -> Runner(arguments, outputPrinter, errorPrinter)
}
}