From f817d414f1fcba1f6799c46864bdab5428548290 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Sun, 15 Nov 2020 13:06:34 -0500 Subject: [PATCH] Added explicit error for a missing TSLint configuration file --- src/input/findTSLintConfiguration.ts | 24 ++++++++++++++++++----- src/input/findTslintConfiguration.test.ts | 18 +++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/src/input/findTSLintConfiguration.ts b/src/input/findTSLintConfiguration.ts index e932c2337..24e3d52a9 100644 --- a/src/input/findTSLintConfiguration.ts +++ b/src/input/findTSLintConfiguration.ts @@ -18,6 +18,20 @@ export type FindTSLintConfigurationDependencies = { importer: SansDependencies; }; +const knownErrors = [ + [ + "unknown option `--print-config", + () => new Error("TSLint v5.18 required. Please update your version."), + ], + [ + "Could not find configuration path.", + (filePath: string) => + new Error( + `Could not find your TSLint configuration file at '${filePath}'. Try providing a different --tslint path.`, + ), + ], +] as const; + export const findTSLintConfiguration = async ( dependencies: FindTSLintConfigurationDependencies, config: string | undefined, @@ -33,11 +47,11 @@ export const findTSLintConfiguration = async ( ]); if (reportedConfiguration instanceof Error) { - if (reportedConfiguration.message.includes("unknown option `--print-config")) { - return new Error("TSLint v5.18 required. Please update your version."); - } - - return reportedConfiguration; + return ( + knownErrors.find(([knownError]) => + reportedConfiguration.message.includes(knownError), + )?.[1](filePath) ?? reportedConfiguration + ); } if (rawConfiguration instanceof Error) { diff --git a/src/input/findTslintConfiguration.test.ts b/src/input/findTslintConfiguration.test.ts index 3b16615ea..cf0e9b4f9 100644 --- a/src/input/findTslintConfiguration.test.ts +++ b/src/input/findTslintConfiguration.test.ts @@ -67,6 +67,24 @@ describe("findTSLintConfiguration", () => { ); }); + it("replaces an error with a file-not-found complaint when the file path is not found", async () => { + // Arrange + const stderr = "Could not find configuration path."; + const dependencies = createStubDependencies({ + exec: createStubThrowingExec({ stderr }), + }); + + // Act + const result = await findTSLintConfiguration(dependencies, undefined); + + // Assert + expect(result).toEqual( + expect.objectContaining({ + message: `Could not find your TSLint configuration file at './tslint.json'. Try providing a different --tslint path.`, + }), + ); + }); + it("defaults the configuration file when one isn't provided", async () => { // Arrange const dependencies = createStubDependencies({