Skip to content

Commit

Permalink
Predeclare spotless deps instead
Browse files Browse the repository at this point in the history
See diffplug/spotless#1213. Better performance too since we use the same config for every project
  • Loading branch information
ZacSweers committed May 20, 2022
1 parent 921ff02 commit 5116ec2
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 40 deletions.
48 changes: 48 additions & 0 deletions slack-plugin/src/main/kotlin/slack/gradle/SlackBasePlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
package slack.gradle

import com.diffplug.gradle.spotless.SpotlessExtension
import com.diffplug.gradle.spotless.SpotlessExtensionPredeclare
import java.util.Locale
import java.util.Optional
import kotlin.math.max
Expand All @@ -26,6 +28,7 @@ import org.gradle.api.artifacts.MinimalExternalModuleDependency
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.retry
import org.gradle.kotlin.dsl.withType
import slack.gradle.util.synchronousEnvProperty
Expand Down Expand Up @@ -102,6 +105,7 @@ internal class SlackBasePlugin : Plugin<Project> {
}

// Everything in here applies to all projects
target.configureSpotless(slackProperties)
target.configureClasspath(slackProperties)
val scanApi = ScanApi(target)
if (scanApi.isAvailable) {
Expand All @@ -110,6 +114,50 @@ internal class SlackBasePlugin : Plugin<Project> {
}
}

/** Configures Spotless for formatting. Note we do this per-project for improved performance. */
private fun Project.configureSpotless(slackProperties: SlackProperties) {
val isRootProject = this.isRootProject
pluginManager.withPlugin("com.diffplug.spotless") {
if (isRootProject) {
// Pre-declare in root project for better performance and also to work around
// https://github.com/diffplug/spotless/issues/1213
configure<SpotlessExtension> { predeclareDeps() }
configure<SpotlessExtensionPredeclare> {
format("misc") {
target("*.md", ".gitignore")
trimTrailingWhitespace()
endWithNewline()
}
val ktlintVersion = slackProperties.versions.ktlint
val ktlintUserData = mapOf("indent_size" to "2", "continuation_indent_size" to "2")
kotlin {
target("src/**/*.kt")
ktlint(ktlintVersion).userData(ktlintUserData)
trimTrailingWhitespace()
endWithNewline()
}
kotlinGradle {
target("src/**/*.kts")
ktlint(ktlintVersion).userData(ktlintUserData)
trimTrailingWhitespace()
endWithNewline()
}
java {
target("src/**/*.java")
googleJavaFormat(slackProperties.versions.gjf).reflowLongStrings()
trimTrailingWhitespace()
endWithNewline()
}
json {
target("src/**/*.json", "*.json")
target("*.json")
gson().indentWithSpaces(2).version(slackProperties.versions.gson)
}
}
}
}
}

@Suppress("LongMethod", "ComplexMethod")
private fun Project.configureClasspath(slackProperties: SlackProperties) {
val hamcrestDep = slackProperties.versions.catalog.findLibrary("testing-hamcrest")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import com.android.build.gradle.LibraryExtension
import com.android.build.gradle.internal.dsl.BaseAppModuleExtension
import com.android.build.gradle.internal.dsl.BuildType
import com.autonomousapps.DependencyAnalysisSubExtension
import com.diffplug.gradle.spotless.SpotlessExtension
import com.google.common.base.CaseFormat
import com.google.devtools.ksp.gradle.KspExtension
import io.gitlab.arturbosch.detekt.Detekt
Expand Down Expand Up @@ -159,7 +158,6 @@ internal class StandardProjectConfigurations {
}

val slackExtension = extensions.create<SlackExtension>("slack")
configureSpotless(slackProperties)
checkAndroidXDependencies(slackProperties)
configureAnnotationProcessors()
val jdkVersion = jdkVersion()
Expand Down Expand Up @@ -228,44 +226,6 @@ internal class StandardProjectConfigurations {
}
}

/** Configures Spotless for formatting. Note we do this per-project for improved performance. */
private fun Project.configureSpotless(slackProperties: SlackProperties) {
pluginManager.withPlugin("com.diffplug.spotless") {
configure<SpotlessExtension> {
format("misc") {
target("*.md", ".gitignore")
trimTrailingWhitespace()
endWithNewline()
}
val ktlintVersion = slackProperties.versions.ktlint
val ktlintUserData = mapOf("indent_size" to "2", "continuation_indent_size" to "2")
kotlin {
target("src/**/*.kt")
ktlint(ktlintVersion).userData(ktlintUserData)
trimTrailingWhitespace()
endWithNewline()
}
kotlinGradle {
target("src/**/*.kts")
ktlint(ktlintVersion).userData(ktlintUserData)
trimTrailingWhitespace()
endWithNewline()
}
java {
target("src/**/*.java")
googleJavaFormat(slackProperties.versions.gjf).reflowLongStrings()
trimTrailingWhitespace()
endWithNewline()
}
json {
target("src/**/*.json", "*.json")
target("*.json")
gson().indentWithSpaces(2).version(slackProperties.versions.gson)
}
}
}
}

/** Adds common configuration for Java projects. */
private fun Project.configureJavaProject(
jdkVersion: Int,
Expand Down

0 comments on commit 5116ec2

Please sign in to comment.