Skip to content

Commit 15574c8

Browse files
committed
refactor: add notice, pass test coverage
1 parent 182621a commit 15574c8

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

src/rules/converters/import-blacklist.ts

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,42 @@ type ESLintComplexOption = RequireAtLeastOne<{
1313
}>;
1414
type ESLintOptions = ESLintSimpleOption | ESLintComplexOption;
1515

16+
const NOTICE_MATCH_PATTERNS =
17+
"ESLint and TSLint use different strategies to match patterns. TSLint uses standard regular expressions, but ESLint .gitignore spec.";
18+
1619
export const convertImportBlacklist: RuleConverter = tslintRule => {
17-
const tslintRules = tslintRule.ruleArguments;
1820
let ruleArguments: ESLintOptions = [];
21+
const notices = [];
1922

20-
if (tslintRules.every(isString)) {
21-
ruleArguments = tslintRules;
23+
if (tslintRule.ruleArguments.every(isString)) {
24+
ruleArguments = tslintRule.ruleArguments;
2225
} else {
23-
ruleArguments = [
24-
tslintRules.reduce((rules, rule) => {
25-
if (!Array.isArray(rule)) {
26-
const eslintRule = isString(rule)
27-
? rule
28-
: {
29-
name: Object.keys(rule)[0],
30-
importNames: Object.values(rule)[0] as string[],
31-
};
32-
return { ...rules, paths: [...(rules.paths || []), eslintRule] };
33-
} else if (Array.isArray(rule)) {
34-
return { ...rules, patterns: [...(rules.patterns || []), ...rule] };
35-
}
36-
return rules;
37-
}, {} as ESLintComplexOption),
38-
];
26+
const objectOption = tslintRule.ruleArguments.reduce((rules, rule) => {
27+
if (!Array.isArray(rule)) {
28+
const eslintRule = isString(rule)
29+
? rule
30+
: {
31+
name: Object.keys(rule)[0],
32+
importNames: Object.values(rule)[0] as string[],
33+
};
34+
return { ...rules, paths: [...(rules.paths || []), eslintRule] };
35+
}
36+
37+
return { ...rules, patterns: [...(rules.patterns || []), ...rule] };
38+
}, {} as ESLintComplexOption);
39+
40+
if ("patterns" in objectOption && objectOption.patterns.length > 0) {
41+
notices.push(NOTICE_MATCH_PATTERNS);
42+
}
43+
44+
ruleArguments = [objectOption];
3945
}
46+
4047
return {
4148
rules: [
4249
{
4350
ruleArguments,
51+
...(notices.length > 0 && { notices }),
4452
ruleName: "no-restricted-imports",
4553
},
4654
],

src/rules/converters/tests/import-blacklist.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,17 @@ describe(convertImportBlacklist, () => {
5555
],
5656
] as any[][])("convert %j", (ruleArguments: any[], expected: any[]) => {
5757
const result = convertImportBlacklist({ ruleArguments });
58+
const hasPatterns = typeof expected[0] === "object" && "patterns" in expected[0];
59+
5860
expect(result).toEqual({
5961
rules: [
6062
{
6163
ruleArguments: expected,
64+
...(hasPatterns && {
65+
notices: [
66+
"ESLint and TSLint use different strategies to match patterns. TSLint uses standard regular expressions, but ESLint .gitignore spec.",
67+
],
68+
}),
6269
ruleName: "no-restricted-imports",
6370
},
6471
],

0 commit comments

Comments
 (0)