From 2943ed291e49d8e441c98bf56315acd1502c3005 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Tue, 8 Sep 2020 01:56:42 -0400 Subject: [PATCH 1/2] Further clarified config converters structure in code --- docs/Architecture.md | 4 ++-- src/cli/main.ts | 8 ++++---- src/cli/runCli.test.ts | 14 +++++++------- src/cli/runCli.ts | 9 ++++----- src/conversion/configConverter.ts | 5 +++++ ...tConfig.test.ts => convertLintConfig.test.ts} | 16 ++++++++-------- .../{convertConfig.ts => convertLintConfig.ts} | 6 +++--- 7 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 src/conversion/configConverter.ts rename src/conversion/{convertConfig.test.ts => convertLintConfig.test.ts} (84%) rename src/conversion/{convertConfig.ts => convertLintConfig.ts} (95%) diff --git a/docs/Architecture.md b/docs/Architecture.md index 7bd83e8c5..fab861c39 100644 --- a/docs/Architecture.md +++ b/docs/Architecture.md @@ -4,12 +4,12 @@ 1. CLI usage starts in `bin/tslint-to-eslint-config`, which immediately calls `src/cli/main.ts`. 2. CLI settings are parsed and read in `src/cli/runCli.ts`. -3. Linter configuration conversion is run by `src/conversion/convertConfig.ts`. +3. Linter configuration conversion is run by `src/conversion/convertLintConfig.ts`. 4. Editor configuration conversion is run by `src/conversion/convertEditorConfig.ts`. ## Linter Configuration Conversion -Within `src/conversion/convertConfig.ts`, the following steps occur: +Within `src/conversion/convertLintConfig.ts`, the following steps occur: 1. Existing configurations are read from disk 2. TSLint rules are converted into their ESLint configurations diff --git a/src/cli/main.ts b/src/cli/main.ts index 9b3030afa..c25f916ee 100644 --- a/src/cli/main.ts +++ b/src/cli/main.ts @@ -11,7 +11,7 @@ import { ConvertFileCommentsDependencies, convertFileComments, } from "../comments/convertFileComments"; -import { convertConfig, ConvertConfigDependencies } from "../conversion/convertConfig"; +import { convertLintConfig, ConvertLintConfigDependencies } from "../conversion/convertLintConfig"; import { convertEditorConfig, ConvertEditorConfigDependencies, @@ -165,7 +165,7 @@ const convertEditorConfigDependencies: ConvertEditorConfigDependencies = { ), }; -const convertConfigDependencies: ConvertConfigDependencies = { +const convertLintConfigDependencies: ConvertLintConfigDependencies = { convertComments: bind(convertComments, convertCommentsDependencies), convertRules: bind(convertRules, convertRulesDependencies), findOriginalConfigurations: bind( @@ -180,8 +180,8 @@ const convertConfigDependencies: ConvertConfigDependencies = { }; const runCliDependencies: RunCliDependencies = { - convertConfigs: [ - bind(convertConfig, convertConfigDependencies), + configConverters: [ + bind(convertLintConfig, convertLintConfigDependencies), bind(convertEditorConfig, convertEditorConfigDependencies), ], logger: processLogger, diff --git a/src/cli/runCli.test.ts b/src/cli/runCli.test.ts index 9a459cc14..7f076732e 100644 --- a/src/cli/runCli.test.ts +++ b/src/cli/runCli.test.ts @@ -8,9 +8,9 @@ import { runCli, RunCliDependencies } from "./runCli"; const createStubArgv = (argv: string[] = []) => ["node", "some/path/bin/file", ...argv]; const createStubRunCliDependencies = ( - overrides: Partial> = {}, + overrides: Partial> = {}, ) => ({ - convertConfigs: [ + configConverters: [ async (): Promise => ({ status: ResultStatus.Succeeded }), ], logger: createStubLogger(), @@ -34,7 +34,7 @@ describe("runCli", () => { // Arrange const message = "Oh no"; const dependencies = createStubRunCliDependencies({ - convertConfigs: [() => Promise.reject(new Error(message))], + configConverters: [() => Promise.reject(new Error(message))], }); // Act @@ -51,7 +51,7 @@ describe("runCli", () => { // Arrange const complaint = "too much unit testing coverage"; const dependencies = createStubRunCliDependencies({ - convertConfigs: [ + configConverters: [ () => Promise.resolve({ complaints: [complaint], @@ -76,7 +76,7 @@ describe("runCli", () => { // Arrange const error = new Error("too much unit testing coverage"); const dependencies = createStubRunCliDependencies({ - convertConfigs: [ + configConverters: [ () => Promise.resolve({ errors: [error], @@ -104,7 +104,7 @@ describe("runCli", () => { new Error("too much branch coverage"), ]; const dependencies = createStubRunCliDependencies({ - convertConfigs: [ + configConverters: [ () => Promise.resolve({ errors, @@ -141,7 +141,7 @@ describe("runCli", () => { it("default output should be .eslintrc.js", async () => { let defaultConfig; const dependencies = createStubRunCliDependencies({ - convertConfigs: [ + configConverters: [ (parsedArgs) => { defaultConfig = parsedArgs.config; return Promise.resolve({ diff --git a/src/cli/runCli.ts b/src/cli/runCli.ts index 0e993435c..e4fb6705b 100644 --- a/src/cli/runCli.ts +++ b/src/cli/runCli.ts @@ -4,12 +4,11 @@ import { EOL } from "os"; import { version } from "../../package.json"; import { Logger } from "../adapters/logger"; -import { SansDependencies } from "../binding"; -import { convertConfig } from "../conversion/convertConfig"; +import { ConfigConverter } from "../conversion/configConverter"; import { ResultStatus, ResultWithStatus, TSLintToESLintSettings } from "../types"; export type RunCliDependencies = { - convertConfigs: SansDependencies[]; + configConverters: ConfigConverter[]; logger: Logger; }; @@ -44,7 +43,7 @@ export const runCli = async ( return ResultStatus.Succeeded; } - for (const configConverter of dependencies.convertConfigs) { + for (const configConverter of dependencies.configConverters) { const result = await tryConvertConfig(configConverter, parsedArgv); if (result.status !== ResultStatus.Succeeded) { logErrorResult(result, dependencies); @@ -57,7 +56,7 @@ export const runCli = async ( }; const tryConvertConfig = async ( - configConverter: SansDependencies, + configConverter: ConfigConverter, argv: Partial, ): Promise => { let result: ResultWithStatus; diff --git a/src/conversion/configConverter.ts b/src/conversion/configConverter.ts new file mode 100644 index 000000000..2f4312053 --- /dev/null +++ b/src/conversion/configConverter.ts @@ -0,0 +1,5 @@ +import { ResultWithStatus, TSLintToESLintSettings } from "../types"; +/** + * Standalone (sans dependencies) type for a converter to run in the CLI. + */ +export type ConfigConverter = (settings: TSLintToESLintSettings) => Promise; diff --git a/src/conversion/convertConfig.test.ts b/src/conversion/convertLintConfig.test.ts similarity index 84% rename from src/conversion/convertConfig.test.ts rename to src/conversion/convertLintConfig.test.ts index 7e7945230..cea6b4e04 100644 --- a/src/conversion/convertConfig.test.ts +++ b/src/conversion/convertLintConfig.test.ts @@ -1,13 +1,13 @@ import { ResultStatus, FailedResult } from "../types"; -import { convertConfig, ConvertConfigDependencies } from "./convertConfig"; +import { convertLintConfig, ConvertLintConfigDependencies } from "./convertLintConfig"; const stubSettings = { config: "./eslintrc.js", }; const createStubDependencies = ( - overrides: Partial = {}, -): ConvertConfigDependencies => ({ + overrides: Partial = {}, +): ConvertLintConfigDependencies => ({ convertComments: jest.fn(), convertRules: jest.fn(), findOriginalConfigurations: jest.fn().mockResolvedValue({ @@ -40,7 +40,7 @@ const createStubOriginalConfigurationsData = () => ({ }, }); -describe("convertConfig", () => { +describe("convertLintConfig", () => { it("returns the failure result when finding the original configurations fails", async () => { // Arrange const findError: FailedResult = { @@ -52,7 +52,7 @@ describe("convertConfig", () => { }); // Act - const result = await convertConfig(dependencies, stubSettings); + const result = await convertLintConfig(dependencies, stubSettings); // Assert expect(result).toEqual(findError); @@ -66,7 +66,7 @@ describe("convertConfig", () => { }); // Act - const result = await convertConfig(dependencies, stubSettings); + const result = await convertLintConfig(dependencies, stubSettings); // Assert expect(result).toEqual({ @@ -86,7 +86,7 @@ describe("convertConfig", () => { }); // Act - const result = await convertConfig(dependencies, stubSettings); + const result = await convertLintConfig(dependencies, stubSettings); // Assert expect(result).toEqual(convertCommentsResult); @@ -102,7 +102,7 @@ describe("convertConfig", () => { }); // Act - const result = await convertConfig(dependencies, stubSettings); + const result = await convertLintConfig(dependencies, stubSettings); // Assert expect(result).toEqual(convertCommentsResult); diff --git a/src/conversion/convertConfig.ts b/src/conversion/convertLintConfig.ts similarity index 95% rename from src/conversion/convertConfig.ts rename to src/conversion/convertLintConfig.ts index 472f55c5a..185ad27f6 100644 --- a/src/conversion/convertConfig.ts +++ b/src/conversion/convertLintConfig.ts @@ -9,7 +9,7 @@ import { reportCommentResults } from "../reporting/reportCommentResults"; import { convertRules } from "../rules/convertRules"; import { ResultStatus, ResultWithStatus, TSLintToESLintSettings } from "../types"; -export type ConvertConfigDependencies = { +export type ConvertLintConfigDependencies = { convertComments: SansDependencies; convertRules: SansDependencies; findOriginalConfigurations: SansDependencies; @@ -24,8 +24,8 @@ export type ConvertConfigDependencies = { * Root-level driver to convert a TSLint configuration to ESLint. * @see `Architecture.md` for documentation. */ -export const convertConfig = async ( - dependencies: ConvertConfigDependencies, +export const convertLintConfig = async ( + dependencies: ConvertLintConfigDependencies, settings: TSLintToESLintSettings, ): Promise => { // 1. Existing configurations are read From 55b0d71124b1295c7dd948ac7274a2d8fb00714e Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Tue, 8 Sep 2020 02:00:07 -0400 Subject: [PATCH 2/2] Nit: blank line --- src/conversion/configConverter.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/conversion/configConverter.ts b/src/conversion/configConverter.ts index 2f4312053..a8120515e 100644 --- a/src/conversion/configConverter.ts +++ b/src/conversion/configConverter.ts @@ -1,4 +1,5 @@ import { ResultWithStatus, TSLintToESLintSettings } from "../types"; + /** * Standalone (sans dependencies) type for a converter to run in the CLI. */