Skip to content

Commit f72b6b1

Browse files
melbarchJosh Goldberg
authored andcommitted
Added missing no-implicit-dependencies converter (#230)
* Add no-implicit-dependencies converter * Add whitelist support * Add plugin import and fix tsc issues
1 parent bcfa349 commit f72b6b1

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed

src/rules/converters.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ import { convertNoExplicitAny } from "./converters/no-explicit-any";
5353
import { convertNoFloatingPromises } from "./converters/no-floating-promises";
5454
import { convertNoForIn } from "./converters/no-for-in";
5555
import { convertNoForInArray } from "./converters/no-for-in-array";
56+
import { convertNoImplicitDependencies } from "./converters/no-implicit-dependencies";
5657
import { convertNoInferrableTypes } from "./converters/no-inferrable-types";
5758
import { convertNoInternalModule } from "./converters/no-internal-module";
5859
import { convertNoInvalidRegexp } from "./converters/no-invalid-regexp";
@@ -181,6 +182,7 @@ export const converters = new Map([
181182
["no-eval", convertNoEval],
182183
["no-floating-promises", convertNoFloatingPromises],
183184
["no-for-in-array", convertNoForInArray],
185+
["no-implicit-dependencies", convertNoImplicitDependencies],
184186
["no-for-in", convertNoForIn],
185187
["no-inferrable-types", convertNoInferrableTypes],
186188
["no-internal-module", convertNoInternalModule],
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { RuleConverter } from "../converter";
2+
3+
export const convertNoImplicitDependencies: RuleConverter = tslintRule => {
4+
const ruleArgs: {
5+
[eslintOption in "devDependencies" | "optionalDependencies"]?: boolean
6+
}[] = [];
7+
const notices: string[] = [];
8+
9+
tslintRule.ruleArguments.forEach(element => {
10+
if (element === "dev") {
11+
ruleArgs.push({ devDependencies: false });
12+
} else if (element === "optional") {
13+
ruleArgs.push({ optionalDependencies: false });
14+
} else {
15+
notices.push("ESLint does not support whitelisting modules");
16+
}
17+
});
18+
19+
return {
20+
rules: [
21+
{
22+
ruleName: "import/no-extraneous-dependencies",
23+
...(ruleArgs.length > 0 && { ruleArguments: ruleArgs }),
24+
...(notices.length > 0 && { notices }),
25+
},
26+
],
27+
28+
plugins: ["import"],
29+
};
30+
};
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import { convertNoImplicitDependencies } from "../no-implicit-dependencies";
2+
3+
describe(convertNoImplicitDependencies, () => {
4+
test("conversion without arguments", () => {
5+
const result = convertNoImplicitDependencies({
6+
ruleArguments: [],
7+
});
8+
9+
expect(result).toEqual({
10+
rules: [
11+
{
12+
ruleName: "import/no-extraneous-dependencies",
13+
},
14+
],
15+
plugins: ["import"],
16+
});
17+
});
18+
19+
test("conversion with dev argument", () => {
20+
const result = convertNoImplicitDependencies({
21+
ruleArguments: ["dev"],
22+
});
23+
24+
expect(result).toEqual({
25+
rules: [
26+
{
27+
ruleArguments: [{ devDependencies: false }],
28+
ruleName: "import/no-extraneous-dependencies",
29+
},
30+
],
31+
plugins: ["import"],
32+
});
33+
});
34+
35+
test("conversion with optional argument", () => {
36+
const result = convertNoImplicitDependencies({
37+
ruleArguments: ["optional"],
38+
});
39+
40+
expect(result).toEqual({
41+
rules: [
42+
{
43+
ruleArguments: [{ optionalDependencies: false }],
44+
ruleName: "import/no-extraneous-dependencies",
45+
},
46+
],
47+
plugins: ["import"],
48+
});
49+
});
50+
51+
test("conversion with both dev and optional argument", () => {
52+
const result = convertNoImplicitDependencies({
53+
ruleArguments: ["dev", "optional"],
54+
});
55+
56+
expect(result).toEqual({
57+
rules: [
58+
{
59+
ruleArguments: [{ devDependencies: false }, { optionalDependencies: false }],
60+
ruleName: "import/no-extraneous-dependencies",
61+
},
62+
],
63+
plugins: ["import"],
64+
});
65+
});
66+
67+
test("conversion with whitelisted folders argument", () => {
68+
const result = convertNoImplicitDependencies({
69+
ruleArguments: [["src", "app"]],
70+
});
71+
72+
expect(result).toEqual({
73+
rules: [
74+
{
75+
notices: ["ESLint does not support whitelisting modules"],
76+
ruleName: "import/no-extraneous-dependencies",
77+
},
78+
],
79+
plugins: ["import"],
80+
});
81+
});
82+
});

0 commit comments

Comments
 (0)