Skip to content

[init] #8 Detekt 설정#9

Merged
ikseong00 merged 7 commits into
developfrom
init/#8-detekt-setup
Jan 1, 2026
Merged

[init] #8 Detekt 설정#9
ikseong00 merged 7 commits into
developfrom
init/#8-detekt-setup

Conversation

@ikseong00
Copy link
Copy Markdown
Contributor

@ikseong00 ikseong00 commented Dec 31, 2025

🔗 관련 이슈

📙 작업 설명

  1. detekt 린트를 추가했습니다.
  • detekt 의존성 추가
    • detekt, detekt-format
    • Android.kt, KotlinLibraryConventionPlugin
  1. ci 파일에 린트 검사 구문을 추가했습니다.

  2. 기존 코드를 검사해서 detekt 스타일로 코드를 정리했습니다.

💬 추가 설명 or 리뷰 포인트 (선택)

  • command + Option + L 누르면 웬만한 조건은 포맷팅 됩니다!
  • 작업 하시면서 터미널에 ./gradlew detekt --continue 실행하셔서 린트 검사 하시면 됩니다!
  • 추가로 애매한 부분에 대해서는 빠른 개발 속도를 위해 detekt-config.yml 파일에 예외상황을 적용해도 좋을 것 같습니다!

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 코드 스타일 검사 인프라 추가 (detekt 통합)
    • 에디터 설정 파일 추가로 일관된 형식 지원
  • Chores

    • 전체 코드베이스의 형식 표준화 (trailing comma, 들여쓰기)
    • 미사용 의존성 제거
    • 불필요한 테스트 파일 삭제
    • CI 파이프라인에 코드 스타일 검사 단계 활성화

✏️ Tip: You can customize this high-level summary in your review settings.

@ikseong00 ikseong00 self-assigned this Dec 31, 2025
@github-actions github-actions Bot requested a review from Ojongseok December 31, 2025 16:28
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Dec 31, 2025

Walkthrough

Detekt 정적 분석 도구를 프로젝트에 통합하고, 새로운 코드 포매팅 설정을 정의하며, 기존 코드를 trailing comma 규칙에 맞춰 수정합니다. CI 파이프라인에 코드 스타일 검사 단계를 활성화하고, 일부 의존성을 재구성합니다.

Changes

Cohort / File(s) 요약
Detekt 설정 및 통합
detekt-config.yml, gradle/libs.versions.toml, build.gradle.kts
detekt 1.23.8 버전 추가, detekt-formatting 플러그인 의존성 정의, 모든 subproject에 detekt 플러그인 적용 및 detekt-config.yml 로드 설정
에디터 설정
.editorconfig
UTF-8 인코딩, 4칸 스페이스 들여쓰기, 150자 최대 라인 길이, trailing comma 활성화 등 프로젝트 전체 포매팅 규칙 정의
CI/CD 통합
.github/workflows/android-ci.yml
Code style checks 단계 활성화, detekt 실행을 CI 파이프라인의 Build 단계 이전에 배치
Build 로직 확장
build-logic/src/main/java/com/neki/android/buildlogic/.../Android.kt, build-logic/src/main/java/com/neki/android/buildlogic/plugins/KotlinLibraryConventionPlugin.kt
공통 Android/Kotlin 설정에 detekt-formatting 플러그인 의존성 추가
Kotlin 포매팅 업데이트 (Trailing Comma)
app/src/main/java/com/neki/android/app/.../MainActivity.kt, app/src/main/java/com/neki/android/app/.../NekiApplication.kt, app/src/main/java/com/neki/android/app/navigation/TopLevelNavItem.kt, app/src/main/java/com/neki/android/app/ui/BottomNavigationBar.kt, core/.../**.kt (13개 파일)
함수 매개변수, 람다 정의, 생성자 호출 등 다양한 위치에서 trailing comma 추가
모듈 간 의존성 정리
core/data/src/main/java/com/neki/android/core/data/repository/impl/SampleRepositoryImpl.kt
SampleRepositoryImpl 생성자에서 DataStore\<Preferences\> 의존성 제거, ApiService 의존성만 유지
네비게이션 Entry 설정
feature/archive/impl/src/main/kotlin/.../ArchiveEntryProvider.kt, feature/map/impl/src/main/java/.../MapEntryProvider.kt, feature/pose/impl/src/main/java/.../PoseEntryProvider.kt, feature/sample/impl/src/main/java/.../SampleEntryProvider.kt
각 feature의 entry 설정에서 navigator 참조 추가
UI 수정
feature/sample/impl/src/main/java/.../SampleScreen.kt
Text 컴포저블에 제공된 modifier 적용
테스트 정리
app/src/test/java/com/neki/android/ExampleUnitTest.kt
예제 단위 테스트 파일 삭제
파일 포매팅 정리
core/common/src/main/java/.../Const.kt, core/designsystem/src/main/java/.../Color.kt, core/domain/src/main/java/.../OptionalUseCase.kt, app/src/main/java/com/neki/android/app/navigation/di/AppModule.kt, app/src/main/java/com/neki/android/app/navigation/di/NavigationModule.kt
파일 끝 newline 정렬, 불필요한 공백 제거, 클래스 선언 형식 간소화

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Poem

🐰 새로운 detekt의 규칙이,
trailing comma를 춤추게 하네,
코드 스타일을 정렬하고,
CI에서 검사를 활성화하며,
더 깔끔한 코드 정원이 피어난다! 🌱✨

Pre-merge checks and finishing touches

❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning 일부 변경사항이 이슈 범위를 벗어나는 것으로 보입니다. ExampleUnitTest.kt 삭제, SampleRepositoryImpl에서 DataStore 제거, SampleScreen.kt 및 SampleEntryProvider.kt의 기능 변경은 Detekt 설정과 직접 관련이 없습니다. 범위를 벗어난 변경사항(테스트 삭제, 데이터 레이어 수정, UI 기능 변경)을 별도의 PR로 분리하고, 이 PR은 Detekt 설정과 코드 포맷팅에만 집중하세요.
Docstring Coverage ⚠️ Warning Docstring coverage is 7.69% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 주요 변경 사항을 명확하게 요약하고 있으며, Detekt 설정이라는 핵심 목표를 직접적으로 반영하고 있습니다.
Linked Issues check ✅ Passed PR이 연결된 이슈 #8의 모든 코딩 관련 요구사항을 충족합니다: Detekt 설정 제공, 기존 코드 수정, CI 통합이 모두 구현되었습니다.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (4)
core/domain/src/main/java/com/neki/android/core/domain/usecase/OptionalUseCase.kt (1)

3-3: Detekt 포매팅 규칙에 맞춘 올바른 변경입니다.

빈 클래스에서 명시적인 중괄호를 제거한 것은 Kotlin 스타일 가이드와 일치합니다.

다만, 이 클래스가 현재 완전히 비어있는데, 플레이스홀더나 마커 클래스로 의도된 것이라면 향후 용도를 명확히 하기 위해 KDoc 주석을 추가하는 것을 고려해보세요.

🔎 선택적 개선: 빈 클래스에 대한 문서화 추가
+/**
+ * TODO: 이 클래스의 용도를 명시하세요.
+ */
 class OptionalUseCase
core/data/src/main/java/com/neki/android/core/data/repository/impl/SampleRepositoryImpl.kt (1)

8-11: 주석 처리된 코드는 제거하세요.

주석 처리된 코드는 버전 관리 시스템에 기록되므로 완전히 삭제하는 것이 좋습니다. DataStore를 사용하지 않는다면 주석이 아닌 완전히 제거해주세요.

🔎 제안하는 수정
 class SampleRepositoryImpl @Inject constructor(
     private val apiService: ApiService,
-//    private val dataStore: DataStore<Preferences>,
 ) : SampleRepository {
detekt-config.yml (2)

1-13: 복잡도 임계값을 단계적으로 낮추는 것을 권장합니다.

현재 설정된 임계값이 상당히 관대합니다:

  • LongMethod: 100 (일반적으로 60-80 권장)
  • CyclomaticComplexMethod: 40 (일반적으로 10-15 권장)
  • ComplexCondition: 7 (일반적으로 4-5 권장)

초기 Detekt 도입 시 기존 코드와의 호환성을 위해 관대한 값을 설정하는 것은 합리적이지만, 코드베이스가 안정화되면 단계적으로 임계값을 낮춰 코드 품질을 개선하는 것을 추천합니다.


52-70: 비활성화된 규칙의 설정을 제거하세요.

Line 54에서 MagicNumber 규칙을 비활성화(active: false)했지만, Line 55에서 ignoreAnnotated 설정이 여전히 남아있습니다. 규칙이 비활성화된 경우 관련 설정은 효과가 없으므로 제거하는 것이 설정 파일을 더 명확하게 만듭니다.

🔎 제안하는 수정사항
 style:
     MagicNumber:
         active: false
-        ignoreAnnotated: [ 'AllowMagicNumber' ]
     ForbiddenComment:
         active: false
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ca1c39f and 6af5a27.

📒 Files selected for processing (32)
  • .editorconfig
  • .github/workflows/android-ci.yml
  • app/src/main/java/com/neki/android/app/MainActivity.kt
  • app/src/main/java/com/neki/android/app/NekiApplication.kt
  • app/src/main/java/com/neki/android/app/navigation/TopLevelNavItem.kt
  • app/src/main/java/com/neki/android/app/navigation/di/AppModule.kt
  • app/src/main/java/com/neki/android/app/navigation/di/NavigationModule.kt
  • app/src/main/java/com/neki/android/app/ui/BottomNavigationBar.kt
  • app/src/test/java/com/neki/android/ExampleUnitTest.kt
  • build-logic/src/main/java/com/neki/android/buildlogic/extensions/Android.kt
  • build-logic/src/main/java/com/neki/android/buildlogic/plugins/KotlinLibraryConventionPlugin.kt
  • build.gradle.kts
  • core/common/src/main/java/com/neki/android/core/common/const/Const.kt
  • core/data-api/src/main/java/com/neki/android/core/dataapi/repository/SampleRespository.kt
  • core/data/src/main/java/com/neki/android/core/data/local/di/DataStoreRepository.kt
  • core/data/src/main/java/com/neki/android/core/data/remote/api/ApiService.kt
  • core/data/src/main/java/com/neki/android/core/data/remote/di/NetworkModule.kt
  • core/data/src/main/java/com/neki/android/core/data/remote/model/response/PostResponse.kt
  • core/data/src/main/java/com/neki/android/core/data/repository/di/RepositoryModule.kt
  • core/data/src/main/java/com/neki/android/core/data/repository/impl/SampleRepositoryImpl.kt
  • core/designsystem/src/main/java/com/neki/android/core/designsystem/ui/theme/Color.kt
  • core/designsystem/src/main/java/com/neki/android/core/designsystem/ui/theme/Theme.kt
  • core/designsystem/src/main/java/com/neki/android/core/designsystem/ui/theme/Type.kt
  • core/domain/src/main/java/com/neki/android/core/domain/usecase/OptionalUseCase.kt
  • core/model/src/main/java/com/neki/android/core/model/Post.kt
  • detekt-config.yml
  • feature/archive/impl/src/main/kotlin/com/neki/android/feature/archive/impl/navigation/ArchiveEntryProvider.kt
  • feature/map/impl/src/main/java/com/neki/android/feature/map/impl/MapEntryProvider.kt
  • feature/pose/impl/src/main/java/com/neki/android/feature/pose/impl/navigation/PoseEntryProvider.kt
  • feature/sample/impl/src/main/java/com/neki/android/feature/sample/impl/SampleEntryProvider.kt
  • feature/sample/impl/src/main/java/com/neki/android/feature/sample/impl/SampleScreen.kt
  • gradle/libs.versions.toml
💤 Files with no reviewable changes (1)
  • app/src/test/java/com/neki/android/ExampleUnitTest.kt
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: ci-build
🔇 Additional comments (29)
feature/sample/impl/src/main/java/com/neki/android/feature/sample/impl/SampleScreen.kt (1)

14-17: Text 컴포저블에 modifier 적용이 올바르게 구현되었습니다.

파라미터로 받은 modifier를 Text에 전달하여 외부에서 레이아웃을 제어할 수 있도록 개선되었습니다.

app/src/main/java/com/neki/android/app/navigation/di/NavigationModule.kt (1)

24-24: 포매팅 변경 승인

Detekt 규칙에 맞춘 EOF 포매팅 조정입니다. 기능적 변경이 없으며 프로젝트 전반의 일관성을 위한 적절한 변경입니다.

app/src/main/java/com/neki/android/app/MainActivity.kt (1)

51-51: Trailing comma 추가 승인

Detekt 포매팅 규칙에 따른 trailing comma 추가입니다. 향후 코드 변경 시 diff를 간결하게 유지하는 모범 사례입니다.

core/data/src/main/java/com/neki/android/core/data/repository/di/RepositoryModule.kt (1)

16-18: 함수 파라미터 포매팅 승인

Dagger 모듈의 함수 시그니처를 Detekt 규칙에 맞춰 조정한 변경입니다. 의존성 주입 동작에는 영향이 없습니다.

core/common/src/main/java/com/neki/android/core/common/const/Const.kt (1)

5-5: 공백 정리 승인

불필요한 blank line을 제거하고 EOF를 정리한 변경입니다. 코드가 더 간결해지고 포매팅 일관성이 확보되었습니다.

app/src/main/java/com/neki/android/app/NekiApplication.kt (2)

8-8: 클래스 선언 포매팅 승인

클래스 선언의 spacing을 Detekt 규칙에 맞춰 조정한 변경입니다.


15-21: Timber.plant 호출 포매팅 개선 승인

익명 객체를 multi-line으로 포매팅하여 가독성을 향상시킨 변경입니다. 로깅 동작에는 영향이 없습니다.

core/model/src/main/java/com/neki/android/core/model/Post.kt (1)

7-8: Data class 포매팅 승인

Detekt 규칙에 따른 trailing comma 추가와 closing parenthesis 포매팅입니다. 향후 프로퍼티 추가 시 깔끔한 diff를 유지할 수 있습니다.

core/data/src/main/java/com/neki/android/core/data/remote/model/response/PostResponse.kt (1)

12-22: Response 모델 포매팅 승인

PostResponse data class와 toModel() 함수의 포매팅을 Detekt 규칙에 맞춰 조정한 변경입니다. 직렬화 동작과 모델 변환 로직에는 영향이 없습니다.

core/data-api/src/main/java/com/neki/android/core/dataapi/repository/SampleRespository.kt (1)

8-10: Repository 인터페이스 포매팅 승인

getPost 함수 시그니처의 trailing comma 추가로 Detekt 규칙을 준수합니다. 인터페이스 계약은 변경되지 않았으며 구현체에도 영향이 없습니다.

app/src/main/java/com/neki/android/app/navigation/di/AppModule.kt (1)

18-18: 파일 포맷팅 변경 승인

EOF에 개행 문자를 추가하여 .editorconfig 규칙을 준수합니다. 기능적 변경 사항이 없습니다.

core/designsystem/src/main/java/com/neki/android/core/designsystem/ui/theme/Theme.kt (1)

16-16: Kotlin trailing comma 컨벤션 적용 승인

색상 스킴 정의와 함수 파라미터에 trailing comma를 추가하여 Detekt 규칙을 준수합니다. 이는 향후 코드 변경 시 diff를 깔끔하게 유지하는 Kotlin 모범 사례입니다.

Also applies to: 22-22, 31-31, 39-39, 54-54, 56-56

app/src/main/java/com/neki/android/app/ui/BottomNavigationBar.kt (1)

54-54: Compose 코드 포맷팅 개선 승인

Row와 Surface 호출 사이트에 trailing comma를 추가하여 일관된 코드 스타일을 유지합니다.

Also applies to: 61-61, 81-81

core/designsystem/src/main/java/com/neki/android/core/designsystem/ui/theme/Type.kt (1)

16-17: Typography 정의 포맷팅 승인

TextStyle 객체에 trailing comma를 적용하여 프로젝트 전반의 포맷팅 규칙과 일치시킵니다.

Also applies to: 32-33

core/designsystem/src/main/java/com/neki/android/core/designsystem/ui/theme/Color.kt (1)

11-11: 파일 종료 포맷팅 승인

EOF 개행 처리가 .editorconfig 규칙을 준수합니다.

.editorconfig (1)

1-13: 프로젝트 포맷팅 기준 설정 승인

.editorconfig 파일이 프로젝트 전반의 일관된 코드 스타일을 정의합니다. UTF-8 인코딩, 4칸 들여쓰기, trailing comma 허용 등 Kotlin 프로젝트의 표준적인 설정입니다.

app/src/main/java/com/neki/android/app/navigation/TopLevelNavItem.kt (1)

27-27: Enum 포맷팅 개선 승인

Enum 항목에 trailing comma를 적용하고 종료 세미콜론을 별도 라인으로 분리하여 Kotlin 컨벤션을 준수합니다. 향후 새로운 항목 추가 시 diff가 깔끔해집니다.

Also applies to: 33-35, 40-40

core/data/src/main/java/com/neki/android/core/data/local/di/DataStoreRepository.kt (1)

25-25: 함수 시그니처 포맷팅 승인

함수 파라미터에 trailing comma를 추가하여 프로젝트 전반의 포맷팅 규칙과 일치시킵니다.

Also applies to: 34-34

core/data/src/main/java/com/neki/android/core/data/repository/impl/SampleRepositoryImpl.kt (1)

17-23: LGTM!

Detekt 포맷팅 규칙에 맞춰 trailing comma가 올바르게 추가되었습니다.

.github/workflows/android-ci.yml (1)

52-54: LGTM!

Detekt 코드 스타일 검사가 CI에 올바르게 추가되었습니다. --continue 플래그를 사용하여 린트 오류가 있어도 전체 빌드를 계속 진행하도록 했습니다.

build-logic/src/main/java/com/neki/android/buildlogic/plugins/KotlinLibraryConventionPlugin.kt (1)

2-32: LGTM!

Kotlin 라이브러리 모듈에 Detekt formatting 플러그인이 올바르게 추가되었습니다.

core/data/src/main/java/com/neki/android/core/data/remote/di/NetworkModule.kt (2)

34-36: LGTM!

Detekt 포맷팅 규칙에 따라 trailing comma가 추가되었습니다.


47-55: LGTM!

Json 설정이 다중 라인 형식으로 재포맷되고 trailing comma가 추가되어 가독성이 향상되었습니다.

gradle/libs.versions.toml (2)

65-92: LGTM!

Detekt 라이브러리와 플러그인 선언이 올바르게 추가되었습니다.


25-25: Detekt 1.23.8은 현재 최신 버전이며 알려진 보안 취약점이 없습니다.

Maven Central 조회 결과 1.23.8이 최신 버전이며, 공개된 보안 취약점은 없습니다. Detekt의 유일한 CVE(CVE-2022-0272, XXE)는 1.20.0에서 이미 수정되었으므로 1.23.8은 영향을 받지 않습니다.

build-logic/src/main/java/com/neki/android/buildlogic/extensions/Android.kt (1)

36-39: LGTM!

Android 모듈에 Detekt formatting 플러그인이 올바르게 추가되었습니다.

core/data/src/main/java/com/neki/android/core/data/remote/api/ApiService.kt (1)

8-22: LGTM!

Detekt 포맷팅 규칙에 따라 trailing comma가 올바르게 추가되었습니다.

build.gradle.kts (1)

1-27: LGTM!

Detekt가 프로젝트 전체에 올바르게 설정되었습니다. 병렬 실행을 활성화하고 커스텀 설정 파일을 사용하는 구성이 적절합니다.

detekt-config.yml (1)

19-51: maxLineLength 설정의 일관성을 확인하세요.

Line 27에서 MaximumLineLength를 비활성화했지만, Line 36에서 ArgumentListWrappingmaxLineLength를 150으로 설정했습니다.

ArgumentListWrappingmaxLineLength는 전역 MaximumLineLength 규칙이 활성화되어 있을 때 작동합니다. 전역 규칙이 비활성화된 상태에서 이 설정은 효과가 없을 수 있으므로, 의도한 동작인지 확인이 필요합니다.

Comment on lines +7 to +9
import org.gradle.kotlin.dsl.dependencies
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
import kotlin.text.get
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

잘못된 import를 수정하세요.

Line 9의 import kotlin.text.get은 잘못된 import입니다. Line 37의 libs.findLibrary("detekt.formatting").get()에서 사용되는 get()은 Gradle의 Provider API에서 제공하는 확장 함수이므로 별도의 import가 필요하지 않습니다. 이 import를 제거해주세요.

🔎 제안하는 수정
 import com.neki.android.buildlogic.const.BuildConst
 import com.android.build.api.dsl.CommonExtension
 import org.gradle.api.Project
 import org.gradle.api.plugins.ExtensionAware
 import org.gradle.kotlin.dsl.dependencies
 import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
-import kotlin.text.get
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
import org.gradle.kotlin.dsl.dependencies
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
import kotlin.text.get
import com.neki.android.buildlogic.const.BuildConst
import com.android.build.api.dsl.CommonExtension
import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionAware
import org.gradle.kotlin.dsl.dependencies
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
🤖 Prompt for AI Agents
In build-logic/src/main/java/com/neki/android/buildlogic/extensions/Android.kt
around lines 7 to 9, remove the incorrect import "import kotlin.text.get" (it is
not needed and conflicts with the Provider API extension used at line 37).
Simply delete that import line and keep the remaining imports unchanged so
libs.findLibrary("detekt.formatting").get() uses the Provider extension without
any extra imports.

Comment thread detekt-config.yml
Copy link
Copy Markdown
Member

@Ojongseok Ojongseok left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

문제 없어보여서 바로 병합하셔도 될 것 같습니다.
말씀하신대로 개발하면서 애매한 부분이 생긴다면 개발속도를 고려해 수정하시죠! 고생하셨습니닷.

@ikseong00 ikseong00 merged commit 73b2ff8 into develop Jan 1, 2026
5 checks passed
@ikseong00 ikseong00 deleted the init/#8-detekt-setup branch January 1, 2026 12:58
@ikseong00 ikseong00 changed the title [init] Detekt 설정 #8 [init] #8 Detekt 설정 Jan 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[init] Detekt 설정

2 participants