Skip to content

Commit af7ea9f

Browse files
authored
Test adding custom rule sets (#421)
* Test adding custom rule sets Rule sets can be configured by adding them to the `ktlint` dependency configuration * Don't fail test project build on lint * Fix test
1 parent c4ae1fd commit af7ea9f

File tree

11 files changed

+71
-8
lines changed

11 files changed

+71
-8
lines changed

.github/workflows/default.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,8 @@ jobs:
7272

7373
- name: Assert fixes
7474
run: |
75-
cd test-project/build/reports/ktlint
76-
grep 'no-empty-class-body' main-format.txt | grep -q 'EmptyClassBodyClass.kt:3:27'
75+
cd test-project/service/build/reports/ktlint
76+
grep 'kotlinter-test-rules:no-var' main-lint.txt | grep -q 'CustomNoVar.kt:4:5'
7777
grep 'op-spacing' test-format.txt | grep -q 'OpSpacing.kt:5:16'
7878
7979
- name: Upload reports

test-project/build.gradle.kts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
plugins {
2-
kotlin("jvm") version "2.1.0"
3-
id("org.jmailen.kotlinter")
2+
kotlin("jvm") version "2.1.0" apply false
43
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
plugins {
2+
kotlin("jvm")
3+
}
4+
5+
dependencies {
6+
compileOnly("com.pinterest.ktlint:ktlint-cli-ruleset-core:1.5.0")
7+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.jmailen.ktlint.rule
2+
3+
import com.pinterest.ktlint.rule.engine.core.api.*
4+
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
5+
6+
class NoVarRule :
7+
Rule(
8+
ruleId = RuleId("$CUSTOM_RULE_SET_ID:no-var"),
9+
about = About(
10+
maintainer = "jmailen",
11+
repositoryUrl = "https://gtihub.com/jeremymailen/kotlinter-gradle"
12+
)
13+
),
14+
RuleAutocorrectApproveHandler {
15+
override fun beforeVisitChildNodes(
16+
node: ASTNode,
17+
emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> AutocorrectDecision
18+
) {
19+
if (node.elementType == ElementType.VAR_KEYWORD) {
20+
emit(node.startOffset, "Use val instead of var", false)
21+
}
22+
}
23+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.jmailen.ktlint.rule
2+
3+
import com.pinterest.ktlint.cli.ruleset.core.api.RuleSetProviderV3
4+
import com.pinterest.ktlint.rule.engine.core.api.RuleProvider
5+
import com.pinterest.ktlint.rule.engine.core.api.RuleSetId
6+
7+
internal val CUSTOM_RULE_SET_ID = "kotlinter-test-rules"
8+
9+
class CustomRuleSetProvider : RuleSetProviderV3(RuleSetId(CUSTOM_RULE_SET_ID)) {
10+
override fun getRuleProviders(): Set<RuleProvider> =
11+
setOf(
12+
RuleProvider {
13+
NoVarRule()
14+
},
15+
)
16+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
org.jmailen.ktlint.rule.CustomRuleSetProvider
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
plugins {
2+
kotlin("jvm")
3+
id("org.jmailen.kotlinter")
4+
}
5+
6+
dependencies {
7+
ktlint(project(":rules"))
8+
}
9+
10+
kotlinter {
11+
reporters = arrayOf("plain", "checkstyle")
12+
ignoreLintFailures = true
13+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.jmailen.gradle.kotlinter.sample
2+
3+
class CustomNoVar {
4+
var test: String = "test"
5+
}

test-project/settings.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@ dependencyResolutionManagement {
1010
plugins {
1111
id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0"
1212
}
13+
14+
include(":service")
15+
include(":rules")

0 commit comments

Comments
 (0)