Skip to content

Commit 95c17ca

Browse files
author
Josh Goldberg
authored
Included ESLint configuration in TSLint rules list (#124)
1 parent d1c67cf commit 95c17ca

File tree

6 files changed

+125
-3
lines changed

6 files changed

+125
-3
lines changed

src/cli/main.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { findPackagesConfiguration } from "../input/findPackagesConfiguration";
2727
import { findESLintConfiguration } from "../input/findESLintConfiguration";
2828
import { findTSLintConfiguration } from "../input/findTSLintConfiguration";
2929
import { findTypeScriptConfiguration } from "../input/findTypeScriptConfiguration";
30+
import { mergeLintConfigurations } from "../input/mergeLintConfigurations";
3031
import {
3132
reportConversionResults,
3233
ReportConversionResultsDependencies,
@@ -50,6 +51,7 @@ const findOriginalConfigurationsDependencies: FindOriginalConfigurationsDependen
5051
findPackagesConfiguration: bind(findPackagesConfiguration, findConfigurationDependencies),
5152
findTypeScriptConfiguration: bind(findTypeScriptConfiguration, findConfigurationDependencies),
5253
findTSLintConfiguration: bind(findTSLintConfiguration, findConfigurationDependencies),
54+
mergeLintConfigurations,
5355
};
5456

5557
const reportConversionResultsDependencies: ReportConversionResultsDependencies = {

src/conversion/convertConfig.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { ResultStatus, FailedResult, SucceededDataResult } from "../types";
1+
import { ResultStatus, FailedResult } from "../types";
22
import { convertConfig, ConvertConfigDependencies } from "./convertConfig";
3-
import { OriginalConfigurations } from "../input/findOriginalConfigurations";
43

54
const stubSettings = {
65
config: "./eslintrc.js",

src/input/findOriginalConfigurations.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import {
33
FindOriginalConfigurationsDependencies,
44
} from "./findOriginalConfigurations";
55
import { ResultStatus } from "../types";
6+
import { TSLintConfiguration } from "./findTSLintConfiguration";
7+
import { ESLintConfiguration } from "./findESLintConfiguration";
68

79
const createRawSettings = () => ({
810
config: "./eslintrc.js",
@@ -30,6 +32,8 @@ const createDependencies = (overrides: Partial<FindOriginalConfigurationsDepende
3032
target: "es3",
3133
},
3234
}),
35+
mergeLintConfigurations: (_: ESLintConfiguration | Error, tslint: TSLintConfiguration) =>
36+
tslint,
3337
...overrides,
3438
});
3539

src/input/findOriginalConfigurations.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ import {
77
TypeScriptConfiguration,
88
} from "./findTypeScriptConfiguration";
99
import { findTSLintConfiguration, TSLintConfiguration } from "./findTSLintConfiguration";
10+
import { mergeLintConfigurations } from "./mergeLintConfigurations";
1011

1112
export type FindOriginalConfigurationsDependencies = {
1213
findESLintConfiguration: SansDependencies<typeof findESLintConfiguration>;
1314
findPackagesConfiguration: SansDependencies<typeof findPackagesConfiguration>;
1415
findTypeScriptConfiguration: SansDependencies<typeof findTypeScriptConfiguration>;
1516
findTSLintConfiguration: SansDependencies<typeof findTSLintConfiguration>;
17+
mergeLintConfigurations: typeof mergeLintConfigurations;
1618
};
1719

1820
export type OriginalConfigurations = {
@@ -44,7 +46,7 @@ export const findOriginalConfigurations = async (
4446
data: {
4547
...(!(eslint instanceof Error) && { eslint }),
4648
...(!(packages instanceof Error) && { packages }),
47-
tslint,
49+
tslint: dependencies.mergeLintConfigurations(eslint, tslint),
4850
...(!(typescript instanceof Error) && { typescript }),
4951
},
5052
status: ResultStatus.Succeeded,
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import { mergeLintConfigurations } from "./mergeLintConfigurations";
2+
import { ESLintConfiguration } from "./findESLintConfiguration";
3+
4+
const stubTSLintConfiguration = {
5+
rulesDirectory: [],
6+
rules: {
7+
disabled: true,
8+
enabled: true,
9+
},
10+
};
11+
12+
describe("mergeLintConfigurations", () => {
13+
it("returns the tslint configuration when the eslint configuration is an error", () => {
14+
// Arrange
15+
const eslint = new Error();
16+
17+
// Act
18+
const result = mergeLintConfigurations(eslint, stubTSLintConfiguration);
19+
20+
// Assert
21+
expect(result).toBe(stubTSLintConfiguration);
22+
});
23+
24+
it("returns the tslint configuration when the eslint configuration doesn't have tslint rules", () => {
25+
// Arrange
26+
const eslint: ESLintConfiguration = {
27+
env: {},
28+
extends: [],
29+
rules: {},
30+
};
31+
32+
// Act
33+
const result = mergeLintConfigurations(eslint, stubTSLintConfiguration);
34+
35+
// Assert
36+
expect(result).toBe(stubTSLintConfiguration);
37+
});
38+
39+
it("returns the tslint configuration when the eslint configuration's tslint rules are disabled", () => {
40+
// Arrange
41+
const eslint: ESLintConfiguration = {
42+
env: {},
43+
extends: [],
44+
rules: {
45+
"@typescript-eslint/tslint/config": [
46+
"off",
47+
{
48+
extra: true,
49+
},
50+
],
51+
},
52+
};
53+
54+
// Act
55+
const result = mergeLintConfigurations(eslint, stubTSLintConfiguration);
56+
57+
// Assert
58+
expect(result).toBe(stubTSLintConfiguration);
59+
});
60+
61+
it("returns the merged configurations when the eslint configuration has tslint rules", () => {
62+
// Arrange
63+
const extraRules = {
64+
extra: true,
65+
};
66+
const eslint: ESLintConfiguration = {
67+
env: {},
68+
extends: [],
69+
rules: {
70+
"@typescript-eslint/tslint/config": [
71+
"error",
72+
{
73+
rules: extraRules,
74+
},
75+
],
76+
},
77+
};
78+
79+
// Act
80+
const result = mergeLintConfigurations(eslint, stubTSLintConfiguration);
81+
82+
// Assert
83+
expect(result).toEqual({
84+
...stubTSLintConfiguration,
85+
rules: {
86+
...stubTSLintConfiguration.rules,
87+
...extraRules,
88+
},
89+
});
90+
});
91+
});
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { TSLintConfiguration } from "./findTSLintConfiguration";
2+
import { ESLintConfiguration } from "./findESLintConfiguration";
3+
4+
export const mergeLintConfigurations = (
5+
eslint: ESLintConfiguration | Error,
6+
tslint: TSLintConfiguration,
7+
) => {
8+
if (eslint instanceof Error) {
9+
return tslint;
10+
}
11+
12+
const mappedConfig = eslint.rules["@typescript-eslint/tslint/config"];
13+
if (!(mappedConfig instanceof Array) || mappedConfig[0] === "off") {
14+
return tslint;
15+
}
16+
17+
return {
18+
...tslint,
19+
rules: {
20+
...tslint.rules,
21+
...mappedConfig[1].rules,
22+
},
23+
};
24+
};

0 commit comments

Comments
 (0)