Skip to content

Further clarified config converters structure in code #708

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 2 commits into from
Sep 8, 2020
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
4 changes: 2 additions & 2 deletions docs/Architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions src/cli/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -165,7 +165,7 @@ const convertEditorConfigDependencies: ConvertEditorConfigDependencies = {
),
};

const convertConfigDependencies: ConvertConfigDependencies = {
const convertLintConfigDependencies: ConvertLintConfigDependencies = {
convertComments: bind(convertComments, convertCommentsDependencies),
convertRules: bind(convertRules, convertRulesDependencies),
findOriginalConfigurations: bind(
Expand All @@ -180,8 +180,8 @@ const convertConfigDependencies: ConvertConfigDependencies = {
};

const runCliDependencies: RunCliDependencies = {
convertConfigs: [
bind(convertConfig, convertConfigDependencies),
configConverters: [
bind(convertLintConfig, convertLintConfigDependencies),
bind(convertEditorConfig, convertEditorConfigDependencies),
],
logger: processLogger,
Expand Down
14 changes: 7 additions & 7 deletions src/cli/runCli.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ import { runCli, RunCliDependencies } from "./runCli";
const createStubArgv = (argv: string[] = []) => ["node", "some/path/bin/file", ...argv];

const createStubRunCliDependencies = (
overrides: Partial<Pick<RunCliDependencies, "convertConfigs">> = {},
overrides: Partial<Pick<RunCliDependencies, "configConverters">> = {},
) => ({
convertConfigs: [
configConverters: [
async (): Promise<TSLintToESLintResult> => ({ status: ResultStatus.Succeeded }),
],
logger: createStubLogger(),
Expand All @@ -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
Expand All @@ -51,7 +51,7 @@ describe("runCli", () => {
// Arrange
const complaint = "too much unit testing coverage";
const dependencies = createStubRunCliDependencies({
convertConfigs: [
configConverters: [
() =>
Promise.resolve({
complaints: [complaint],
Expand All @@ -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],
Expand Down Expand Up @@ -104,7 +104,7 @@ describe("runCli", () => {
new Error("too much branch coverage"),
];
const dependencies = createStubRunCliDependencies({
convertConfigs: [
configConverters: [
() =>
Promise.resolve({
errors,
Expand Down Expand Up @@ -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({
Expand Down
9 changes: 4 additions & 5 deletions src/cli/runCli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<typeof convertConfig>[];
configConverters: ConfigConverter[];
logger: Logger;
};

Expand Down Expand Up @@ -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);
Expand All @@ -57,7 +56,7 @@ export const runCli = async (
};

const tryConvertConfig = async (
configConverter: SansDependencies<typeof convertConfig>,
configConverter: ConfigConverter,
argv: Partial<TSLintToESLintSettings>,
): Promise<ResultWithStatus> => {
let result: ResultWithStatus;
Expand Down
6 changes: 6 additions & 0 deletions src/conversion/configConverter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { ResultWithStatus, TSLintToESLintSettings } from "../types";

/**
* Standalone (sans dependencies) type for a converter to run in the CLI.
*/
export type ConfigConverter = (settings: TSLintToESLintSettings) => Promise<ResultWithStatus>;
Original file line number Diff line number Diff line change
@@ -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> = {},
): ConvertConfigDependencies => ({
overrides: Partial<ConvertLintConfigDependencies> = {},
): ConvertLintConfigDependencies => ({
convertComments: jest.fn(),
convertRules: jest.fn(),
findOriginalConfigurations: jest.fn().mockResolvedValue({
Expand Down Expand Up @@ -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 = {
Expand All @@ -52,7 +52,7 @@ describe("convertConfig", () => {
});

// Act
const result = await convertConfig(dependencies, stubSettings);
const result = await convertLintConfig(dependencies, stubSettings);

// Assert
expect(result).toEqual(findError);
Expand All @@ -66,7 +66,7 @@ describe("convertConfig", () => {
});

// Act
const result = await convertConfig(dependencies, stubSettings);
const result = await convertLintConfig(dependencies, stubSettings);

// Assert
expect(result).toEqual({
Expand All @@ -86,7 +86,7 @@ describe("convertConfig", () => {
});

// Act
const result = await convertConfig(dependencies, stubSettings);
const result = await convertLintConfig(dependencies, stubSettings);

// Assert
expect(result).toEqual(convertCommentsResult);
Expand All @@ -102,7 +102,7 @@ describe("convertConfig", () => {
});

// Act
const result = await convertConfig(dependencies, stubSettings);
const result = await convertLintConfig(dependencies, stubSettings);

// Assert
expect(result).toEqual(convertCommentsResult);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<typeof convertComments>;
convertRules: SansDependencies<typeof convertRules>;
findOriginalConfigurations: SansDependencies<typeof findOriginalConfigurations>;
Expand All @@ -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<ResultWithStatus> => {
// 1. Existing configurations are read
Expand Down