Skip to content

Commit e3f3b86

Browse files
dimaboryJosh Goldberg
authored and
Josh Goldberg
committed
feat: add missing merger [member-delimiter-style] #254 (#284)
* feat: add missing merger [member-delimiter-style] #254 * test: make it 100% covered
1 parent 3368e54 commit e3f3b86

File tree

3 files changed

+121
-0
lines changed

3 files changed

+121
-0
lines changed

src/rules/mergers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import { mergeBanTypes } from "./mergers/ban-types";
22
import { mergeIndent } from "./mergers/indent";
3+
import { mergeNoMemberDelimiterStyle } from "./mergers/member-delimiter-style";
34
import { mergeNoCaller } from "./mergers/no-caller";
45
import { mergeNoEval } from "./mergers/no-eval";
56
import { mergeNoUnnecessaryTypeAssertion } from "./mergers/no-unnecessary-type-assertion";
67

78
export const mergers = new Map([
89
["@typescript-eslint/ban-types", mergeBanTypes],
910
["@typescript-eslint/indent", mergeIndent],
11+
["@typescript-eslint/member-delimiter-style", mergeNoMemberDelimiterStyle],
1012
["@typescript-eslint/no-unnecessary-type-assertion", mergeNoUnnecessaryTypeAssertion],
1113
["no-caller", mergeNoCaller],
1214
["no-eval", mergeNoEval],
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { RuleMerger } from "../merger";
2+
3+
export const mergeNoMemberDelimiterStyle: RuleMerger = (existingOptions, newOptions) => {
4+
if (existingOptions === undefined && newOptions === undefined) {
5+
return [];
6+
}
7+
8+
return [merge((existingOptions || [])[0] || {}, (newOptions || [])[0] || {})];
9+
};
10+
11+
const merge = (...objs: Record<string, any>[]) =>
12+
[...objs].reduce(
13+
(acc, obj) => ({
14+
...acc,
15+
...Object.keys(obj).reduce((_, k) => {
16+
acc[k] = obj[k];
17+
return acc;
18+
}, {}),
19+
}),
20+
{},
21+
);
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import { mergeNoMemberDelimiterStyle } from "../member-delimiter-style";
2+
3+
describe(mergeNoMemberDelimiterStyle, () => {
4+
test("neither options existing", () => {
5+
const result = mergeNoMemberDelimiterStyle(undefined, undefined);
6+
7+
expect(result).toEqual([]);
8+
});
9+
10+
test("new object config existing", () => {
11+
const result = mergeNoMemberDelimiterStyle(undefined, [
12+
{
13+
multiline: {
14+
delimiter: "semi",
15+
requireLast: true,
16+
},
17+
singleline: {
18+
delimiter: "semi",
19+
requireLast: false,
20+
},
21+
},
22+
]);
23+
24+
expect(result).toEqual([
25+
{
26+
multiline: {
27+
delimiter: "semi",
28+
requireLast: true,
29+
},
30+
singleline: {
31+
delimiter: "semi",
32+
requireLast: false,
33+
},
34+
},
35+
]);
36+
});
37+
38+
test("original object config existing", () => {
39+
const result = mergeNoMemberDelimiterStyle(
40+
[
41+
{
42+
multiline: {
43+
delimiter: "semi",
44+
requireLast: true,
45+
},
46+
},
47+
],
48+
undefined,
49+
);
50+
51+
expect(result).toEqual([
52+
{
53+
multiline: {
54+
delimiter: "semi",
55+
requireLast: true,
56+
},
57+
},
58+
]);
59+
});
60+
61+
test("both object config existing", () => {
62+
const result = mergeNoMemberDelimiterStyle(
63+
[
64+
{
65+
singleline: {
66+
delimiter: "semi",
67+
requireLast: false,
68+
},
69+
},
70+
],
71+
[
72+
{
73+
singleline: {
74+
delimiter: "semi",
75+
requireLast: false,
76+
},
77+
multiline: {
78+
delimiter: "semi",
79+
requireLast: true,
80+
},
81+
},
82+
],
83+
);
84+
85+
expect(result).toEqual([
86+
{
87+
multiline: {
88+
delimiter: "semi",
89+
requireLast: true,
90+
},
91+
singleline: {
92+
delimiter: "semi",
93+
requireLast: false,
94+
},
95+
},
96+
]);
97+
});
98+
});

0 commit comments

Comments
 (0)