diff --git a/build.gradle.kts b/build.gradle.kts index d9555cdc..129ca3e7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,12 +14,19 @@ * limitations under the License. */ +import org.gradle.api.attributes.Bundling +import org.gradle.api.attributes.Category +import org.gradle.api.attributes.LibraryElements +import org.gradle.api.attributes.Usage +import org.gradle.api.attributes.java.TargetJvmEnvironment +import org.gradle.api.file.FileCollection +import org.gradle.process.CommandLineArgumentProvider + plugins { alias(libs.plugins.dokka) apply false alias(libs.plugins.dokka.javadoc) apply false alias(libs.plugins.intelliJPlatform) apply false alias(libs.plugins.kotlin) apply false - alias(libs.plugins.ktfmt) apply false alias(libs.plugins.nexusPublish) alias(libs.plugins.shadowJar) apply false } @@ -28,6 +35,71 @@ version = providers.gradleProperty("ktfmt.version").get() tasks.wrapper { distributionType = Wrapper.DistributionType.ALL } +val ktfmtCliDependencies = configurations.dependencyScope("ktfmtCliDependencies") +val ktfmtCliClasspath = + configurations.resolvable("ktfmtCliClasspath") { + extendsFrom(ktfmtCliDependencies.get()) + attributes { + attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME)) + attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY)) + attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.JAR)) + attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL)) + attribute( + TargetJvmEnvironment.TARGET_JVM_ENVIRONMENT_ATTRIBUTE, + objects.named(TargetJvmEnvironment.STANDARD_JVM), + ) + } + } + +dependencies { add(ktfmtCliDependencies.name, project(":ktfmt")) } + +val ktfmtFiles = + fileTree(rootDir) { + include("**/*.kt") + include("**/*.kts") + exclude("**/build/**") + } + +class KtfmtArgumentsProvider( + @get:InputFiles @get:PathSensitive(PathSensitivity.RELATIVE) val files: FileCollection, + @get:Input val check: Boolean, +) : CommandLineArgumentProvider { + override fun asArguments(): Iterable = buildList { + add("--quiet") + if (check) { + add("--dry-run") + add("--set-exit-if-changed") + } + addAll(files.files.sorted().map { it.path }) + } +} + +fun JavaExec.configureKtfmtRun(files: FileCollection, check: Boolean) { + group = if (check) "verification" else "formatting" + classpath = ktfmtCliClasspath.get() + mainClass.set("com.facebook.ktfmt.cli.Main") + argumentProviders.add(KtfmtArgumentsProvider(files, check)) + onlyIf { files.files.isNotEmpty() } +} + +val ktfmtCheck = + tasks.register("ktfmtCheck") { + group = "verification" + description = "Run Ktfmt formatter validation" + configureKtfmtRun(ktfmtFiles, check = true) + } + +val ktfmtFormat = + tasks.register("ktfmtFormat") { + group = "formatting" + description = "Run Ktfmt formatter" + configureKtfmtRun(ktfmtFiles, check = false) + } + +subprojects { + tasks.named { it == "check" }.configureEach { dependsOn(rootProject.tasks.named("ktfmtCheck")) } +} + nexusPublishing { repositories { sonatype { diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 0d3d2a8f..418b4cfc 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -14,12 +14,10 @@ * limitations under the License. */ -import com.ncorti.ktfmt.gradle.tasks.KtfmtCheckTask import org.gradle.kotlin.dsl.`kotlin-dsl` plugins { `kotlin-dsl` - alias(libs.plugins.ktfmt) } gradlePlugin { @@ -30,5 +28,3 @@ gradlePlugin { } } } - -tasks.named("jar") { dependsOn(tasks.withType()) } diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 32bd429c..ed762350 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -15,7 +15,6 @@ */ import com.facebook.ktfmt.GenerateKtfmtFileTask -import com.ncorti.ktfmt.gradle.tasks.KtfmtCheckTask import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.dsl.abi.ExperimentalAbiValidation @@ -23,7 +22,6 @@ plugins { kotlin("jvm") alias(libs.plugins.dokka) alias(libs.plugins.dokka.javadoc) - alias(libs.plugins.ktfmt) alias(libs.plugins.shadowJar) id("maven-publish") id("signing") @@ -111,16 +109,6 @@ kotlin { } } -ktfmt { - trailingCommaManagementStrategy.set( - com.ncorti.ktfmt.gradle.TrailingCommaManagementStrategy.ONLY_ADD - ) -} - -tasks.named("compileKotlin") { setMustRunAfter(emptyList()) } - -tasks.withType().configureEach { setMustRunAfter(listOf(tasks.named("jar"))) } - group = "com.facebook" version = rootProject.version diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f0052dbc..ada8fbd0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,6 @@ org-ec4j-core = "1.2.0" # plugins gradlePlugin-dokka = "2.2.0" gradlePlugin-intelliJPlatform = "2.6.0" -gradlePlugin-ktfmt = "0.26.0" gradlePlugin-nexusPublish = "2.0.0" gradlePlugin-shadowJar = "9.0.2" @@ -39,6 +38,5 @@ dokka = { id = "org.jetbrains.dokka", version.ref = "gradlePlugin-dokka" } dokka-javadoc = { id = "org.jetbrains.dokka-javadoc", version.ref = "gradlePlugin-dokka" } intelliJPlatform = { id = "org.jetbrains.intellij.platform", version.ref = "gradlePlugin-intelliJPlatform" } kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } -ktfmt = { id = "com.ncorti.ktfmt.gradle", version.ref = "gradlePlugin-ktfmt" } nexusPublish = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "gradlePlugin-nexusPublish" } shadowJar = { id = "com.gradleup.shadow", version.ref = "gradlePlugin-shadowJar" } diff --git a/ktfmt_idea_plugin/build.gradle.kts b/ktfmt_idea_plugin/build.gradle.kts index c51e41e2..cf7b954a 100644 --- a/ktfmt_idea_plugin/build.gradle.kts +++ b/ktfmt_idea_plugin/build.gradle.kts @@ -19,7 +19,6 @@ import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType.IntellijIdeaC plugins { java alias(libs.plugins.kotlin) - alias(libs.plugins.ktfmt) alias(libs.plugins.intelliJPlatform) } @@ -51,12 +50,6 @@ dependencies { implementation(project(":ktfmt")) } -ktfmt { - trailingCommaManagementStrategy.set( - com.ncorti.ktfmt.gradle.TrailingCommaManagementStrategy.ONLY_ADD - ) -} - intellijPlatform { projectName.set("ktfmt_idea_plugin") diff --git a/online_formatter/build.gradle.kts b/online_formatter/build.gradle.kts index e22538a3..4eacc6de 100644 --- a/online_formatter/build.gradle.kts +++ b/online_formatter/build.gradle.kts @@ -16,7 +16,6 @@ plugins { kotlin("jvm") - alias(libs.plugins.ktfmt) } repositories { @@ -39,12 +38,6 @@ kotlin { jvmToolchain(javaVersion.toInt()) } -ktfmt { - trailingCommaManagementStrategy.set( - com.ncorti.ktfmt.gradle.TrailingCommaManagementStrategy.ONLY_ADD - ) -} - tasks { test { useJUnit() } diff --git a/settings.gradle.kts b/settings.gradle.kts index ea48f265..c747414e 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,6 +14,13 @@ * limitations under the License. */ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + } +} + rootProject.name = "ktfmt-parent" include( @@ -35,4 +42,7 @@ dependencyResolutionManagement { version("ktfmt", ktfmtVersion) } } + repositories { + mavenCentral() + } }