Skip to content

Commit 1d72e24

Browse files
committed
Add diagnostic when transformer could not be resolved
1 parent 1d4f2b0 commit 1d72e24

File tree

3 files changed

+44
-10
lines changed

3 files changed

+44
-10
lines changed

src/Transpile.ts

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import { LuaPrinter } from "./LuaPrinter";
88
import { LuaTransformer } from "./LuaTransformer";
99
import { TranspileError } from "./TranspileError";
1010

11-
function loadTransformersFromOptions(program: ts.Program): ts.CustomTransformers {
12-
const diagnostics: ts.Diagnostic[] = [];
11+
function loadTransformersFromOptions(
12+
program: ts.Program,
13+
diagnostics: ts.Diagnostic[]
14+
): ts.CustomTransformers {
1315
const customTransformers: Required<ts.CustomTransformers> = {
1416
before: [],
1517
after: [],
@@ -25,7 +27,17 @@ function loadTransformersFromOptions(program: ts.Program): ts.CustomTransformers
2527
const extensions = [".ts", ".tsx", ".js"];
2628
for (const transformer of options.tsTransformers) {
2729
const { transform, when = "before", ...transformerOptions } = transformer;
28-
const resolved = resolve.sync(transform, { extensions, basedir });
30+
let resolved: string;
31+
try {
32+
resolved = resolve.sync(transform, { extensions, basedir });
33+
} catch (err) {
34+
if (err.code !== "MODULE_NOT_FOUND") throw err;
35+
diagnostics.push(
36+
diagnosticFactories.couldNotResolveTransformerFrom(transform, basedir)
37+
);
38+
39+
continue;
40+
}
2941

3042
// tslint:disable-next-line: deprecation
3143
const hasNoTsRequireHook = require.extensions[".ts"] === undefined;
@@ -35,11 +47,10 @@ function loadTransformersFromOptions(program: ts.Program): ts.CustomTransformers
3547
const tsNode: typeof import("ts-node") = require(tsNodePath);
3648
tsNode.register({ transpileOnly: true });
3749
} catch (err) {
38-
if (err.code === "MODULE_NOT_FOUND") {
39-
diagnostics.push(
40-
diagnosticFactories.toLoadTransformerItShouldBeTranspiled(transform)
41-
);
42-
}
50+
if (err.code !== "MODULE_NOT_FOUND") throw err;
51+
diagnostics.push(
52+
diagnosticFactories.toLoadTransformerItShouldBeTranspiled(transform)
53+
);
4354

4455
continue;
4556
}
@@ -58,6 +69,7 @@ function loadTransformersFromOptions(program: ts.Program): ts.CustomTransformers
5869

5970
function getCustomTransformers(
6071
program: ts.Program,
72+
diagnostics: ts.Diagnostic[],
6173
customTransformers: ts.CustomTransformers,
6274
onSourceFile: (sourceFile: ts.SourceFile) => void
6375
): ts.CustomTransformers {
@@ -76,7 +88,7 @@ function getCustomTransformers(
7688
return ts.createSourceFile(sourceFile.fileName, "", ts.ScriptTarget.ESNext);
7789
});
7890

79-
const transformersFromConfig = loadTransformersFromOptions(program);
91+
const transformersFromConfig = loadTransformersFromOptions(program, diagnostics);
8092
return {
8193
afterDeclarations: [
8294
...(transformersFromConfig.afterDeclarations || []),
@@ -181,7 +193,12 @@ export function transpile({
181193
}
182194
};
183195

184-
const transformers = getCustomTransformers(program, customTransformers, processSourceFile);
196+
const transformers = getCustomTransformers(
197+
program,
198+
diagnostics,
199+
customTransformers,
200+
processSourceFile
201+
);
185202

186203
const writeFile: ts.WriteFileCallback = (fileName, data, _bom, _onError, sourceFiles = []) => {
187204
for (const sourceFile of sourceFiles) {

src/diagnostics.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,16 @@ export const toLoadTransformerItShouldBeTranspiled = (transform: string): ts.Dia
3333
messageText: `To load "${transform}" transformer it should be transpiled or "ts-node" should be installed`,
3434
});
3535

36+
export const couldNotResolveTransformerFrom = (transform: string, base: string): ts.Diagnostic => ({
37+
file: undefined,
38+
start: undefined,
39+
length: undefined,
40+
category: ts.DiagnosticCategory.Error,
41+
code: 0,
42+
source: "typescript-to-lua",
43+
messageText: `Could not resolve "${transform}" transformer from "${base}".`,
44+
});
45+
3646
export const transformerShouldHaveADefaultExport = (transform: string): ts.Diagnostic => ({
3747
file: undefined,
3848
start: undefined,

test/unit/transformers.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,10 @@ test("should pass extra options to transformers", () => {
3434

3535
expect(util.transpileAndExecute("return", options)).toBe(value);
3636
});
37+
38+
test("should error if transformer could not be resolved", () => {
39+
const transform = path.join(__dirname, "transformers/error.ts");
40+
const options: tstl.CompilerOptions = { tsTransformers: [{ transform }] };
41+
const { diagnostics } = util.transpileStringResult("", options);
42+
expect(diagnostics).toHaveDiagnostics();
43+
});

0 commit comments

Comments
 (0)