Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade ktlint support #595

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/).

## [Unreleased]

### Changed

- **Breaking**: minimal supported Ktlint version is now `0.45.2` ([#595](https://github.com/JLLeitschuh/ktlint-gradle/pull/595))

## [11.0.0] - 2022-08-24

### Changed
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=bf8b869948901d422e9bb7d1fa61da6a6e19411baa7ad6ee929073df85d6365d
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
distributionSha256Sum=b586e04868a22fd817c8971330fec37e298f3242eb85c374181b12d637f80302
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
567 changes: 567 additions & 0 deletions kotlin-js-store/yarn.lock

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ tasks.withType<PluginUnderTestMetadata>().configureEach {
* metadata files.
*/
val shadowImplementation by configurations.creating
configurations["compileOnly"].extendsFrom(shadowImplementation)
with(configurations["compileOnly"]) {
extendsFrom(shadowImplementation)
isCanBeResolved = true
}
configurations["testImplementation"].extendsFrom(shadowImplementation)

dependencies {
Expand Down
8 changes: 4 additions & 4 deletions plugin/gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
[versions]
kotlin = "1.5.31"
ktlint = "0.43.2"
kotlin = "1.6.21"
ktlint = "0.46.1"
androidPlugin = "4.1.0"
semver = "1.1.1"
jgit = "5.6.0.201912101111-r"
sl4fj = "1.7.30"
gradleWrapper = "7.1.1"
gradleWrapperSha = "33ad4583fd7ee156f533778736fa1b4940bd83b433934d1cc4e9f608e99a6a89"
gradleWrapper = "7.3.3"
gradleWrapperSha = "575098db54a998ff1c6770b352c3b16766c09848bee7555dab09afc34e8cf590"
junit5 = "5.5.2"
assertJ = "3.11.1"
commonsIo = "2.8.0"
Expand Down
4 changes: 2 additions & 2 deletions plugin/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=bf8b869948901d422e9bb7d1fa61da6a6e19411baa7ad6ee929073df85d6365d
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip
distributionSha256Sum=b586e04868a22fd817c8971330fec37e298f3242eb85c374181b12d637f80302
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
2 changes: 1 addition & 1 deletion plugin/settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ pluginManagement {
val latestRelease = file("VERSION_LATEST_RELEASE.txt").readText().trim()
plugins {
id("org.jlleitschuh.gradle.ktlint") version latestRelease
id("org.jetbrains.kotlin.jvm") version "1.5.31"
id("org.jetbrains.kotlin.jvm") version "1.6.21"
id("com.gradle.plugin-publish") version "0.15.0"
`java-gradle-plugin`
`maven-publish`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.jlleitschuh.gradle.ktlint

import net.swiftzer.semver.SemVer
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
Expand Down Expand Up @@ -30,25 +29,18 @@ internal fun createKtlintConfiguration(target: Project, extension: KtlintExtensi
isCanBeResolved = true
isCanBeConsumed = false
isVisible = false

// Starting from KtLint 0.41.0 version published artifact has two variants: "external" and "shadowed"
attributes {
it.attribute(Bundling.BUNDLING_ATTRIBUTE, target.objects.named(Bundling::class.java, Bundling.EXTERNAL))
}

val dependencyProvider = target.provider {
val ktlintVersion = extension.version.get()
target.logger.info("Add dependency: ktlint version $ktlintVersion")
target.dependencies.create("${resolveGroup(ktlintVersion)}:ktlint:$ktlintVersion")
target.dependencies.create("com.pinterest:ktlint:$ktlintVersion")
}
dependencies.addLater(dependencyProvider)
}

private fun resolveGroup(ktlintVersion: String) = when {
SemVer.parse(ktlintVersion) < SemVer(0, 32, 0) -> "com.github.shyiko"
else -> "com.pinterest"
}

internal fun createKtlintRulesetConfiguration(
target: Project,
ktLintConfiguration: Configuration
Expand Down Expand Up @@ -116,19 +108,7 @@ internal fun createKtLintBaselineReporterConfiguration(
withDependencies {
dependencies.addLater(
target.provider {
val ktlintVersion = extension.version.get()
// Baseline reporter is only available starting 0.41.0 release
if (SemVer.parse(ktlintVersion) >= SemVer(0, 41, 0)) {
target.dependencies.create(
"com.pinterest.ktlint:ktlint-reporter-baseline:${extension.version.get()}"
)
} else {
// Adding fake plain reporter as addLater() does not accept `null` value
// Generate baseline tasks anyway will not run on KtLint versions < 0.41.0
target.dependencies.create(
"com.pinterest.ktlint:ktlint-reporter-plain:${extension.version.get()}"
)
}
target.dependencies.create("com.pinterest.ktlint:ktlint-reporter-baseline:${extension.version.get()}")
}
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.jlleitschuh.gradle.ktlint

import net.swiftzer.semver.SemVer
import org.gradle.api.DefaultTask
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.model.ObjectFactory
Expand Down Expand Up @@ -42,28 +41,14 @@ open class KtlintApplyToIdeaTask @Inject constructor(

// Subcommand
if (globally.get()) {
it.args(getApplyToIdeaCommand())
it.args("applyToIDEA")
} else {
it.args(getApplyToProjectCommand())
it.args("applyToIDEAProject")
}

// Subcommand parameters
// -y here to auto-overwrite existing IDEA code style
it.args("-y")
}
}

private fun getApplyToIdeaCommand() =
if (SemVer.parse(ktlintVersion.get()) >= SemVer(0, 35, 0)) {
"applyToIDEA"
} else {
"--apply-to-idea"
}

private fun getApplyToProjectCommand() =
if (SemVer.parse(ktlintVersion.get()) >= SemVer(0, 35, 0)) {
"applyToIDEAProject"
} else {
"--apply-to-idea-project"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ internal constructor(
/**
* The version of KtLint to use.
*/
val version: Property<String> = objectFactory.property { set("0.43.2") }
val version: Property<String> = objectFactory.property { set("0.46.1") }

/**
* Enable relative paths in reports
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,9 @@ internal fun Logger.logKtLintDebugMessage(
}

internal fun checkMinimalSupportedKtLintVersion(ktLintVersion: String) {
if (SemVer.parse(ktLintVersion) < SemVer(0, 34, 0)) {
if (SemVer.parse(ktLintVersion) < SemVer(0, 45, 2)) {
throw GradleException(
"KtLint versions less than 0.34.0 are not supported. " +
"KtLint versions less than 0.45.2 are not supported. " +
"Detected KtLint version: $ktLintVersion."
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package org.jlleitschuh.gradle.ktlint.tasks

import groovy.lang.Closure
import net.swiftzer.semver.SemVer
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.FileCollection
import org.gradle.api.file.FileTreeElement
Expand Down Expand Up @@ -181,8 +179,6 @@ abstract class BaseKtLintCheckTask @Inject constructor(
protected fun runLint(
inputChanges: InputChanges
) {
checkDisabledRulesSupportedKtLintVersion()

val editorConfigUpdated = wasEditorConfigFilesUpdated(inputChanges)
val filesToCheck = if (editorConfigUpdated) {
source.files
Expand All @@ -200,8 +196,6 @@ abstract class BaseKtLintCheckTask @Inject constructor(
inputChanges: InputChanges,
formatSnapshot: File
) {
checkDisabledRulesSupportedKtLintVersion()

val editorConfigUpdated = wasEditorConfigFilesUpdated(inputChanges)
val filesToCheck = if (editorConfigUpdated) {
source.files
Expand Down Expand Up @@ -289,12 +283,4 @@ abstract class BaseKtLintCheckTask @Inject constructor(
}
.map { it.file }
.toSet()

private fun checkDisabledRulesSupportedKtLintVersion() {
if (disabledRules.get().isNotEmpty() &&
SemVer.parse(ktLintVersion.get()) < SemVer(0, 34, 2)
) {
throw GradleException("Rules disabling is supported since 0.34.2 ktlint version.")
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.jlleitschuh.gradle.ktlint.tasks

import net.swiftzer.semver.SemVer
import org.gradle.api.DefaultTask
import org.gradle.api.Task
import org.gradle.api.file.ConfigurableFileCollection
Expand Down Expand Up @@ -50,14 +49,6 @@ abstract class GenerateBaselineTask @Inject constructor(
super.onlyIf(spec)
}

init {
onlyIf {
val isEnabled = SemVer.parse(ktLintVersion.get()) >= SemVer(0, 41, 0)
if (!isEnabled) logger.warn("Generate baseline only works starting from KtLint 0.41.0 version")
isEnabled
}
}

@Suppress("UnstableApiUsage")
@TaskAction
fun generateBaseline() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package org.jlleitschuh.gradle.ktlint.tasks

import net.swiftzer.semver.SemVer
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.ProjectLayout
Expand Down Expand Up @@ -118,8 +116,6 @@ abstract class GenerateReportsTask @Inject constructor(
@Suppress("UnstableApiUsage")
@TaskAction
fun generateReports() {
checkBaselineSupportedKtLintVersion()

// Classloader isolation is enough here as we just want to use some classes from KtLint classpath
// to get errors and generate files/console reports. No KtLint main object is initialized/used in this case.
val queue = workerExecutor.classLoaderIsolation { spec ->
Expand Down Expand Up @@ -183,12 +179,6 @@ abstract class GenerateReportsTask @Inject constructor(
return options.toMap()
}

private fun checkBaselineSupportedKtLintVersion() {
if (baseline.isPresent && SemVer.parse(ktLintVersion.get()) < SemVer(0, 41, 0)) {
throw GradleException("Baseline support is only enabled for KtLint versions 0.41.0+.")
}
}

internal enum class LintType(
val suffix: String
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,16 @@ internal interface KtLintClassesSerializer {
): List<LintErrorResult>

fun saveReporterProviders(
reporterProviders: List<ReporterProvider>,
reporterProviders: List<ReporterProvider<*>>,
serializedReporterProviders: File
)

fun loadReporterProviders(
serializedReporterProviders: File
): List<ReporterProvider>
): List<ReporterProvider<*>>

companion object {
fun create(ktLintVersion: SemVer): KtLintClassesSerializer =
if (ktLintVersion >= SemVer(0, 41, 0)) {
CurrentKtLintClassesSerializer()
} else {
OldKtLintClassesSerializer()
}
fun create(ktLintVersion: SemVer): KtLintClassesSerializer = CurrentKtLintClassesSerializer()
}
}

Expand Down Expand Up @@ -66,7 +61,7 @@ private class CurrentKtLintClassesSerializer : KtLintClassesSerializer {
}

override fun saveReporterProviders(
reporterProviders: List<ReporterProvider>,
reporterProviders: List<ReporterProvider<*>>,
serializedReporterProviders: File
) = ObjectOutputStream(
serializedReporterProviders.outputStream().buffered()
Expand All @@ -78,11 +73,11 @@ private class CurrentKtLintClassesSerializer : KtLintClassesSerializer {

override fun loadReporterProviders(
serializedReporterProviders: File
): List<ReporterProvider> = ObjectInputStream(
): List<ReporterProvider<*>> = ObjectInputStream(
serializedReporterProviders.inputStream().buffered()
).use {
@Suppress("UNCHECKED_CAST")
it.readObject() as List<ReporterProvider>
it.readObject() as List<ReporterProvider<*>>
}
}

Expand Down Expand Up @@ -118,7 +113,7 @@ private class OldKtLintClassesSerializer : KtLintClassesSerializer {
}

override fun saveReporterProviders(
reporterProviders: List<ReporterProvider>,
reporterProviders: List<ReporterProvider<*>>,
serializedReporterProviders: File
) = ObjectOutputStream(
serializedReporterProviders.outputStream().buffered()
Expand All @@ -130,7 +125,7 @@ private class OldKtLintClassesSerializer : KtLintClassesSerializer {

override fun loadReporterProviders(
serializedReporterProviders: File
): List<ReporterProvider> = ValidatingObjectInputStream(
): List<ReporterProvider<*>> = ValidatingObjectInputStream(
serializedReporterProviders.inputStream().buffered()
).use {
it.accept(
Expand Down