diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c83fe022..ff571ef0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -132,6 +132,9 @@ android { detekt { baseline = file("detekt-baseline.xml") + config.setFrom("$rootDir/detekt.yml") + buildUponDefaultConfig = true + allRules = false } dependencies { @@ -148,4 +151,5 @@ dependencies { implementation(libs.bundles.room) ksp(libs.androidx.room.compiler) + detektPlugins(libs.compose.detekt) } diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml index 832c8c0c..eb43d60c 100644 --- a/app/detekt-baseline.xml +++ b/app/detekt-baseline.xml @@ -18,18 +18,10 @@ ForbiddenComment:AlarmController.kt$AlarmController$// TODO: This is a bit of a hack. Skipped alarms should be tracked properly. ForbiddenComment:AlarmController.kt$AlarmController$// TODO: This works but it is very rudimentary. Snoozed alarms are not being tracked. ForbiddenComment:AlarmsAdapter.kt$AlarmsAdapter$// TODO: This does not respect config.firstDayOfWeek - LongMethod:AlarmActivity.kt$AlarmActivity$@SuppressLint("ClickableViewAccessibility") private fun setupAlarmButtons() - LongMethod:Constants.kt$@Suppress("MagicNumber") fun getAllTimeZones() - LongMethod:IntentHandlerActivity.kt$IntentHandlerActivity$private fun Intent.dismissAlarm() - LongMethod:IntentHandlerActivity.kt$IntentHandlerActivity$private fun Intent.setNewAlarm() - MagicNumber:App.kt$App$1000L - MagicNumber:App.kt$App.<no name provided>$1000 - MagicNumber:ClockFragment.kt$ClockFragment$1000L MagicNumber:ClockFragment.kt$ClockFragment$24 MagicNumber:ClockFragment.kt$ClockFragment$3600 MagicNumber:ClockFragment.kt$ClockFragment$60 MagicNumber:Config.kt$Config$300 - MagicNumber:Constants.kt$1000 MagicNumber:Constants.kt$5 MagicNumber:Constants.kt$60 MagicNumber:Constants.kt$7 @@ -59,15 +51,11 @@ MagicNumber:IntentHandlerActivity.kt$IntentHandlerActivity$59 MagicNumber:IntentHandlerActivity.kt$IntentHandlerActivity$60 MagicNumber:Long.kt$100 - MagicNumber:Long.kt$1000 - MagicNumber:Long.kt$1000F MagicNumber:MainActivity.kt$MainActivity$3 MagicNumber:MyTimePickerDialogDialog.kt$MyTimePickerDialogDialog$3600 MagicNumber:MyTimePickerDialogDialog.kt$MyTimePickerDialogDialog$60 MagicNumber:StopwatchService.kt$StopwatchService.<no name provided>$500L - MagicNumber:TimeZonesAdapter.kt$TimeZonesAdapter$1000 MagicNumber:TimerAdapter.kt$TimerAdapter$0.7f - MagicNumber:TimerFragment.kt$TimerFragment$1000 MagicNumber:WidgetAnalogueConfigureActivity.kt$WidgetAnalogueConfigureActivity$100 MagicNumber:WidgetDigitalConfigureActivity.kt$WidgetDigitalConfigureActivity$100 MaxLineLength:DBHelper.kt$DBHelper$"$COL_IS_ENABLED INTEGER, $COL_VIBRATE INTEGER, $COL_SOUND_TITLE TEXT, $COL_SOUND_URI TEXT, $COL_LABEL TEXT, $COL_ONE_SHOT INTEGER)" diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index cebe8547..5298c52c 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -51,8 +51,8 @@ errorLine1="app-build-targetSDK = "34"" errorLine2=" ~~~~"> @@ -128,7 +128,7 @@ errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -139,8 +139,8 @@ errorLine1="gradlePlugins-agp = "8.10.1"" errorLine2=" ~~~~~~~~"> @@ -150,8 +150,8 @@ errorLine1="androidx-lifecycle = "2.8.7"" errorLine2=" ~~~~~~~"> @@ -161,8 +161,8 @@ errorLine1="androidx-lifecycle = "2.8.7"" errorLine2=" ~~~~~~~"> @@ -172,8 +172,8 @@ errorLine1="androidx-lifecycle = "2.8.7"" errorLine2=" ~~~~~~~"> @@ -183,8 +183,8 @@ errorLine1="app-build-compileSDKVersion = "34"" errorLine2=" ~~~~"> @@ -859,6 +859,13 @@ column="18"/> + + + + diff --git a/detekt.yml b/detekt.yml new file mode 100644 index 00000000..6472c5a3 --- /dev/null +++ b/detekt.yml @@ -0,0 +1,58 @@ +build: + maxIssues: 0 + weights: + complexity: 2 + LongParameterList: 2 + style: 1 + +processors: + active: true + exclude: + - "FunctionCountProcessor" + - "PropertyCountProcessor" + +config: + validation: true + +complexity: + LongParameterList: + active: true + functionThreshold: 10 + constructorThreshold: 8 + ignoreDefaultParameters: true + ignoreAnnotated: + - "Composable" + LongMethod: + active: true + threshold: 120 + ignoreAnnotated: + - "Composable" + - "Preview" + +style: + MagicNumber: + active: true + ignoreAnnotated: ["Composable"] + ignoreEnums: true + ignoreNumbers: ["-1", "0", "1", "2", "42", "1000"] + MaxLineLength: + active: true + maxLineLength: 120 + excludePackageStatements: true + excludeImportStatements: true + +naming: + FunctionNaming: + active: true + ignoreAnnotated: ["Composable", "Preview"] + functionPattern: "[a-z][A-Za-z0-9]*" + +Compose: # io.nlopez.compose.rules + ComposableParametersOrdering: + active: true + ModifierDefaultValue: + active: true + MissingModifierDefaultValue: + active: true + PublicComposablePreview: + active: true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a86913b4..eb3422aa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,6 +6,7 @@ kotlinxSerializationJson = "1.8.1" ksp = "2.1.21-2.0.2" #Detekt detekt = "1.23.8" +detektCompose = "0.4.22" #AndroidX androidx-constraintlayout = "2.2.1" androidx-lifecycle = "2.8.7" @@ -52,6 +53,8 @@ numberpicker = { module = "io.github.ShawnLin013:number-picker", version.ref = " androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" } androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "room" } androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } +#Compose +compose-detekt = { module = "io.nlopez.compose.rules:detekt", version.ref = "detektCompose" } #Fossify fossify-commons = { module = "org.fossify:commons", version.ref = "commons" } [bundles] diff --git a/lint.xml b/lint.xml index 05685cd8..4b4a7825 100644 --- a/lint.xml +++ b/lint.xml @@ -31,4 +31,5 @@ +