Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/cli/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { findPackagesConfiguration } from "../input/findPackagesConfiguration";
import { findESLintConfiguration } from "../input/findESLintConfiguration";
import { findTSLintConfiguration } from "../input/findTSLintConfiguration";
import { findTypeScriptConfiguration } from "../input/findTypeScriptConfiguration";
import { mergeLintConfigurations } from "../input/mergeLintConfigurations";
import {
reportConversionResults,
ReportConversionResultsDependencies,
Expand All @@ -50,6 +51,7 @@ const findOriginalConfigurationsDependencies: FindOriginalConfigurationsDependen
findPackagesConfiguration: bind(findPackagesConfiguration, findConfigurationDependencies),
findTypeScriptConfiguration: bind(findTypeScriptConfiguration, findConfigurationDependencies),
findTSLintConfiguration: bind(findTSLintConfiguration, findConfigurationDependencies),
mergeLintConfigurations,
};

const reportConversionResultsDependencies: ReportConversionResultsDependencies = {
Expand Down
3 changes: 1 addition & 2 deletions src/conversion/convertConfig.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { ResultStatus, FailedResult, SucceededDataResult } from "../types";
import { ResultStatus, FailedResult } from "../types";
import { convertConfig, ConvertConfigDependencies } from "./convertConfig";
import { OriginalConfigurations } from "../input/findOriginalConfigurations";

const stubSettings = {
config: "./eslintrc.js",
Expand Down
4 changes: 4 additions & 0 deletions src/input/findOriginalConfigurations.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import {
FindOriginalConfigurationsDependencies,
} from "./findOriginalConfigurations";
import { ResultStatus } from "../types";
import { TSLintConfiguration } from "./findTSLintConfiguration";
import { ESLintConfiguration } from "./findESLintConfiguration";

const createRawSettings = () => ({
config: "./eslintrc.js",
Expand Down Expand Up @@ -30,6 +32,8 @@ const createDependencies = (overrides: Partial<FindOriginalConfigurationsDepende
target: "es3",
},
}),
mergeLintConfigurations: (_: ESLintConfiguration | Error, tslint: TSLintConfiguration) =>
tslint,
...overrides,
});

Expand Down
4 changes: 3 additions & 1 deletion src/input/findOriginalConfigurations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@ import {
TypeScriptConfiguration,
} from "./findTypeScriptConfiguration";
import { findTSLintConfiguration, TSLintConfiguration } from "./findTSLintConfiguration";
import { mergeLintConfigurations } from "./mergeLintConfigurations";

export type FindOriginalConfigurationsDependencies = {
findESLintConfiguration: SansDependencies<typeof findESLintConfiguration>;
findPackagesConfiguration: SansDependencies<typeof findPackagesConfiguration>;
findTypeScriptConfiguration: SansDependencies<typeof findTypeScriptConfiguration>;
findTSLintConfiguration: SansDependencies<typeof findTSLintConfiguration>;
mergeLintConfigurations: typeof mergeLintConfigurations;
};

export type OriginalConfigurations = {
Expand Down Expand Up @@ -44,7 +46,7 @@ export const findOriginalConfigurations = async (
data: {
...(!(eslint instanceof Error) && { eslint }),
...(!(packages instanceof Error) && { packages }),
tslint,
tslint: dependencies.mergeLintConfigurations(eslint, tslint),
...(!(typescript instanceof Error) && { typescript }),
},
status: ResultStatus.Succeeded,
Expand Down
91 changes: 91 additions & 0 deletions src/input/mergeLintConfigurations.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import { mergeLintConfigurations } from "./mergeLintConfigurations";
import { ESLintConfiguration } from "./findESLintConfiguration";

const stubTSLintConfiguration = {
rulesDirectory: [],
rules: {
disabled: true,
enabled: true,
},
};

describe("mergeLintConfigurations", () => {
it("returns the tslint configuration when the eslint configuration is an error", () => {
// Arrange
const eslint = new Error();

// Act
const result = mergeLintConfigurations(eslint, stubTSLintConfiguration);

// Assert
expect(result).toBe(stubTSLintConfiguration);
});

it("returns the tslint configuration when the eslint configuration doesn't have tslint rules", () => {
// Arrange
const eslint: ESLintConfiguration = {
env: {},
extends: [],
rules: {},
};

// Act
const result = mergeLintConfigurations(eslint, stubTSLintConfiguration);

// Assert
expect(result).toBe(stubTSLintConfiguration);
});

it("returns the tslint configuration when the eslint configuration's tslint rules are disabled", () => {
// Arrange
const eslint: ESLintConfiguration = {
env: {},
extends: [],
rules: {
"@typescript-eslint/tslint/config": [
"off",
{
extra: true,
},
],
},
};

// Act
const result = mergeLintConfigurations(eslint, stubTSLintConfiguration);

// Assert
expect(result).toBe(stubTSLintConfiguration);
});

it("returns the merged configurations when the eslint configuration has tslint rules", () => {
// Arrange
const extraRules = {
extra: true,
};
const eslint: ESLintConfiguration = {
env: {},
extends: [],
rules: {
"@typescript-eslint/tslint/config": [
"error",
{
rules: extraRules,
},
],
},
};

// Act
const result = mergeLintConfigurations(eslint, stubTSLintConfiguration);

// Assert
expect(result).toEqual({
...stubTSLintConfiguration,
rules: {
...stubTSLintConfiguration.rules,
...extraRules,
},
});
});
});
24 changes: 24 additions & 0 deletions src/input/mergeLintConfigurations.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { TSLintConfiguration } from "./findTSLintConfiguration";
import { ESLintConfiguration } from "./findESLintConfiguration";

export const mergeLintConfigurations = (
eslint: ESLintConfiguration | Error,
tslint: TSLintConfiguration,
) => {
if (eslint instanceof Error) {
return tslint;
}

const mappedConfig = eslint.rules["@typescript-eslint/tslint/config"];
if (!(mappedConfig instanceof Array) || mappedConfig[0] === "off") {
return tslint;
}

return {
...tslint,
rules: {
...tslint.rules,
...mappedConfig[1].rules,
},
};
};