Skip to content

Commit 4372455

Browse files
committed
feat: add missing merger [member-delimiter-style] #254
1 parent 2cccfd0 commit 4372455

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-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: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
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+
Object.keys(obj).reduce((_, k) => {
15+
acc[k] = acc.hasOwnProperty(k) ? [].concat(acc[k]).concat(obj[k]) : obj[k];
16+
return acc;
17+
}, {}),
18+
{},
19+
);
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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("both object config existing", () => {
39+
const result = mergeNoMemberDelimiterStyle(undefined, [
40+
{
41+
singleline: {
42+
delimiter: "semi",
43+
requireLast: false,
44+
},
45+
},
46+
{
47+
multiline: {
48+
delimiter: "semi",
49+
requireLast: true,
50+
},
51+
},
52+
]);
53+
54+
expect(result).toEqual([
55+
{
56+
multiline: {
57+
delimiter: "semi",
58+
requireLast: true,
59+
},
60+
singleline: {
61+
delimiter: "semi",
62+
requireLast: false,
63+
},
64+
},
65+
]);
66+
});
67+
});

0 commit comments

Comments
 (0)