Skip to content

Commit 2286b33

Browse files
committed
Group Spotless-specific configuration
1 parent 666a385 commit 2286b33

File tree

5 files changed

+56
-22
lines changed

5 files changed

+56
-22
lines changed

README.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,16 @@ streamProject {
3434
// Repository name for GitHub URLs and license headers (default: project name)
3535
repositoryName = "stream-chat-android"
3636

37-
// Choose formatter (default: false = ktlint)
38-
useKtfmt = false
37+
spotless {
38+
// Choose formatter (default: false = ktlint)
39+
useKtfmt = false
3940

40-
// Exclude specific modules from Spotless formatting (default: empty)
41-
spotlessIgnoredModules = setOf("some-module")
41+
// Exclude specific modules from Spotless formatting (default: empty)
42+
ignoredModules = setOf("some-module")
4243

43-
// Exclude file patterns from Spotless formatting (default: empty)
44-
spotlessExcludePatterns = setOf("**/generated/**", "**/proto/**")
44+
// Exclude file patterns from Spotless formatting (default: empty)
45+
excludePatterns = setOf("**/generated/**")
46+
}
4547
}
4648
```
4749

plugin/src/main/kotlin/io/getstream/android/StreamConventionExtensions.kt

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
*/
1616
package io.getstream.android
1717

18+
import io.getstream.android.spotless.SpotlessOptions
1819
import javax.inject.Inject
20+
import org.gradle.api.Action
1921
import org.gradle.api.Project
2022
import org.gradle.api.model.ObjectFactory
2123
import org.gradle.api.provider.Property
22-
import org.gradle.api.provider.SetProperty
2324
import org.gradle.kotlin.dsl.create
2425
import org.gradle.kotlin.dsl.findByType
2526
import org.gradle.kotlin.dsl.property
26-
import org.gradle.kotlin.dsl.setProperty
2727

2828
/**
2929
* Extension for configuring Stream project-wide settings. Apply the `io.getstream.project` plugin
@@ -37,16 +37,11 @@ constructor(project: Project, objects: ObjectFactory) {
3737
val repositoryName: Property<String> =
3838
objects.property<String>().convention(project.provider { project.rootProject.name })
3939

40-
/** Whether to apply ktfmt formatting instead of ktlint to Kotlin files. Default: false */
41-
val useKtfmt: Property<Boolean> = objects.property<Boolean>().convention(false)
40+
/** Spotless formatting configuration */
41+
val spotless: SpotlessOptions = objects.newInstance(SpotlessOptions::class.java)
4242

43-
/** Modules to exclude from Spotless formatting. Default: none */
44-
val spotlessIgnoredModules: SetProperty<String> =
45-
objects.setProperty<String>().convention(emptySet())
46-
47-
/** File patterns to exclude from Spotless formatting beyond build files. Default: none */
48-
val spotlessExcludePatterns: SetProperty<String> =
49-
objects.setProperty<String>().convention(emptySet())
43+
/** Configure Spotless formatting settings */
44+
fun spotless(action: Action<SpotlessOptions>) = action.execute(spotless)
5045
}
5146

5247
internal fun Project.createProjectExtension(): StreamProjectExtension =

plugin/src/main/kotlin/io/getstream/android/StreamConventionPlugins.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package io.getstream.android
1818
import com.android.build.api.dsl.ApplicationExtension
1919
import com.android.build.api.dsl.LibraryExtension
2020
import com.android.build.api.dsl.TestExtension
21+
import io.getstream.android.spotless.configureSpotless
2122
import org.gradle.api.Plugin
2223
import org.gradle.api.Project
2324

plugin/src/main/kotlin/io/getstream/android/SpotlessConfiguration.kt renamed to plugin/src/main/kotlin/io/getstream/android/spotless/SpotlessConfiguration.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,15 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package io.getstream.android
16+
package io.getstream.android.spotless
1717

1818
import com.diffplug.gradle.spotless.SpotlessExtension
19+
import io.getstream.android.GenerateLicenseFileTask
20+
import io.getstream.android.requireStreamProjectExtension
1921
import org.gradle.api.Project
2022
import org.gradle.api.Task
2123
import org.gradle.api.tasks.TaskContainer
2224
import org.gradle.kotlin.dsl.configure
23-
import org.gradle.kotlin.dsl.findByType
2425
import org.gradle.kotlin.dsl.named
2526
import org.gradle.kotlin.dsl.register
2627

@@ -33,15 +34,15 @@ internal fun Project.configureSpotless() {
3334
val projectExtension = requireStreamProjectExtension()
3435

3536
// Check if Spotless should be disabled for this module
36-
if (name in projectExtension.spotlessIgnoredModules.get()) {
37+
if (name in projectExtension.spotless.ignoredModules.get()) {
3738
return@afterEvaluate
3839
}
3940

4041
val repositoryName =
4142
projectExtension.repositoryName.orNull
4243
?: error("streamProject.repositoryName must be configured in the root project")
4344

44-
val useKtfmt = projectExtension.useKtfmt.get()
45+
val useKtfmt = projectExtension.spotless.useKtfmt.get()
4546

4647
val generateKotlinLicenseTask =
4748
registerLicenseGenerationTask(
@@ -68,7 +69,7 @@ internal fun Project.configureSpotless() {
6869
target("**/*.kt")
6970
targetExclude("**/build/**/*.kt")
7071

71-
projectExtension.spotlessExcludePatterns.orNull
72+
projectExtension.spotless.excludePatterns.orNull
7273
?.takeUnless(Set<String>::isEmpty)
7374
?.let { patterns -> targetExclude(*patterns.toTypedArray()) }
7475

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* Copyright (c) 2014-2025 Stream.io Inc. All rights reserved.
3+
*
4+
* Licensed under the Stream License;
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://github.com/GetStream/stream-build-conventions-android/blob/main/LICENSE
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package io.getstream.android.spotless
17+
18+
import javax.inject.Inject
19+
import org.gradle.api.model.ObjectFactory
20+
import org.gradle.api.provider.Property
21+
import org.gradle.api.provider.SetProperty
22+
import org.gradle.kotlin.dsl.property
23+
import org.gradle.kotlin.dsl.setProperty
24+
25+
abstract class SpotlessOptions @Inject constructor(objects: ObjectFactory) {
26+
27+
/** Whether to apply ktfmt formatting instead of ktlint to Kotlin files. Default: false */
28+
val useKtfmt: Property<Boolean> = objects.property<Boolean>().convention(false)
29+
30+
/** Modules to exclude from Spotless formatting. Default: none */
31+
val ignoredModules: SetProperty<String> = objects.setProperty<String>().convention(emptySet())
32+
33+
/** File patterns to exclude from Spotless formatting beyond build files. Default: none */
34+
val excludePatterns: SetProperty<String> = objects.setProperty<String>().convention(emptySet())
35+
}

0 commit comments

Comments
 (0)