Skip to content

Commit 99c3705

Browse files
committed
lintify KtLintStep.
1 parent 7091b97 commit 99c3705

File tree

4 files changed

+37
-33
lines changed

4 files changed

+37
-33
lines changed

lib/src/compatKtLintApi/java/com/diffplug/spotless/glue/ktlint/compat/KtLintCompatReporting.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2022 DiffPlug
2+
* Copyright 2022-2024 DiffPlug
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,11 +15,25 @@
1515
*/
1616
package com.diffplug.spotless.glue.ktlint.compat;
1717

18-
final class KtLintCompatReporting {
18+
public final class KtLintCompatReporting {
1919

2020
private KtLintCompatReporting() {}
2121

2222
static void report(int line, int column, String ruleId, String detail) {
23-
throw new AssertionError("Error on line: " + line + ", column: " + column + "\nrule: " + ruleId + "\n" + detail);
23+
throw new KtlintSpotlessException(line, ruleId, detail);
24+
}
25+
26+
public static class KtlintSpotlessException extends RuntimeException {
27+
private static final long serialVersionUID = 1L;
28+
29+
public final int line;
30+
public final String ruleId;
31+
public final String detail;
32+
33+
KtlintSpotlessException(int line, String ruleId, String detail) {
34+
this.line = line;
35+
this.ruleId = ruleId;
36+
this.detail = detail;
37+
}
2438
}
2539
}

lib/src/ktlint/java/com/diffplug/spotless/glue/ktlint/KtlintFormatterFunc.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import com.diffplug.spotless.FileSignature;
2323
import com.diffplug.spotless.FormatterFunc;
24+
import com.diffplug.spotless.Lint;
2425
import com.diffplug.spotless.glue.ktlint.compat.*;
2526

2627
public class KtlintFormatterFunc implements FormatterFunc.NeedsFile {
@@ -65,10 +66,14 @@ public String applyWithFile(String unix, File file) throws NoSuchFieldException,
6566
if (editorConfigPath != null) {
6667
absoluteEditorConfigPath = editorConfigPath.getOnlyFile().toPath();
6768
}
68-
return adapter.format(
69-
unix,
70-
file.toPath(),
71-
absoluteEditorConfigPath,
72-
editorConfigOverrideMap);
69+
try {
70+
return adapter.format(
71+
unix,
72+
file.toPath(),
73+
absoluteEditorConfigPath,
74+
editorConfigOverrideMap);
75+
} catch (KtLintCompatReporting.KtlintSpotlessException e) {
76+
throw Lint.atLine(e.line, e.ruleId, e.detail).shortcut();
77+
}
7378
}
7479
}

plugin-maven/src/test/java/com/diffplug/spotless/maven/kotlin/KtlintTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
*/
1616
package com.diffplug.spotless.maven.kotlin;
1717

18-
import static org.junit.jupiter.api.Assertions.assertTrue;
19-
18+
import org.assertj.core.api.Assertions;
2019
import org.junit.jupiter.api.Test;
2120

2221
import com.diffplug.spotless.ProcessRunner;
@@ -89,7 +88,7 @@ void testWithCustomRuleSetApply() throws Exception {
8988
"</ktlint>");
9089
setFile("src/main/kotlin/Main.kt").toResource("kotlin/ktlint/listScreen.dirty");
9190
ProcessRunner.Result result = mavenRunner().withArguments("spotless:check").runHasError();
92-
assertTrue(result.toString().contains("Composable functions that return Unit should start with an uppercase letter."));
91+
Assertions.assertThat(result.toString()).contains("Composable functions that return Unit should start with an uppercase letter.");
9392
}
9493

9594
private void checkKtlintOfficialStyle() throws Exception {

testlib/src/test/java/com/diffplug/spotless/kotlin/KtLintStepTest.java

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2016-2023 DiffPlug
2+
* Copyright 2016-2024 DiffPlug
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -29,69 +29,55 @@ void works0_48_0() {
2929
FormatterStep step = KtLintStep.create("0.48.0", TestProvisioner.mavenCentral());
3030
StepHarnessWithFile.forStep(this, step)
3131
.testResource("kotlin/ktlint/basic.dirty", "kotlin/ktlint/basic-old.clean")
32-
.testResourceExceptionMsg("kotlin/ktlint/unsolvable.dirty").isEqualTo("Error on line: 1, column: 1\n" +
33-
"rule: no-wildcard-imports\n" +
34-
"Wildcard import");
32+
.expectLintsOfResource("kotlin/ktlint/unsolvable.dirty").toBe("L1 ktlint(no-wildcard-imports) Wildcard import");
3533
}
3634

3735
@Test
3836
void works0_48_1() {
3937
FormatterStep step = KtLintStep.create("0.48.1", TestProvisioner.mavenCentral());
4038
StepHarnessWithFile.forStep(this, step)
4139
.testResource("kotlin/ktlint/basic.dirty", "kotlin/ktlint/basic-old.clean")
42-
.testResourceExceptionMsg("kotlin/ktlint/unsolvable.dirty").isEqualTo("Error on line: 1, column: 1\n" +
43-
"rule: no-wildcard-imports\n" +
44-
"Wildcard import");
40+
.expectLintsOfResource("kotlin/ktlint/unsolvable.dirty").toBe("L1 ktlint(no-wildcard-imports) Wildcard import");
4541
}
4642

4743
@Test
4844
void works0_49_0() {
4945
FormatterStep step = KtLintStep.create("0.49.0", TestProvisioner.mavenCentral());
5046
StepHarnessWithFile.forStep(this, step)
5147
.testResource("kotlin/ktlint/basic.dirty", "kotlin/ktlint/basic-old.clean")
52-
.testResourceExceptionMsg("kotlin/ktlint/unsolvable.dirty").isEqualTo("Error on line: 1, column: 1\n" +
53-
"rule: standard:no-wildcard-imports\n" +
54-
"Wildcard import");
48+
.expectLintsOfResource("kotlin/ktlint/unsolvable.dirty").toBe("L1 ktlint(standard:no-wildcard-imports) Wildcard import");
5549
}
5650

5751
@Test
5852
void works0_49_1() {
5953
FormatterStep step = KtLintStep.create("0.49.1", TestProvisioner.mavenCentral());
6054
StepHarnessWithFile.forStep(this, step)
6155
.testResource("kotlin/ktlint/basic.dirty", "kotlin/ktlint/basic-old.clean")
62-
.testResourceExceptionMsg("kotlin/ktlint/unsolvable.dirty").isEqualTo("Error on line: 1, column: 1\n" +
63-
"rule: standard:no-wildcard-imports\n" +
64-
"Wildcard import");
56+
.expectLintsOfResource("kotlin/ktlint/unsolvable.dirty").toBe("L1 ktlint(standard:no-wildcard-imports) Wildcard import");
6557
}
6658

6759
@Test
6860
void works0_50_0() {
6961
FormatterStep step = KtLintStep.create("0.50.0", TestProvisioner.mavenCentral());
7062
StepHarnessWithFile.forStep(this, step)
7163
.testResource("kotlin/ktlint/basic.dirty", "kotlin/ktlint/basic.clean")
72-
.testResourceExceptionMsg("kotlin/ktlint/unsolvable.dirty").isEqualTo("Error on line: 1, column: 1\n" +
73-
"rule: standard:no-wildcard-imports\n" +
74-
"Wildcard import");
64+
.expectLintsOfResource("kotlin/ktlint/unsolvable.dirty").toBe("L1 ktlint(standard:no-wildcard-imports) Wildcard import");
7565
}
7666

7767
@Test
7868
void works1_0_0() {
7969
FormatterStep step = KtLintStep.create("1.0.0", TestProvisioner.mavenCentral());
8070
StepHarnessWithFile.forStep(this, step)
8171
.testResource("kotlin/ktlint/basic.dirty", "kotlin/ktlint/basic.clean")
82-
.testResourceExceptionMsg("kotlin/ktlint/unsolvable.dirty").isEqualTo("Error on line: 1, column: 1\n" +
83-
"rule: standard:no-empty-file\n" +
84-
"File 'unsolvable.dirty' should not be empty");
72+
.expectLintsOfResource("kotlin/ktlint/unsolvable.dirty").toBe("L1 ktlint(standard:no-empty-file) File 'unsolvable.dirty' should not be empty");
8573
}
8674

8775
@Test
8876
void behavior() {
8977
FormatterStep step = KtLintStep.create(TestProvisioner.mavenCentral());
9078
StepHarnessWithFile.forStep(this, step)
9179
.testResource("kotlin/ktlint/basic.dirty", "kotlin/ktlint/basic.clean")
92-
.testResourceExceptionMsg("kotlin/ktlint/unsolvable.dirty").isEqualTo("Error on line: 1, column: 1\n" +
93-
"rule: standard:no-empty-file\n" +
94-
"File 'unsolvable.dirty' should not be empty");
80+
.expectLintsOfResource("kotlin/ktlint/unsolvable.dirty").toBe("L1 ktlint(standard:no-empty-file) File 'unsolvable.dirty' should not be empty");
9581
}
9682

9783
@Test

0 commit comments

Comments
 (0)