diff --git a/build.gradle.kts b/build.gradle.kts index 9af6cc6..1398598 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,6 @@ import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask -import io.gitlab.arturbosch.detekt.Detekt -import io.gitlab.arturbosch.detekt.extensions.DetektExtension +import dev.detekt.gradle.Detekt +import dev.detekt.gradle.extensions.DetektExtension import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin @@ -77,36 +77,51 @@ rootProject.plugins.withType { // configure detekt extensions.configure { - parallel = true + parallel.set(true) + buildUponDefaultConfig.set(true) source.setFrom(files("src/jsMain/kotlin")) config.setFrom(files("$rootDir/detekt.yml")) - buildUponDefaultConfig = true } dependencies { - "detektPlugins"(libs.detekt.formatting) + "detektPlugins"(libs.detekt.ktlint.wrapper) } tasks.register("ktlintCheck") { description = "Run detekt ktlint wrapper" - parallel = true + parallel.set(true) setSource(files("src/jsMain/kotlin")) config.setFrom(files("$rootDir/detekt-formatting.yml")) - buildUponDefaultConfig = true - disableDefaultRuleSets = true - autoCorrect = false + buildUponDefaultConfig.set(true) + disableDefaultRuleSets.set(true) + autoCorrect.set(false) reports { - xml { + checkstyle { required.set(true) - outputLocation.set(layout.buildDirectory.file("reports/detekt/detektFormatting.xml")) + outputLocation.set(layout.buildDirectory.file("reports/detekt/ktlint-check.xml")) } html.required.set(false) - txt.required.set(false) } include(listOf("**/*.kt", "**/*.kts")) exclude("build/") - dependencies { - "detektPlugins"(libs.detekt.formatting) +} + +tasks.register("ktlintFormat") { + description = "Run detekt ktlint wrapper" + parallel.set(true) + setSource(files("src/jsMain/kotlin")) + config.setFrom(files("$rootDir/detekt-formatting.yml")) + buildUponDefaultConfig.set(true) + disableDefaultRuleSets.set(true) + autoCorrect.set(true) + reports { + checkstyle { + required.set(true) + outputLocation.set(layout.buildDirectory.file("reports/detekt/ktlint-format.xml")) + } + html.required.set(false) } + include(listOf("**/*.kt", "**/*.kts")) + exclude("build/") } // configure dependency updates diff --git a/detekt-formatting.yml b/detekt-formatting.yml index 067d1f7..c7ef882 100644 --- a/detekt-formatting.yml +++ b/detekt-formatting.yml @@ -1,7 +1,3 @@ -build: - maxIssues: 0 - excludeCorrectable: true - console-reports: exclude: - 'ProjectStatisticsReport' @@ -11,7 +7,7 @@ console-reports: - 'FileBasedFindingsReport' - 'LiteFindingsReport' -formatting: +ktlint: ImportOrdering: active: true Indentation: diff --git a/detekt.yml b/detekt.yml index b54afda..0dff56a 100644 --- a/detekt.yml +++ b/detekt.yml @@ -1,6 +1,23 @@ -performance: - SpreadOperator: - active: false +console-reports: + exclude: + - 'ProjectStatisticsReport' + - 'ComplexityReport' + - 'NotificationReport' + - 'FileBasedFindingsReport' + - 'LiteFindingsReport' + +complexity: + ComplexCondition: + allowedConditions: 5 + CyclomaticComplexMethod: + ignoreSingleWhenExpression: true + +naming: + FunctionNaming: + functionPattern: "[a-z][a-zA-Z0-9]*" + ignoreAnnotated: [ 'Composable' ] + TopLevelPropertyNaming: + constantPattern: '[A-Z][_A-Z0-9]*|[A-Z][A-Za-z0-9]*' style: MagicNumber: @@ -8,10 +25,5 @@ style: NewLineAtEndOfFile: active: false -naming: - FunctionNaming: - ignoreAnnotated: - - 'Composable' - -formatting: - active: false \ No newline at end of file +ktlint: + active: false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 82bc0f4..3e0af55 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] coroutines = "1.10.2" -detekt = "1.23.8" +detekt = "2.0.0-alpha.2" gradleVersionsPlugin = "0.52.0" jetbrainsCompose = "1.10.3" kotlin = "2.3.20" @@ -12,11 +12,11 @@ webpackDevServer = "5.0.4" compose-html-core = { module = "org.jetbrains.compose.html:html-core", version.ref = "jetbrainsCompose" } compose-html-svg = { module = "org.jetbrains.compose.html:html-svg", version.ref = "jetbrainsCompose" } compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "jetbrainsCompose" } -detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } +detekt-ktlint-wrapper = { module = "dev.detekt:detekt-rules-ktlint-wrapper", version.ref = "detekt" } kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } [plugins] -detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } +detekt = { id = "dev.detekt", version.ref = "detekt" } gradleVersions = { id = "com.github.ben-manes.versions", version.ref = "gradleVersionsPlugin" } jetbrains-compose = { id = "org.jetbrains.compose", version.ref = "jetbrainsCompose" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/AboutMe.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/AboutMe.kt index 961919f..59cd1f9 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/AboutMe.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/AboutMe.kt @@ -88,7 +88,7 @@ private fun social() { attrs = { target(ATarget.Blank) classes(Style.AboutMe.profileLink) - } + }, ) { Div({ style { @@ -151,7 +151,7 @@ private fun experiment(experiment: Experiment, styleBlock: StyleScope.() -> Unit href = experiment.link, attrs = { classes(Style.Grid.span6, Style.Experiment.container) - } + }, ) { Div({ classes(Style.Experiment.containerOverlay) }) { P({ classes(Style.Section.title2) }) { Text(experiment.title) } diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/ProfileImage.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/ProfileImage.kt index 3137a49..e7f1e35 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/ProfileImage.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/ProfileImage.kt @@ -51,7 +51,7 @@ fun image() { images.forEach { Img( src = "assets/$it.jpg", - attrs = { classes(Style.profileImage, addStyle(image == it)) } + attrs = { classes(Style.profileImage, addStyle(image == it)) }, ) } } diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/Project.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/Project.kt index bcebc6e..674efef 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/Project.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/Project.kt @@ -35,7 +35,7 @@ fun project(project: Project, showViewMore: Boolean, styleBlock: StyleScope.() - attrs = { target(ATarget.Blank) classes(Style.Projects.containerOverlay) - } + }, ) { Div({ classes(Style.Projects.containerInner) }) { P({ classes(Style.Section.title2) }) { Text(project.title) } @@ -58,7 +58,7 @@ private fun viewMore() { width(.5.cssRem) height(.5.cssRem) fill("none") - } + }, ) { Path( d = "M6.8291 6.82849L6.8291 1.17163M6.8291 1.17163L1.17225 1.17163M6.8291 1.17163L1.17188 6.82849", diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/Work.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/Work.kt index 168f6f9..012d416 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/Work.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/components/Work.kt @@ -75,7 +75,7 @@ private fun interests() { attrs = { target(ATarget.Blank) classes(Style.Work.interestLink) - } + }, ) { Img( src = "assets/${interest.iconName}.svg", @@ -83,7 +83,7 @@ private fun interests() { style { height(interest.iconHeight.px) } - } + }, ) } } diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Data.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Data.kt index 1f3fa2c..598f75e 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Data.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Data.kt @@ -63,12 +63,12 @@ object Model { Project( "Gradle FTP upload plugin", "Gradle plugin for uploading files via ftp", - "https://github.com/nilsjr/gradle-ftp-upload-plugin" + "https://github.com/nilsjr/gradle-ftp-upload-plugin", ), Project( "WoWMythicPlus", "\uD83D\uDD11 WoW M+ overview displaying data from raider.io api", - "https://github.com/nilsjr/WoWMythicPlus" + "https://github.com/nilsjr/WoWMythicPlus", ), ) @@ -86,12 +86,12 @@ object Model { Project( "accompanist", "A collection of extension libraries for Jetpack Compose", - "https://github.com/google/accompanist" + "https://github.com/google/accompanist", ), Project( "azure-gradle-plugins", "About Azure Plugins for Gradle", - "https://github.com/microsoft/azure-gradle-plugins" + "https://github.com/microsoft/azure-gradle-plugins", ), ) diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Experiment.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Experiment.kt index 01e88c8..3441217 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Experiment.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Experiment.kt @@ -5,8 +5,4 @@ package de.nilsdruyen.portfolio.model -data class Experiment( - val title: String, - val subtitle: String, - val link: String, -) \ No newline at end of file +data class Experiment(val title: String, val subtitle: String, val link: String) \ No newline at end of file diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Interest.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Interest.kt index 4a54391..ec74736 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Interest.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Interest.kt @@ -5,9 +5,4 @@ package de.nilsdruyen.portfolio.model -data class Interest( - val name: String, - val link: String, - val iconName: String, - val iconHeight: Int = 50, -) \ No newline at end of file +data class Interest(val name: String, val link: String, val iconName: String, val iconHeight: Int = 50) \ No newline at end of file diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/ProfileLink.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/ProfileLink.kt index 2893415..8a5ecd3 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/ProfileLink.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/ProfileLink.kt @@ -9,7 +9,4 @@ import androidx.compose.runtime.Composable import org.jetbrains.compose.web.attributes.AttrsScope import org.w3c.dom.svg.SVGElement -data class ProfileLink( - val link: String, - val icon: @Composable (AttrsScope.() -> Unit) -> Unit = {}, -) \ No newline at end of file +data class ProfileLink(val link: String, val icon: @Composable (AttrsScope.() -> Unit) -> Unit = {}) \ No newline at end of file diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Project.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Project.kt index b2b71f9..effec2f 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Project.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Project.kt @@ -5,8 +5,4 @@ package de.nilsdruyen.portfolio.model -data class Project( - val title: String, - val subtitle: String, - val link: String, -) \ No newline at end of file +data class Project(val title: String, val subtitle: String, val link: String) \ No newline at end of file diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Work.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Work.kt index ebe2d46..5cc9257 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Work.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/model/Work.kt @@ -5,9 +5,4 @@ package de.nilsdruyen.portfolio.model -data class Work( - val timeFrame: String, - val result: String, - val role: String, - val name: String, -) \ No newline at end of file +data class Work(val timeFrame: String, val result: String, val role: String, val name: String) \ No newline at end of file diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/ui/Icons.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/ui/Icons.kt index 48016ee..d8c7481 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/ui/Icons.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/ui/Icons.kt @@ -31,7 +31,7 @@ object Icons { width(ICON_SIZE) height(ICON_SIZE) attrBlock() - } + }, ) { Path(d = GITHUB) } } @@ -44,7 +44,7 @@ object Icons { width(ICON_SIZE) height(ICON_SIZE) attrBlock() - } + }, ) { Path(d = TWITTER_X) } } @@ -57,7 +57,7 @@ object Icons { width(ICON_SIZE) height(ICON_SIZE) attrBlock() - } + }, ) { Path(d = INSTAGRAM) } } @@ -70,7 +70,7 @@ object Icons { width(ICON_SIZE) height(ICON_SIZE) attrBlock() - } + }, ) { Path(d = XING) } } @@ -83,7 +83,7 @@ object Icons { width(ICON_SIZE) height(ICON_SIZE) attrBlock() - } + }, ) { Path(d = LINKEDIN) } } @@ -96,7 +96,7 @@ object Icons { width(24) height(24) fill(Style.textColor.value().toString()) - } + }, ) { Path(d = if (isDark) DARK_MODE_FILLED else DARK_MODE) } diff --git a/src/jsMain/kotlin/de/nilsdruyen/portfolio/ui/Style.kt b/src/jsMain/kotlin/de/nilsdruyen/portfolio/ui/Style.kt index d9aa8d4..b768c18 100644 --- a/src/jsMain/kotlin/de/nilsdruyen/portfolio/ui/Style.kt +++ b/src/jsMain/kotlin/de/nilsdruyen/portfolio/ui/Style.kt @@ -561,7 +561,7 @@ object Style : StyleSheet() { backgroundPosition("50%") property( "background-image", - "url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.5 0.75C1.5 1.16421 1.16421 1.5 0.75 1.5C0.335786 1.5 0 1.16421 0 0.75C0 0.335786 0.335786 0 0.75 0C1.16421 0 1.5 0.335786 1.5 0.75Z' fill='%23D7DDE4'/%3E%3C/svg%3E%0A\")" + "url(\"data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1.5 0.75C1.5 1.16421 1.16421 1.5 0.75 1.5C0.335786 1.5 0 1.16421 0 0.75C0 0.335786 0.335786 0 0.75 0C1.16421 0 1.5 0.335786 1.5 0.75Z' fill='%23D7DDE4'/%3E%3C/svg%3E%0A\")", ) } }