Skip to content

Commit 662ca71

Browse files
author
Andy
authored
Add 'withContext' helper in createNodeBuilder (#24994)
1 parent e3e4c5d commit 662ca71

File tree

1 file changed

+21
-58
lines changed

1 file changed

+21
-58
lines changed

src/compiler/checker.ts

Lines changed: 21 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3052,73 +3052,36 @@ namespace ts {
30523052

30533053
function createNodeBuilder() {
30543054
return {
3055-
typeToTypeNode: (type: Type, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => {
3056-
Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & NodeFlags.Synthesized) === 0);
3057-
const context = createNodeBuilderContext(enclosingDeclaration, flags, tracker);
3058-
const resultingNode = typeToTypeNodeHelper(type, context);
3059-
const result = context.encounteredError ? undefined : resultingNode;
3060-
return result;
3061-
},
3062-
indexInfoToIndexSignatureDeclaration: (indexInfo: IndexInfo, kind: IndexKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => {
3063-
Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & NodeFlags.Synthesized) === 0);
3064-
const context = createNodeBuilderContext(enclosingDeclaration, flags, tracker);
3065-
const resultingNode = indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context);
3066-
const result = context.encounteredError ? undefined : resultingNode;
3067-
return result!; // TODO: GH#18217
3068-
},
3069-
signatureToSignatureDeclaration: (signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => {
3070-
Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & NodeFlags.Synthesized) === 0);
3071-
const context = createNodeBuilderContext(enclosingDeclaration, flags, tracker);
3072-
const resultingNode = signatureToSignatureDeclarationHelper(signature, kind, context);
3073-
const result = context.encounteredError ? undefined : resultingNode;
3074-
return result;
3075-
},
3076-
symbolToEntityName: (symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => {
3077-
Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & NodeFlags.Synthesized) === 0);
3078-
const context = createNodeBuilderContext(enclosingDeclaration, flags, tracker);
3079-
const resultingNode = symbolToName(symbol, context, meaning, /*expectsIdentifier*/ false);
3080-
const result = context.encounteredError ? undefined : resultingNode;
3081-
return result;
3082-
},
3083-
symbolToExpression: (symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => {
3084-
Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & NodeFlags.Synthesized) === 0);
3085-
const context = createNodeBuilderContext(enclosingDeclaration, flags, tracker);
3086-
const resultingNode = symbolToExpression(symbol, context, meaning);
3087-
const result = context.encounteredError ? undefined : resultingNode;
3088-
return result;
3089-
},
3090-
symbolToTypeParameterDeclarations: (symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => {
3091-
Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & NodeFlags.Synthesized) === 0);
3092-
const context = createNodeBuilderContext(enclosingDeclaration, flags, tracker);
3093-
const resultingNode = typeParametersToTypeParameterDeclarations(symbol, context);
3094-
const result = context.encounteredError ? undefined : resultingNode;
3095-
return result;
3096-
},
3097-
symbolToParameterDeclaration: (symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => {
3098-
Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & NodeFlags.Synthesized) === 0);
3099-
const context = createNodeBuilderContext(enclosingDeclaration, flags, tracker);
3100-
const resultingNode = symbolToParameterDeclaration(symbol, context);
3101-
const result = context.encounteredError ? undefined : resultingNode;
3102-
return result;
3103-
},
3104-
typeParameterToDeclaration: (parameter: TypeParameter, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) => {
3105-
Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & NodeFlags.Synthesized) === 0);
3106-
const context = createNodeBuilderContext(enclosingDeclaration, flags, tracker);
3107-
const resultingNode = typeParameterToDeclaration(parameter, context);
3108-
const result = context.encounteredError ? undefined : resultingNode;
3109-
return result;
3110-
},
3055+
typeToTypeNode: (type: Type, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) =>
3056+
withContext(enclosingDeclaration, flags, tracker, context => typeToTypeNodeHelper(type, context)),
3057+
indexInfoToIndexSignatureDeclaration: (indexInfo: IndexInfo, kind: IndexKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) =>
3058+
withContext(enclosingDeclaration, flags, tracker, context => indexInfoToIndexSignatureDeclarationHelper(indexInfo, kind, context))!, // TODO: GH#18217
3059+
signatureToSignatureDeclaration: (signature: Signature, kind: SyntaxKind, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) =>
3060+
withContext(enclosingDeclaration, flags, tracker, context => signatureToSignatureDeclarationHelper(signature, kind, context)),
3061+
symbolToEntityName: (symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) =>
3062+
withContext(enclosingDeclaration, flags, tracker, context => symbolToName(symbol, context, meaning, /*expectsIdentifier*/ false)),
3063+
symbolToExpression: (symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) =>
3064+
withContext(enclosingDeclaration, flags, tracker, context => symbolToExpression(symbol, context, meaning)),
3065+
symbolToTypeParameterDeclarations: (symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) =>
3066+
withContext(enclosingDeclaration, flags, tracker, context => typeParametersToTypeParameterDeclarations(symbol, context)),
3067+
symbolToParameterDeclaration: (symbol: Symbol, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) =>
3068+
withContext(enclosingDeclaration, flags, tracker, context => symbolToParameterDeclaration(symbol, context)),
3069+
typeParameterToDeclaration: (parameter: TypeParameter, enclosingDeclaration?: Node, flags?: NodeBuilderFlags, tracker?: SymbolTracker) =>
3070+
withContext(enclosingDeclaration, flags, tracker, context => typeParameterToDeclaration(parameter, context)),
31113071
};
31123072

3113-
function createNodeBuilderContext(enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, tracker: SymbolTracker | undefined): NodeBuilderContext {
3114-
return {
3073+
function withContext<T>(enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, tracker: SymbolTracker | undefined, cb: (context: NodeBuilderContext) => T): T | undefined {
3074+
Debug.assert(enclosingDeclaration === undefined || (enclosingDeclaration.flags & NodeFlags.Synthesized) === 0);
3075+
const context: NodeBuilderContext = {
31153076
enclosingDeclaration,
31163077
flags: flags || NodeBuilderFlags.None,
31173078
tracker: tracker && tracker.trackSymbol ? tracker : { trackSymbol: noop },
31183079
encounteredError: false,
31193080
visitedSymbols: undefined,
31203081
inferTypeParameters: undefined
31213082
};
3083+
const resultingNode = cb(context);
3084+
return context.encounteredError ? undefined : resultingNode;
31223085
}
31233086

31243087
function typeToTypeNodeHelper(type: Type, context: NodeBuilderContext): TypeNode {

0 commit comments

Comments
 (0)