Skip to content

Commit e0ccb51

Browse files
Emily GiurleoJosh Goldberg
Emily Giurleo
authored and
Josh Goldberg
committed
Merge and deduplicate rule notices (#141)
* merge and deduplicate rule notices * small refactor * make sure notices arent going to be undefined when theyre passed into sets
1 parent 715c883 commit e0ccb51

File tree

2 files changed

+91
-1
lines changed

2 files changed

+91
-1
lines changed

src/rules/convertRules.test.ts

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,96 @@ describe("convertRules", () => {
183183
);
184184
});
185185

186+
it("merges and deduplicates rule notices", () => {
187+
// Arrange
188+
const tslintRule: TSLintRuleOptions = {
189+
ruleArguments: [],
190+
ruleName: "tslint-rule-a",
191+
ruleSeverity: "error",
192+
};
193+
const conversionResult = {
194+
rules: [
195+
{
196+
ruleName: "eslint-rule-a",
197+
notices: ["notice-1", "notice-2"],
198+
},
199+
{
200+
ruleName: "eslint-rule-a",
201+
notices: ["notice-1"],
202+
},
203+
],
204+
};
205+
const mergedArguments = [{ merged: true }];
206+
const converters = new Map([[tslintRule.ruleName, () => conversionResult]]);
207+
const mergers = new Map([[conversionResult.rules[0].ruleName, () => mergedArguments]]);
208+
209+
// Act
210+
const { converted } = convertRules(
211+
{ converters, mergers },
212+
{ [tslintRule.ruleName]: tslintRule },
213+
);
214+
215+
// Assert
216+
expect(converted).toEqual(
217+
new Map([
218+
[
219+
"eslint-rule-a",
220+
{
221+
ruleArguments: mergedArguments,
222+
ruleName: "eslint-rule-a",
223+
ruleSeverity: "error",
224+
notices: ["notice-1", "notice-2"],
225+
},
226+
],
227+
]),
228+
);
229+
});
230+
231+
it("merges undefined notices", () => {
232+
// Arrange
233+
const tslintRule: TSLintRuleOptions = {
234+
ruleArguments: [],
235+
ruleName: "tslint-rule-a",
236+
ruleSeverity: "error",
237+
};
238+
const conversionResult = {
239+
rules: [
240+
{
241+
ruleName: "eslint-rule-a",
242+
notices: undefined,
243+
},
244+
{
245+
ruleName: "eslint-rule-a",
246+
notices: undefined,
247+
},
248+
],
249+
};
250+
const mergedArguments = [{ merged: true }];
251+
const converters = new Map([[tslintRule.ruleName, () => conversionResult]]);
252+
const mergers = new Map([[conversionResult.rules[0].ruleName, () => mergedArguments]]);
253+
254+
// Act
255+
const { converted } = convertRules(
256+
{ converters, mergers },
257+
{ [tslintRule.ruleName]: tslintRule },
258+
);
259+
260+
// Assert
261+
expect(converted).toEqual(
262+
new Map([
263+
[
264+
"eslint-rule-a",
265+
{
266+
ruleArguments: mergedArguments,
267+
ruleName: "eslint-rule-a",
268+
ruleSeverity: "error",
269+
notices: [],
270+
},
271+
],
272+
]),
273+
);
274+
});
275+
186276
it("marks a new plugin when a conversion has a new plugin", () => {
187277
// Arrange
188278
const tslintRule: TSLintRuleOptions = {

src/rules/convertRules.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export const convertRules = (
7878
existingConversion.ruleArguments,
7979
newConversion.ruleArguments,
8080
),
81-
notices: [...existingNotices, ...newNotices],
81+
notices: Array.from(new Set([...existingNotices, ...newNotices])),
8282
});
8383
}
8484
}

0 commit comments

Comments
 (0)