@@ -13,6 +13,89 @@ plugins {
13
13
alias(libs.plugins.kotlin.multiplatform) apply false
14
14
alias(libs.plugins.android.kotlin.multiplatform.library) apply false
15
15
alias(libs.plugins.android.lint) apply false
16
+ alias(libs.plugins.spotless) apply false
17
+ }
18
+
19
+ subprojects {
20
+ apply (plugin = " com.diffplug.spotless" )
21
+ extensions.configure< com.diffplug.gradle.spotless.SpotlessExtension > {
22
+ kotlin {
23
+ target(" **/*.kt" )
24
+ targetExclude(" **/build/**/*.kt" )
25
+
26
+ val disabledRules = arrayOf(
27
+ // These rules were introduced in ktlint 0.46.0 and should not be
28
+ // enabled without further discussion. They are disabled for now.
29
+ // See: https://github.com/pinterest/ktlint/releases/tag/0.46.0
30
+ " filename" ,
31
+ " annotation" ,
32
+ " annotation-spacing" ,
33
+ " argument-list-wrapping" ,
34
+ " double-colon-spacing" ,
35
+ " enum-entry-name-case" ,
36
+ " multiline-if-else" ,
37
+ " no-empty-first-line-in-method-block" ,
38
+ " package-name" ,
39
+ " trailing-comma" ,
40
+ " spacing-around-angle-brackets" ,
41
+ " spacing-between-declarations-with-annotations" ,
42
+ " spacing-between-declarations-with-comments" ,
43
+ " unary-op-spacing" ,
44
+ " no-trailing-spaces" ,
45
+ " max-line-length" ,
46
+ // Disabled rules that were introduced or changed between 0.46.0 ~ 1.50.0
47
+ " class-signature" ,
48
+ " trailing-comma-on-call-site" ,
49
+ " trailing-comma-on-declaration-site" ,
50
+ " comment-wrapping" ,
51
+ " function-literal" ,
52
+ " function-signature" ,
53
+ " function-expression-body" ,
54
+ " function-start-of-body-spacing" ,
55
+ " multiline-expression-wrapping" ,
56
+ )
57
+
58
+ ktlint(libs.versions.ktlint.get()).editorConfigOverride(
59
+ mapOf (
60
+ " android" to " true" ,
61
+ " ktlint_code_style" to " android_studio" ,
62
+ " ij_kotlin_allow_trailing_comma" to " true" ,
63
+ ) + disabledRules.map { Pair (" ktlint_standard_$it " , " disabled" ) }
64
+ )
65
+
66
+ // ktlint 7.0.0 introduces lints, which existing snippets do not satisfy
67
+ val kotlinSuppressLints = arrayOf(
68
+ " standard:function-naming" ,
69
+ " standard:property-naming" ,
70
+ " standard:class-naming" ,
71
+ " standard:max-line-length" ,
72
+ " standard:comment-wrapping" ,
73
+ " standard:import-ordering" ,
74
+ " standard:filename" ,
75
+ " standard:backing-property-naming" ,
76
+ )
77
+ for (lint in kotlinSuppressLints) {
78
+ suppressLintsFor {
79
+ step = " ktlint"
80
+ shortCode = lint
81
+ }
82
+ }
83
+
84
+ licenseHeaderFile(rootProject.file(" spotless/copyright.kt" ))
85
+ }
86
+ kotlinGradle {
87
+ target(" **/*.kts" )
88
+ targetExclude(" **/build/**/*.kts" )
89
+ // Look for the first line that doesn't have a block comment (assumed to be the license)
90
+ licenseHeaderFile(rootProject.file(" spotless/copyright.kts" ), " (^(?![\\ / ]\\ *).*$)" )
91
+ }
92
+ format(" xml" ) {
93
+ target(" **/*.xml" )
94
+ targetExclude(" **/build/**/*.xml" )
95
+ // Look for the root tag or a tag that is a snippet
96
+ licenseHeaderFile(rootProject.file(" spotless/copyright.xml" ), " (<[a-zA-Z])|(<!--\\ s+(//\\ s*)?\\ [START)" ).skipLinesMatching(" .*START.*" )
97
+ }
98
+ }
16
99
}
17
100
18
101
apply (" ${project.rootDir} /buildscripts/toml-updater-config.gradle" )
0 commit comments