diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index cf49b9b..2315c9d 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -39,6 +39,9 @@ jobs: - name: Run ktlint run: ./gradlew ktlintCheck + - name: Run detekt + run: ./gradlew detekt + - name: Build with Gradle run: ./gradlew build diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 857520b..6206ce8 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -9,4 +9,5 @@ dependencies { implementation(libs.hilt.gradlePlugin) implementation(libs.ksp.gradlePlugin) implementation(libs.compose.compiler.gradlePlugin) + implementation(libs.detekt.gradlePlugin) } \ No newline at end of file diff --git a/build-logic/src/main/kotlin/com/chat/build_logic/VerifyDetekt.kt b/build-logic/src/main/kotlin/com/chat/build_logic/VerifyDetekt.kt new file mode 100644 index 0000000..ef0de8d --- /dev/null +++ b/build-logic/src/main/kotlin/com/chat/build_logic/VerifyDetekt.kt @@ -0,0 +1,14 @@ +package com.chat.build_logic + +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies + +internal fun Project.configureVerifyDetekt() { + with(pluginManager) { + apply("io.gitlab.arturbosch.detekt") + } + + dependencies { + "detektPlugins"(libs.findLibrary("detekt.formatting").get()) + } +} \ No newline at end of file diff --git a/build-logic/src/main/kotlin/convention.android.library.gradle.kts b/build-logic/src/main/kotlin/convention.android.library.gradle.kts index 806e4d2..0438b16 100644 --- a/build-logic/src/main/kotlin/convention.android.library.gradle.kts +++ b/build-logic/src/main/kotlin/convention.android.library.gradle.kts @@ -3,6 +3,7 @@ import com.chat.build_logic.configureKotlinAndroid plugins { id("com.android.library") kotlin("android") + id("convention.verify.detekt") } android { diff --git a/build-logic/src/main/kotlin/convention.verify.detekt.gradle.kts b/build-logic/src/main/kotlin/convention.verify.detekt.gradle.kts new file mode 100644 index 0000000..969cbd1 --- /dev/null +++ b/build-logic/src/main/kotlin/convention.verify.detekt.gradle.kts @@ -0,0 +1,13 @@ +import com.chat.build_logic.configureVerifyDetekt +import io.gitlab.arturbosch.detekt.Detekt + +configureVerifyDetekt() + +tasks.withType().configureEach { + jvmTarget = "17" + + buildUponDefaultConfig = true // 기본 설정에서 추가 설정만 덮어쓰기 + allRules = false // 모든 룰을 활성화 할지 설정 + parallel = true // 코드 분석 병렬 실행 설정 + config = files("$rootDir/config/detekt/detekt.yml") +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 05754bb..1ad5e4c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.android.test) apply false alias(libs.plugins.baselineprofile) apply false alias(libs.plugins.compose.compiler) apply false + alias(libs.plugins.detekt) apply false } allprojects { diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml new file mode 100644 index 0000000..93b8601 --- /dev/null +++ b/config/detekt/detekt.yml @@ -0,0 +1,124 @@ +build: + maxIssues: 0 + +config: + validation: true + warningsAsErrors: true + +complexity: + active: true + ComplexCondition: # 복잡한 조건 설정 + active: true + threshold: 5 + ComplexInterface: # 많은 함수 및 속성을 포함하는 인터페이스 + active: true + threshold: 10 + includeStaticDeclarations: false + includePrivateDeclarations: false + CyclomaticComplexMethod: # 독립적 경로의 수가 많은 복잡한 메서드 설정 + active: true + threshold: 50 + ignoreSingleWhenExpression: false # when 표현식 하나인 메서드 무시 + ignoreSimpleWhenEntries: false # 간단한 항목(중괄호 없음)을 무시 + ignoreNestingFunctions: false # if 나 for 문 대신 자주 사용되는 함수 무시 + nestingFunctions: + - 'also' + - 'apply' + - 'forEach' + - 'isNotNull' + - 'ifNull' + - 'let' + - 'run' + - 'use' + - 'with' + LargeClass: # 큰 클래스 크기 설정 + active: true + threshold: 500 + LongMethod: # 긴 메서드 크기 설정 + active: true + threshold: 400 + LongParameterList: # 특정 임계값보다 많은 매개변수가 있는 함수와 생성자 + active: true + functionThreshold: 20 + constructorThreshold: 7 + ignoreDefaultParameters: false # 기본값이 있는 매개변수 포함 + ignoreDataClasses: true # 데이터 클래스에 대해서 무시 + TooManyFunctions: + active: true + thresholdInFiles: 30 + thresholdInClasses: 20 + thresholdInInterfaces: 10 + thresholdInObjects: 20 + thresholdInEnums: 5 + ignoreDeprecated: true # @Deprecated 함수를 카운트에서 제외 + ignorePrivate: true # private 접근 제어자 함수를 카운트에서 제외 + ignoreOverridden: false # 오버라이드한 함수를 카운트에 포함 + NestedBlockDepth: # 중첩된 코드 블록 + active: true + threshold: 10 + +coroutines: + active: true + GlobalCoroutineUsage: + active: false + RedundantSuspendModifier: + active: false + SleepInsteadOfDelay: + active: false + SuspendFunWithFlowReturnType: + active: false + +empty-blocks: + active: true + +exceptions: + active: true + InstanceOfCheckForException: # 예외 유형을 검사하는 catch 블록 + active: false + TooGenericExceptionThrown: # 너무 일반적인 유형의 Exception + active: false + exceptionNames: + - 'Error' + - 'Exception' + - 'RuntimeException' + - 'Throwable' + +formatting: + active: true + ImportOrdering: + active: false + MaximumLineLength: + active: true + maxLineLength: 160 + ArgumentListWrapping: + active: false + Wrapping: + active: false + PackageName: + active: false + +naming: + active: true + ConstructorParameterNaming: # 지정된 명명 규칙을 따르지 않는 생성자 매개변수 + active: false + FunctionNaming: # 지정된 명명 규칙을 따르지 않는 함수 이름 + active: false + BooleanPropertyNaming: + active: true + NonBooleanPropertyPrefixedWithIs: + active: true + PackageNaming: + active: false + +performance: + active: true + ForEachOnRange: # 성능 비용이 발생하는 forEach 구문 + active: false + SpreadOperator: # 성능 저하 발생하는 spread 연산자 + active: false + +potential-bugs: + active: true + +style: + active: false \ No newline at end of file diff --git a/core/data/src/test/java/com/chat/data/ExampleUnitTest.kt b/core/data/src/test/java/com/chat/data/ExampleUnitTest.kt index 4351197..6b6eb1e 100644 --- a/core/data/src/test/java/com/chat/data/ExampleUnitTest.kt +++ b/core/data/src/test/java/com/chat/data/ExampleUnitTest.kt @@ -1,8 +1,7 @@ package com.chat.data import org.junit.Test - -import org.junit.Assert.* +import org.junit.Assert.assertEquals /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/DetailAppbar.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/DetailAppbar.kt index 2ea279d..2d961cd 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/DetailAppbar.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/DetailAppbar.kt @@ -41,4 +41,4 @@ fun DetailAppbar( @Composable fun DetailAppbarPreview() { DetailAppbar() -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/GoSocketAppbar.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/GoSocketAppbar.kt index c1c6b61..6f02de8 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/GoSocketAppbar.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/GoSocketAppbar.kt @@ -46,4 +46,4 @@ fun GoSocketAppbarPreview() { ) { Text(text = "GoSocketAppbar") } -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/MainAppbar.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/MainAppbar.kt index b8e9e8d..6e97a99 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/MainAppbar.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/appbar/MainAppbar.kt @@ -74,4 +74,4 @@ fun MainAppbar( @Composable fun MainAppbarPreview() { MainAppbar() -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/bottom_sheet/CreateMessageBottomSheet.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/bottom_sheet/CreateMessageBottomSheet.kt index c4c6652..b20ba6d 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/bottom_sheet/CreateMessageBottomSheet.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/bottom_sheet/CreateMessageBottomSheet.kt @@ -96,4 +96,4 @@ fun CreateMessageBottomSheetPreview() { Text(text = "Open") } } -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/bottom_sheet/GoSocketBottomSheet.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/bottom_sheet/GoSocketBottomSheet.kt index be85d6f..9c9db6c 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/bottom_sheet/GoSocketBottomSheet.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/bottom_sheet/GoSocketBottomSheet.kt @@ -38,7 +38,9 @@ fun GoSocketBottomSheet( val bottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) val insets = ViewCompat.getRootWindowInsets(LocalView.current) val context = LocalView.current.context - val navigationBarHeight = insets?.getInsets(WindowInsetsCompat.Type.navigationBars())?.bottom?.toDp(context)?.dp ?: 0.dp + val navigationBarHeight = + insets?.getInsets(WindowInsetsCompat.Type.navigationBars())?.bottom?.toDp(context)?.dp + ?: 0.dp ModalBottomSheet( sheetState = bottomSheetState, @@ -56,7 +58,14 @@ fun GoSocketBottomSheet( }, onDismissRequest = onDismissRequest, ) { - Column(modifier = modifier.padding(start = 10.dp, top = 6.dp, end = 10.dp, bottom = 14.dp + navigationBarHeight)) { + Column( + modifier = modifier.padding( + start = 10.dp, + top = 6.dp, + end = 10.dp, + bottom = 14.dp + navigationBarHeight + ) + ) { content() } } @@ -82,4 +91,4 @@ fun GoSocketBottomSheetPreview() { Text(text = "Open") } } -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketButton.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketButton.kt index ae2d1fe..816f5ab 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketButton.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketButton.kt @@ -79,4 +79,4 @@ fun GoSocketButtonPreview() { onClick = {} ) { IcCreateDirectMessage(modifier = Modifier.size(22.dp, 18.dp), tint = Color.White) } } -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketFloatingActionButton.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketFloatingActionButton.kt index bb21beb..6351ac3 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketFloatingActionButton.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketFloatingActionButton.kt @@ -51,4 +51,4 @@ fun GoSocketFloatingActionButton( @Composable fun GoSocketFloatingActionButtonPreview() { GoSocketFloatingActionButton {} -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketOutlinedButton.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketOutlinedButton.kt index 90dccb1..e04b4ef 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketOutlinedButton.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/button/GoSocketOutlinedButton.kt @@ -60,4 +60,4 @@ fun GoSocketOutlinedButtonPreview() { text = "GoSocketOutlinedButton" ) {} } -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/button/InviteFriendButton.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/button/InviteFriendButton.kt index 6e76cdb..e0c1069 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/button/InviteFriendButton.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/button/InviteFriendButton.kt @@ -28,4 +28,4 @@ fun InviteFriendButton( @Composable fun InviteFriendButtonPreview() { InviteFriendButton {} -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/checkbox/GoSocketCheckbox.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/checkbox/GoSocketCheckbox.kt index 0c83b25..3f411cd 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/checkbox/GoSocketCheckbox.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/checkbox/GoSocketCheckbox.kt @@ -35,7 +35,7 @@ fun GoSocketCheckbox( .clip(RoundedCornerShape(8.dp)) .border( width = 2.dp, - color = if (isChecked) P1 else N3, + color = if (isChecked) P1 else N3, shape = RoundedCornerShape(8.dp) ) .clickableNoRipple { @@ -56,4 +56,4 @@ fun GoSocketCheckboxPreview() { Spacer(modifier = Modifier.height(10.dp)) GoSocketCheckbox(checked = false) {} } -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/dialog/GoSocketDialog.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/dialog/GoSocketDialog.kt index db9e2f8..400b043 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/dialog/GoSocketDialog.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/dialog/GoSocketDialog.kt @@ -107,4 +107,4 @@ fun GoSocketDialogPreview() { ) Spacer(modifier = Modifier.height(30.dp)) } -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/dialog/InviteDialog.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/dialog/InviteDialog.kt index 8854cac..8b2365e 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/dialog/InviteDialog.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/dialog/InviteDialog.kt @@ -61,4 +61,4 @@ fun InviteDialog( @Composable fun InviteDialogPreview() { InviteDialog() -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/navbar/GoSocketBottomNavigationBar.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/navbar/GoSocketBottomNavigationBar.kt index 4d8f4a3..cfd9bb7 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/navbar/GoSocketBottomNavigationBar.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/navbar/GoSocketBottomNavigationBar.kt @@ -34,7 +34,7 @@ fun GoSocketBottomNavigationBar(modifier: Modifier = Modifier) { selected = selectedIndex == it, onClick = { selectedIndex = it }, icon = { - when(it) { + when (it) { 0 -> IcHome(modifier = Modifier.size(30.dp), tint = if (selectedIndex == it) Color(0xFF6263FB) else Color(0xFF848484)) 1 -> IcDirectMessage(modifier = Modifier.size(30.dp), tint = if (selectedIndex == it) Color(0xFF6263FB) else Color(0xFF848484)) 2 -> IcSpace(modifier = Modifier.size(30.dp), tint = if (selectedIndex == it) Color(0xFF6263FB) else Color(0xFF848484)) @@ -52,4 +52,4 @@ fun GoSocketBottomNavigationBar(modifier: Modifier = Modifier) { @Composable fun GoSocketBottomNavigationBarPreview() { GoSocketBottomNavigationBar() -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/progressbar/GoSocketProgressbar.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/progressbar/GoSocketProgressbar.kt index e181e6c..30e3540 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/progressbar/GoSocketProgressbar.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/progressbar/GoSocketProgressbar.kt @@ -26,4 +26,4 @@ fun GoSocketProgressbar( @Composable fun GoSocketProgressbarPreview() { GoSocketProgressbar(progress = 0.33f) -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/GoSocketTextField.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/GoSocketTextField.kt index 7c5a97c..1127414 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/GoSocketTextField.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/GoSocketTextField.kt @@ -4,7 +4,6 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField @@ -95,4 +94,4 @@ fun GoSocketTextFieldPreview() { leadingIcon = { IcSearch(modifier = Modifier.padding(end = 8.dp), tint = it) }, trailingIcon = { IcSend(tint = it) }, ) -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/InviteTextField.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/InviteTextField.kt index 64b6470..4889d51 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/InviteTextField.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/InviteTextField.kt @@ -31,4 +31,4 @@ fun InviteTextField(modifier: Modifier = Modifier) { @Composable fun InviteTextFieldPreview() { InviteTextField() -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/MessageTextField.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/MessageTextField.kt index ff80e84..52cc6f5 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/MessageTextField.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/MessageTextField.kt @@ -41,4 +41,4 @@ fun MessageTextField( @Composable fun MessageTextFieldPreview() { MessageTextField() -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/SearchTextField.kt b/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/SearchTextField.kt index cac8c5b..930f854 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/SearchTextField.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/component/textfield/SearchTextField.kt @@ -54,4 +54,4 @@ fun SearchTextField( @Composable fun SearchTextFieldPreview() { SearchTextField() -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/theme/Color.kt b/core/designsystem/src/main/java/com/chat/designsystem/theme/Color.kt index 9f053e8..d5dbff0 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/theme/Color.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/theme/Color.kt @@ -5,4 +5,4 @@ import androidx.compose.ui.graphics.Color val P1 = Color(0xFF6263FB) val N3 = Color(0xFFBBBBCC) -val N4 = Color(0xFFE2E2EE) \ No newline at end of file +val N4 = Color(0xFFE2E2EE) diff --git a/core/designsystem/src/main/java/com/chat/designsystem/theme/Icon.kt b/core/designsystem/src/main/java/com/chat/designsystem/theme/Icon.kt index 3a89454..f180122 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/theme/Icon.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/theme/Icon.kt @@ -1,6 +1,5 @@ package com.chat.designsystem.theme -import androidx.compose.foundation.Image import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier @@ -313,4 +312,4 @@ fun IcProfile( contentDescription = contentDescription, tint = tint ) -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/theme/Typography.kt b/core/designsystem/src/main/java/com/chat/designsystem/theme/Typography.kt index 21418e9..a36b24b 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/theme/Typography.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/theme/Typography.kt @@ -114,4 +114,4 @@ object Typography { fontSize = 15.sp, fontWeight = FontWeight.Normal ) -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/util/ClickableUtil.kt b/core/designsystem/src/main/java/com/chat/designsystem/util/ClickableUtil.kt index e6591c7..87d51d9 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/util/ClickableUtil.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/util/ClickableUtil.kt @@ -14,4 +14,4 @@ fun Modifier.clickableNoRipple(onClick: () -> Unit): Modifier = composed { interactionSource = remember { MutableInteractionSource() }) { onClick() } -} \ No newline at end of file +} diff --git a/core/designsystem/src/main/java/com/chat/designsystem/util/NumberUtil.kt b/core/designsystem/src/main/java/com/chat/designsystem/util/NumberUtil.kt index e51d537..6da4ff5 100644 --- a/core/designsystem/src/main/java/com/chat/designsystem/util/NumberUtil.kt +++ b/core/designsystem/src/main/java/com/chat/designsystem/util/NumberUtil.kt @@ -11,4 +11,4 @@ fun Number.toPx(context: Context): Int { fun Number.toDp(context: Context): Float { val densityDpi = context.resources.displayMetrics.densityDpi return this.toFloat() / (densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT) -} \ No newline at end of file +} diff --git a/core/designsystem/src/test/java/com/chat/designsystem/ExampleUnitTest.kt b/core/designsystem/src/test/java/com/chat/designsystem/ExampleUnitTest.kt index 4e07355..c115ba5 100644 --- a/core/designsystem/src/test/java/com/chat/designsystem/ExampleUnitTest.kt +++ b/core/designsystem/src/test/java/com/chat/designsystem/ExampleUnitTest.kt @@ -2,7 +2,7 @@ package com.chat.designsystem import org.junit.Test -import org.junit.Assert.* +import org.junit.Assert.assertEquals /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +14,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/core/network/src/main/java/com/chat/network/di/NetworkModule.kt b/core/network/src/main/java/com/chat/network/di/NetworkModule.kt index 1ef8089..c285a06 100644 --- a/core/network/src/main/java/com/chat/network/di/NetworkModule.kt +++ b/core/network/src/main/java/com/chat/network/di/NetworkModule.kt @@ -53,4 +53,4 @@ internal object NetworkModule { .client(okHttpClient) .addConverterFactory(json.asConverterFactory("application/json".toMediaType())) .build() -} \ No newline at end of file +} diff --git a/core/network/src/test/java/com/chat/network/ExampleUnitTest.kt b/core/network/src/test/java/com/chat/network/ExampleUnitTest.kt index ea53259..7995550 100644 --- a/core/network/src/test/java/com/chat/network/ExampleUnitTest.kt +++ b/core/network/src/test/java/com/chat/network/ExampleUnitTest.kt @@ -2,7 +2,7 @@ package com.chat.network import org.junit.Test -import org.junit.Assert.* +import org.junit.Assert.assertEquals /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +14,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/feature/home/src/test/java/com/chat/home/ExampleUnitTest.kt b/feature/home/src/test/java/com/chat/home/ExampleUnitTest.kt index f697bb6..a271b7c 100644 --- a/feature/home/src/test/java/com/chat/home/ExampleUnitTest.kt +++ b/feature/home/src/test/java/com/chat/home/ExampleUnitTest.kt @@ -1,8 +1,7 @@ package com.chat.home import org.junit.Test - -import org.junit.Assert.* +import org.junit.Assert.assertEquals /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/feature/login/src/main/java/com/chat/login/LoginScreen.kt b/feature/login/src/main/java/com/chat/login/LoginScreen.kt index b58eff1..ade68e7 100644 --- a/feature/login/src/main/java/com/chat/login/LoginScreen.kt +++ b/feature/login/src/main/java/com/chat/login/LoginScreen.kt @@ -93,4 +93,4 @@ private fun LoginScreen(onLoginClick: () -> Unit) { @Composable fun LoginScreenPreview() { LoginScreen {} -} \ No newline at end of file +} diff --git a/feature/login/src/test/java/com/chat/login/ExampleUnitTest.kt b/feature/login/src/test/java/com/chat/login/ExampleUnitTest.kt index 6e34f91..61f3948 100644 --- a/feature/login/src/test/java/com/chat/login/ExampleUnitTest.kt +++ b/feature/login/src/test/java/com/chat/login/ExampleUnitTest.kt @@ -1,8 +1,7 @@ package com.chat.login import org.junit.Test - -import org.junit.Assert.* +import org.junit.Assert.assertEquals /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/feature/mention/src/test/java/com/chat/mention/ExampleUnitTest.kt b/feature/mention/src/test/java/com/chat/mention/ExampleUnitTest.kt index 7d31665..25abec9 100644 --- a/feature/mention/src/test/java/com/chat/mention/ExampleUnitTest.kt +++ b/feature/mention/src/test/java/com/chat/mention/ExampleUnitTest.kt @@ -1,8 +1,7 @@ package com.chat.mention import org.junit.Test - -import org.junit.Assert.* +import org.junit.Assert.assertEquals /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/feature/message/src/test/java/com/chat/message/ExampleUnitTest.kt b/feature/message/src/test/java/com/chat/message/ExampleUnitTest.kt index b60a70f..e33d07c 100644 --- a/feature/message/src/test/java/com/chat/message/ExampleUnitTest.kt +++ b/feature/message/src/test/java/com/chat/message/ExampleUnitTest.kt @@ -1,8 +1,7 @@ package com.chat.message import org.junit.Test - -import org.junit.Assert.* +import org.junit.Assert.assertEquals /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/feature/search/src/test/java/com/chat/search/ExampleUnitTest.kt b/feature/search/src/test/java/com/chat/search/ExampleUnitTest.kt index 7337b2b..8b4345a 100644 --- a/feature/search/src/test/java/com/chat/search/ExampleUnitTest.kt +++ b/feature/search/src/test/java/com/chat/search/ExampleUnitTest.kt @@ -1,8 +1,7 @@ package com.chat.search import org.junit.Test - -import org.junit.Assert.* +import org.junit.Assert.assertEquals /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/feature/space/src/test/java/com/chat/space/ExampleUnitTest.kt b/feature/space/src/test/java/com/chat/space/ExampleUnitTest.kt index 90d1d83..ae3035e 100644 --- a/feature/space/src/test/java/com/chat/space/ExampleUnitTest.kt +++ b/feature/space/src/test/java/com/chat/space/ExampleUnitTest.kt @@ -1,8 +1,7 @@ package com.chat.space import org.junit.Test - -import org.junit.Assert.* +import org.junit.Assert.assertEquals /** * Example local unit test, which will execute on the development machine (host). @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bd62fb0..c006aa0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -25,6 +25,8 @@ benchmarkMacroJunit4 = "1.2.4" baselineprofile = "1.2.4" profileinstaller = "1.3.1" +detekt = "1.23.7" + [libraries] android-gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "androidGradlePlugin" } kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } @@ -32,6 +34,7 @@ ksp-gradlePlugin = { group = "com.google.devtools.ksp", name = "com.google.devto hilt-gradlePlugin = { group = "com.google.dagger", name = "hilt-android-gradle-plugin", version.ref = "hilt" } baselineprofile-gradlePlugin = { group = "androidx.baselineprofile", name = "baselineprofile-gradle-plugin", version.ref = "baselineprofile" } compose-compiler-gradlePlugin = { module = "org.jetbrains.kotlin:compose-compiler-gradle-plugin", version.ref = "kotlin" } +detekt-gradlePlugin = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" } androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidxComposeBom" } androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" } @@ -61,6 +64,8 @@ androidx-uiautomator = { group = "androidx.test.uiautomator", name = "uiautomato androidx-benchmark-macro-junit4 = { group = "androidx.benchmark", name = "benchmark-macro-junit4", version.ref = "benchmarkMacroJunit4" } androidx-profileinstaller = { group = "androidx.profileinstaller", name = "profileinstaller", version.ref = "profileinstaller" } +detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } + [plugins] android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } android-library = { id = "com.android.library", version.ref = "androidGradlePlugin" } @@ -72,4 +77,5 @@ hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } android-test = { id = "com.android.test", version.ref = "androidGradlePlugin" } baselineprofile = { id = "androidx.baselineprofile", version.ref = "baselineprofile" } -compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } \ No newline at end of file +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index ee9b296..0479124 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,5 +28,3 @@ include(":feature:mention") include(":feature:search") include(":feature:login") include(":baselineprofile") - -gradle.startParameter.excludedTaskNames.addAll(listOf(":build-logic:testClasses"))