1414 * limitations under the License.
1515 */
1616
17+ import org.gradle.api.attributes.Bundling
18+ import org.gradle.api.attributes.Category
19+ import org.gradle.api.attributes.LibraryElements
20+ import org.gradle.api.attributes.Usage
21+ import org.gradle.api.attributes.java.TargetJvmEnvironment
22+ import org.gradle.api.file.FileCollection
23+ import org.gradle.process.CommandLineArgumentProvider
24+
1725plugins {
1826 alias(libs.plugins.dokka) apply false
1927 alias(libs.plugins.intelliJPlatform) apply false
2028 alias(libs.plugins.kotlin) apply false
21- alias(libs.plugins.ktfmt) apply false
2229 alias(libs.plugins.nexusPublish)
2330 alias(libs.plugins.shadowJar) apply false
2431}
@@ -27,6 +34,75 @@ version = providers.gradleProperty("ktfmt.version").get()
2734
2835tasks.wrapper { distributionType = Wrapper .DistributionType .ALL }
2936
37+ repositories {
38+ mavenCentral()
39+ }
40+
41+ val ktfmtCliDependencies = configurations.dependencyScope(" ktfmtCliDependencies" )
42+ val ktfmtCliClasspath =
43+ configurations.resolvable(" ktfmtCliClasspath" ) {
44+ extendsFrom(ktfmtCliDependencies.get())
45+ attributes {
46+ attribute(Usage .USAGE_ATTRIBUTE , objects.named(Usage .JAVA_RUNTIME ))
47+ attribute(Category .CATEGORY_ATTRIBUTE , objects.named(Category .LIBRARY ))
48+ attribute(LibraryElements .LIBRARY_ELEMENTS_ATTRIBUTE , objects.named(LibraryElements .JAR ))
49+ attribute(Bundling .BUNDLING_ATTRIBUTE , objects.named(Bundling .EXTERNAL ))
50+ attribute(
51+ TargetJvmEnvironment .TARGET_JVM_ENVIRONMENT_ATTRIBUTE ,
52+ objects.named(TargetJvmEnvironment .STANDARD_JVM ),
53+ )
54+ }
55+ }
56+
57+ dependencies { add(ktfmtCliDependencies.name, project(" :ktfmt" )) }
58+
59+ val ktfmtFiles =
60+ fileTree(rootDir) {
61+ include(" **/*.kt" )
62+ include(" **/*.kts" )
63+ exclude(" **/build/**" )
64+ }
65+
66+ class KtfmtArgumentsProvider (
67+ @get:InputFiles @get:PathSensitive(PathSensitivity .RELATIVE ) val files : FileCollection ,
68+ @get:Input val check : Boolean ,
69+ ) : CommandLineArgumentProvider {
70+ override fun asArguments (): Iterable <String > = buildList {
71+ add(" --quiet" )
72+ if (check) {
73+ add(" --dry-run" )
74+ add(" --set-exit-if-changed" )
75+ }
76+ addAll(files.files.sorted().map { it.path })
77+ }
78+ }
79+
80+ fun JavaExec.configureKtfmtRun (files : FileCollection , check : Boolean ) {
81+ group = if (check) " verification" else " formatting"
82+ classpath = ktfmtCliClasspath.get()
83+ mainClass.set(" com.facebook.ktfmt.cli.Main" )
84+ argumentProviders.add(KtfmtArgumentsProvider (files, check))
85+ onlyIf { files.files.isNotEmpty() }
86+ }
87+
88+ val ktfmtCheck =
89+ tasks.register<JavaExec >(" ktfmtCheck" ) {
90+ group = " verification"
91+ description = " Run Ktfmt formatter validation"
92+ configureKtfmtRun(ktfmtFiles, check = true )
93+ }
94+
95+ val ktfmtFormat =
96+ tasks.register<JavaExec >(" ktfmtFormat" ) {
97+ group = " formatting"
98+ description = " Run Ktfmt formatter"
99+ configureKtfmtRun(ktfmtFiles, check = false )
100+ }
101+
102+ subprojects {
103+ tasks.named { it == " check" }.configureEach { dependsOn(rootProject.tasks.named(" ktfmtCheck" )) }
104+ }
105+
30106nexusPublishing {
31107 repositories {
32108 sonatype {
0 commit comments