Skip to content

Commit 6646695

Browse files
committed
Throw an error if a helper is unknown
1 parent a108957 commit 6646695

File tree

3 files changed

+12
-14
lines changed

3 files changed

+12
-14
lines changed

src/transformation/utils/diagnostics.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,6 @@ export const unsupportedVarDeclaration = createDiagnosticFactory(
127127
"`var` declarations are not supported. Use `let` or `const` instead."
128128
);
129129

130-
export const unknownHelperKind = createDiagnosticFactory((kind: string) => `Unknown helper kind "${kind}".`);
131-
132130
export const invalidMultiFunctionUse = createDiagnosticFactory(
133131
"The $multi function must be called in return statements."
134132
);
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import * as ts from "typescript";
22
import * as path from "path";
3-
import { TransformationContext } from "../context";
4-
import { unknownHelperKind } from "./diagnostics";
53

64
export enum HelperKind {
7-
Multi = "multi",
5+
MultiFunction = "MultiFunction",
6+
MultiReturnFunction = "MultiReturnFunction",
87
}
98

109
function isSourceFileFromHelpers(sourceFile: ts.SourceFile): boolean {
@@ -13,14 +12,15 @@ function isSourceFileFromHelpers(sourceFile: ts.SourceFile): boolean {
1312
return helperDirectory === sourceFileDirectory;
1413
}
1514

16-
export function getHelperFileKind(context: TransformationContext, sourceFile: ts.SourceFile): HelperKind | undefined {
15+
export function getHelperFileKind(declaration: ts.Declaration): HelperKind | undefined {
16+
const sourceFile = declaration.getSourceFile();
1717
if (isSourceFileFromHelpers(sourceFile)) {
1818
const baseFileName = path.basename(sourceFile.fileName).replace(/(\.d)?\.ts$/g, "");
1919
switch (baseFileName) {
2020
case "multi":
21-
return HelperKind.Multi;
21+
return HelperKind.MultiReturnFunction;
2222
default:
23-
context.diagnostics.push(unknownHelperKind(sourceFile, baseFileName));
23+
throw new Error("Unknown helper");
2424
}
2525
}
2626
}

src/transformation/visitors/helpers/multi.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ import {
1818
invalidMultiFunctionUse,
1919
} from "../../../transformation/utils/diagnostics";
2020

21-
const isMultiHelperDeclaration = (context: TransformationContext) => (declaration: ts.Declaration): boolean =>
22-
helpers.getHelperFileKind(context, declaration.getSourceFile()) === helpers.HelperKind.Multi;
21+
const isMultiHelperDeclaration = (declaration: ts.Declaration): boolean =>
22+
helpers.getHelperFileKind(declaration) === helpers.HelperKind.MultiFunction;
2323

2424
function isMultiHelperCallSignature(context: TransformationContext, expression: ts.CallExpression): boolean {
2525
const type = context.checker.getTypeAtLocation(expression.expression);
26-
return type.symbol?.declarations?.some(isMultiHelperDeclaration(context)) ?? false;
26+
return type.symbol?.declarations?.some(isMultiHelperDeclaration) ?? false;
2727
}
2828

2929
export function isMultiReturnCall(context: TransformationContext, node: ts.Node): node is ts.CallExpression {
@@ -32,12 +32,12 @@ export function isMultiReturnCall(context: TransformationContext, node: ts.Node)
3232
}
3333

3434
const signature = context.checker.getResolvedSignature(node);
35-
return signature?.getReturnType().aliasSymbol?.declarations?.some(isMultiHelperDeclaration(context)) ?? false;
35+
return signature?.getReturnType().aliasSymbol?.declarations?.some(isMultiHelperDeclaration) ?? false;
3636
}
3737

3838
export function isMultiHelperNode(context: TransformationContext, node: ts.Node): boolean {
3939
const type = context.checker.getTypeAtLocation(node);
40-
return type.symbol?.declarations?.some(isMultiHelperDeclaration(context)) ?? false;
40+
return type.symbol?.declarations?.some(isMultiHelperDeclaration) ?? false;
4141
}
4242

4343
export function transformMultiHelperReturnStatement(
@@ -158,7 +158,7 @@ export function findMultiHelperAssignmentViolations(
158158
const valueSymbol = context.checker.getShorthandAssignmentValueSymbol(element);
159159
if (valueSymbol) {
160160
const declaration = valueSymbol.valueDeclaration;
161-
if (declaration && isMultiHelperDeclaration(context)(declaration)) {
161+
if (declaration && isMultiHelperDeclaration(declaration)) {
162162
context.diagnostics.push(invalidMultiFunctionUse(element));
163163
return element;
164164
}

0 commit comments

Comments
 (0)