Skip to content

Commit 0cacf46

Browse files
committed
eslint: remove direct api support for styleguides
1 parent 9a0932e commit 0cacf46

File tree

13 files changed

+178
-228
lines changed

13 files changed

+178
-228
lines changed

Diff for: lib/src/main/java/com/diffplug/spotless/npm/EslintFormatterStep.java

+1-92
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,12 @@
2020
import java.io.File;
2121
import java.io.IOException;
2222
import java.io.Serializable;
23-
import java.util.Arrays;
2423
import java.util.Collections;
2524
import java.util.HashMap;
2625
import java.util.LinkedHashMap;
2726
import java.util.Map;
2827
import java.util.Objects;
2928
import java.util.TreeMap;
30-
import java.util.function.Predicate;
3129

3230
import javax.annotation.Nonnull;
3331

@@ -47,96 +45,7 @@ public class EslintFormatterStep {
4745

4846
public static final String NAME = "eslint-format";
4947

50-
public static final String DEFAULT_ESLINT_VERSION = "^8.30.0";
51-
52-
public enum PopularStyleGuide {
53-
TS_STANDARD_WITH_TYPESCRIPT("standard-with-typescript") {
54-
@Override
55-
public @Nonnull Map<String, String> devDependencies() {
56-
Map<String, String> dependencies = new LinkedHashMap<>();
57-
dependencies.put("eslint-config-standard-with-typescript", "^24.0.0");
58-
dependencies.put("eslint-plugin-import", "^2.26.0");
59-
dependencies.put("eslint-plugin-n", "^15.6.0");
60-
dependencies.put("eslint-plugin-promise", "^6.1.1");
61-
return dependencies;
62-
}
63-
},
64-
TS_XO_TYPESCRIPT("xo-typescript") {
65-
@Override
66-
public @Nonnull Map<String, String> devDependencies() {
67-
Map<String, String> dependencies = new LinkedHashMap<>();
68-
dependencies.put("eslint-config-xo", "^0.43.1");
69-
dependencies.put("eslint-config-xo-typescript", "^0.55.1");
70-
return dependencies;
71-
}
72-
},
73-
JS_AIRBNB("airbnb") {
74-
@Override
75-
public @Nonnull Map<String, String> devDependencies() {
76-
Map<String, String> dependencies = new LinkedHashMap<>();
77-
dependencies.put("eslint-config-airbnb-base", "^15.0.0");
78-
dependencies.put("eslint-plugin-import", "^2.26.0");
79-
return dependencies;
80-
}
81-
},
82-
JS_GOOGLE("google") {
83-
@Override
84-
public @Nonnull Map<String, String> devDependencies() {
85-
Map<String, String> dependencies = new LinkedHashMap<>();
86-
dependencies.put("eslint-config-google", "^0.14.0");
87-
return dependencies;
88-
}
89-
},
90-
JS_STANDARD("standard") {
91-
@Override
92-
public @Nonnull Map<String, String> devDependencies() {
93-
Map<String, String> dependencies = new LinkedHashMap<>();
94-
dependencies.put("eslint-config-standard", "^17.0.0");
95-
dependencies.put("eslint-plugin-import", "^2.26.0");
96-
dependencies.put("eslint-plugin-n", "^15.6.0");
97-
dependencies.put("eslint-plugin-promise", "^6.1.1");
98-
return dependencies;
99-
}
100-
},
101-
JS_XO("xo") {
102-
@Override
103-
public @Nonnull Map<String, String> devDependencies() {
104-
Map<String, String> dependencies = new LinkedHashMap<>();
105-
dependencies.put("eslint-config-xo", "^0.43.1");
106-
return dependencies;
107-
}
108-
};
109-
110-
private final String popularStyleGuideName;
111-
112-
PopularStyleGuide(String popularStyleGuideName) {
113-
this.popularStyleGuideName = popularStyleGuideName;
114-
}
115-
116-
public String getPopularStyleGuideName() {
117-
return popularStyleGuideName;
118-
}
119-
120-
public abstract @Nonnull Map<String, String> devDependencies();
121-
122-
public static PopularStyleGuide fromNameOrNull(String popularStyleGuideName) {
123-
for (PopularStyleGuide popularStyleGuide : PopularStyleGuide.values()) {
124-
if (popularStyleGuide.popularStyleGuideName.equals(popularStyleGuideName)) {
125-
return popularStyleGuide;
126-
}
127-
}
128-
return null;
129-
}
130-
131-
public static String getPopularStyleGuideNames(Predicate<PopularStyleGuide> filter) {
132-
// collect matching style guide names using stream
133-
return Arrays.stream(PopularStyleGuide.values())
134-
.filter(filter)
135-
.map(PopularStyleGuide::getPopularStyleGuideName)
136-
.sorted()
137-
.collect(java.util.stream.Collectors.joining(", "));
138-
}
139-
}
48+
public static final String DEFAULT_ESLINT_VERSION = "^8.31.0";
14049

14150
public static Map<String, String> defaultDevDependenciesForTypescript() {
14251
return defaultDevDependenciesTypescriptWithEslint(DEFAULT_ESLINT_VERSION);

Diff for: plugin-gradle/README.md

-4
Original file line numberDiff line numberDiff line change
@@ -634,8 +634,6 @@ spotless {
634634
eslint(['my-eslint-fork': '1.2.3', 'my-eslint-plugin': '1.2.1']) // can specify exactly which npm packages to use
635635
636636
eslint()
637-
// optional: use a popular eslint styleguide for typescript
638-
.styleGuide('standard-with-typescript') // or 'xo-typescript'
639637
// configuration is mandatory. Provide inline config or a config file.
640638
// a) inline-configuration
641639
.configJs('''
@@ -703,8 +701,6 @@ spotless {
703701
eslint(['my-eslint-fork': '1.2.3', 'my-eslint-plugin': '1.2.1']) // can specify exactly which npm packages to use
704702
705703
eslint()
706-
// optional: use a popular eslint styleguide for javascript
707-
.styleGuide('standard') // or 'airbnb', 'google', 'xo'
708704
// configuration is mandatory. Provide inline config or a config file.
709705
// a) inline-configuration
710706
.configJs('''

Diff for: plugin-gradle/src/main/java/com/diffplug/gradle/spotless/JavascriptExtension.java

+1-24
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.diffplug.spotless.FormatterStep;
3232
import com.diffplug.spotless.npm.EslintConfig;
3333
import com.diffplug.spotless.npm.EslintFormatterStep;
34-
import com.diffplug.spotless.npm.EslintFormatterStep.PopularStyleGuide;
3534
import com.diffplug.spotless.npm.NpmPathResolver;
3635
import com.diffplug.spotless.npm.PrettierFormatterStep;
3736

@@ -73,7 +72,7 @@ public EslintBaseConfig(Project project, Consumer<FormatterStep> replaceStep, Ma
7372
}
7473

7574
@SuppressWarnings("unchecked")
76-
public T devDependencies(Map<String, String> devDependencies) {
75+
protected T devDependencies(Map<String, String> devDependencies) {
7776
this.devDependencies.putAll(devDependencies);
7877
replaceStep();
7978
return (T) this;
@@ -92,17 +91,6 @@ public T configFile(Object configFilePath) {
9291
replaceStep();
9392
return (T) this;
9493
}
95-
96-
@SuppressWarnings("unchecked")
97-
public T styleGuide(String styleGuide) {
98-
PopularStyleGuide popularStyleGuide = PopularStyleGuide.fromNameOrNull(styleGuide);
99-
100-
verifyStyleGuideIsSupported(styleGuide, popularStyleGuide);
101-
assert popularStyleGuide != null;
102-
return devDependencies(popularStyleGuide.devDependencies());
103-
}
104-
105-
protected abstract void verifyStyleGuideIsSupported(String styleGuideName, PopularStyleGuide popularStyleGuide);
10694
}
10795

10896
public class JavascriptEslintConfig extends EslintBaseConfig<JavascriptEslintConfig> {
@@ -123,17 +111,6 @@ public FormatterStep createStep() {
123111
eslintConfig());
124112
}
125113

126-
@Override
127-
protected void verifyStyleGuideIsSupported(String styleGuideName, PopularStyleGuide popularStyleGuide) {
128-
if (!isJsStyleGuide(popularStyleGuide)) {
129-
throw new IllegalArgumentException("Unknown style guide: " + styleGuideName + ". Known javascript style guides: " + PopularStyleGuide.getPopularStyleGuideNames(this::isJsStyleGuide));
130-
}
131-
}
132-
133-
private boolean isJsStyleGuide(PopularStyleGuide popularStyleGuide) {
134-
return popularStyleGuide != null && popularStyleGuide.name().startsWith("JS_");
135-
}
136-
137114
protected EslintConfig eslintConfig() {
138115
return new EslintConfig(configFilePath != null ? getProject().file(configFilePath) : null, configJs);
139116
}

Diff for: plugin-gradle/src/main/java/com/diffplug/gradle/spotless/TypescriptExtension.java

+2-13
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@
2727

2828
import org.gradle.api.Project;
2929

30+
import com.diffplug.gradle.spotless.JavascriptExtension.EslintBaseConfig;
3031
import com.diffplug.spotless.FormatterStep;
3132
import com.diffplug.spotless.npm.EslintConfig;
3233
import com.diffplug.spotless.npm.EslintFormatterStep;
33-
import com.diffplug.spotless.npm.EslintFormatterStep.PopularStyleGuide;
3434
import com.diffplug.spotless.npm.EslintTypescriptConfig;
3535
import com.diffplug.spotless.npm.NpmPathResolver;
3636
import com.diffplug.spotless.npm.PrettierFormatterStep;
@@ -189,7 +189,7 @@ public TypescriptEslintConfig eslint(Map<String, String> devDependencies) {
189189
return eslint;
190190
}
191191

192-
public class TypescriptEslintConfig extends JavascriptExtension.EslintBaseConfig<TypescriptEslintConfig> {
192+
public class TypescriptEslintConfig extends EslintBaseConfig<TypescriptEslintConfig> {
193193

194194
@Nullable
195195
Object typescriptConfigFilePath = null;
@@ -204,17 +204,6 @@ public TypescriptEslintConfig tsconfigFile(Object path) {
204204
return this;
205205
}
206206

207-
@Override
208-
protected void verifyStyleGuideIsSupported(String styleGuideName, PopularStyleGuide popularStyleGuide) {
209-
if (!isTsStyleGuide(popularStyleGuide)) {
210-
throw new IllegalArgumentException("Unknown style guide: " + styleGuideName + ". Known typescript style guides: " + PopularStyleGuide.getPopularStyleGuideNames(this::isTsStyleGuide));
211-
}
212-
}
213-
214-
private boolean isTsStyleGuide(PopularStyleGuide popularStyleGuide) {
215-
return popularStyleGuide != null && popularStyleGuide.name().startsWith("TS_");
216-
}
217-
218207
public FormatterStep createStep() {
219208
final Project project = getProject();
220209

Diff for: plugin-gradle/src/test/java/com/diffplug/gradle/spotless/JavascriptExtensionTest.java

+14-27
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,17 @@
2424
import org.junit.jupiter.params.ParameterizedTest;
2525
import org.junit.jupiter.params.provider.ValueSource;
2626

27+
import com.diffplug.spotless.npm.EslintFormatterStep;
28+
import com.diffplug.spotless.npm.EslintStyleGuide;
2729
import com.diffplug.spotless.tag.NpmTest;
2830

2931
@NpmTest
3032
class JavascriptExtensionTest extends GradleIntegrationHarness {
3133

34+
private static String styleGuideMapString(String styleGuideName) {
35+
return EslintStyleGuide.fromNameOrNull(styleGuideName).asGradleMapStringMergedWith(EslintFormatterStep.defaultDevDependencies());
36+
}
37+
3238
@NpmTest
3339
@Nested
3440
class EslintGeneralJavascriptTests extends GradleIntegrationHarness {
@@ -43,36 +49,17 @@ void supportsEslintFormattingForJavascript() throws IOException {
4349
"spotless {",
4450
" javascript {",
4551
" target 'test.js'",
46-
" eslint().configFile('.eslintrc.js').styleGuide('standard')",
52+
" eslint(" + styleGuideMapString("standard") + ").configFile('.eslintrc.js')",
4753
" }",
4854
"}");
4955
setFile("test.js").toResource("npm/eslint/javascript/styleguide/standard/javascript-es6.dirty");
5056
gradleRunner().withArguments("--stacktrace", "spotlessApply").build();
5157
assertFile("test.js").sameAsResource("npm/eslint/javascript/styleguide/standard/javascript-es6.clean");
5258
}
5359

54-
@Test
55-
void eslintDoesNotAllowToUseTsStyleGuideForJavascript() throws IOException {
56-
setFile(".eslintrc.js").toResource("npm/eslint/javascript/styleguide/standard/.eslintrc.js");
57-
setFile("build.gradle").toLines(
58-
"plugins {",
59-
" id 'com.diffplug.spotless'",
60-
"}",
61-
"repositories { mavenCentral() }",
62-
"spotless {",
63-
" javascript {",
64-
" target 'test.js'",
65-
" eslint().configFile('.eslintrc.js').styleGuide('xo-typescript')",
66-
" }",
67-
"}");
68-
setFile("test.js").toResource("npm/eslint/javascript/styleguide/standard/javascript-es6.dirty");
69-
final BuildResult spotlessApply = gradleRunner().withArguments("--stacktrace", "spotlessApply").buildAndFail();
70-
Assertions.assertThat(spotlessApply.getOutput()).contains("Unknown style guide: xo-typescript");
71-
}
72-
7360
@Test
7461
void eslintAllowsToSpecifyEslintVersionForJavascript() throws IOException {
75-
setFile(".eslintrc.js").toResource("npm/eslint/javascript/styleguide/standard/.eslintrc.js");
62+
setFile(".eslintrc.js").toResource("npm/eslint/javascript/custom_rules/.eslintrc.js");
7663
setFile("build.gradle").toLines(
7764
"plugins {",
7865
" id 'com.diffplug.spotless'",
@@ -81,12 +68,12 @@ void eslintAllowsToSpecifyEslintVersionForJavascript() throws IOException {
8168
"spotless {",
8269
" javascript {",
8370
" target 'test.js'",
84-
" eslint('8.28.0').configFile('.eslintrc.js').styleGuide('standard')",
71+
" eslint('8.28.0').configFile('.eslintrc.js')",
8572
" }",
8673
"}");
87-
setFile("test.js").toResource("npm/eslint/javascript/styleguide/standard/javascript-es6.dirty");
74+
setFile("test.js").toResource("npm/eslint/javascript/custom_rules/javascript-es6.dirty");
8875
gradleRunner().withArguments("--stacktrace", "spotlessApply").build();
89-
assertFile("test.js").sameAsResource("npm/eslint/javascript/styleguide/standard/javascript-es6.clean");
76+
assertFile("test.js").sameAsResource("npm/eslint/javascript/custom_rules/javascript-es6.clean");
9077
}
9178

9279
@Test
@@ -115,7 +102,7 @@ void esllintAllowsToSpecifyInlineConfig() throws IOException {
115102
"spotless {",
116103
" javascript {",
117104
" target 'test.js'",
118-
" eslint().configJs('''" + eslintConfigJs + "''').styleGuide('standard')",
105+
" eslint(" + styleGuideMapString("standard") + ").configJs('''" + eslintConfigJs + "''')",
119106
" }",
120107
"}");
121108
setFile("test.js").toResource("npm/eslint/javascript/styleguide/standard/javascript-es6.dirty");
@@ -134,7 +121,7 @@ void eslintRequiresAnExplicitEslintConfig() throws IOException {
134121
"spotless {",
135122
" javascript {",
136123
" target 'test.js'",
137-
" eslint().styleGuide('standard')",
124+
" eslint(" + styleGuideMapString("standard") + ")",
138125
" }",
139126
"}");
140127
setFile("test.js").toResource("npm/eslint/javascript/styleguide/standard/javascript-es6.dirty");
@@ -187,7 +174,7 @@ void formattingUsingStyleguide(String styleguide) throws Exception {
187174
"spotless {",
188175
" javascript {",
189176
" target 'test.js'",
190-
" eslint().configFile('.eslintrc.js').styleGuide('" + styleguide + "')",
177+
" eslint(" + styleGuideMapString(styleguide) + ").configFile('.eslintrc.js')",
191178
" }",
192179
"}");
193180
setFile("test.js").toResource(styleguidePath + "javascript-es6.dirty");

Diff for: plugin-gradle/src/test/java/com/diffplug/gradle/spotless/TypescriptExtensionTest.java

+9-23
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,19 @@
1717

1818
import java.io.IOException;
1919

20-
import org.assertj.core.api.Assertions;
21-
import org.gradle.testkit.runner.BuildResult;
2220
import org.junit.jupiter.api.Test;
2321

22+
import com.diffplug.spotless.npm.EslintFormatterStep;
23+
import com.diffplug.spotless.npm.EslintStyleGuide;
2424
import com.diffplug.spotless.tag.NpmTest;
2525

2626
@NpmTest
2727
class TypescriptExtensionTest extends GradleIntegrationHarness {
28+
29+
private static String styleGuideMapString(String styleGuideName) {
30+
return EslintStyleGuide.fromNameOrNull(styleGuideName).asGradleMapStringMergedWith(EslintFormatterStep.defaultDevDependencies());
31+
}
32+
2833
@Test
2934
void allowToSpecifyFormatterVersion() throws IOException {
3035
setFile("build.gradle").toLines(
@@ -175,7 +180,7 @@ void useEslintXoStandardRules() throws IOException {
175180
"spotless {",
176181
" typescript {",
177182
" target 'test.ts'",
178-
" eslint().styleGuide('xo-typescript').configFile('.eslintrc.js')",
183+
" eslint(" + styleGuideMapString("xo-typescript") + ").configFile('.eslintrc.js')",
179184
" }",
180185
"}");
181186
setFile("test.ts").toResource("npm/eslint/typescript/styleguide/xo/typescript.dirty");
@@ -195,30 +200,11 @@ void useEslintStandardWithTypescriptRules() throws IOException {
195200
"spotless {",
196201
" typescript {",
197202
" target 'test.ts'",
198-
" eslint().styleGuide('standard-with-typescript').configFile('.eslintrc.js')",
203+
" eslint(" + styleGuideMapString("standard-with-typescript") + ").configFile('.eslintrc.js')",
199204
" }",
200205
"}");
201206
setFile("test.ts").toResource("npm/eslint/typescript/styleguide/standard_with_typescript/typescript.dirty");
202207
gradleRunner().withArguments("--stacktrace", "spotlessApply").build();
203208
assertFile("test.ts").sameAsResource("npm/eslint/typescript/styleguide/standard_with_typescript/typescript.clean");
204209
}
205-
206-
@Test
207-
void useEslintForTypescriptDoesNotAllowUsingJsStyleguide() throws IOException {
208-
setFile(".eslintrc.js").toResource("npm/eslint/javascript/styleguide/airbnb/.eslintrc.js");
209-
setFile("build.gradle").toLines(
210-
"plugins {",
211-
" id 'com.diffplug.spotless'",
212-
"}",
213-
"repositories { mavenCentral() }",
214-
"spotless {",
215-
" typescript {",
216-
" target 'test.ts'",
217-
" eslint().styleGuide('airbnb').configFile('.eslintrc.js')",
218-
" }",
219-
"}");
220-
setFile("test.js").toResource("npm/eslint/javascript/styleguide/airbnb/javascript-es6.dirty");
221-
BuildResult spotlessApply = gradleRunner().withArguments("--stacktrace", "spotlessApply").buildAndFail();
222-
Assertions.assertThat(spotlessApply.getOutput()).contains("Unknown style guide: airbnb");
223-
}
224210
}

0 commit comments

Comments
 (0)