From 2e542920103129c4e43d2a2e014175050d43d3b1 Mon Sep 17 00:00:00 2001 From: "kiloconnect[bot]" <240665456+kiloconnect[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 13:52:55 +0000 Subject: [PATCH] feat(jetbrains): add detekt for cyclomatic complexity and file size limits Adds detekt static analysis to enforce complexity and file size caps in kilo-jetbrains, mirroring the ESLint complexity/max-lines rules used by the VS Code extension. --- packages/kilo-jetbrains/build.gradle.kts | 14 +++++++++ packages/kilo-jetbrains/detekt.yml | 30 +++++++++++++++++++ .../kilo-jetbrains/gradle/libs.versions.toml | 2 ++ 3 files changed, 46 insertions(+) create mode 100644 packages/kilo-jetbrains/detekt.yml diff --git a/packages/kilo-jetbrains/build.gradle.kts b/packages/kilo-jetbrains/build.gradle.kts index 3f7698cd3c3..4b3e02952db 100644 --- a/packages/kilo-jetbrains/build.gradle.kts +++ b/packages/kilo-jetbrains/build.gradle.kts @@ -9,6 +9,7 @@ plugins { application id("java") alias(libs.plugins.intellij.platform) + alias(libs.plugins.detekt) alias(libs.plugins.kotlin) apply false alias(libs.plugins.kotlin.serialization) apply false @@ -17,6 +18,19 @@ plugins { subprojects { apply(plugin = "org.jetbrains.intellij.platform.module") + apply(plugin = "io.gitlab.arturbosch.detekt") + + detekt { + config.setFrom(rootProject.file("detekt.yml")) + buildUponDefaultConfig = true + source.setFrom("src/main/kotlin") + } +} + +detekt { + config.setFrom(file("detekt.yml")) + buildUponDefaultConfig = true + source.setFrom("src/main/kotlin") } allprojects { diff --git a/packages/kilo-jetbrains/detekt.yml b/packages/kilo-jetbrains/detekt.yml new file mode 100644 index 00000000000..e5e889fa4d8 --- /dev/null +++ b/packages/kilo-jetbrains/detekt.yml @@ -0,0 +1,30 @@ +# Detekt configuration for kilo-jetbrains. +# +# Enforces file size and cyclomatic complexity limits — the Kotlin +# equivalent of the ESLint complexity/max-lines rules used by the +# VS Code extension (packages/kilo-vscode/eslint.config.mjs). +# +# New code must stay within the default limits. Do not raise these +# caps; refactor instead. + +complexity: + CyclomaticComplexMethod: + active: true + threshold: 15 + LongMethod: + active: true + threshold: 60 + LargeClass: + active: true + threshold: 600 + TooManyFunctions: + active: true + threshold: 15 + ComplexCondition: + active: true + threshold: 4 + LongParameterList: + active: false + NestedBlockDepth: + active: true + threshold: 4 diff --git a/packages/kilo-jetbrains/gradle/libs.versions.toml b/packages/kilo-jetbrains/gradle/libs.versions.toml index 6d236a36ae1..964f07922a7 100644 --- a/packages/kilo-jetbrains/gradle/libs.versions.toml +++ b/packages/kilo-jetbrains/gradle/libs.versions.toml @@ -7,6 +7,7 @@ kotlin-serialization-plugin = "2.1.20" kotlin-serialization = "1.8.1" okhttp = "4.12.0" openapi-generator = "7.21.0" +detekt = "1.23.8" [libraries] okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" } @@ -16,6 +17,7 @@ kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serializa kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version = "1.10.2" } [plugins] +detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } intellij-platform = { id = "org.jetbrains.intellij.platform", version.ref = "intellij-gradle-plugin" } rpc = { id = "rpc", version.ref = "intellij-rpc-plugin" } kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-jvm-plugin" }