diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 36da2ee..c12889d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: distribution: "temurin" java-version: ${{ matrix.java-version }} - - name: Test + - name: Unit tests and verification tasks run: ./gradlew check - name: Publish Release diff --git a/build.gradle.kts b/build.gradle.kts index 8b13789..f6e7c2b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1 +1,12 @@ +import com.diffplug.gradle.spotless.SpotlessExtension +plugins { + alias(libs.plugins.spotless) +} + +extensions.configure(SpotlessExtension::class) { + kotlin { + target("**/src/**/*.kt") + ktlint(libs.versions.ktlint.get()) + } +} diff --git a/generate/src/main/java/com/livefront/generate/AutoEmitProcessor.kt b/generate/src/main/java/com/livefront/generate/AutoEmitProcessor.kt index 0d90f8a..ca51d95 100644 --- a/generate/src/main/java/com/livefront/generate/AutoEmitProcessor.kt +++ b/generate/src/main/java/com/livefront/generate/AutoEmitProcessor.kt @@ -1,6 +1,5 @@ package com.livefront.generate -import com.livefront.annotation.AutoEmit import com.google.auto.service.AutoService import com.google.devtools.ksp.getVisibility import com.google.devtools.ksp.processing.CodeGenerator @@ -15,6 +14,7 @@ import com.google.devtools.ksp.symbol.KSPropertyDeclaration import com.google.devtools.ksp.symbol.Modifier.DATA import com.google.devtools.ksp.symbol.Origin import com.google.devtools.ksp.symbol.Visibility.PUBLIC +import com.livefront.annotation.AutoEmit import com.squareup.kotlinpoet.ClassName import com.squareup.kotlinpoet.CodeBlock import com.squareup.kotlinpoet.FileSpec @@ -62,9 +62,8 @@ public class AutoEmitProcessor( AutoEmit::class.qualifiedName!!, ), )?.containingFile, - ) + ), ) - } return emptyList() } @@ -131,7 +130,7 @@ internal data class AutoEmitFileSpec( fileSpecBuilder.addImport( packageName = "kotlinx.coroutines.flow", "StateFlow", - "MutableStateFlow" + "MutableStateFlow", ) fileSpecBuilder.addImport(packageName = "kotlin.properties", "Delegates") @@ -145,7 +144,7 @@ internal data class AutoEmitFileSpec( .delegate( fieldPattern( fieldName = field.simpleName.asString(), - ) + ), ) .build() } @@ -180,18 +179,18 @@ internal data class AutoEmitFileSpec( .addAnnotation(Generated::class) .addSuperinterface( StateFlow::class.asTypeName().parameterizedBy(ksClass.toClassName()), - delegate = CodeBlock.of("_state") + delegate = CodeBlock.of("_state"), ) .primaryConstructor(constructor) .addProperties(properties) .addProperty( PropertySpec.builder( "_state", - MutableStateFlow::class.asTypeName().parameterizedBy(ksClass.toClassName()) + MutableStateFlow::class.asTypeName().parameterizedBy(ksClass.toClassName()), ) .initializer("_state") .addModifiers(listOf(PRIVATE)) - .build() + .build(), ) .addType(companionObject) .build() @@ -206,5 +205,5 @@ internal data class AutoEmitFileSpec( if (old == new) return@observable _state.value = _state.value.copy($fieldName = new) } -""".trimIndent() + """.trimIndent() } diff --git a/generate/src/test/java/com/livefront/generate/AutoEmitProcessorTest.kt b/generate/src/test/java/com/livefront/generate/AutoEmitProcessorTest.kt index d86115e..fcd4c41 100644 --- a/generate/src/test/java/com/livefront/generate/AutoEmitProcessorTest.kt +++ b/generate/src/test/java/com/livefront/generate/AutoEmitProcessorTest.kt @@ -44,7 +44,7 @@ class AutoEmitProcessorTest { public fun MyData.emitter(): MyDataEmitter = MyDataEmitter(this) } } - """.trimIndent() + """.trimIndent(), ) } @@ -85,7 +85,7 @@ class AutoEmitProcessorTest { public fun ParentClass.MyData.emitter(): MyDataEmitter = MyDataEmitter(this) } } - """.trimIndent() + """.trimIndent(), ) } diff --git a/generate/src/test/java/com/livefront/generate/KspAssertions.kt b/generate/src/test/java/com/livefront/generate/KspAssertions.kt index 7401bbf..e0d0439 100644 --- a/generate/src/test/java/com/livefront/generate/KspAssertions.kt +++ b/generate/src/test/java/com/livefront/generate/KspAssertions.kt @@ -3,7 +3,6 @@ package com.livefront.generate import com.google.devtools.ksp.processing.SymbolProcessorProvider -import com.livefront.generate.AutoEmitProcessorProvider import com.tschuchort.compiletesting.JvmCompilationResult import com.tschuchort.compiletesting.KotlinCompilation import com.tschuchort.compiletesting.KotlinCompilation.ExitCode.OK @@ -11,7 +10,6 @@ import com.tschuchort.compiletesting.SourceFile import com.tschuchort.compiletesting.configureKsp import com.tschuchort.compiletesting.kspSourcesDir import com.tschuchort.compiletesting.kspWithCompilation -import com.tschuchort.compiletesting.symbolProcessorProviders import org.intellij.lang.annotations.Language import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi import org.junit.jupiter.api.Assertions.assertEquals @@ -27,7 +25,7 @@ fun assertGeneratedFile( sourceFileName: String, @Language("kotlin") source: String, generatedResultFileName: String, - @Language("kotlin") generatedSource: String + @Language("kotlin") generatedSource: String, ) { val compilation = KotlinCompilation().apply { configureKsp(useKsp2 = true) { @@ -37,25 +35,27 @@ fun assertGeneratedFile( kspWithCompilation = true sources = listOf( - SourceFile.kotlin(sourceFileName, source) + SourceFile.kotlin(sourceFileName, source), ) } val result = compilation.compile() if (result.exitCode != OK) { - print(""" + print( + """ Error when generating files: ${result.outputDirectory.absolutePath} - """.trimIndent()) + """.trimIndent(), + ) } assertEquals(OK, result.exitCode) val generated = File( compilation.kspSourcesDir, - "kotlin/$generatedResultFileName" + "kotlin/$generatedResultFileName", ) assertEquals( generatedSource.trimIndent(), - generated.readText().trimIndent() + generated.readText().trimIndent(), ) } @@ -66,7 +66,7 @@ fun assertKspResult( providers: List, sourceFileName: String, @Language("kotlin") source: String, - block: (JvmCompilationResult) -> Unit + block: (JvmCompilationResult) -> Unit, ) { val compilation = KotlinCompilation().apply { configureKsp(useKsp2 = true) { @@ -76,7 +76,7 @@ fun assertKspResult( kspWithCompilation = true sources = listOf( - SourceFile.kotlin(sourceFileName, source) + SourceFile.kotlin(sourceFileName, source), ) } block(compilation.compile()) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ff2473e..d974f36 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,12 +5,15 @@ junit5 = "5.10.0" kotlin = "2.1.0" kotlinpoet = "2.0.0" ksp = "2.1.0-1.0.29" +ktlint = "0.48.1" +spotless = "7.0.4" [plugins] dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } binaryCompat = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.17.0" } +spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } [libraries] coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "coroutines" }