8000 Added short circuit option via tsconfig.json, TODO: documentation + u… · SebastienGllmt/typescript-is@68d35da · GitHub
[go: up one dir, main page]

Skip to content 8000

Commit 68d35da

Browse files
committed
Added short circuit option via tsconfig.json, TODO: documentation + unit test (how to?)
1 parent 8112501 commit 68d35da

File tree

7 files changed

+22
-8
lines changed

7 files changed

+22
-8
lines changed

debug/debug.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const program = ts.createProgram([inFile], configParseResult.options);
2525
const visitorContext: PartialVisitorContext = {
2626
checker: program.getTypeChecker(),
2727
program,
28+
options: {},
2829
typeMapperStack: [],
2930
// mode: { type: 'type-check' },
3031
// pathStack: ['$'],

src/transform-inline/transform-node.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
11
import * as path from 'path';
22
import * as ts from 'typescript';
33
import { VisitorContext, PartialVisitorContext } from './visitor-context';
4-
import { visitType, visitUndefinedOrType } from './visitor-type-check';
4+
import { visitType, visitUndefinedOrType, visitShortCircuit } from './visitor-type-check';
55
import { sliceMapValues } from './utils';
66

77
const objectIdentifier = ts.createIdentifier('object');
88
const pathIdentifier = ts.createIdentifier('path');
99

10-
function createArrowFunction(type: ts.Type, optional: boolean, visitorContext: PartialVisitorContext, isAssert: boolean) {
10+
function createArrowFunction(type: ts.Type, optional: boolean, partialVisitorContext: PartialVisitorContext, isAssert: boolean) {
1111
const functionMap: VisitorContext['functionMap'] = new Map();
1212
const functionNames: VisitorContext['functionNames'] = new Set();
13-
const functionName = optional
14-
? visitUndefinedOrType(type, { ...visitorContext, functionNames, functionMap })
15-
: visitType(type, { ...visitorContext, functionNames, functionMap });
13+
const visitorContext = { ...partialVisitorContext, functionNames, functionMap };
14+
const functionName = partialVisitorContext.options.shortCircuit
15+
? visitShortCircuit(visitorContext)
16+
: (optional
17+
? visitUndefinedOrType(type, visitorContext)
18+
: visitType(type, visitorContext)
19+
);
1620

1721
const errorIdentifier = ts.createIdentifier('error');
1822
const declarations = sliceMapValues(functionMap);

src/transform-inline/transformer.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ import { PartialVisitorContext } from './visitor-context';
44
import { transformNode } from './transform-node';
55

66
export default function transformer(program: ts.Program, options?: { [Key: string]: unknown }): ts.TransformerFactory<ts.SourceFile> {
7-
if (options && typeof options === 'object' && options !== null && options.verbose) {
7+
if (options && options.verbose) {
88
console.log(`typescript-is: transforming program with ${program.getSourceFiles().length} source files; using TypeScript ${ts.version}.`);
99
}
1010

1111
const visitorContext: PartialVisitorContext = {
1212
program,
1313
checker: program.getTypeChecker(),
14+
options: options || {},
1415
typeMapperStack: [],
1516
previousTypeReference: null
1617
};

src/transform-inline/visitor-context.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export interface VisitorContext extends PartialVisitorContext {
88
export interface PartialVisitorContext {
99
program: ts.Program;
1010
checker: ts.TypeChecker;
11+
options: { [Key: string]: unknown };
1112
typeMapperStack: Map<ts.Type, ts.Type>[];
1213
previousTypeReference: ts.Type | null;
1314
}

src/transform-inline/visitor-type-check.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,3 +701,9 @@ export function visitUndefinedOrType(type: ts.Type, visitorContext: VisitorConte
701701
);
702702
});
703703
}
704+
705+
export function visitShortCircuit(visitorContext: VisitorContext) {
706+
return VisitorUtils.setFunctionIfNotExists('shortCircuit', visitorContext, () => {
707+
return VisitorUtils.createAcceptingFunction('shortCircuit');
708+
});
709+
}

test/issue-3.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ ts.createProgram([inFile], configParseResult.options);
2727
const visitorContext: PartialVisitorContext = {
2828
checker: program.getTypeChecker(),
2929
program,
30+
options: {},
3031
typeMapperStack: [],
3132
previousTypeReference: null
3233
};

tsconfig-test.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
"declaration": false,
1414
"plugins": [
1515
{
16-
"transform": "./src/transform-inline/transformer.ts",
16+
"transform": "./src/transform-inline/transformer.ts"
1717
}
1818
]
1919
},
2020
"include": [
2121
"test"
2222
]
23-
}
23+
}

0 commit comments

Comments
 (0)
0