From 1357f42251fa57e207430be3043d2f2d1de21c13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?He=CC=81ctor=20Abraham?= Date: Wed, 17 Jan 2024 10:38:30 +0100 Subject: [PATCH 1/3] Adding Detekt for static code analysis Specific rules have been copied from the WPAndroid repo. More info about configuration can be found here: https://detekt.dev/docs/gettingstarted/gradle/#options-for-detekt-configuration-closure --- .github/workflows/android.yml | 2 ++ app/build.gradle.kts | 10 +++++++++ build.gradle.kts | 5 ++++- config/detekt/detekt.yml | 42 +++++++++++++++++++++++++++++++++++ gravatar/build.gradle.kts | 11 +++++++++ 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 config/detekt/detekt.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 35383cec..0b9eb801 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -24,5 +24,7 @@ jobs: run: chmod +x gradlew - name: Check code style run: ./gradlew ktlintcheck + - name: Static code analysis + run: ./gradlew detekt - name: Build with Gradle run: ./gradlew build diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b3b43771..f7b5fe45 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,6 +4,9 @@ plugins { // Ktlint id("org.jlleitschuh.gradle.ktlint") + + // Detekt + id("io.gitlab.arturbosch.detekt") } android { @@ -33,6 +36,13 @@ android { kotlinOptions { jvmTarget = "1.8" } + detekt { + config.setFrom("${project.rootDir}/config/detekt/detekt.yml") + source.setFrom("src") + autoCorrect = false + buildUponDefaultConfig = true + parallel = false + } } dependencies { diff --git a/build.gradle.kts b/build.gradle.kts index 2d681550..940e6fdf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,4 +5,7 @@ plugins { // Ktlint id("org.jlleitschuh.gradle.ktlint") version "12.1.0" apply false -} + + // Detekt + id("io.gitlab.arturbosch.detekt") version "1.23.4" apply false +} \ No newline at end of file diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml new file mode 100644 index 00000000..bf727a26 --- /dev/null +++ b/config/detekt/detekt.yml @@ -0,0 +1,42 @@ +# Default Config: https://github.com/detekt/detekt/blob/main/detekt-core/src/main/resources/default-detekt-config.yml +# Formatting Config: https://github.com/detekt/detekt/blob/main/detekt-formatting/src/main/resources/config/config.yml +# Compose Config: https://detekt.dev/docs/introduction/compose/ + +config: + warningsAsErrors: true + +complexity: + LongParameterList: + ignoreDefaultParameters: true + ignoreAnnotated: ['Inject', 'Composable'] + LongMethod: + ignoreAnnotated: ['Composable'] + TooManyFunctions: + active: false + CyclomaticComplexMethod: + ignoreSimpleWhenEntries: true + +coroutines: + GlobalCoroutineUsage: + active: true + +naming: + FunctionNaming: + ignoreAnnotated: ['Composable'] + +style: + DataClassShouldBeImmutable: + active: true + MagicNumber: + ignoreEnums: true + ignoreAnnotated: ['Composable'] + ignorePropertyDeclaration: true + SpacingBetweenPackageAndImports: + active: true + UnusedImports: + active: true + UnusedPrivateMember: + ignoreAnnotated: ['Preview'] + WildcardImport: + active: true + excludeImports: [] diff --git a/gravatar/build.gradle.kts b/gravatar/build.gradle.kts index 2049473b..24916b22 100644 --- a/gravatar/build.gradle.kts +++ b/gravatar/build.gradle.kts @@ -4,6 +4,9 @@ plugins { // Ktlint id("org.jlleitschuh.gradle.ktlint") + + // Detekt + id("io.gitlab.arturbosch.detekt") } android { @@ -32,6 +35,14 @@ android { kotlinOptions { jvmTarget = "1.8" } + + detekt { + config.setFrom("${project.rootDir}/config/detekt/detekt.yml") + source.setFrom("src") + autoCorrect = false + buildUponDefaultConfig = true + parallel = true + } } dependencies { From 5957161bc68d479a54391665f8cd2bd69ed17ce0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?He=CC=81ctor=20Abraham?= Date: Wed, 17 Jan 2024 10:46:22 +0100 Subject: [PATCH 2/3] Fixing code style errors --- gravatar/src/main/java/com/gravatar/GravatarApi.kt | 4 ++-- .../src/main/java/com/gravatar/HttpResponseCode.kt | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 gravatar/src/main/java/com/gravatar/HttpResponseCode.kt diff --git a/gravatar/src/main/java/com/gravatar/GravatarApi.kt b/gravatar/src/main/java/com/gravatar/GravatarApi.kt index 1da06eb7..37439722 100644 --- a/gravatar/src/main/java/com/gravatar/GravatarApi.kt +++ b/gravatar/src/main/java/com/gravatar/GravatarApi.kt @@ -62,8 +62,8 @@ class GravatarApi(okHttpClient: OkHttpClient? = null) { Log.w(LOG_TAG, "Network call unsuccessful trying to upload Gravatar: $response.body") val error: ErrorType = when (response.code()) { - 408 -> ErrorType.TIMEOUT - in 500..599 -> ErrorType.SERVER + HttpResponseCode.HTTP_CLIENT_TIMEOUT -> ErrorType.TIMEOUT + in HttpResponseCode.SERVER_ERRORS -> ErrorType.SERVER else -> ErrorType.UNKNOWN } gravatarUploadListener.onError(error) diff --git a/gravatar/src/main/java/com/gravatar/HttpResponseCode.kt b/gravatar/src/main/java/com/gravatar/HttpResponseCode.kt new file mode 100644 index 00000000..bfb4d3d4 --- /dev/null +++ b/gravatar/src/main/java/com/gravatar/HttpResponseCode.kt @@ -0,0 +1,11 @@ +package com.gravatar + +object HttpResponseCode { + // 4xx codes + const val HTTP_CLIENT_TIMEOUT = 408 + + // 5xx codes + private const val HTTP_INTERNAL_ERROR = 500 + private const val NETWORK_CONNECT_TIMEOUT_ERROR = 599 + val SERVER_ERRORS = HTTP_INTERNAL_ERROR..NETWORK_CONNECT_TIMEOUT_ERROR +} From 96b1c87f246bf0691180ba012efcd1912d41dd6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?He=CC=81ctor=20Abraham?= Date: Wed, 17 Jan 2024 11:18:54 +0100 Subject: [PATCH 3/3] Adding Detekt to the Readme --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 28a7eb1b..70d0b96a 100644 --- a/README.md +++ b/README.md @@ -25,4 +25,15 @@ You can also try to let Ktlint fix the code style issues. Just use: ./gradlew ktlintFormat ./gradlew :gravatar:ktlintFormat ./gradlew :app:ktlintFormat +``` + +## Code static analysis + +We use [Detekt](https://github.com/detekt/detekt) to perform static code analysis. You can run +Detekt via a gradle command: + +``` +./gradlew detekt +./gradlew :gravatar:detekt +./gradlew :app:detekt ``` \ No newline at end of file