Skip to content

Commit c149210

Browse files
authored
Properly use ruleSeverity properties of rule converters during conversion (#1468)
* fix: Properly use `ruleSeverity` properties of rule converters during conversion * style: Use nullish coalescing operator over logical or * style: Miscellaneous improvements * test: Ensure multiple output rules are correctly treated This additionally ensures that the ruleSeverities during the conversion aren't always treated exactly the same. Moreover, it tests the case that if ruleSeverity isn't specified, the default (its respective TSLint equivalent) is used instead.
1 parent e6bfe3e commit c149210

File tree

2 files changed

+83
-2
lines changed

2 files changed

+83
-2
lines changed

src/converters/lintConfigs/rules/convertRules.test.ts

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { describe, expect, it, test } from "@jest/globals";
22

33
import { ConversionError } from "../../../errors/conversionError";
44
import { convertRules } from "./convertRules";
5-
import { ConversionResult, RuleConverter } from "./ruleConverter";
5+
import { ConversionResult, ConvertedRuleChanges, RuleConverter } from "./ruleConverter";
66
import { RuleMerger } from "./ruleMerger";
77
import { TSLintRuleOptions, TSLintRuleSeverity } from "./types";
88

@@ -353,6 +353,86 @@ describe("convertRules", () => {
353353
]).toContainEqual(converted);
354354
});
355355

356+
it("merges when a rule severity differs from its TSLint equivalent", () => {
357+
// Arrange
358+
const rules: ConvertedRuleChanges[] = [
359+
{
360+
ruleName: "eslint-rule-a",
361+
ruleSeverity: "off",
362+
},
363+
];
364+
const { tslintRule, converters, mergers } = setupConversionEnvironment({
365+
ruleSeverity: "error",
366+
conversionResult: { rules },
367+
ruleToMerge: rules[0].ruleName,
368+
});
369+
370+
// Act
371+
const { converted } = convertRules(
372+
{ ruleConverters: converters, ruleMergers: mergers },
373+
{ [tslintRule.ruleName]: tslintRule },
374+
new Map(),
375+
);
376+
377+
// Assert
378+
expect([
379+
new Map([
380+
[
381+
"eslint-rule-a",
382+
{
383+
ruleName: "eslint-rule-a",
384+
ruleSeverity: "off",
385+
},
386+
],
387+
]),
388+
]).toContainEqual(converted);
389+
});
390+
391+
it("merges when rule severities inconsistently differ from their TSLint equivalent", () => {
392+
// Arrange
393+
const rules: ConvertedRuleChanges[] = [
394+
{
395+
ruleName: "eslint-rule-a",
396+
ruleSeverity: "off",
397+
},
398+
{
399+
ruleName: "eslint-rule-b",
400+
},
401+
];
402+
const { tslintRule, converters, mergers } = setupConversionEnvironment({
403+
ruleSeverity: "error",
404+
conversionResult: { rules },
405+
ruleToMerge: rules[0].ruleName,
406+
});
407+
408+
// Act
409+
const { converted } = convertRules(
410+
{ ruleConverters: converters, ruleMergers: mergers },
411+
{ [tslintRule.ruleName]: tslintRule },
412+
new Map(),
413+
);
414+
415+
// Assert
416+
expect([
417+
new Map([
418+
[
419+
"eslint-rule-a",
420+
{
421+
ruleName: "eslint-rule-a",
422+
ruleSeverity: "off",
423+
},
424+
],
425+
[
426+
"eslint-rule-b",
427+
{
428+
ruleName: "eslint-rule-b",
429+
ruleSeverity: "error",
430+
},
431+
],
432+
]),
433+
]).toContainEqual(converted);
434+
});
435+
356436
it("marks a new plugin when a conversion has a new plugin", () => {
357437
// Arrange
358438
const conversionResult = {

src/converters/lintConfigs/rules/convertRules.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ export const convertRules = (
8080
const existingConversion = converted.get(changes.ruleName);
8181
const newConversion = {
8282
...changes,
83-
ruleSeverity: convertTSLintRuleSeverity(tslintRule.ruleSeverity),
83+
ruleSeverity:
84+
changes.ruleSeverity ?? convertTSLintRuleSeverity(tslintRule.ruleSeverity),
8485
};
8586

8687
// 4c. If this is the first time the output ESLint rule is seen, it's directly marked as converted.

0 commit comments

Comments
 (0)