diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 27b27894..ad4c95b5 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 {
@@ -147,4 +150,5 @@ dependencies {
implementation(libs.kotlinx.serialization.json)
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 1b77bb60..515a9b6d 100644
--- a/app/detekt-baseline.xml
+++ b/app/detekt-baseline.xml
@@ -27,36 +27,15 @@
ForbiddenComment:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$// TODO: Need to check whether SC still trying to deliver the SMS to destination and will send the report again?
FunctionParameterNaming:Config.kt$Config$SIMId: Int
LargeClass:ThreadActivity.kt$ThreadActivity : SimpleActivity
- LongMethod:Context.kt$@SuppressLint("NewApi") fun Context.getMmsAttachment(id: Long, getImageResolutions: Boolean): MessageAttachment
- LongMethod:Context.kt$fun Context.getConversations( threadId: Long? = null, privateContacts: ArrayList<SimpleContact> = ArrayList(), ): ArrayList<Conversation>
- LongMethod:Context.kt$fun Context.getMMS( threadId: Long? = null, getImageResolutions: Boolean = false, sortOrder: String? = null, dateFrom: Int = -1, ): ArrayList<Message>
- LongMethod:Context.kt$fun Context.getMessages( threadId: Long, getImageResolutions: Boolean, dateFrom: Int = -1, includeScheduledMessages: Boolean = true, limit: Int = MESSAGES_LIMIT, ): ArrayList<Message>
- LongMethod:MainActivity.kt$MainActivity$private fun getNewConversations(cachedConversations: ArrayList<Conversation>)
- LongMethod:MainActivity.kt$MainActivity$private fun showSearchResults( messages: List<Message>, conversations: List<Conversation>, searchedText: String, )
- LongMethod:MessagesReader.kt$MessagesReader$@SuppressLint("NewApi") private fun getParts(mmsId: Long): List<MmsPart>
- LongMethod:MessagesReader.kt$MessagesReader$private fun getMmsMessages( threadIds: List<Long>, includeTextOnlyAttachment: Boolean = false ): List<MmsBackup>
LongMethod:NotificationHelper.kt$NotificationHelper$@SuppressLint("NewApi") fun showMessageNotification( messageId: Long, address: String, body: String, threadId: Long, bitmap: Bitmap?, sender: String?, alertOnlyOnce: Boolean = false )
- LongMethod:ThreadActivity.kt$ThreadActivity$private fun setupAttachmentPickerView()
- LongMethod:ThreadActivity.kt$ThreadActivity$private fun setupButtons()
- LongMethod:ThreadActivity.kt$ThreadActivity$private fun setupThread()
- LongParameterList:AttachmentPreviews.kt$( activity: Activity, uri: Uri, attachment: Boolean = false, onClick: (() -> Unit)? = null, onLongClick: (() -> Unit)? = null, onVCardLoaded: (() -> Unit)? = null, )
- LongParameterList:AttachmentPreviews.kt$( uri: Uri, title: String, mimeType: String, onClick: (() -> Unit)? = null, onLongClick: (() -> Unit)? = null, onRemoveButtonClicked: (() -> Unit)? = null )
- LongParameterList:Context.kt$( address: String, subject: String, body: String, date: Long, read: Int, threadId: Long, type: Int, subscriptionId: Int, )
- LongParameterList:Context.kt$( uri: Uri, projection: Array<String>, selection: String? = null, selectionArgs: Array<String>? = null, sortOrder: String? = null, callback: (cursor: Cursor) -> Unit, )
- LongParameterList:MessagingUtils.kt$MessagingUtils$( subId: Int, dest: String, text: String, timestamp: Long, threadId: Long, status: Int = Sms.STATUS_NONE, type: Int = Sms.MESSAGE_TYPE_OUTBOX, messageId: Long? = null )
- LongParameterList:NotificationHelper.kt$NotificationHelper$( messageId: Long, address: String, body: String, threadId: Long, bitmap: Bitmap?, sender: String?, alertOnlyOnce: Boolean = false )
LongParameterList:SmsReceiver.kt$SmsReceiver$( context: Context, address: String, subject: String, body: String, date: Long, read: Int, threadId: Long, type: Int, subscriptionId: Int, status: Int )
- LongParameterList:SmsSender.kt$SmsSender$( subId: Int, dest: String, messages: ArrayList<String>, serviceCenter: String?, requireDeliveryReport: Boolean, messageUri: Uri )
- LongParameterList:SmsSender.kt$SmsSender$( subId: Int, destination: String, body: String, serviceCenter: String?, requireDeliveryReport: Boolean, messageUri: Uri )
MagicNumber:Activity.kt$1000000
MagicNumber:BaseConversationsAdapter.kt$BaseConversationsAdapter$0.7f
MagicNumber:BaseConversationsAdapter.kt$BaseConversationsAdapter$0.8f
MagicNumber:BaseConversationsAdapter.kt$BaseConversationsAdapter$0.9f
MagicNumber:BaseConversationsAdapter.kt$BaseConversationsAdapter$1.2f
- MagicNumber:BaseConversationsAdapter.kt$BaseConversationsAdapter$1000L
MagicNumber:ContactsAdapter.kt$ContactsAdapter$1.2f
MagicNumber:Context.kt$10
- MagicNumber:Context.kt$1000
MagicNumber:Context.kt$500L
MagicNumber:ImageCompressor.kt$ImageCompressor$0.6f
MagicNumber:ImageCompressor.kt$ImageCompressor$100
@@ -68,11 +47,8 @@
MagicNumber:ImageCompressor.kt$ImageCompressor$6
MagicNumber:ImageCompressor.kt$ImageCompressor$8
MagicNumber:ImageCompressor.kt$ImageCompressor$90f
- MagicNumber:MainActivity.kt$MainActivity$1000L
MagicNumber:MainActivity.kt$MainActivity$30
- MagicNumber:Message.kt$Message$1000L
MagicNumber:Message.kt$Message.Companion$31
- MagicNumber:MessageDetailsDialog.kt$MessageDetailsDialog$1000L
MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$3
MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$4
MagicNumber:MessagesDatabase.kt$MessagesDatabase.Companion.<no name provided>$5
@@ -93,7 +69,6 @@
MagicNumber:SettingsActivity.kt$SettingsActivity$6
MagicNumber:SettingsActivity.kt$SettingsActivity$7
MagicNumber:ShortcutHelper.kt$ShortcutHelper$99
- MagicNumber:SmsReceiver.kt$SmsReceiver$1000
MagicNumber:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$0x03
MagicNumber:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$0x3f
MagicNumber:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$16
@@ -101,8 +76,6 @@
MagicNumber:SmsStatusDeliveredReceiver.kt$SmsStatusDeliveredReceiver$3
MagicNumber:ThreadActivity.kt$ThreadActivity$0.4f
MagicNumber:ThreadActivity.kt$ThreadActivity$0.9f
- MagicNumber:ThreadActivity.kt$ThreadActivity$1000
- MagicNumber:ThreadActivity.kt$ThreadActivity$1000L
MagicNumber:ThreadActivity.kt$ThreadActivity$14
MagicNumber:ThreadActivity.kt$ThreadActivity$15
MagicNumber:ThreadActivity.kt$ThreadActivity$150
@@ -113,7 +86,6 @@
MagicNumber:ThreadActivity.kt$ThreadActivity$300
MagicNumber:ThreadActivity.kt$ThreadActivity$500L
MagicNumber:ThreadAdapter.kt$ThreadAdapter$0.8f
- MagicNumber:ThreadAdapter.kt$ThreadAdapter$1000L
MagicNumber:ThreadAdapter.kt$ThreadAdapter$4
MagicNumber:VCardViewerAdapter.kt$VCardViewerAdapter.VCardContactViewHolder$1.1f
MagicNumber:VCardViewerAdapter.kt$VCardViewerAdapter.VCardPropertyViewHolder$1.1f
diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml
index 95302874..1ce83a80 100644
--- a/app/lint-baseline.xml
+++ b/app/lint-baseline.xml
@@ -18,8 +18,8 @@
errorLine1="app-build-targetSDK = "34""
errorLine2=" ~~~~">
@@ -40,7 +40,7 @@
errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip"
errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~">
@@ -51,8 +51,8 @@
errorLine1="gradlePlugins-agp = "8.10.1""
errorLine2=" ~~~~~~~~">
@@ -62,8 +62,8 @@
errorLine1="androidx-lifecycleprocess = "2.8.7""
errorLine2=" ~~~~~~~">
@@ -73,8 +73,8 @@
errorLine1="app-build-compileSDKVersion = "34""
errorLine2=" ~~~~">
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 6e08e8cd..3bfe3604 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-swiperefreshlayout = "1.1.0"
@@ -38,6 +39,8 @@ androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefre
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" }
indicator-fast-scroll = { module = "org.fossify:IndicatorFastScroll", version.ref = "indicator-fast-scroll" }
diff --git a/lint.xml b/lint.xml
index 05685cd8..4b4a7825 100644
--- a/lint.xml
+++ b/lint.xml
@@ -31,4 +31,5 @@
+