From e8542e833c502a664c3a550bae9eb2c53774c1fd Mon Sep 17 00:00:00 2001 From: GoetzDeBouville Date: Tue, 23 Apr 2024 14:44:58 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D0=BB=D0=B8=D0=B1=D1=8B=20detekt=20=D0=9A?= =?UTF-8?q?=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D1=83=D0=B5?= =?UTF-8?q?=D1=82=20.gitignore=20=D0=92=D1=8B=D0=BD=D0=BE=D1=81=D0=B8?= =?UTF-8?q?=D1=82=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B5=D0=B9=20=D0=B2=20toml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 45 +++++++++++++------ app/build.gradle.kts | 9 ++-- .../davay/android/ExampleInstrumentedTest.kt | 6 +-- .../java/com/davay/android/ExampleUnitTest.kt | 3 +- build.gradle.kts | 32 +++++++++++++ gradle/libs.versions.toml | 20 +++++++++ gradlew | 0 7 files changed, 92 insertions(+), 23 deletions(-) mode change 100644 => 100755 gradlew diff --git a/.gitignore b/.gitignore index ba2be8fa..15f146ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,36 @@ *.iml -/local.properties -/.idea/caches -/.idea/libraries -/.idea/modules.xml -/.idea/workspace.xml -/.idea/navEditor.xml -/.idea/assetWizardSettings.xml -.DS_Store -/captures -.externalNativeBuild -.cxx -local.properties + +/.idea + +# Gradle files .gradle/ build/ out/ -/.idea + +# Local configuration file (sdk path, etc) +local.properties +develop.properties + +# Gradle-profiler data +profile-out*/ +gradle-user-home/ +*.hprof + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +output.json + +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# OS specific +.DS_Store +*.log diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2d6bdbf8..94341008 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -2,16 +2,17 @@ plugins { alias(libs.plugins.androidApplication) alias(libs.plugins.jetbrainsKotlinAndroid) alias(libs.plugins.ksp) + alias(libs.plugins.detekt) } android { namespace = "com.davay.android" - compileSdk = 34 + compileSdk = libs.versions.compileSdk.get().toInt() defaultConfig { applicationId = "com.davay.android" - minSdk = 26 - targetSdk = 34 + minSdk = libs.versions.minSdk.get().toInt() + targetSdk = libs.versions.targetSdk.get().toInt() versionCode = 1 versionName = "1.0" @@ -32,7 +33,7 @@ android { targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = "17" + jvmTarget = JavaVersion.valueOf(libs.versions.java.get()).toString() } } diff --git a/app/src/androidTest/java/com/davay/android/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/davay/android/ExampleInstrumentedTest.kt index 22b8f806..e429725e 100644 --- a/app/src/androidTest/java/com/davay/android/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/davay/android/ExampleInstrumentedTest.kt @@ -1,13 +1,11 @@ package com.davay.android -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * diff --git a/app/src/test/java/com/davay/android/ExampleUnitTest.kt b/app/src/test/java/com/davay/android/ExampleUnitTest.kt index b6f4dfc2..10b1cf0c 100644 --- a/app/src/test/java/com/davay/android/ExampleUnitTest.kt +++ b/app/src/test/java/com/davay/android/ExampleUnitTest.kt @@ -1,9 +1,8 @@ package com.davay.android +import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.Assert.* - /** * Example local unit test, which will execute on the development machine (host). * diff --git a/build.gradle.kts b/build.gradle.kts index a0985efc..89747dcc 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,4 +2,36 @@ plugins { alias(libs.plugins.androidApplication) apply false alias(libs.plugins.jetbrainsKotlinAndroid) apply false + alias(libs.plugins.ksp) apply false + alias(libs.plugins.detekt) +} + + +tasks.withType().configureEach { + parallel = true + autoCorrect = false + disableDefaultRuleSets = false + buildUponDefaultConfig = true + + jvmTarget = JavaVersion.valueOf(libs.versions.java.get()).toString() + + setSource(files(projectDir)) + include("**/*.kt") + include("**/*.kts") + exclude("**/resources/**") + exclude("**/build/**") + + reports { + xml.required.set(false) + html.required.set(true) + txt.required.set(true) + sarif.required.set(false) + md.required.set(false) + } + + config.setFrom(files(project.rootDir.resolve("conf/custom-detekt.yml"))) +} + +dependencies { + add("detekt", libs.bundles.staticAnalysis.detekt) } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ff9baac6..1687391e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,4 +1,9 @@ [versions] +minSdk = "26" +targetSdk = "34" +compileSdk = "34" +java = "VERSION_17" + agp = "8.2.0" kotlin = "1.9.22" coreKtx = "1.13.0" @@ -14,6 +19,8 @@ ksp = "1.9.22-1.0.17" dagger = "2.50" nav_version = "2.7.7" +detekt = "1.23.3" + [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } junit = { group = "junit", name = "junit", version.ref = "junit" } @@ -30,7 +37,20 @@ dagger-impl = { group = "com.google.dagger", name = "dagger", version.ref = "dag navigation-fragment = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "nav_version" } navigation-ui = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "nav_version" } +# Detekt +staticAnalysis-detektCli = { module = "io.gitlab.arturbosch.detekt:detekt-cli", version.ref = "detekt" } +staticAnalysis-detektFormatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } +staticAnalysis-detektLibraries = { module = "io.gitlab.arturbosch.detekt:detekt-rules-libraries", version.ref = "detekt" } + +[bundles] +staticAnalysis-detekt = [ + "staticAnalysis-detektCli", + "staticAnalysis-detektFormatting", + "staticAnalysis-detektLibraries" +] + [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" } jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 From 87a1ae189949e943d97541a88c5769b35452378d Mon Sep 17 00:00:00 2001 From: GoetzDeBouville Date: Thu, 25 Apr 2024 18:37:44 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20detekt=20=D0=BA=20=D0=BC=D0=BE=D0=B4=D1=83?= =?UTF-8?q?=D0=BB=D1=8F=D0=BC=20=D0=B8=20ci/cd=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D1=8B=D0=B2=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dv-ci.yml | 4 +- conf/custom-detekt.yml | 791 ++++++++++++++++++ gradle/libs.versions.toml | 1 + settings.gradle.kts | 2 +- uikit-sample/src/main/res/values/strings.xml | 3 - .../hellcorp/uikit_sample/ExampleUnitTest.kt | 17 - uikit/build.gradle.kts | 2 +- .../uikit/ExampleInstrumentedTest.kt | 15 +- .../java/com/davai/uikit/ExampleUnitTest.kt | 11 + .../com/hellcorp/uikit/ExampleUnitTest.kt | 17 - {uikit-sample => uikit_sample}/.gitignore | 0 .../build.gradle.kts | 5 +- .../proguard-rules.pro | 0 .../uikit_sample/ExampleInstrumentedTest.kt | 15 +- .../src/main/AndroidManifest.xml | 0 .../com/davai}/uikit_sample/MainActivity.kt | 26 +- .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../src/main/res/layout/activity_main.xml | 0 .../main/res/mipmap-anydpi/ic_launcher.xml | 0 .../res/mipmap-anydpi/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../src/main/res/values-night/themes.xml | 0 .../src/main/res/values/colors.xml | 0 uikit_sample/src/main/res/values/strings.xml | 3 + .../src/main/res/values/themes.xml | 0 .../com/davai/uikit_sample/ExampleUnitTest.kt | 11 + 36 files changed, 851 insertions(+), 72 deletions(-) create mode 100644 conf/custom-detekt.yml delete mode 100644 uikit-sample/src/main/res/values/strings.xml delete mode 100644 uikit-sample/src/test/java/com/hellcorp/uikit_sample/ExampleUnitTest.kt rename uikit/src/androidTest/java/com/{hellcorp => davai}/uikit/ExampleInstrumentedTest.kt (59%) create mode 100644 uikit/src/test/java/com/davai/uikit/ExampleUnitTest.kt delete mode 100644 uikit/src/test/java/com/hellcorp/uikit/ExampleUnitTest.kt rename {uikit-sample => uikit_sample}/.gitignore (100%) rename {uikit-sample => uikit_sample}/build.gradle.kts (91%) rename {uikit-sample => uikit_sample}/proguard-rules.pro (100%) rename {uikit-sample/src/androidTest/java/com/hellcorp => uikit_sample/src/androidTest/java/com/davai}/uikit_sample/ExampleInstrumentedTest.kt (58%) rename {uikit-sample => uikit_sample}/src/main/AndroidManifest.xml (100%) rename {uikit-sample/src/main/java/com/hellcorp => uikit_sample/src/main/java/com/davai}/uikit_sample/MainActivity.kt (70%) rename {uikit-sample => uikit_sample}/src/main/res/drawable/ic_launcher_background.xml (100%) rename {uikit-sample => uikit_sample}/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {uikit-sample => uikit_sample}/src/main/res/layout/activity_main.xml (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-anydpi/ic_launcher.xml (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-anydpi/ic_launcher_round.xml (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {uikit-sample => uikit_sample}/src/main/res/values-night/themes.xml (100%) rename {uikit-sample => uikit_sample}/src/main/res/values/colors.xml (100%) create mode 100644 uikit_sample/src/main/res/values/strings.xml rename {uikit-sample => uikit_sample}/src/main/res/values/themes.xml (100%) create mode 100644 uikit_sample/src/test/java/com/davai/uikit_sample/ExampleUnitTest.kt diff --git a/.github/workflows/dv-ci.yml b/.github/workflows/dv-ci.yml index 699b4b97..4e1eb728 100644 --- a/.github/workflows/dv-ci.yml +++ b/.github/workflows/dv-ci.yml @@ -24,8 +24,8 @@ jobs: - name: Grant execute permission for gradlew run: chmod +x gradlew - # - name: run detekt - # run: ./gradlew detekt + - name: run detekt + run: ./gradlew detekt - name: Run check out script run: ./gradlew build diff --git a/conf/custom-detekt.yml b/conf/custom-detekt.yml new file mode 100644 index 00000000..047d824f --- /dev/null +++ b/conf/custom-detekt.yml @@ -0,0 +1,791 @@ +build: + maxIssues: 0 + excludeCorrectable: false + weights: + # complexity: 2 + # LongParameterList: 1 + # style: 1 + # comments: 1 + +config: + validation: true + warningsAsErrors: false + # when writing own rules with new properties, exclude the property path e.g.: 'my_rule_set,.*>.*>[my_property]' + excludes: '' + +processors: + active: true + exclude: + - 'DetektProgressListener' + # - 'KtFileCountProcessor' + # - 'PackageCountProcessor' + # - 'ClassCountProcessor' + # - 'FunctionCountProcessor' + # - 'PropertyCountProcessor' + # - 'ProjectComplexityProcessor' + # - 'ProjectCognitiveComplexityProcessor' + # - 'ProjectLLOCProcessor' + # - 'ProjectCLOCProcessor' + # - 'ProjectLOCProcessor' + # - 'ProjectSLOCProcessor' + # - 'LicenseHeaderLoaderExtension' + +console-reports: + active: true + exclude: [ ] + +output-reports: + active: true + exclude: [ ] + +# Правила для регулирования документации и лицензирования. +comments: + active: false + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + AbsentOrWrongFileLicense: + active: false + licenseTemplateFile: 'license.template' + licenseTemplateIsRegex: false + CommentOverPrivateFunction: + active: false + CommentOverPrivateProperty: + active: false + EndOfSentenceFormat: + active: false + endOfSentenceFormat: '([.?!][ \t\n\r\f<])|([.?!:]$)' + UndocumentedPublicClass: + active: false + searchInNestedClass: false + searchInInnerClass: false + searchInInnerObject: false + searchInInnerInterface: false + UndocumentedPublicFunction: + active: false + UndocumentedPublicProperty: + active: false + +# Правила для регулирования сложности кода. +complexity: + active: true + ComplexCondition: + active: true + threshold: 4 + # Правило выключено, потому что дублируется правилом complexity:TooManyFunctions. + ComplexInterface: + active: false + threshold: 10 + includeStaticDeclarations: false + includePrivateDeclarations: false + CognitiveComplexMethod: + active: true + threshold: 15 + CyclomaticComplexMethod: + active: true + threshold: 10 + ignoreSingleWhenExpression: true + ignoreSimpleWhenEntries: true + ignoreNestingFunctions: false + nestingFunctions: [ run, let, apply, with, also, use, forEach, isNotNull, ifNull ] + LabeledExpression: + active: true + ignoredLabels: [ ] + LargeClass: + active: true + threshold: 200 + LongMethod: + active: true + threshold: 60 + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + ignoreAnnotated: [ "Composable" ] + LongParameterList: + active: true + functionThreshold: 6 + constructorThreshold: 7 + ignoreDefaultParameters: true + ignoreDataClasses: true + ignoreAnnotated: [ "Inject", "InjectConstructor", "Composable" ] + MethodOverloading: + active: true + threshold: 6 + NamedArguments: + active: true + threshold: 3 + NestedBlockDepth: + active: true + threshold: 4 + ReplaceSafeCallChainWithRun: + active: false + StringLiteralDuplication: + active: true + threshold: 3 + ignoreAnnotation: true + excludeStringsWithLessThan5Characters: true + ignoreStringsRegex: '$^' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**', '**/*.kts' ] + TooManyFunctions: + active: true + thresholdInFiles: 51 + thresholdInClasses: 51 + thresholdInInterfaces: 11 + thresholdInObjects: 51 + thresholdInEnums: 6 + ignoreDeprecated: true + ignorePrivate: true + ignoreOverridden: false + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + +# Правила для регулирования работы с корутинами. +coroutines: + active: true + GlobalCoroutineUsage: + active: true + RedundantSuspendModifier: + active: true + SleepInsteadOfDelay: + active: true + SuspendFunWithFlowReturnType: + active: true + +# Правила для регулирования пустых блоков кода. +empty-blocks: + active: true + EmptyCatchBlock: + active: true + allowedExceptionNameRegex: '_|(ignore|expected|ignored).*' + EmptyClassBlock: + active: true + EmptyDefaultConstructor: + active: true + EmptyDoWhileBlock: + active: true + EmptyElseBlock: + active: true + EmptyFinallyBlock: + active: true + EmptyForBlock: + active: true + EmptyFunctionBlock: + active: true + ignoreOverridden: false + EmptyIfBlock: + active: true + EmptyInitBlock: + active: true + EmptyKtFile: + active: true + EmptySecondaryConstructor: + active: true + EmptyTryBlock: + active: true + EmptyWhenBlock: + active: true + EmptyWhileBlock: + active: true + +# Правила для регулирования работы с исключениями. +exceptions: + active: true + ExceptionRaisedInUnexpectedLocation: + active: true + methodNames: [ toString, hashCode, equals, finalize ] + InstanceOfCheckForException: + active: true + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + # Выключено, потому что иногда бывает необходимость оставить тудушки в качестве реализации + NotImplementedDeclaration: + active: false + ObjectExtendsThrowable: + active: true + PrintStackTrace: + active: true + # Выключено, потому что мы иногда бросаем исключения из catch-блоков, чтобы их отловить позже + RethrowCaughtException: + active: false + ReturnFromFinally: + active: true + ignoreLabeled: false + SwallowedException: + active: true + ignoredExceptionTypes: + - InterruptedException + - NumberFormatException + - ParseException + - MalformedURLException + allowedExceptionNameRegex: '_|(ignore|expected|ignored).*' + ThrowingExceptionFromFinally: + active: true + ThrowingExceptionInMain: + active: false + ThrowingExceptionsWithoutMessageOrCause: + active: true + exceptions: + - IllegalArgumentException + - IllegalStateException + - IOException + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + ThrowingNewInstanceOfSameException: + active: true + TooGenericExceptionCaught: + active: true + exceptionNames: + - ArrayIndexOutOfBoundsException + - Error + - Exception + - IllegalMonitorStateException + - NullPointerException + - IndexOutOfBoundsException + - RuntimeException + - Throwable + allowedExceptionNameRegex: '_|(ignore|expected|ignored).*' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + TooGenericExceptionThrown: + active: true + exceptionNames: + - Error + - Exception + - Throwable + - RuntimeException + +# Правила форматирования кодовой базы. +formatting: + active: true + android: false + autoCorrect: true + AnnotationOnSeparateLine: + active: true + autoCorrect: true + AnnotationSpacing: + active: true + autoCorrect: true + ArgumentListWrapping: + active: true + autoCorrect: true + indentSize: 4 + maxLineLength: 120 + ChainWrapping: + active: false + autoCorrect: false + CommentSpacing: + active: true + autoCorrect: true + EnumEntryNameCase: + active: true + autoCorrect: true + Filename: + active: true + FinalNewline: + active: false + autoCorrect: true + insertFinalNewLine: true + ImportOrdering: + active: true + autoCorrect: true + layout: '*,java.**,javax.**,kotlin.**,kotlinx.android.synthetic.**,^' + Indentation: + active: true + autoCorrect: true + indentSize: 4 + #continuationIndentSize: 4 + # Правило выключено, потому что дублируется правилом style:MaxLineLength + MaximumLineLength: + active: false + maxLineLength: 120 + ignoreBackTickedIdentifier: false + ModifierOrdering: + active: true + autoCorrect: true + MultiLineIfElse: + active: true + autoCorrect: true + # Правило выключено, потому что удобно оставлять пустую строчку + # перед закрывающей скобкой класса + NoBlankLineBeforeRbrace: + active: false + autoCorrect: false + # Правило выключено, потому что иногда мы ставим больше одной пустой строки + # между, например, property и функциями + NoConsecutiveBlankLines: + active: false + autoCorrect: true + NoEmptyClassBody: + active: true + autoCorrect: true + NoEmptyFirstLineInMethodBlock: + active: true + autoCorrect: true + NoLineBreakAfterElse: + active: true + autoCorrect: true + NoLineBreakBeforeAssignment: + active: true + autoCorrect: true + NoMultipleSpaces: + active: true + autoCorrect: true + NoSemicolons: + active: true + autoCorrect: true + NoTrailingSpaces: + active: true + autoCorrect: true + NoUnitReturn: + active: true + autoCorrect: true + NoUnusedImports: + active: true + autoCorrect: true + # Правило выключено, потому что оно дублируется правилом WildcardImport, которое лучше настраивается. + NoWildcardImports: + active: false + # Правило выключено, потому что мы разрешаем использовать '_' в имени пакета + # Правило дублируется правилом naming:PackageNaming + PackageName: + active: false + autoCorrect: false + ParameterListWrapping: + active: true + autoCorrect: true + indentSize: 4 + maxLineLength: 120 + SpacingAroundAngleBrackets: + active: true + autoCorrect: true + SpacingAroundColon: + active: true + autoCorrect: true + SpacingAroundComma: + active: true + autoCorrect: true + SpacingAroundCurly: + active: true + autoCorrect: true + SpacingAroundDot: + active: true + autoCorrect: true + SpacingAroundDoubleColon: + active: true + autoCorrect: true + SpacingAroundKeyword: + active: true + autoCorrect: true + SpacingAroundOperators: + active: true + autoCorrect: true + SpacingAroundParens: + active: true + autoCorrect: true + SpacingAroundRangeOperator: + active: true + autoCorrect: true + SpacingAroundUnaryOperator: + active: true + autoCorrect: true + # Правило выключено, потому что оно дублируется + # правилом AnnotationOnSeparateLine + SpacingBetweenDeclarationsWithAnnotations: + active: false + autoCorrect: false + SpacingBetweenDeclarationsWithComments: + active: true + autoCorrect: true + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + StringTemplate: + active: true + autoCorrect: true + +# Правила именования переменных / функций / классов и т.п. +naming: + active: true + ClassNaming: + active: true + classPattern: '([A-Z$][a-zA-Z0-9$]*|[_A-Z]*(_SCREEN)*)' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + ConstructorParameterNaming: + active: true + parameterPattern: '[a-z][A-Za-z0-9]*' + privateParameterPattern: '[a-z][A-Za-z0-9]*' + excludeClassPattern: '$^' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + EnumNaming: + active: true + enumEntryPattern: '^[A-Z][_a-zA-Z0-9]*' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + # Правило выключено, потому что мы не ограничиваем фантазию разработчиков + # в вопросе именования классов + ForbiddenClassName: + active: false + forbiddenName: [ ] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + # Правило выключено, потому что иногда возникает необходимость в длинном имени + FunctionMaxLength: + active: false + maximumFunctionNameLength: 30 + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + # Правило выключено, потому что бывают функции, которые в определённом + # контексте имеют право называться коротким именем (в 1 символ) + FunctionMinLength: + active: false + minimumFunctionNameLength: 3 + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + FunctionNaming: + active: true + functionPattern: '([a-z][a-zA-Z0-9]*)|(`.*`)' + excludeClassPattern: '$^' + ignoreAnnotated: [ 'Composable' ] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + FunctionParameterNaming: + active: true + parameterPattern: '[a-z][A-Za-z0-9]*' + excludeClassPattern: '$^' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + InvalidPackageDeclaration: + active: true + excludes: [ '**/*.kts' ] + rootPackage: '' + MatchingDeclarationName: + active: true + mustBeFirst: true + MemberNameEqualsClassName: + active: true + ignoreOverridden: true + NoNameShadowing: + active: true + NonBooleanPropertyPrefixedWithIs: + active: true + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + ObjectPropertyNaming: + active: true + constantPattern: '[A-Za-z][_A-Za-z0-9]*' + propertyPattern: '[A-Za-z][_A-Za-z0-9]*' + privatePropertyPattern: '(_)?[A-Za-z][_A-Za-z0-9]*' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + PackageNaming: + active: true + packagePattern: '^[a-z]+(\.[a-z][a-z0-9]*)*$' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**', '**/uikit-sample/**', '**/uikit_sample/**'] + TopLevelPropertyNaming: + active: true + constantPattern: '[A-Z][_A-Za-z0-9]*' + propertyPattern: '[A-Za-z][_A-Za-z0-9]*' + privatePropertyPattern: '_?[A-Za-z][_A-Za-z0-9]*' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + + # Правило выключено, потому что иногда возникает необходимость в длинном + # имени переменной + VariableMaxLength: + active: false + maximumVariableNameLength: 64 + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + + # Правило выключено, потому что иногда возникает необходимость в коротком + # имени переменной + VariableMinLength: + active: false + minimumVariableNameLength: 1 + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + VariableNaming: + active: true + variablePattern: '[a-z][A-Za-z0-9]*' + privateVariablePattern: '(_)?[a-z][A-Za-z0-9]*' + excludeClassPattern: '$^' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + +# Набор правил для анализа кода на проблемы с производительностью. +performance: + active: true + ArrayPrimitive: + active: true + ForEachOnRange: + active: true + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + SpreadOperator: + active: false + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + UnnecessaryTemporaryInstantiation: + active: true + +# Набор правил для анализа кода на потенциальные баги. +potential-bugs: + active: true + CastToNullableType: + active: true + Deprecation: + active: true + DontDowncastCollectionTypes: + active: true + EqualsAlwaysReturnsTrueOrFalse: + active: true + EqualsWithHashCodeExist: + active: true + ExitOutsideMain: + active: true + ExplicitGarbageCollectionCall: + active: true + HasPlatformType: + active: true + IgnoredReturnValue: + active: true + restrictToConfig: true + returnValueAnnotations: [ '*.CheckReturnValue', '*.CheckResult' ] + ImplicitDefaultLocale: + active: true + ImplicitUnitReturnType: + active: true + allowExplicitReturnType: false + InvalidRange: + active: true + IteratorHasNextCallsNextMethod: + active: true + IteratorNotThrowingNoSuchElementException: + active: true + LateinitUsage: + active: true + ignoreAnnotated: [ 'Inject' ] + ignoreOnClassesPattern: '' + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + MapGetWithNotNullAssertionOperator: + active: true + NullableToStringCall: + active: true + UnconditionalJumpStatementInLoop: + active: true + UnnecessaryNotNullOperator: + active: true + UnnecessarySafeCall: + active: true + UnreachableCatchBlock: + active: true + UnreachableCode: + active: true + UnsafeCallOnNullableType: + active: true + UnsafeCast: + active: true + UnusedUnaryOperator: + active: true + UselessPostfixExpression: + active: true + WrongEqualsTypeParameter: + active: true + +# Набор правил, регулирующий применение определённого код-стайла. +style: + active: true + # Выключено, потому что мы нигде не соблюдаем порядок модификаторов + # видимости, указанный в "kotlin convention" + ClassOrdering: + active: false + CollapsibleIfStatements: + active: true + DataClassContainsFunctions: + active: true + conversionFunctionPrefix: [ ] + DataClassShouldBeImmutable: + active: true + DestructuringDeclarationWithTooManyEntries: + active: true + maxDestructuringEntries: 3 + EqualsNullCall: + active: true + EqualsOnSignatureLine: + active: true + ExplicitCollectionElementAccessMethod: + active: true + ExplicitItLambdaParameter: + active: true + # Выключено, потому что мы разрешаем писать функции из 1 выражения + # в виде block statement + ExpressionBodySyntax: + active: false + includeLineWrapping: false + ForbiddenComment: + active: true + comments: [ 'TODO', 'FIXME', 'STOPSHIP' ] + allowedPatterns: 'PORTFOLIO-[0-9]+|MOB-[0-9]+|HH-[0-9]+' + # Выключено, потому что не возникало необходимости запрещать import-ы + # конкретных сущностей + ForbiddenImport: + active: false + imports: [ ] + forbiddenPatterns: '' + ForbiddenMethodCall: + active: true + methods: [ { + value: 'kotlin.io.println' + }, { + value: 'kotlin.io.print' + } ] + ForbiddenVoid: + active: true + ignoreOverridden: false + ignoreUsageInGenerics: false + FunctionOnlyReturningConstant: + active: true + ignoreOverridableFunction: true + ignoreActualFunction: true + excludedFunctions: [ 'describeContents' ] + ignoreAnnotated: [ 'dagger.Provides' ] + LoopWithTooManyJumpStatements: + active: true + maxJumpCount: 1 + MagicNumber: + active: true + ignoreNumbers: [ '-1', '0', '1', '2' ] + ignoreHashCodeFunction: true + ignorePropertyDeclaration: false + ignoreLocalVariableDeclaration: false + ignoreConstantDeclaration: true + ignoreCompanionObjectPropertyDeclaration: true + ignoreAnnotation: false + ignoreNamedArgument: true + ignoreEnums: false + ignoreRanges: false + ignoreExtensionFunctions: true + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + BracesOnIfStatements: + active: true + singleLine: 'never' + multiLine: 'always' + MandatoryBracesLoops: + active: true + MaxLineLength: + active: true + maxLineLength: 120 + excludePackageStatements: true + excludeImportStatements: true + excludeCommentStatements: true + MayBeConst: + active: true + ModifierOrder: + active: true + MultilineLambdaItParameter: + active: true + NestedClassesVisibility: + active: true + # Выключено, потому что дублируется правилом formatting:FinalNewLine + # + в другом правиле есть автоисправление + NewLineAtEndOfFile: + active: false + NoTabs: + active: true + OptionalAbstractKeyword: + active: true + OptionalUnit: + active: false + # Выключено, потому что по нашему код-стайлу даже в единичных выражениях + # внутри when мы иногда ставим фигурные скобки + BracesOnWhenStatements: + active: false + # Выключено, потому что мы обычно используем явные конструкторы Pair-а, где + # нужно, а где можно - используем оператор to. + PreferToOverPairSyntax: + active: false + ProtectedMemberInFinalClass: + active: true + RedundantExplicitType: + active: true + RedundantHigherOrderMapUsage: + active: true + RedundantVisibilityModifierRule: + active: true + ReturnCount: + active: true + max: 2 + excludedFunctions: [ 'equals' ] + excludeLabeled: false + excludeReturnFromLambda: true + excludeGuardClauses: false + SafeCast: + active: true + SerialVersionUIDInSerializableClass: + active: true + SpacingBetweenPackageAndImports: + active: true + ThrowsCount: + active: true + max: 2 + # Правило выключено, потому что дублируется правилом formatting:NoTrailingSpaces, у которого есть автофикс + TrailingWhitespace: + active: false + UnderscoresInNumericLiterals: + active: true + acceptableLength: 5 + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + UnnecessaryAbstractClass: + active: true + ignoreAnnotated: [ 'dagger.Module' ] + UnnecessaryAnnotationUseSiteTarget: + active: true + UnnecessaryApply: + active: true + UnnecessaryFilter: + active: true + UnnecessaryInheritance: + active: true + UnnecessaryLet: + active: true + UnnecessaryParentheses: + active: true + UntilInsteadOfRangeTo: + active: true + # Правило выключено, потому что дублируется правилом formatting:NoUnusedImports + UnusedImports: + active: false + UnusedPrivateClass: + active: true + UnusedPrivateMember: + active: true + allowedNames: '(_|ignored|expected|serialVersionUID|commonMain|commonTest|androidMain|androidTest|iosMain|iosTest)' + ignoreAnnotated: [ 'Preview', 'LightDarkPreviews' ] + UseArrayLiteralsInAnnotations: + active: true + UseCheckNotNull: + active: true + UseCheckOrError: + active: true + # Выключено, потому что data-классы не всегда нужно использовать, если + # класс хранит в себе только данные. + UseDataClass: + active: false + ignoreAnnotated: [ ] + allowVars: false + UseEmptyCounterpart: + active: true + UseIfEmptyOrIfBlank: + active: true + # Выключено, потому что иногда выражение when с 2 ветками понятнее, чем if + UseIfInsteadOfWhen: + active: false + UseIsNullOrEmpty: + active: true + UseOrEmpty: + active: true + UseRequire: + active: true + UseRequireNotNull: + active: true + UselessCallOnNotNull: + active: true + UtilityClassWithPublicConstructor: + active: true + VarCouldBeVal: + active: true + WildcardImport: + active: true + excludeImports: [ 'java.util.*', 'kotlinx.android.synthetic.*' ] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**' ] + +libraries: + # Выключено, потому что наши core-модули могут выставлять наружу data class-ы + ForbiddenPublicDataClass: + active: false + excludes: [ '**' ] + ignorePackages: [ '*.internal', '*.internal.*' ] + LibraryCodeMustSpecifyReturnType: + active: true + excludes: [ '**' ] + # Выключено, потому что наши core-модули могут выставлять наружу свои классы, + # не закрытые интерфейсами + LibraryEntitiesShouldNotBePublic: + active: false + excludes: [ '**' ] diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4c1b176f..49756301 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -57,3 +57,4 @@ androidApplication = { id = "com.android.application", version.ref = "agp" } jetbrainsKotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } androidLibrary = { id = "com.android.library", version.ref = "agp" } +detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } diff --git a/settings.gradle.kts b/settings.gradle.kts index 80a44f4a..708f9088 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -21,5 +21,5 @@ dependencyResolutionManagement { rootProject.name = "DavayPosmotrim" include(":app") -include(":uikit-sample") include(":uikit") +include(":uikit_sample") diff --git a/uikit-sample/src/main/res/values/strings.xml b/uikit-sample/src/main/res/values/strings.xml deleted file mode 100644 index 5022e836..00000000 --- a/uikit-sample/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - uikit-sample - \ No newline at end of file diff --git a/uikit-sample/src/test/java/com/hellcorp/uikit_sample/ExampleUnitTest.kt b/uikit-sample/src/test/java/com/hellcorp/uikit_sample/ExampleUnitTest.kt deleted file mode 100644 index ec71289e..00000000 --- a/uikit-sample/src/test/java/com/hellcorp/uikit_sample/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.hellcorp.uikit_sample - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file diff --git a/uikit/build.gradle.kts b/uikit/build.gradle.kts index c9a78fc1..e2ef4dbc 100644 --- a/uikit/build.gradle.kts +++ b/uikit/build.gradle.kts @@ -4,7 +4,7 @@ plugins { } android { - namespace = "com.hellcorp.uikit" + namespace = "com.davai.uikit" compileSdk = libs.versions.compileSdk.get().toInt() defaultConfig { diff --git a/uikit/src/androidTest/java/com/hellcorp/uikit/ExampleInstrumentedTest.kt b/uikit/src/androidTest/java/com/davai/uikit/ExampleInstrumentedTest.kt similarity index 59% rename from uikit/src/androidTest/java/com/hellcorp/uikit/ExampleInstrumentedTest.kt rename to uikit/src/androidTest/java/com/davai/uikit/ExampleInstrumentedTest.kt index 3628fd84..f4aeb1f1 100644 --- a/uikit/src/androidTest/java/com/hellcorp/uikit/ExampleInstrumentedTest.kt +++ b/uikit/src/androidTest/java/com/davai/uikit/ExampleInstrumentedTest.kt @@ -1,24 +1,17 @@ -package com.hellcorp.uikit +package com.davai.uikit -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { @Test fun useAppContext() { // Context of the app under test. val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.hellcorp.uikit.test", appContext.packageName) + assertEquals("com.davai.uikit.test", appContext.packageName) } } \ No newline at end of file diff --git a/uikit/src/test/java/com/davai/uikit/ExampleUnitTest.kt b/uikit/src/test/java/com/davai/uikit/ExampleUnitTest.kt new file mode 100644 index 00000000..693eb07e --- /dev/null +++ b/uikit/src/test/java/com/davai/uikit/ExampleUnitTest.kt @@ -0,0 +1,11 @@ +package com.davai.uikit + +import org.junit.Assert.assertEquals +import org.junit.Test + +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/uikit/src/test/java/com/hellcorp/uikit/ExampleUnitTest.kt b/uikit/src/test/java/com/hellcorp/uikit/ExampleUnitTest.kt deleted file mode 100644 index 578ea662..00000000 --- a/uikit/src/test/java/com/hellcorp/uikit/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.hellcorp.uikit - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file diff --git a/uikit-sample/.gitignore b/uikit_sample/.gitignore similarity index 100% rename from uikit-sample/.gitignore rename to uikit_sample/.gitignore diff --git a/uikit-sample/build.gradle.kts b/uikit_sample/build.gradle.kts similarity index 91% rename from uikit-sample/build.gradle.kts rename to uikit_sample/build.gradle.kts index 88634323..397b4bdc 100644 --- a/uikit-sample/build.gradle.kts +++ b/uikit_sample/build.gradle.kts @@ -4,11 +4,11 @@ plugins { } android { - namespace = "com.hellcorp.uikit_sample" + namespace = "com.davai.uikit_sample" compileSdk = libs.versions.compileSdk.get().toInt() defaultConfig { - applicationId = "com.hellcorp.uikit_sample" + applicationId = "com.davai.uikit_sample" minSdk = libs.versions.minSdk.get().toInt() targetSdk = libs.versions.targetSdk.get().toInt() versionCode = libs.versions.versionCode.get().toInt() @@ -48,5 +48,4 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) - implementation(project(":uikit")) } \ No newline at end of file diff --git a/uikit-sample/proguard-rules.pro b/uikit_sample/proguard-rules.pro similarity index 100% rename from uikit-sample/proguard-rules.pro rename to uikit_sample/proguard-rules.pro diff --git a/uikit-sample/src/androidTest/java/com/hellcorp/uikit_sample/ExampleInstrumentedTest.kt b/uikit_sample/src/androidTest/java/com/davai/uikit_sample/ExampleInstrumentedTest.kt similarity index 58% rename from uikit-sample/src/androidTest/java/com/hellcorp/uikit_sample/ExampleInstrumentedTest.kt rename to uikit_sample/src/androidTest/java/com/davai/uikit_sample/ExampleInstrumentedTest.kt index 4a552cd2..a279c1c4 100644 --- a/uikit-sample/src/androidTest/java/com/hellcorp/uikit_sample/ExampleInstrumentedTest.kt +++ b/uikit_sample/src/androidTest/java/com/davai/uikit_sample/ExampleInstrumentedTest.kt @@ -1,24 +1,17 @@ -package com.hellcorp.uikit_sample +package com.davai.uikit_sample -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - -/** - * Instrumented test, which will execute on an Android device. - * - * See [testing documentation](http://d.android.com/tools/testing). - */ @RunWith(AndroidJUnit4::class) class ExampleInstrumentedTest { @Test fun useAppContext() { // Context of the app under test. val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.hellcorp.uikit_sample", appContext.packageName) + assertEquals("com.davai.uikit_sample", appContext.packageName) } } \ No newline at end of file diff --git a/uikit-sample/src/main/AndroidManifest.xml b/uikit_sample/src/main/AndroidManifest.xml similarity index 100% rename from uikit-sample/src/main/AndroidManifest.xml rename to uikit_sample/src/main/AndroidManifest.xml diff --git a/uikit-sample/src/main/java/com/hellcorp/uikit_sample/MainActivity.kt b/uikit_sample/src/main/java/com/davai/uikit_sample/MainActivity.kt similarity index 70% rename from uikit-sample/src/main/java/com/hellcorp/uikit_sample/MainActivity.kt rename to uikit_sample/src/main/java/com/davai/uikit_sample/MainActivity.kt index 691dfd0d..0b7386b5 100644 --- a/uikit-sample/src/main/java/com/hellcorp/uikit_sample/MainActivity.kt +++ b/uikit_sample/src/main/java/com/davai/uikit_sample/MainActivity.kt @@ -1,11 +1,11 @@ -package com.hellcorp.uikit_sample +package com.davai.uikit_sample import android.os.Bundle import android.view.View import android.widget.Toast import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity -import com.hellcorp.uikit_sample.databinding.ActivityMainBinding +import com.davai.uikit_sample.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private val binding: ActivityMainBinding by lazy { ActivityMainBinding.inflate(layoutInflater) } @@ -39,17 +39,31 @@ class MainActivity : AppCompatActivity() { Toast.LENGTH_SHORT ).show() - btnToDvBanner -> Toast.makeText(this@MainActivity, "ToDvBanner", Toast.LENGTH_SHORT) + btnToDvBanner -> Toast.makeText( + this@MainActivity, + "ToDvBanner", + Toast.LENGTH_SHORT + ) .show() - btnToDvButton -> Toast.makeText(this@MainActivity, "ToDvButton", Toast.LENGTH_SHORT) + btnToDvButton -> Toast.makeText( + this@MainActivity, + "ToDvButton", + Toast.LENGTH_SHORT + ) .show() - btnToDvFilm -> Toast.makeText(this@MainActivity, "ToDvFilm", Toast.LENGTH_SHORT) + btnToDvFilm -> Toast.makeText( + this@MainActivity, + "ToDvFilm", + Toast.LENGTH_SHORT + ) .show() btnToDvSession -> Toast.makeText( - this@MainActivity, "ToDvSession", Toast.LENGTH_SHORT + this@MainActivity, + "ToDvSession", + Toast.LENGTH_SHORT ).show() btnToDvToolbar -> Toast.makeText( diff --git a/uikit-sample/src/main/res/drawable/ic_launcher_background.xml b/uikit_sample/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from uikit-sample/src/main/res/drawable/ic_launcher_background.xml rename to uikit_sample/src/main/res/drawable/ic_launcher_background.xml diff --git a/uikit-sample/src/main/res/drawable/ic_launcher_foreground.xml b/uikit_sample/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from uikit-sample/src/main/res/drawable/ic_launcher_foreground.xml rename to uikit_sample/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/uikit-sample/src/main/res/layout/activity_main.xml b/uikit_sample/src/main/res/layout/activity_main.xml similarity index 100% rename from uikit-sample/src/main/res/layout/activity_main.xml rename to uikit_sample/src/main/res/layout/activity_main.xml diff --git a/uikit-sample/src/main/res/mipmap-anydpi/ic_launcher.xml b/uikit_sample/src/main/res/mipmap-anydpi/ic_launcher.xml similarity index 100% rename from uikit-sample/src/main/res/mipmap-anydpi/ic_launcher.xml rename to uikit_sample/src/main/res/mipmap-anydpi/ic_launcher.xml diff --git a/uikit-sample/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/uikit_sample/src/main/res/mipmap-anydpi/ic_launcher_round.xml similarity index 100% rename from uikit-sample/src/main/res/mipmap-anydpi/ic_launcher_round.xml rename to uikit_sample/src/main/res/mipmap-anydpi/ic_launcher_round.xml diff --git a/uikit-sample/src/main/res/mipmap-hdpi/ic_launcher.webp b/uikit_sample/src/main/res/mipmap-hdpi/ic_launcher.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-hdpi/ic_launcher.webp rename to uikit_sample/src/main/res/mipmap-hdpi/ic_launcher.webp diff --git a/uikit-sample/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/uikit_sample/src/main/res/mipmap-hdpi/ic_launcher_round.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-hdpi/ic_launcher_round.webp rename to uikit_sample/src/main/res/mipmap-hdpi/ic_launcher_round.webp diff --git a/uikit-sample/src/main/res/mipmap-mdpi/ic_launcher.webp b/uikit_sample/src/main/res/mipmap-mdpi/ic_launcher.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-mdpi/ic_launcher.webp rename to uikit_sample/src/main/res/mipmap-mdpi/ic_launcher.webp diff --git a/uikit-sample/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/uikit_sample/src/main/res/mipmap-mdpi/ic_launcher_round.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-mdpi/ic_launcher_round.webp rename to uikit_sample/src/main/res/mipmap-mdpi/ic_launcher_round.webp diff --git a/uikit-sample/src/main/res/mipmap-xhdpi/ic_launcher.webp b/uikit_sample/src/main/res/mipmap-xhdpi/ic_launcher.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-xhdpi/ic_launcher.webp rename to uikit_sample/src/main/res/mipmap-xhdpi/ic_launcher.webp diff --git a/uikit-sample/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/uikit_sample/src/main/res/mipmap-xhdpi/ic_launcher_round.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-xhdpi/ic_launcher_round.webp rename to uikit_sample/src/main/res/mipmap-xhdpi/ic_launcher_round.webp diff --git a/uikit-sample/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/uikit_sample/src/main/res/mipmap-xxhdpi/ic_launcher.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-xxhdpi/ic_launcher.webp rename to uikit_sample/src/main/res/mipmap-xxhdpi/ic_launcher.webp diff --git a/uikit-sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/uikit_sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp rename to uikit_sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp diff --git a/uikit-sample/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/uikit_sample/src/main/res/mipmap-xxxhdpi/ic_launcher.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-xxxhdpi/ic_launcher.webp rename to uikit_sample/src/main/res/mipmap-xxxhdpi/ic_launcher.webp diff --git a/uikit-sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/uikit_sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp similarity index 100% rename from uikit-sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp rename to uikit_sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp diff --git a/uikit-sample/src/main/res/values-night/themes.xml b/uikit_sample/src/main/res/values-night/themes.xml similarity index 100% rename from uikit-sample/src/main/res/values-night/themes.xml rename to uikit_sample/src/main/res/values-night/themes.xml diff --git a/uikit-sample/src/main/res/values/colors.xml b/uikit_sample/src/main/res/values/colors.xml similarity index 100% rename from uikit-sample/src/main/res/values/colors.xml rename to uikit_sample/src/main/res/values/colors.xml diff --git a/uikit_sample/src/main/res/values/strings.xml b/uikit_sample/src/main/res/values/strings.xml new file mode 100644 index 00000000..03444605 --- /dev/null +++ b/uikit_sample/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + uikit_sample + \ No newline at end of file diff --git a/uikit-sample/src/main/res/values/themes.xml b/uikit_sample/src/main/res/values/themes.xml similarity index 100% rename from uikit-sample/src/main/res/values/themes.xml rename to uikit_sample/src/main/res/values/themes.xml diff --git a/uikit_sample/src/test/java/com/davai/uikit_sample/ExampleUnitTest.kt b/uikit_sample/src/test/java/com/davai/uikit_sample/ExampleUnitTest.kt new file mode 100644 index 00000000..de8afd9e --- /dev/null +++ b/uikit_sample/src/test/java/com/davai/uikit_sample/ExampleUnitTest.kt @@ -0,0 +1,11 @@ +package com.davai.uikit_sample + +import org.junit.Assert.assertEquals +import org.junit.Test + +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file From 306e31759eb24a19fcb65a3433bccd7eff7c6ba4 Mon Sep 17 00:00:00 2001 From: GoetzDeBouville Date: Thu, 25 Apr 2024 18:39:06 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D1=83=D0=B5=D1=82=20=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D0=BE=20=D0=B4=D0=BB=D1=8F=20PackageNaming?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/custom-detekt.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/custom-detekt.yml b/conf/custom-detekt.yml index 047d824f..cdd98ff7 100644 --- a/conf/custom-detekt.yml +++ b/conf/custom-detekt.yml @@ -462,7 +462,7 @@ naming: PackageNaming: active: true packagePattern: '^[a-z]+(\.[a-z][a-z0-9]*)*$' - excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**', '**/uikit-sample/**', '**/uikit_sample/**'] + excludes: [ '**/test/**', '**/androidTest/**', '**/commonTest/**', '**/jvmTest/**', '**/jsTest/**', '**/iosTest/**', '**/uikit_sample/**'] TopLevelPropertyNaming: active: true constantPattern: '[A-Z][_A-Za-z0-9]*'