From 191446dc4017cdc4ce63f7131b5eccca2f2951f6 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sun, 8 Nov 2020 13:04:28 -0500 Subject: [PATCH 1/2] Split dependencies into their owning functions' files --- docs/Dependencies.md | 2 + .../createESLintConfigurationStandalone.ts | 6 +- src/api/dependencies.ts | 218 ------------------ .../findOriginalConfigurationsStandalone.ts | 6 +- src/cli/main.ts | 3 +- src/cli/runCli.ts | 29 ++- src/comments/collectCommentFileNames.ts | 7 +- src/converters/comments/convertComments.ts | 23 +- .../comments/convertFileComments.ts | 7 + src/converters/comments/extractGlobPaths.ts | 6 +- .../reporting/reportCommentResults.ts | 5 + .../editorConfigs/convertEditorConfig.ts | 5 + .../editorConfigs/convertEditorConfigs.ts | 25 +- .../reportEditorConfigConversionResults.ts | 5 + .../lintConfigs/convertLintConfig.ts | 31 ++- .../lintConfigs/createESLintConfiguration.ts | 14 +- .../packages/choosePackageManager.ts | 5 + .../reporting/packages/logMissingPackages.ts | 10 +- .../reportConfigConversionResults.ts | 5 + .../lintConfigs/rules/convertRules.ts | 7 + .../summarization/retrieveExtendsValues.ts | 8 +- .../summarization/summarizePackageRules.ts | 10 +- src/input/dependencies.ts | 8 + src/input/findOriginalConfigurations.ts | 11 +- src/input/importer.ts | 9 +- 25 files changed, 215 insertions(+), 250 deletions(-) delete mode 100644 src/api/dependencies.ts create mode 100644 src/input/dependencies.ts diff --git a/docs/Dependencies.md b/docs/Dependencies.md index be5e23bcb..8e06b489a 100644 --- a/docs/Dependencies.md +++ b/docs/Dependencies.md @@ -1,3 +1,5 @@ +# TODO: REWRITE IF CHANGES DEEMED ACCEPTABLE + # Dependencies Functions are created using a variant of [Dependency Injection](http://en.wikipedia.org/wiki/Dependency_Injection). diff --git a/src/api/createESLintConfigurationStandalone.ts b/src/api/createESLintConfigurationStandalone.ts index cefd7bd2b..ebafe772f 100644 --- a/src/api/createESLintConfigurationStandalone.ts +++ b/src/api/createESLintConfigurationStandalone.ts @@ -1,4 +1,7 @@ -import { createESLintConfiguration } from "../converters/lintConfigs/createESLintConfiguration"; +import { + createESLintConfiguration, + createESLintConfigurationDependencies, +} from "../converters/lintConfigs/createESLintConfiguration"; import { ESLintConfiguration } from "../input/findESLintConfiguration"; import { AllOriginalConfigurations, @@ -7,7 +10,6 @@ import { import { PackagesConfiguration } from "../input/findPackagesConfiguration"; import { TSLintConfiguration } from "../input/findTSLintConfiguration"; import { TypeScriptConfiguration } from "../input/findTypeScriptConfiguration"; -import { createESLintConfigurationDependencies } from "./dependencies"; export type AllOriginalConfigurationsOptionally = { eslint?: Partial>; diff --git a/src/api/dependencies.ts b/src/api/dependencies.ts deleted file mode 100644 index 2940039fc..000000000 --- a/src/api/dependencies.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { childProcessExec } from "../adapters/childProcessExec"; -import { fsFileSystem } from "../adapters/fsFileSystem"; -import { globAsync } from "../adapters/globAsync"; -import { nativeImporter } from "../adapters/nativeImporter"; -import { processLogger } from "../adapters/processLogger"; -import { bind } from "../binding"; -import { - collectCommentFileNames, - CollectCommentFileNamesDependencies, -} from "../comments/collectCommentFileNames"; -import { - ReportCommentResultsDependencies, - reportCommentResults, -} from "../converters/comments/reporting/reportCommentResults"; -import { - ConvertEditorConfigDependencies, - convertEditorConfig, -} from "../converters/editorConfigs/convertEditorConfig"; -import { - ConvertLintConfigDependencies, - convertLintConfig, -} from "../converters/lintConfigs/convertLintConfig"; -import { - ReportConversionResultsDependencies, - reportConfigConversionResults, -} from "../converters/lintConfigs/reporting/reportConfigConversionResults"; -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 { RunCliDependencies } from "../cli/runCli"; -import { ruleMergers } from "../converters/lintConfigs/rules/ruleMergers"; -import { removeExtendsDuplicatedRules } from "../converters/lintConfigs/pruning/removeExtendsDuplicatedRules"; -import { - ExtractGlobPathsDependencies, - extractGlobPaths, -} from "../converters/comments/extractGlobPaths"; -import { findESLintConfiguration } from "../input/findESLintConfiguration"; -import { - findOriginalConfigurations, - FindOriginalConfigurationsDependencies, -} from "../input/findOriginalConfigurations"; -import { findPackagesConfiguration } from "../input/findPackagesConfiguration"; -import { findTSLintConfiguration } from "../input/findTSLintConfiguration"; -import { findTypeScriptConfiguration } from "../input/findTypeScriptConfiguration"; -import { importer, ImporterDependencies } from "../input/importer"; -import { mergeLintConfigurations } from "../input/mergeLintConfigurations"; -import { - createESLintConfiguration, - CreateESLintConfigurationDependencies, -} from "../converters/lintConfigs/createESLintConfiguration"; -import { checkPrettierExtension } from "../converters/lintConfigs/summarization/prettier/checkPrettierExtension"; -import { - convertEditorConfigs, - ConvertEditorConfigsDependencies, -} from "../converters/editorConfigs/convertEditorConfigs"; -import { reportEditorConfigConversionResults } from "../converters/editorConfigs/reporting/reportEditorConfigConversionResults"; -import { EditorConfigDescriptor } from "../converters/editorConfigs/types"; -import { convertAtomConfig } from "../converters/editorConfigs/converters/convertAtomConfig"; -import { convertVSCodeConfig } from "../converters/editorConfigs/converters/convertVSCodeConfig"; -export const convertFileCommentsDependencies: ConvertFileCommentsDependencies = { - converters: ruleConverters, - fileSystem: fsFileSystem, -}; - -export const reportCommentResultsDependencies: ReportCommentResultsDependencies = { - logger: processLogger, -}; - -export const convertRulesDependencies: ConvertRulesDependencies = { - ruleConverters, - ruleMergers, -}; - -export const nativeImporterDependencies: ImporterDependencies = { - fileSystem: fsFileSystem, - getCwd: () => process.cwd(), - nativeImporter: nativeImporter, -}; - -export const boundImporter = bind(importer, nativeImporterDependencies); - -export const findConfigurationDependencies = { - exec: childProcessExec, - importer: boundImporter, -}; - -export const findOriginalConfigurationsDependencies: FindOriginalConfigurationsDependencies = { - findESLintConfiguration: bind(findESLintConfiguration, findConfigurationDependencies), - findPackagesConfiguration: bind(findPackagesConfiguration, findConfigurationDependencies), - findTypeScriptConfiguration: bind(findTypeScriptConfiguration, findConfigurationDependencies), - findTSLintConfiguration: bind(findTSLintConfiguration, findConfigurationDependencies), - mergeLintConfigurations, -}; - -export const collectCommentFileNamesDependencies: CollectCommentFileNamesDependencies = { - findTypeScriptConfiguration: bind(findTypeScriptConfiguration, findConfigurationDependencies), -}; - -export const extractGlobPathsDependencies: ExtractGlobPathsDependencies = { - globAsync, -}; - -export const convertCommentsDependencies: ConvertCommentsDependencies = { - collectCommentFileNames: bind(collectCommentFileNames, collectCommentFileNamesDependencies), - convertFileComments: bind(convertFileComments, convertFileCommentsDependencies), - extractGlobPaths: bind(extractGlobPaths, extractGlobPathsDependencies), - reportCommentResults: bind(reportCommentResults, reportCommentResultsDependencies), -}; - -export const retrieveExtendsValuesDependencies: RetrieveExtendsValuesDependencies = { - importer: boundImporter, -}; - -export const summarizePackageRulesDependencies: SummarizePackageRulesDependencies = { - checkPrettierExtension, - removeExtendsDuplicatedRules, - retrieveExtendsValues: bind(retrieveExtendsValues, retrieveExtendsValuesDependencies), -}; - -export const choosePackageManagerDependencies: ChoosePackageManagerDependencies = { - fileSystem: fsFileSystem, -}; - -export const createESLintConfigurationDependencies: CreateESLintConfigurationDependencies = { - convertRules: bind(convertRules, convertRulesDependencies), - summarizePackageRules: bind(summarizePackageRules, summarizePackageRulesDependencies), -}; - -export const logMissingPackagesDependencies: LogMissingPackagesDependencies = { - choosePackageManager: bind(choosePackageManager, choosePackageManagerDependencies), - logger: processLogger, -}; - -export const reportConversionResultsDependencies: ReportConversionResultsDependencies = { - logger: processLogger, -}; - -export const reportEditorSettingConversionResultsDependencies = { - logger: processLogger, -}; - -export const writeConversionResultsDependencies = { - fileSystem: fsFileSystem, -}; - -export const convertEditorConfigDependencies: ConvertEditorConfigDependencies = { - fileSystem: fsFileSystem, -}; - -export const editorConfigDescriptors: EditorConfigDescriptor[] = [ - [".atom/config.cson", convertAtomConfig], - [".vscode/settings.json", convertVSCodeConfig], -]; - -export const reportEditorConfigConversionResultsDependencies = { - logger: processLogger, -}; - -export const convertEditorConfigsDependencies: ConvertEditorConfigsDependencies = { - convertEditorConfig: bind(convertEditorConfig, convertEditorConfigDependencies), - editorConfigDescriptors, - reportEditorConfigConversionResults: bind( - reportEditorConfigConversionResults, - reportEditorConfigConversionResultsDependencies, - ), -}; - -export const convertLintConfigDependencies: ConvertLintConfigDependencies = { - createESLintConfiguration: bind( - createESLintConfiguration, - createESLintConfigurationDependencies, - ), - fileSystem: fsFileSystem, - logMissingPackages: bind(logMissingPackages, logMissingPackagesDependencies), - reportConfigConversionResults: bind( - reportConfigConversionResults, - reportConversionResultsDependencies, - ), -}; - -export const runCliDependencies: RunCliDependencies = { - converters: [ - bind(convertLintConfig, convertLintConfigDependencies), - bind(convertEditorConfigs, convertEditorConfigsDependencies), - bind(convertComments, convertCommentsDependencies), - ], - findOriginalConfigurations: bind( - findOriginalConfigurations, - findOriginalConfigurationsDependencies, - ), - logger: processLogger, -}; diff --git a/src/api/findOriginalConfigurationsStandalone.ts b/src/api/findOriginalConfigurationsStandalone.ts index 940c80799..adcac2627 100644 --- a/src/api/findOriginalConfigurationsStandalone.ts +++ b/src/api/findOriginalConfigurationsStandalone.ts @@ -1,6 +1,8 @@ -import { findOriginalConfigurations } from "../input/findOriginalConfigurations"; +import { + findOriginalConfigurations, + findOriginalConfigurationsDependencies, +} from "../input/findOriginalConfigurations"; import { ConfigurationLocations } from "../types"; -import { findOriginalConfigurationsDependencies } from "./dependencies"; /** * Retrieves the raw and computed contents of original configuration files. diff --git a/src/cli/main.ts b/src/cli/main.ts index 58ab5e3e9..31f28a5b4 100644 --- a/src/cli/main.ts +++ b/src/cli/main.ts @@ -1,8 +1,7 @@ import { EOL } from "os"; import { processLogger } from "../adapters/processLogger"; -import { runCliDependencies } from "../api/dependencies"; -import { runCli } from "../cli/runCli"; +import { runCli, runCliDependencies } from "../cli/runCli"; export const main = async (argv: string[]) => { try { diff --git a/src/cli/runCli.ts b/src/cli/runCli.ts index 42ab7b763..7438ef364 100644 --- a/src/cli/runCli.ts +++ b/src/cli/runCli.ts @@ -4,11 +4,25 @@ import { EOL } from "os"; import { version } from "../../package.json"; import { Logger } from "../adapters/logger"; -import { SansDependencies } from "../binding"; +import { processLogger } from "../adapters/processLogger"; +import { bind, SansDependencies } from "../binding"; +import { + convertComments, + convertCommentsDependencies, +} from "../converters/comments/convertComments"; +import { + convertEditorConfigs, + convertEditorConfigsDependencies, +} from "../converters/editorConfigs/convertEditorConfigs"; +import { + convertLintConfig, + convertLintConfigDependencies, +} from "../converters/lintConfigs/convertLintConfig"; import { Converter } from "../converters/types"; import { AllOriginalConfigurations, findOriginalConfigurations, + findOriginalConfigurationsDependencies, } from "../input/findOriginalConfigurations"; import { logErrorResult } from "../reporting"; import { ResultStatus, ResultWithStatus, TSLintToESLintSettings } from "../types"; @@ -19,6 +33,19 @@ export type RunCliDependencies = { logger: Logger; }; +export const runCliDependencies: RunCliDependencies = { + converters: [ + bind(convertLintConfig, convertLintConfigDependencies), + bind(convertEditorConfigs, convertEditorConfigsDependencies), + bind(convertComments, convertCommentsDependencies), + ], + findOriginalConfigurations: bind( + findOriginalConfigurations, + findOriginalConfigurationsDependencies, + ), + logger: processLogger, +}; + /** * @see `/docs/Architecture/README.md` for documentation. */ diff --git a/src/comments/collectCommentFileNames.ts b/src/comments/collectCommentFileNames.ts index e8f8c337a..61175f19f 100644 --- a/src/comments/collectCommentFileNames.ts +++ b/src/comments/collectCommentFileNames.ts @@ -1,4 +1,5 @@ -import { SansDependencies } from "../binding"; +import { bind, SansDependencies } from "../binding"; +import { findConfigurationDependencies } from "../input/dependencies"; import { findTypeScriptConfiguration, TypeScriptConfiguration, @@ -9,6 +10,10 @@ export type CollectCommentFileNamesDependencies = { findTypeScriptConfiguration: SansDependencies; }; +export const collectCommentFileNamesDependencies: CollectCommentFileNamesDependencies = { + findTypeScriptConfiguration: bind(findTypeScriptConfiguration, findConfigurationDependencies), +}; + export type CommentFileNames = { exclude?: string[]; include: string[]; diff --git a/src/converters/comments/convertComments.ts b/src/converters/comments/convertComments.ts index 3598ce345..39b529ed4 100644 --- a/src/converters/comments/convertComments.ts +++ b/src/converters/comments/convertComments.ts @@ -1,11 +1,17 @@ -import { SansDependencies } from "../../binding"; -import { collectCommentFileNames } from "../../comments/collectCommentFileNames"; +import { bind, SansDependencies } from "../../binding"; +import { + collectCommentFileNames, + collectCommentFileNamesDependencies, +} from "../../comments/collectCommentFileNames"; import { AllOriginalConfigurations } from "../../input/findOriginalConfigurations"; import { ResultWithDataStatus, ResultStatus, TSLintToESLintSettings } from "../../types"; import { isError } from "../../utils"; -import { convertFileComments } from "./convertFileComments"; -import { extractGlobPaths } from "./extractGlobPaths"; -import { reportCommentResults } from "./reporting/reportCommentResults"; +import { convertFileComments, convertFileCommentsDependencies } from "./convertFileComments"; +import { extractGlobPaths, extractGlobPathsDependencies } from "./extractGlobPaths"; +import { + reportCommentResults, + reportCommentResultsDependencies, +} from "./reporting/reportCommentResults"; export type ConvertCommentsDependencies = { collectCommentFileNames: SansDependencies; @@ -14,6 +20,13 @@ export type ConvertCommentsDependencies = { reportCommentResults: SansDependencies; }; +export const convertCommentsDependencies: ConvertCommentsDependencies = { + collectCommentFileNames: bind(collectCommentFileNames, collectCommentFileNamesDependencies), + convertFileComments: bind(convertFileComments, convertFileCommentsDependencies), + extractGlobPaths: bind(extractGlobPaths, extractGlobPathsDependencies), + reportCommentResults: bind(reportCommentResults, reportCommentResultsDependencies), +}; + /** * Root-level driver to convert a tslint:disable comments to eslint-disables. * @see `/docs/Architecture/Comments.md` for documentation. diff --git a/src/converters/comments/convertFileComments.ts b/src/converters/comments/convertFileComments.ts index db6c56486..b3e3ccbd6 100644 --- a/src/converters/comments/convertFileComments.ts +++ b/src/converters/comments/convertFileComments.ts @@ -1,5 +1,7 @@ import { FileSystem } from "../../adapters/fileSystem"; +import { fsFileSystem } from "../../adapters/fsFileSystem"; import { RuleConverter } from "../lintConfigs/rules/ruleConverter"; +import { ruleConverters } from "../lintConfigs/rules/ruleConverters"; import { parseFileComments } from "./parseFileComments"; import { replaceFileComments } from "./replaceFileComments"; @@ -8,6 +10,11 @@ export type ConvertFileCommentsDependencies = { fileSystem: Pick; }; +export const convertFileCommentsDependencies: ConvertFileCommentsDependencies = { + converters: ruleConverters, + fileSystem: fsFileSystem, +}; + export const convertFileComments = async ( dependencies: ConvertFileCommentsDependencies, filePath: string, diff --git a/src/converters/comments/extractGlobPaths.ts b/src/converters/comments/extractGlobPaths.ts index 99bb6fac8..52afe29af 100644 --- a/src/converters/comments/extractGlobPaths.ts +++ b/src/converters/comments/extractGlobPaths.ts @@ -1,6 +1,6 @@ import minimatch from "minimatch"; -import { GlobAsync } from "../../adapters/globAsync"; +import { globAsync, GlobAsync } from "../../adapters/globAsync"; import { CommentFileNames } from "../../comments/collectCommentFileNames"; import { ResultStatus, ResultWithDataStatus } from "../../types"; import { separateErrors, uniqueFromSources } from "../../utils"; @@ -9,6 +9,10 @@ export type ExtractGlobPathsDependencies = { globAsync: GlobAsync; }; +export const extractGlobPathsDependencies: ExtractGlobPathsDependencies = { + globAsync, +}; + export const extractGlobPaths = async ( dependencies: ExtractGlobPathsDependencies, { exclude, include }: CommentFileNames, diff --git a/src/converters/comments/reporting/reportCommentResults.ts b/src/converters/comments/reporting/reportCommentResults.ts index 9960201fe..1752271b7 100644 --- a/src/converters/comments/reporting/reportCommentResults.ts +++ b/src/converters/comments/reporting/reportCommentResults.ts @@ -2,11 +2,16 @@ import chalk from "chalk"; import { EOL } from "os"; import { Logger } from "../../../adapters/logger"; +import { processLogger } from "../../../adapters/processLogger"; export type ReportCommentResultsDependencies = { logger: Logger; }; +export const reportCommentResultsDependencies: ReportCommentResultsDependencies = { + logger: processLogger, +}; + export const reportCommentResults = ( dependencies: ReportCommentResultsDependencies, uniqueFilePathGlobs?: string[], diff --git a/src/converters/editorConfigs/convertEditorConfig.ts b/src/converters/editorConfigs/convertEditorConfig.ts index 1a7aed51c..23e77af05 100644 --- a/src/converters/editorConfigs/convertEditorConfig.ts +++ b/src/converters/editorConfigs/convertEditorConfig.ts @@ -1,4 +1,5 @@ import { FileSystem } from "../../adapters/fileSystem"; +import { fsFileSystem } from "../../adapters/fsFileSystem"; import { TSLintToESLintSettings } from "../../types"; import { EditorConfigConverter } from "./types"; @@ -6,6 +7,10 @@ export type ConvertEditorConfigDependencies = { fileSystem: Pick; }; +export const convertEditorConfigDependencies: ConvertEditorConfigDependencies = { + fileSystem: fsFileSystem, +}; + /** * @see /docs/Editors.md for documentation. */ diff --git a/src/converters/editorConfigs/convertEditorConfigs.ts b/src/converters/editorConfigs/convertEditorConfigs.ts index ec900f9b0..eb9103b5a 100644 --- a/src/converters/editorConfigs/convertEditorConfigs.ts +++ b/src/converters/editorConfigs/convertEditorConfigs.ts @@ -1,8 +1,13 @@ -import { SansDependencies } from "../../binding"; +import { bind, SansDependencies } from "../../binding"; import { ResultStatus, ResultWithStatus, TSLintToESLintSettings } from "../../types"; import { uniqueFromSources } from "../../utils"; -import { convertEditorConfig } from "./convertEditorConfig"; -import { reportEditorConfigConversionResults } from "./reporting/reportEditorConfigConversionResults"; +import { convertEditorConfig, convertEditorConfigDependencies } from "./convertEditorConfig"; +import { convertAtomConfig } from "./converters/convertAtomConfig"; +import { convertVSCodeConfig } from "./converters/convertVSCodeConfig"; +import { + reportEditorConfigConversionResults, + reportEditorConfigConversionResultsDependencies, +} from "./reporting/reportEditorConfigConversionResults"; import { EditorConfigDescriptor, EditorConfigsConversionResults } from "./types"; export type ConvertEditorConfigsDependencies = { @@ -13,6 +18,20 @@ export type ConvertEditorConfigsDependencies = { >; }; +export const editorConfigDescriptors: EditorConfigDescriptor[] = [ + [".atom/config.cson", convertAtomConfig], + [".vscode/settings.json", convertVSCodeConfig], +]; + +export const convertEditorConfigsDependencies: ConvertEditorConfigsDependencies = { + convertEditorConfig: bind(convertEditorConfig, convertEditorConfigDependencies), + editorConfigDescriptors, + reportEditorConfigConversionResults: bind( + reportEditorConfigConversionResults, + reportEditorConfigConversionResultsDependencies, + ), +}; + /** * @see /docs/Editors.md for documentation. */ diff --git a/src/converters/editorConfigs/reporting/reportEditorConfigConversionResults.ts b/src/converters/editorConfigs/reporting/reportEditorConfigConversionResults.ts index 537ddb690..1b93ddf5d 100644 --- a/src/converters/editorConfigs/reporting/reportEditorConfigConversionResults.ts +++ b/src/converters/editorConfigs/reporting/reportEditorConfigConversionResults.ts @@ -1,4 +1,5 @@ import { Logger } from "../../../adapters/logger"; +import { processLogger } from "../../../adapters/processLogger"; import { logSuccessfulConversions, logFailedConversions, @@ -10,6 +11,10 @@ export type ReportEditorConfigConversionResultsDependencies = { logger: Logger; }; +export const reportEditorConfigConversionResultsDependencies = { + logger: processLogger, +}; + export const reportEditorConfigConversionResults = ( dependencies: ReportEditorConfigConversionResultsDependencies, results: EditorConfigsConversionResults, diff --git a/src/converters/lintConfigs/convertLintConfig.ts b/src/converters/lintConfigs/convertLintConfig.ts index e3a32d193..010a763da 100644 --- a/src/converters/lintConfigs/convertLintConfig.ts +++ b/src/converters/lintConfigs/convertLintConfig.ts @@ -1,12 +1,22 @@ import { FileSystem } from "../../adapters/fileSystem"; -import { SansDependencies } from "../../binding"; +import { fsFileSystem } from "../../adapters/fsFileSystem"; +import { bind, SansDependencies } from "../../binding"; import { AllOriginalConfigurations } from "../../input/findOriginalConfigurations"; import { TSLintToESLintSettings, ResultWithStatus, ResultStatus } from "../../types"; -import { createESLintConfiguration } from "./createESLintConfiguration"; +import { + createESLintConfiguration, + createESLintConfigurationDependencies, +} from "./createESLintConfiguration"; import { formatOutput } from "./formatting/formatOutput"; import { joinConfigConversionResults } from "./joinConfigConversionResults"; -import { logMissingPackages } from "./reporting/packages/logMissingPackages"; -import { reportConfigConversionResults } from "./reporting/reportConfigConversionResults"; +import { + logMissingPackages, + logMissingPackagesDependencies, +} from "./reporting/packages/logMissingPackages"; +import { + reportConfigConversionResults, + reportConversionResultsDependencies, +} from "./reporting/reportConfigConversionResults"; export type ConvertLintConfigDependencies = { createESLintConfiguration: SansDependencies; @@ -15,6 +25,19 @@ export type ConvertLintConfigDependencies = { reportConfigConversionResults: SansDependencies; }; +export const convertLintConfigDependencies: ConvertLintConfigDependencies = { + createESLintConfiguration: bind( + createESLintConfiguration, + createESLintConfigurationDependencies, + ), + fileSystem: fsFileSystem, + logMissingPackages: bind(logMissingPackages, logMissingPackagesDependencies), + reportConfigConversionResults: bind( + reportConfigConversionResults, + reportConversionResultsDependencies, + ), +}; + /** * Root-level driver to convert a TSLint configuration to ESLint. * @see `/docs/Architecture/Linting.md` for documentation. diff --git a/src/converters/lintConfigs/createESLintConfiguration.ts b/src/converters/lintConfigs/createESLintConfiguration.ts index bd1e0d7b4..bf0f16c3d 100644 --- a/src/converters/lintConfigs/createESLintConfiguration.ts +++ b/src/converters/lintConfigs/createESLintConfiguration.ts @@ -1,13 +1,21 @@ -import { SansDependencies } from "../../binding"; +import { bind, SansDependencies } from "../../binding"; import { AllOriginalConfigurations } from "../../input/findOriginalConfigurations"; -import { convertRules } from "./rules/convertRules"; -import { summarizePackageRules } from "./summarization/summarizePackageRules"; +import { convertRules, convertRulesDependencies } from "./rules/convertRules"; +import { + summarizePackageRules, + summarizePackageRulesDependencies, +} from "./summarization/summarizePackageRules"; export type CreateESLintConfigurationDependencies = { convertRules: SansDependencies; summarizePackageRules: SansDependencies; }; +export const createESLintConfigurationDependencies: CreateESLintConfigurationDependencies = { + convertRules: bind(convertRules, convertRulesDependencies), + summarizePackageRules: bind(summarizePackageRules, summarizePackageRulesDependencies), +}; + export const createESLintConfiguration = async ( dependencies: CreateESLintConfigurationDependencies, originalConfigurations: AllOriginalConfigurations, diff --git a/src/converters/lintConfigs/reporting/packages/choosePackageManager.ts b/src/converters/lintConfigs/reporting/packages/choosePackageManager.ts index afd04e906..860a08816 100644 --- a/src/converters/lintConfigs/reporting/packages/choosePackageManager.ts +++ b/src/converters/lintConfigs/reporting/packages/choosePackageManager.ts @@ -1,10 +1,15 @@ import { FileSystem } from "../../../../adapters/fileSystem"; +import { fsFileSystem } from "../../../../adapters/fsFileSystem"; import { preferredLockfiles, PackageManager } from "./packageManagers"; export type ChoosePackageManagerDependencies = { fileSystem: Pick; }; +export const choosePackageManagerDependencies: ChoosePackageManagerDependencies = { + fileSystem: fsFileSystem, +}; + export const choosePackageManager = async (dependencies: ChoosePackageManagerDependencies) => { for (const [packageManager, lockFile] of preferredLockfiles) { if (await dependencies.fileSystem.fileExists(lockFile)) { diff --git a/src/converters/lintConfigs/reporting/packages/logMissingPackages.ts b/src/converters/lintConfigs/reporting/packages/logMissingPackages.ts index 122bad849..0f3036c55 100644 --- a/src/converters/lintConfigs/reporting/packages/logMissingPackages.ts +++ b/src/converters/lintConfigs/reporting/packages/logMissingPackages.ts @@ -2,11 +2,12 @@ import chalk from "chalk"; import { EOL } from "os"; import { Logger } from "../../../../adapters/logger"; -import { SansDependencies } from "../../../../binding"; +import { processLogger } from "../../../../adapters/processLogger"; +import { bind, SansDependencies } from "../../../../binding"; import { PackagesConfiguration } from "../../../../input/findPackagesConfiguration"; import { isTruthy } from "../../../../utils"; import { SummarizedConfigResultsConfiguration } from "../../summarization/types"; -import { choosePackageManager } from "./choosePackageManager"; +import { choosePackageManager, choosePackageManagerDependencies } from "./choosePackageManager"; import { installationMessages } from "./packageManagers"; export type LogMissingPackagesDependencies = { @@ -14,6 +15,11 @@ export type LogMissingPackagesDependencies = { logger: Logger; }; +export const logMissingPackagesDependencies: LogMissingPackagesDependencies = { + choosePackageManager: bind(choosePackageManager, choosePackageManagerDependencies), + logger: processLogger, +}; + export const logMissingPackages = async ( dependencies: LogMissingPackagesDependencies, ruleConversionResults: Pick< diff --git a/src/converters/lintConfigs/reporting/reportConfigConversionResults.ts b/src/converters/lintConfigs/reporting/reportConfigConversionResults.ts index 287a06e17..a025948ca 100644 --- a/src/converters/lintConfigs/reporting/reportConfigConversionResults.ts +++ b/src/converters/lintConfigs/reporting/reportConfigConversionResults.ts @@ -2,6 +2,7 @@ import chalk from "chalk"; import { EOL } from "os"; import { Logger } from "../../../adapters/logger"; +import { processLogger } from "../../../adapters/processLogger"; import { logSuccessfulConversions, logFailedConversions, @@ -14,6 +15,10 @@ export type ReportConversionResultsDependencies = { logger: Logger; }; +export const reportConversionResultsDependencies: ReportConversionResultsDependencies = { + logger: processLogger, +}; + export const reportConfigConversionResults = async ( dependencies: ReportConversionResultsDependencies, outputPath: string, diff --git a/src/converters/lintConfigs/rules/convertRules.ts b/src/converters/lintConfigs/rules/convertRules.ts index 99e568fe5..cc5efee41 100644 --- a/src/converters/lintConfigs/rules/convertRules.ts +++ b/src/converters/lintConfigs/rules/convertRules.ts @@ -1,3 +1,5 @@ +import { ruleConverters } from "../../../converters/lintConfigs/rules/ruleConverters"; +import { ruleMergers } from "../../../converters/lintConfigs/rules/ruleMergers"; import { ConversionError } from "../../../errors/conversionError"; import { ErrorSummary } from "../../../errors/errorSummary"; import { TSLintConfigurationRules } from "../../../input/findTSLintConfiguration"; @@ -13,6 +15,11 @@ export type ConvertRulesDependencies = { ruleMergers: Map; }; +export const convertRulesDependencies: ConvertRulesDependencies = { + ruleConverters, + ruleMergers, +}; + export type RuleConversionResults = { converted: Map; failed: ErrorSummary[]; diff --git a/src/converters/lintConfigs/summarization/retrieveExtendsValues.ts b/src/converters/lintConfigs/summarization/retrieveExtendsValues.ts index bd5f5ac6b..0be8d274d 100644 --- a/src/converters/lintConfigs/summarization/retrieveExtendsValues.ts +++ b/src/converters/lintConfigs/summarization/retrieveExtendsValues.ts @@ -1,13 +1,17 @@ -import { SansDependencies } from "../../../binding"; +import { bind, SansDependencies } from "../../../binding"; import { ConfigurationError } from "../../../errors/configurationError"; import { ESLintConfiguration } from "../../../input/findESLintConfiguration"; -import { importer } from "../../../input/importer"; +import { importer, importerDependencies } from "../../../input/importer"; import { resolveExtensionNames } from "./resolveExtensionNames"; export type RetrieveExtendsValuesDependencies = { importer: SansDependencies; }; +export const retrieveExtendsValuesDependencies: RetrieveExtendsValuesDependencies = { + importer: bind(importer, importerDependencies), +}; + export type RetrievedExtensionValues = { configurationErrors: ConfigurationError[]; importedExtensions: Partial[]; diff --git a/src/converters/lintConfigs/summarization/summarizePackageRules.ts b/src/converters/lintConfigs/summarization/summarizePackageRules.ts index 4f66b31be..424957daa 100644 --- a/src/converters/lintConfigs/summarization/summarizePackageRules.ts +++ b/src/converters/lintConfigs/summarization/summarizePackageRules.ts @@ -1,4 +1,4 @@ -import { SansDependencies } from "../../../binding"; +import { bind, SansDependencies } from "../../../binding"; import { ESLintConfiguration } from "../../../input/findESLintConfiguration"; import { OriginalConfigurations } from "../../../input/findOriginalConfigurations"; import { TSLintConfiguration } from "../../../input/findTSLintConfiguration"; @@ -9,7 +9,7 @@ import { RuleConversionResults } from "../rules/convertRules"; import { collectTSLintRulesets } from "./collectTSLintRulesets"; import { normalizeESLintRules } from "./normalizeESLintRules"; import { checkPrettierExtension } from "./prettier/checkPrettierExtension"; -import { retrieveExtendsValues } from "./retrieveExtendsValues"; +import { retrieveExtendsValues, retrieveExtendsValuesDependencies } from "./retrieveExtendsValues"; import { SummarizedConfigResultsConfiguration } from "./types"; export type SummarizePackageRulesDependencies = { @@ -18,6 +18,12 @@ export type SummarizePackageRulesDependencies = { retrieveExtendsValues: SansDependencies; }; +export const summarizePackageRulesDependencies: SummarizePackageRulesDependencies = { + checkPrettierExtension, + removeExtendsDuplicatedRules, + retrieveExtendsValues: bind(retrieveExtendsValues, retrieveExtendsValuesDependencies), +}; + /** * Given an initial set of rule conversion results and original configurations, * determines which ESLint rulesets to extend from and removes redundant rule values. diff --git a/src/input/dependencies.ts b/src/input/dependencies.ts new file mode 100644 index 000000000..e7d2e75a2 --- /dev/null +++ b/src/input/dependencies.ts @@ -0,0 +1,8 @@ +import { childProcessExec } from "../adapters/childProcessExec"; +import { bind } from "../binding"; +import { importer, importerDependencies } from "./importer"; + +export const findConfigurationDependencies = { + exec: childProcessExec, + importer: bind(importer, importerDependencies), +}; diff --git a/src/input/findOriginalConfigurations.ts b/src/input/findOriginalConfigurations.ts index 2d2ae11ce..708544e19 100644 --- a/src/input/findOriginalConfigurations.ts +++ b/src/input/findOriginalConfigurations.ts @@ -1,4 +1,4 @@ -import { SansDependencies } from "../binding"; +import { bind, SansDependencies } from "../binding"; import { ConfigurationErrorResult, ConfigurationLocations, @@ -15,6 +15,7 @@ import { import { findTSLintConfiguration, TSLintConfiguration } from "./findTSLintConfiguration"; import { mergeLintConfigurations } from "./mergeLintConfigurations"; import { DeepPartial } from "./findReportedConfiguration"; +import { findConfigurationDependencies } from "./dependencies"; export type FindOriginalConfigurationsDependencies = { findESLintConfiguration: SansDependencies; @@ -24,6 +25,14 @@ export type FindOriginalConfigurationsDependencies = { mergeLintConfigurations: typeof mergeLintConfigurations; }; +export const findOriginalConfigurationsDependencies: FindOriginalConfigurationsDependencies = { + findESLintConfiguration: bind(findESLintConfiguration, findConfigurationDependencies), + findPackagesConfiguration: bind(findPackagesConfiguration, findConfigurationDependencies), + findTypeScriptConfiguration: bind(findTypeScriptConfiguration, findConfigurationDependencies), + findTSLintConfiguration: bind(findTSLintConfiguration, findConfigurationDependencies), + mergeLintConfigurations, +}; + /** * Both found configurations for a particular linter. */ diff --git a/src/input/importer.ts b/src/input/importer.ts index aa2af57e6..456c2cce3 100644 --- a/src/input/importer.ts +++ b/src/input/importer.ts @@ -1,7 +1,8 @@ import * as path from "path"; import { FileSystem } from "../adapters/fileSystem"; -import { NativeImporter } from "../adapters/nativeImporter"; +import { fsFileSystem } from "../adapters/fsFileSystem"; +import { nativeImporter, NativeImporter } from "../adapters/nativeImporter"; import { parseJson } from "../utils"; export type ImporterDependencies = { @@ -10,6 +11,12 @@ export type ImporterDependencies = { nativeImporter: NativeImporter; }; +export const importerDependencies: ImporterDependencies = { + fileSystem: fsFileSystem, + getCwd: () => process.cwd(), + nativeImporter, +}; + export const importer = async ( dependencies: ImporterDependencies, moduleName: string, From 9fc909ac6e97339036e86448799e59c49cb38e0f Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sun, 8 Nov 2020 14:36:04 -0500 Subject: [PATCH 2/2] process.cwd.bind(process) --- src/input/importer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/input/importer.ts b/src/input/importer.ts index 456c2cce3..377ff9c8d 100644 --- a/src/input/importer.ts +++ b/src/input/importer.ts @@ -13,7 +13,7 @@ export type ImporterDependencies = { export const importerDependencies: ImporterDependencies = { fileSystem: fsFileSystem, - getCwd: () => process.cwd(), + getCwd: process.cwd.bind(process), nativeImporter, };