diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d9068088..7da894af 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -129,6 +129,9 @@ android { detekt { baseline = file("detekt-baseline.xml") + config.setFrom("$rootDir/detekt.yml") + buildUponDefaultConfig = true + allRules = false } dependencies { @@ -138,4 +141,5 @@ dependencies { implementation(libs.androidx.exifinterface) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.window) + detektPlugins(libs.compose.detekt) } diff --git a/app/detekt-baseline.xml b/app/detekt-baseline.xml index fabad69a..14f73eb9 100644 --- a/app/detekt-baseline.xml +++ b/app/detekt-baseline.xml @@ -11,13 +11,8 @@ ImplicitDefaultLocale:MySize.kt$MySize$String.format("%.1f", (width * height.toFloat()) / ONE_MEGA_PIXEL) ImplicitDefaultLocale:VideoQuality.kt$VideoQuality$String.format("%.1f", (width * height.toFloat()) / ONE_MEGA_PIXEL) LargeClass:MainActivity.kt$MainActivity : SimpleActivityMediaSavedListenerCameraXPreviewListener - LongMethod:ImageSaver.kt$ImageSaver$@SuppressLint("RestrictedApi") private fun saveImageToTempFile(): File? - LongMethod:PhotoProcessor.kt$PhotoProcessor$override fun doInBackground(vararg params: ByteArray): String - LongMethod:ShadowDrawable.kt$ShadowDrawable$override fun draw(canvas: Canvas) - LongParameterList:CameraXInitializer.kt$CameraXInitializer$( previewView: PreviewView, listener: CameraXPreviewListener, mediaSoundHelper: MediaSoundHelper, outputUri: Uri?, isThirdPartyIntent: Boolean, initInPhotoMode: Boolean, ) LongParameterList:CameraXPreview.kt$CameraXPreview$( private val activity: BaseSimpleActivity, private val previewView: PreviewView, private val mediaSoundHelper: MediaSoundHelper, private val mediaOutputHelper: MediaOutputHelper, private val cameraErrorHandler: CameraErrorHandler, private val listener: CameraXPreviewListener, private val isThirdPartyIntent: Boolean, initInPhotoMode: Boolean, ) LongParameterList:ImageSaver.kt$ImageSaver$( private val contentResolver: ContentResolver, private val image: ImageProxy, private val mediaOutput: MediaOutput.ImageCaptureOutput, private val metadata: Metadata, private val jpegQuality: Int, private val saveExifAttributes: Boolean, private val onImageSaved: (Uri) -> Unit, private val onError: (ImageCaptureException) -> Unit, ) - LongParameterList:ImageSaver.kt$ImageSaver.Companion$( contentResolver: ContentResolver, image: ImageProxy, mediaOutput: MediaOutput.ImageCaptureOutput, metadata: Metadata, jpegQuality: Int, saveExifAttributes: Boolean, onImageSaved: (Uri) -> Unit, onError: (ImageCaptureException) -> Unit, ) LoopWithTooManyJumpStatements:ImageQualityManager.kt$ImageQualityManager$for LoopWithTooManyJumpStatements:MediaActionSound.kt$MediaActionSound$for MagicNumber:BitmapUtils.kt$BitmapUtils$128 @@ -33,7 +28,6 @@ MagicNumber:FocusCircleView.kt$FocusCircleView$500L MagicNumber:FocusCircleView.kt$FocusCircleView$50f MagicNumber:MainActivity.kt$MainActivity$90 - MagicNumber:MainActivity.kt$MainActivity.<no name provided>$1000 MagicNumber:MainActivity.kt$MainActivity.<no name provided>$134 MagicNumber:MainActivity.kt$MainActivity.<no name provided>$225 MagicNumber:MainActivity.kt$MainActivity.<no name provided>$289 @@ -64,9 +58,6 @@ MagicNumber:SettingsActivity.kt$SettingsActivity$90 MagicNumber:SettingsActivity.kt$SettingsActivity$95 MagicNumber:ShadowDrawable.kt$ShadowDrawable$255.0f - MagicNumber:TimerMode.kt$TimerMode.TIMER_10$10000 - MagicNumber:TimerMode.kt$TimerMode.TIMER_3$3000 - MagicNumber:TimerMode.kt$TimerMode.TIMER_5$5000 MagicNumber:VideoQuality.kt$VideoQuality$1.9f MagicNumber:VideoQuality.kt$VideoQuality$16 MagicNumber:VideoQuality.kt$VideoQuality$19 @@ -79,14 +70,6 @@ MagicNumber:VideoQuality.kt$VideoQuality$6 MagicNumber:VideoQuality.kt$VideoQuality$8f MagicNumber:VideoQuality.kt$VideoQuality$9f - MagicNumber:VideoQuality.kt$VideoQuality.FHD$1080 - MagicNumber:VideoQuality.kt$VideoQuality.FHD$1920 - MagicNumber:VideoQuality.kt$VideoQuality.HD$1280 - MagicNumber:VideoQuality.kt$VideoQuality.HD$720 - MagicNumber:VideoQuality.kt$VideoQuality.SD$480 - MagicNumber:VideoQuality.kt$VideoQuality.SD$720 - MagicNumber:VideoQuality.kt$VideoQuality.UHD$2160 - MagicNumber:VideoQuality.kt$VideoQuality.UHD$3840 MaxLineLength:CameraErrorHandler.kt$CameraErrorHandler$VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGE -> context.toast(R.string.video_capture_insufficient_storage_error) MaxLineLength:ImageUtil.kt$ImageUtil$require(image.format == ImageFormat.YUV_420_888) { "Incorrect image format of the input image proxy: " + image.format } MaxLineLength:MainActivity.kt$MainActivity$binding.toggleCamera.setImageResource(if (frontCamera) R.drawable.ic_camera_rear_vector else R.drawable.ic_camera_front_vector) diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index 604d3fc5..1839f58a 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -58,8 +58,8 @@ errorLine1="app-build-targetSDK = "34"" errorLine2=" ~~~~"> @@ -113,7 +113,7 @@ errorLine1="distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip" errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -124,8 +124,8 @@ errorLine1="gradlePlugins-agp = "8.10.1"" errorLine2=" ~~~~~~~~"> @@ -135,8 +135,8 @@ errorLine1="androidx-ktx = "2.8.6"" errorLine2=" ~~~~~~~"> @@ -146,8 +146,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 f0ef25d1..88a9b487 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,6 +3,7 @@ kotlin = "2.2.0" #Detekt detekt = "1.23.8" +detektCompose = "0.4.22" #Androidx androidx-document-file = "1.1.0" androidx-exif-interface = "1.4.1" @@ -31,6 +32,8 @@ androidx-window = { module = "androidx.window:window", version.ref = "androidx-w androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidx-ktx" } androidx-exifinterface = { module = "androidx.exifinterface:exifinterface", version.ref = "androidx-exif-interface" } androidx-documentfile = { module = "androidx.documentfile:documentfile", version.ref = "androidx-document-file" } +#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 @@ +