Skip to content

Refactored converters to have names match intent #714

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Sep 20, 2020
  •  
  •  
  •  
Next Next commit
Refactored file structure to have names match intent
  • Loading branch information
JoshuaKGoldberg committed Sep 12, 2020
commit a5042273c09a98403d5c33933ee1b6793e31facc
6 changes: 3 additions & 3 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ module.exports = {
"!./src/**/*.d.ts",
"!./src/**/*.stubs.ts",
"!./src/adapters/*.ts",
"!./src/rules/rulesConverters.ts",
"!./src/editorSettings/editorSettingsConverters.ts",
"!./src/rules/mergers.ts",
"!./src/cli/main.ts",
"!./src/converters/editorConfigs/editorSettingsConverters.ts",
"!./src/converters/lintConfigs/rules/ruleConverters.ts",
"!./src/converters/lintConfigs/rules/ruleMergers.ts",
],
coverageThreshold: {
global: {
Expand Down
141 changes: 78 additions & 63 deletions src/cli/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,36 +6,6 @@ import { globAsync } from "../adapters/globAsync";
import { nativeImporter } from "../adapters/nativeImporter";
import { processLogger } from "../adapters/processLogger";
import { bind } from "../binding";
import { convertComments, ConvertCommentsDependencies } from "../comments/convertComments";
import {
ConvertFileCommentsDependencies,
convertFileComments,
} from "../comments/convertFileComments";
import { convertLintConfig, ConvertLintConfigDependencies } from "../conversion/convertLintConfig";
import {
convertEditorConfig,
ConvertEditorConfigDependencies,
} from "../conversion/convertEditorConfig";
import { addPrettierExtensions } from "../creation/summarization/prettier/addPrettierExtensions";
import { removeExtendsDuplicatedRules } from "../creation/pruning/removeExtendsDuplicatedRules";
import {
retrieveExtendsValues,
RetrieveExtendsValuesDependencies,
} from "../creation/summarization/retrieveExtendsValues";
import {
summarizePackageRules,
SummarizePackageRulesDependencies,
} from "../creation/summarization/summarizePackageRules";
import {
writeConversionResults,
WriteConversionResultsDependencies,
} from "../creation/writeConversionResults";
import { writeConversionResults as writeEditorConfigConversionResults } from "../creation/writeEditorConfigConversionResults";
import {
convertEditorSettings,
ConvertEditorSettingsDependencies,
} from "../editorSettings/convertEditorSettings";
import { editorSettingsConverters } from "../editorSettings/editorSettingsConverters";
import {
findEditorConfiguration,
FindEditorConfigurationDependencies,
Expand All @@ -51,40 +21,84 @@ import { findTypeScriptConfiguration } from "../input/findTypeScriptConfiguratio
import { importer, ImporterDependencies } from "../input/importer";
import { mergeLintConfigurations } from "../input/mergeLintConfigurations";
import {
choosePackageManager,
ChoosePackageManagerDependencies,
} from "../reporting/packages/choosePackageManager";
import {
reportCommentResults,
ReportCommentResultsDependencies,
} from "../reporting/reportCommentResults";
reportCommentResults,
} from "../converters/comments/reporting/reportCommentResults";
import {
logMissingPackages,
LogMissingPackagesDependencies,
} from "../reporting/packages/logMissingPackages";
ConvertEditorConfigDependencies,
convertEditorConfig,
} from "../converters/editorConfigs/convertEditorConfig";
import {
ConvertEditorSettingsDependencies,
convertEditorSettings,
} from "../converters/editorConfigs/convertEditorSettings";
import { editorSettingsConverters } from "../converters/editorConfigs/editorSettingsConverters";
import { reportEditorSettingConversionResults } from "../converters/editorConfigs/reporting/reportEditorSettingConversionResults";
import {
ConvertLintConfigDependencies,
convertLintConfig,
} from "../converters/lintConfigs/convertLintConfig";
import {
reportConversionResults,
ReportConversionResultsDependencies,
} from "../reporting/reportConversionResults";
import { reportEditorSettingConversionResults } from "../reporting/reportEditorSettingConversionResults";
import { convertRules, ConvertRulesDependencies } from "../rules/convertRules";
import { mergers } from "../rules/mergers";
import { rulesConverters } from "../rules/rulesConverters";
reportConfigConversionResults,
} from "../converters/lintConfigs/reporting/reportConfigConversionResults";
import {
WriteConversionResultsDependencies,
writeConfigConversionResults,
} from "../converters/lintConfigs/writeConfigConversionResults";
import {
ConvertCommentsDependencies,
convertComments,
} from "../converters/comments/convertComments";
import {
ConvertFileCommentsDependencies,
convertFileComments,
} from "../converters/comments/convertFileComments";
import {
ConvertRulesDependencies,
convertRules,
} from "../converters/lintConfigs/rules/convertRules";
import { ruleConverters } from "../converters/lintConfigs/rules/ruleConverters";
import {
RetrieveExtendsValuesDependencies,
retrieveExtendsValues,
} from "../converters/lintConfigs/summarization/retrieveExtendsValues";
import {
SummarizePackageRulesDependencies,
summarizePackageRules,
} from "../converters/lintConfigs/summarization/summarizePackageRules";
import {
ChoosePackageManagerDependencies,
choosePackageManager,
} from "../converters/lintConfigs/reporting/packages/choosePackageManager";
import {
LogMissingPackagesDependencies,
logMissingPackages,
} from "../converters/lintConfigs/reporting/packages/logMissingPackages";
import { runCli, RunCliDependencies } from "./runCli";
import { ruleMergers } from "../converters/lintConfigs/rules/ruleMergers";
import { writeEditorConfigConversionResults } from "../converters/lintConfigs/writeEditorConfigConversionResults";
import { addPrettierExtensions } from "../converters/lintConfigs/summarization/prettier/addPrettierExtensions";
import { removeExtendsDuplicatedRules } from "../converters/lintConfigs/pruning/removeExtendsDuplicatedRules";

const convertFileCommentsDependencies: ConvertFileCommentsDependencies = {
converters: rulesConverters,
converters: ruleConverters,
fileSystem: fsFileSystem,
};

const reportCommentResultsDependencies: ReportCommentResultsDependencies = {
logger: processLogger,
};

const convertCommentsDependencies: ConvertCommentsDependencies = {
convertFileComments: bind(convertFileComments, convertFileCommentsDependencies),
globAsync,
reportCommentResults: bind(reportCommentResults, reportCommentResultsDependencies),
};

const convertRulesDependencies: ConvertRulesDependencies = {
converters: rulesConverters,
mergers,
ruleConverters,
ruleMergers,
};

const convertEditorSettingsDependencies: ConvertEditorSettingsDependencies = {
Expand Down Expand Up @@ -117,10 +131,6 @@ const findOriginalConfigurationsDependencies: FindOriginalConfigurationsDependen
mergeLintConfigurations,
};

const reportCommentResultsDependencies: ReportCommentResultsDependencies = {
logger: processLogger,
};

const choosePackageManagerDependencies: ChoosePackageManagerDependencies = {
fileSystem: fsFileSystem,
};
Expand Down Expand Up @@ -155,35 +165,40 @@ const reportEditorSettingConversionResultsDependencies = {
const convertEditorConfigDependencies: ConvertEditorConfigDependencies = {
findEditorConfiguration: bind(findEditorConfiguration, findEditorConfigurationDependencies),
convertEditorSettings: bind(convertEditorSettings, convertEditorSettingsDependencies),
reportConversionResults: bind(
reportEditorSettingConversionResults: bind(
reportEditorSettingConversionResults,
reportEditorSettingConversionResultsDependencies,
),
writeConversionResults: bind(
writeEditorConfigConversionResults: bind(
writeEditorConfigConversionResults,
writeConversionResultsDependencies,
),
};

const convertLintConfigDependencies: ConvertLintConfigDependencies = {
convertComments: bind(convertComments, convertCommentsDependencies),
convertRules: bind(convertRules, convertRulesDependencies),
findOriginalConfigurations: bind(
findOriginalConfigurations,
findOriginalConfigurationsDependencies,
),
logMissingPackages: bind(logMissingPackages, logMissingPackagesDependencies),
reportCommentResults: bind(reportCommentResults, reportCommentResultsDependencies),
reportConversionResults: bind(reportConversionResults, reportConversionResultsDependencies),
reportConfigConversionResults: bind(
reportConfigConversionResults,
reportConversionResultsDependencies,
),
summarizePackageRules: bind(summarizePackageRules, summarizePackageRulesDependencies),
writeConversionResults: bind(writeConversionResults, writeConversionResultsDependencies),
writeConfigConversionResults: bind(
writeConfigConversionResults,
writeConversionResultsDependencies,
),
};

const runCliDependencies: RunCliDependencies = {
configConverters: [
converters: [
bind(convertLintConfig, convertLintConfigDependencies),
bind(convertEditorConfig, convertEditorConfigDependencies),
bind(convertComments, convertCommentsDependencies),
],
findOriginalConfigurations: bind(
findOriginalConfigurations,
findOriginalConfigurationsDependencies,
),
logger: processLogger,
};

Expand Down
47 changes: 34 additions & 13 deletions src/cli/runCli.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,20 @@ import { EOL } from "os";

import { version } from "../../package.json";
import { createStubLogger, expectEqualWrites } from "../adapters/logger.stubs";
import { createStubOriginalConfigurationsData } from "../settings.stubs";
import { ResultStatus, TSLintToESLintResult } from "../types";
import { runCli, RunCliDependencies } from "./runCli";

const createStubArgv = (argv: string[] = []) => ["node", "some/path/bin/file", ...argv];

const createStubRunCliDependencies = (
overrides: Partial<Pick<RunCliDependencies, "configConverters">> = {},
) => ({
configConverters: [
async (): Promise<TSLintToESLintResult> => ({ status: ResultStatus.Succeeded }),
],
logger: createStubLogger(),
const createStubRunCliDependencies = (overrides: Partial<RunCliDependencies> = {}) => ({
converters: [async (): Promise<TSLintToESLintResult> => ({ status: ResultStatus.Succeeded })],
findOriginalConfigurations: jest.fn().mockResolvedValue({
data: createStubOriginalConfigurationsData(),
status: ResultStatus.Succeeded,
}),
...overrides,
logger: createStubLogger(),
});

describe("runCli", () => {
Expand All @@ -30,11 +31,31 @@ describe("runCli", () => {
expect(dependencies.logger.stdout.write).toHaveBeenLastCalledWith(`${version}${EOL}`);
});

it("logs an error to stderr when convertConfig throws an error", async () => {
it("logs an error when finding original config data fails", async () => {
// Arrange
const message = "Oh no";
const dependencies = createStubRunCliDependencies({
findOriginalConfigurations: jest.fn().mockResolvedValue({
errors: [new Error(message)],
status: ResultStatus.Failed,
}),
});

// Act
const status = await runCli(dependencies, createStubArgv());

// Assert
expect(dependencies.logger.stderr.write).toHaveBeenLastCalledWith(
expect.stringMatching(message),
);
expect(status).toBe(ResultStatus.Failed);
});

it("logs an error when a converter fails", async () => {
// Arrange
const message = "Oh no";
const dependencies = createStubRunCliDependencies({
configConverters: [() => Promise.reject(new Error(message))],
converters: [() => Promise.reject(new Error(message))],
});

// Act
Expand All @@ -51,7 +72,7 @@ describe("runCli", () => {
// Arrange
const complaint = "too much unit testing coverage";
const dependencies = createStubRunCliDependencies({
configConverters: [
converters: [
() =>
Promise.resolve({
complaints: [complaint],
Expand All @@ -76,7 +97,7 @@ describe("runCli", () => {
// Arrange
const error = new Error("too much unit testing coverage");
const dependencies = createStubRunCliDependencies({
configConverters: [
converters: [
() =>
Promise.resolve({
errors: [error],
Expand Down Expand Up @@ -104,7 +125,7 @@ describe("runCli", () => {
new Error("too much branch coverage"),
];
const dependencies = createStubRunCliDependencies({
configConverters: [
converters: [
() =>
Promise.resolve({
errors,
Expand Down Expand Up @@ -141,7 +162,7 @@ describe("runCli", () => {
it("default output should be .eslintrc.js", async () => {
let defaultConfig;
const dependencies = createStubRunCliDependencies({
configConverters: [
converters: [
(parsedArgs) => {
defaultConfig = parsedArgs.config;
return Promise.resolve({
Expand Down
Loading