Skip to content

Commit cf6c76f

Browse files
committedMay 28, 2024·
Check if ktlint_code_style is set in .editorconfig before overriding it
ktlint_code_style gets unconditionally overridden to its default value (intellij_idea) when the editorConfigOverride map is non-empty but does not define it. As a result, it gets overridden even if it's actually defined in the .editorconfig file. This change checks if ktlint_code_style is already defined in .editorconfig before overriding it to its default value. Fixes #2142.
1 parent 1e8fc34 commit cf6c76f

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed
 

‎lib/src/compatKtLint1Dot0Dot0/java/com/diffplug/spotless/glue/ktlint/compat/KtLintCompat1Dot0Dot0Adapter.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,20 +93,21 @@ public String format(
9393
.flatMap(loader -> loader.get().getRuleProviders().stream())
9494
.collect(Collectors.toUnmodifiableSet());
9595

96-
EditorConfigOverride editorConfigOverride;
97-
if (editorConfigOverrideMap.isEmpty()) {
98-
editorConfigOverride = EditorConfigOverride.Companion.getEMPTY_EDITOR_CONFIG_OVERRIDE();
99-
} else {
100-
editorConfigOverride = createEditorConfigOverride(allRuleProviders.stream().map(
101-
RuleProvider::createNewRuleInstance).collect(Collectors.toList()),
102-
editorConfigOverrideMap);
103-
}
10496
EditorConfigDefaults editorConfig;
10597
if (editorConfigPath == null || !Files.exists(editorConfigPath)) {
10698
editorConfig = EditorConfigDefaults.Companion.getEMPTY_EDITOR_CONFIG_DEFAULTS();
10799
} else {
108100
editorConfig = EditorConfigDefaults.Companion.load(editorConfigPath, RuleProviderKt.propertyTypes(allRuleProviders));
109101
}
102+
EditorConfigOverride editorConfigOverride;
103+
if (editorConfigOverrideMap.isEmpty()) {
104+
editorConfigOverride = EditorConfigOverride.Companion.getEMPTY_EDITOR_CONFIG_OVERRIDE();
105+
} else {
106+
editorConfigOverride = createEditorConfigOverride(
107+
editorConfig,
108+
allRuleProviders.stream().map(RuleProvider::createNewRuleInstance).collect(Collectors.toList()),
109+
editorConfigOverrideMap);
110+
}
110111

111112
return new KtLintRuleEngine(
112113
allRuleProviders,
@@ -120,7 +121,7 @@ public String format(
120121
/**
121122
* Create EditorConfigOverride from user provided parameters.
122123
*/
123-
private static EditorConfigOverride createEditorConfigOverride(final List<Rule> rules, Map<String, Object> editorConfigOverrideMap) {
124+
private static EditorConfigOverride createEditorConfigOverride(final EditorConfigDefaults editorConfig, final List<Rule> rules, Map<String, Object> editorConfigOverrideMap) {
124125
// Get properties from rules in the rule sets
125126
Stream<EditorConfigProperty<?>> ruleProperties = rules.stream()
126127
.flatMap(rule -> rule.getUsesEditorConfigProperties().stream());
@@ -132,7 +133,9 @@ private static EditorConfigOverride createEditorConfigOverride(final List<Rule>
132133
.collect(Collectors.toMap(EditorConfigProperty::getName, property -> property));
133134

134135
// The default style had been changed from intellij_idea to ktlint_official in version 1.0.0
135-
if (!editorConfigOverrideMap.containsKey("ktlint_code_style")) {
136+
boolean isCodeStyleDefinedInEditorConfig = editorConfig.getValue().getSections().stream()
137+
.anyMatch(section -> section.getProperties().containsKey("ktlint_code_style"));
138+
if (!isCodeStyleDefinedInEditorConfig && !editorConfigOverrideMap.containsKey("ktlint_code_style")) {
136139
editorConfigOverrideMap.put("ktlint_code_style", "intellij_idea");
137140
}
138141

‎plugin-gradle/src/test/java/com/diffplug/gradle/spotless/KotlinExtensionTest.java

Lines changed: 20 additions & 1 deletion
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.
@@ -127,6 +127,25 @@ void testReadCodeStyleFromEditorConfigFile() throws IOException {
127127
checkKtlintOfficialStyle();
128128
}
129129

130+
@Test
131+
void testEditorConfigOverrideWithUnsetCodeStyleDoesNotOverrideEditorConfigCodeStyleWithDefault() throws IOException {
132+
setFile(".editorconfig").toResource("kotlin/ktlint/ktlint_official/.editorconfig");
133+
setFile("build.gradle").toLines(
134+
"plugins {",
135+
" id 'org.jetbrains.kotlin.jvm' version '1.6.21'",
136+
" id 'com.diffplug.spotless'",
137+
"}",
138+
"repositories { mavenCentral() }",
139+
"spotless {",
140+
" kotlin {",
141+
" ktlint().editorConfigOverride([",
142+
" ktlint_test_key: true,",
143+
" ])",
144+
" }",
145+
"}");
146+
checkKtlintOfficialStyle();
147+
}
148+
130149
@Test
131150
void testSetEditorConfigCanOverrideEditorConfigFile() throws IOException {
132151
setFile(".editorconfig").toResource("kotlin/ktlint/intellij_idea/.editorconfig");

0 commit comments

Comments
 (0)
Please sign in to comment.