Skip to content

Commit 7e97ee6

Browse files
committed
feedback
1 parent 4c92f2b commit 7e97ee6

File tree

18 files changed

+164
-180
lines changed

18 files changed

+164
-180
lines changed

build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/dsl/CodeStyle.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ fun Project.configureLinting(lintPaths: List<String>) {
4040
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.SHADOWED))
4141
}
4242
}
43-
ktlint("aws.sdk.kotlin.gradle:ktlint-rules:$repoToolsVersion")
43+
ktlint("aws.sdk.kotlin.gradle:style:$repoToolsVersion")
4444
}
4545

4646
// add the buildscript classpath which should pick up our custom ktlint-rules (via runtimeOnly dep on this plugin)

build-plugins/build-support/src/main/kotlin/aws/sdk/kotlin/gradle/dsl/MinorVersionStrategy.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ package aws.sdk.kotlin.gradle.dsl
77

88
import aws.sdk.kotlin.gradle.util.verifyRootProject
99
import org.gradle.api.Project
10+
import org.gradle.api.artifacts.VersionCatalogsExtension
1011
import org.gradle.api.attributes.Bundling
1112
import org.gradle.api.tasks.JavaExec
1213
import org.gradle.kotlin.dsl.*
14+
import org.gradle.kotlin.dsl.getByType
1315
import org.gradle.language.base.plugins.LifecycleBasePlugin
1416

1517
/**
@@ -24,6 +26,13 @@ fun Project.configureMinorVersionStrategyRules(lintPaths: List<String>) {
2426
?.readText()
2527
?: error("Missing ktlint-version.txt")
2628

29+
val repoToolsVersion = extensions
30+
.getByType<VersionCatalogsExtension>()
31+
.named("libs")
32+
.findVersion("aws-kotlin-repo-tools-version")
33+
.get()
34+
.requiredVersion
35+
2736
val minorVersionBumpKtlint by configurations.creating
2837

2938
dependencies {
@@ -32,7 +41,7 @@ fun Project.configureMinorVersionStrategyRules(lintPaths: List<String>) {
3241
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.SHADOWED))
3342
}
3443
}
35-
minorVersionBumpKtlint(project(":ktlint-rules:minor-version-strategy"))
44+
minorVersionBumpKtlint("aws.sdk.kotlin.gradle:minor-version-rules:$repoToolsVersion")
3645
}
3746

3847
tasks.register<JavaExec>("verifyMinorVersionBump") {
@@ -42,13 +51,4 @@ fun Project.configureMinorVersionStrategyRules(lintPaths: List<String>) {
4251
mainClass.set("com.pinterest.ktlint.Main")
4352
args = lintPaths
4453
}
45-
46-
tasks.register<JavaExec>("fixMinorVersionBump") {
47-
group = LifecycleBasePlugin.VERIFICATION_GROUP
48-
description = "Auto fix minor version bump rules"
49-
classpath = minorVersionBumpKtlint
50-
mainClass.set("com.pinterest.ktlint.Main")
51-
args = listOf("-F") + lintPaths
52-
jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED")
53-
}
5454
}

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ dependencies {
5959
}
6060
}
6161

62-
ktlint(project(":ktlint-rules"))
62+
ktlint(project(":ktlint:style-rules"))
6363
}
6464

6565
val lintPaths = listOf(

gradle/libs.versions.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,18 @@ smithy-version = "1.60.2"
99
smithy-gradle-plugin-version = "1.3.0"
1010
junit-version = "5.10.1"
1111
coroutines-version = "1.10.2"
12-
slf4j = "2.0.17"
1312

1413
[libraries]
1514
aws-sdk-cloudwatch = { module = "aws.sdk.kotlin:cloudwatch", version.ref = "aws-sdk-version" }
1615
aws-sdk-s3 = { module = "aws.sdk.kotlin:s3", version.ref = "aws-sdk-version" }
1716
ktlint-cli = { module = "com.pinterest.ktlint:ktlint-cli", version.ref = "ktlint" }
1817
ktlint-cli-ruleset-core = { module = "com.pinterest.ktlint:ktlint-cli-ruleset-core", version.ref = "ktlint" }
19-
ktlint-rule-engine = { module = "com.pinterest.ktlint:ktlint-rule-engine", version.ref = "ktlint" }
2018
nexus-publish-plugin = { module = "io.github.gradle-nexus:publish-plugin", version.ref = "nexus-plugin-version" }
2119
jreleaser-plugin = { module = "org.jreleaser:jreleaser-gradle-plugin", version.ref = "jreleaser-plugin-version" }
2220
smithy-model = { module = "software.amazon.smithy:smithy-model", version.ref = "smithy-version" }
2321
smithy-gradle-base-plugin = { module = "software.amazon.smithy.gradle:smithy-base", version.ref = "smithy-gradle-plugin-version" }
2422
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junit-version" }
2523
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "coroutines-version" }
26-
slf4j-simple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" }
2724

2825
[plugins]
2926
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin-version" }

ktlint-rules/src/main/kotlin/software/aws/ktlint/rules/DeprecatedApiRule.kt

Lines changed: 0 additions & 49 deletions
This file was deleted.

ktlint-rules/src/test/kotlin/software/aws/ktlint/rules/DeprecatedApiRuleTest.kt

Lines changed: 0 additions & 109 deletions
This file was deleted.

ktlint-rules/build.gradle.kts renamed to ktlint/minor-version-rules/build.gradle.kts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
66
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
77

8-
description = "Lint rules for the AWS SDK for Kotlin"
8+
description = "Lint rules for minor version bumps"
99

1010
plugins {
1111
`maven-publish`
@@ -16,15 +16,13 @@ kotlin {
1616
sourceSets {
1717
main {
1818
dependencies {
19-
api(libs.ktlint.cli.ruleset.core)
19+
implementation(libs.ktlint.cli.ruleset.core)
2020
}
2121
}
2222

2323
test {
2424
dependencies {
2525
implementation(kotlin("test"))
26-
implementation(libs.ktlint.rule.engine)
27-
implementation(libs.slf4j.simple) // Required by ktlint rule engine tests
2826
}
2927
}
3028
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package software.aws.ktlint.rules
7+
8+
import com.pinterest.ktlint.rule.engine.core.api.ElementType
9+
import com.pinterest.ktlint.rule.engine.core.api.Rule
10+
import com.pinterest.ktlint.rule.engine.core.api.RuleId
11+
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
12+
13+
/**
14+
* Matches @DeprecatedUntilVersion with either named args (major=x, minor=y) or positional args (x, y)
15+
*/
16+
internal fun deprecatedUntilVersionRegex(major: Int, minor: Int): Regex =
17+
Regex(
18+
"""@DeprecatedUntilVersion\s*\(\s*(?:major\s*=\s*$major\s*,\s*minor\s*=\s*$minor\s*|\s*$major\s*,\s*$minor\s*)\s*\)""",
19+
)
20+
21+
/**
22+
* Creates a ktlint rule that detects APIs annotated with @DeprecatedUntilVersion for the specified versions.
23+
* If autocorrect is enabled, the API will be deleted.
24+
*/
25+
class DeprecatedApiRule : Rule(RuleId("minor-version-strategy-rules:deprecated-apis"), About()) {
26+
override fun beforeVisitChildNodes(
27+
node: ASTNode,
28+
autoCorrect: Boolean,
29+
emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> Unit,
30+
) {
31+
if (node.elementType == ElementType.ANNOTATION_ENTRY) {
32+
val sdkVersion = System.getProperty("sdkVersion").split(".")
33+
val majorVersion = sdkVersion[0].toInt()
34+
val minorVersion = sdkVersion[1].toInt()
35+
36+
val regex = deprecatedUntilVersionRegex(majorVersion, minorVersion + 1)
37+
if (regex.containsMatchIn(node.text)) {
38+
emit(
39+
node.startOffset,
40+
"The deprecated API is scheduled for removal, please remove it before releasing the next minor version.",
41+
true,
42+
)
43+
}
44+
}
45+
}
46+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
package software.aws.ktlint.rules
6+
7+
import com.pinterest.ktlint.cli.ruleset.core.api.RuleSetProviderV3
8+
import com.pinterest.ktlint.rule.engine.core.api.RuleProvider
9+
import com.pinterest.ktlint.rule.engine.core.api.RuleSetId
10+
11+
class MinorVersionRuleSetProvider : RuleSetProviderV3(RuleSetId("minor-version-strategy-rules")) {
12+
override fun getRuleProviders() = setOf(
13+
RuleProvider { DeprecatedApiRule() },
14+
)
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
software.aws.ktlint.rules.MinorVersionRuleSetProvider

0 commit comments

Comments
 (0)