Skip to content

Commit 3185381

Browse files
committed
Added flag internalNodeBuilderFlags
1 parent 5854210 commit 3185381

File tree

134 files changed

+2100
-1714
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

134 files changed

+2100
-1714
lines changed

src/compiler/checker.ts

+80-64
Large diffs are not rendered by default.

src/compiler/transformers/declarations.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ import {
8787
ImportTypeNode,
8888
IndexSignatureDeclaration,
8989
InterfaceDeclaration,
90+
InternalNodeBuilderFlags,
9091
isAmbientModule,
9192
isArray,
9293
isArrayBindingElement,
@@ -239,10 +240,11 @@ const declarationEmitNodeBuilderFlags = NodeBuilderFlags.MultilineObjectLiterals
239240
NodeBuilderFlags.UseTypeOfFunction |
240241
NodeBuilderFlags.UseStructuralFallback |
241242
NodeBuilderFlags.AllowEmptyTuple |
242-
NodeBuilderFlags.AllowUnresolvedNames |
243243
NodeBuilderFlags.GenerateNamesForShadowedTypeParams |
244244
NodeBuilderFlags.NoTruncation;
245245

246+
const declarationEmitInternalNodeBuilderFlags = InternalNodeBuilderFlags.AllowUnresolvedNames;
247+
246248
/**
247249
* Transforms a ts file into a .d.ts file
248250
* This process requires type information, which is retrieved through the emit resolver. Because of this,
@@ -429,7 +431,7 @@ export function transformDeclarations(context: TransformationContext) {
429431
: Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit,
430432
errorNode: s.errorNode || sourceFile,
431433
}));
432-
const result = resolver.getDeclarationStatementsForSourceFile(sourceFile, declarationEmitNodeBuilderFlags, symbolTracker);
434+
const result = resolver.getDeclarationStatementsForSourceFile(sourceFile, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker);
433435
getSymbolAccessibilityDiagnostic = oldDiag;
434436
return result;
435437
}
@@ -696,15 +698,15 @@ export function transformDeclarations(context: TransformationContext) {
696698
case SyntaxKind.PropertyDeclaration:
697699
case SyntaxKind.BindingElement:
698700
case SyntaxKind.VariableDeclaration:
699-
typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker);
701+
typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker);
700702
break;
701703
case SyntaxKind.FunctionDeclaration:
702704
case SyntaxKind.ConstructSignature:
703705
case SyntaxKind.MethodSignature:
704706
case SyntaxKind.MethodDeclaration:
705707
case SyntaxKind.GetAccessor:
706708
case SyntaxKind.CallSignature:
707-
typeNode = resolver.createReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, symbolTracker);
709+
typeNode = resolver.createReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker);
708710
break;
709711
default:
710712
Debug.assertNever(node);
@@ -1329,7 +1331,7 @@ export function transformDeclarations(context: TransformationContext) {
13291331
errorNode: input,
13301332
});
13311333
errorFallbackNode = input;
1332-
const varDecl = factory.createVariableDeclaration(newId, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
1334+
const varDecl = factory.createVariableDeclaration(newId, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(input.expression, input, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
13331335
errorFallbackNode = undefined;
13341336
const statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(SyntaxKind.DeclareKeyword)] : [], factory.createVariableDeclarationList([varDecl], NodeFlags.Const));
13351337

@@ -1471,7 +1473,7 @@ export function transformDeclarations(context: TransformationContext) {
14711473
return undefined; // unique symbol or non-identifier name - omit, since there's no syntax that can preserve it
14721474
}
14731475
getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(p.valueDeclaration);
1474-
const type = resolver.createTypeOfDeclaration(p.valueDeclaration, fakespace, declarationEmitNodeBuilderFlags | NodeBuilderFlags.NoSyntacticPrinter, symbolTracker);
1476+
const type = resolver.createTypeOfDeclaration(p.valueDeclaration, fakespace, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags | InternalNodeBuilderFlags.NoSyntacticPrinter, symbolTracker);
14751477
getSymbolAccessibilityDiagnostic = oldDiag;
14761478
const isNonContextualKeywordName = isStringANonContextualKeyword(nameStr);
14771479
const name = isNonContextualKeywordName ? factory.getGeneratedNameForNode(p.valueDeclaration) : factory.createIdentifier(nameStr);
@@ -1666,7 +1668,7 @@ export function transformDeclarations(context: TransformationContext) {
16661668
errorNode: extendsClause,
16671669
typeName: input.name,
16681670
});
1669-
const varDecl = factory.createVariableDeclaration(newId, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(extendsClause.expression, input, declarationEmitNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
1671+
const varDecl = factory.createVariableDeclaration(newId, /*exclamationToken*/ undefined, resolver.createTypeOfExpression(extendsClause.expression, input, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker), /*initializer*/ undefined);
16701672
const statement = factory.createVariableStatement(needsDeclare ? [factory.createModifier(SyntaxKind.DeclareKeyword)] : [], factory.createVariableDeclarationList([varDecl], NodeFlags.Const));
16711673
const heritageClauses = factory.createNodeArray(map(input.heritageClauses, clause => {
16721674
if (clause.token === SyntaxKind.ExtendsKeyword) {

src/compiler/types.ts

+20-13
Original file line numberDiff line numberDiff line change
@@ -5073,14 +5073,14 @@ export interface TypeChecker {
50735073
// TODO: GH#18217 `xToDeclaration` calls are frequently asserted as defined.
50745074
/** Note that the resulting nodes cannot be checked. */
50755075
typeToTypeNode(type: Type, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): TypeNode | undefined;
5076-
/** @internal */ typeToTypeNode(type: Type, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, tracker?: SymbolTracker): TypeNode | undefined; // eslint-disable-line @typescript-eslint/unified-signatures
5077-
/** @internal */ typePredicateToTypePredicateNode(typePredicate: TypePredicate, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, tracker?: SymbolTracker): TypePredicateNode | undefined;
5076+
/** @internal */ typeToTypeNode(type: Type, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, internalFlags?: InternalNodeBuilderFlags | undefined, tracker?: SymbolTracker): TypeNode | undefined; // eslint-disable-line @typescript-eslint/unified-signatures
5077+
/** @internal */ typePredicateToTypePredicateNode(typePredicate: TypePredicate, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, internalFlags?: InternalNodeBuilderFlags | undefined, tracker?: SymbolTracker): TypePredicateNode | undefined;
50785078
/** Note that the resulting nodes cannot be checked. */
50795079
signatureToSignatureDeclaration(signature: Signature, kind: SyntaxKind, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): SignatureDeclaration & { typeArguments?: NodeArray<TypeNode>; } | undefined;
5080-
/** @internal */ signatureToSignatureDeclaration(signature: Signature, kind: SyntaxKind, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, tracker?: SymbolTracker): SignatureDeclaration & { typeArguments?: NodeArray<TypeNode>; } | undefined; // eslint-disable-line @typescript-eslint/unified-signatures
5080+
/** @internal */ signatureToSignatureDeclaration(signature: Signature, kind: SyntaxKind, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, internalFlags?: InternalNodeBuilderFlags | undefined, tracker?: SymbolTracker): SignatureDeclaration & { typeArguments?: NodeArray<TypeNode>; } | undefined; // eslint-disable-line @typescript-eslint/unified-signatures
50815081
/** Note that the resulting nodes cannot be checked. */
50825082
indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): IndexSignatureDeclaration | undefined;
5083-
/** @internal */ indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, tracker?: SymbolTracker): IndexSignatureDeclaration | undefined; // eslint-disable-line @typescript-eslint/unified-signatures
5083+
/** @internal */ indexInfoToIndexSignatureDeclaration(indexInfo: IndexInfo, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, internalFlags?: InternalNodeBuilderFlags | undefined, tracker?: SymbolTracker): IndexSignatureDeclaration | undefined; // eslint-disable-line @typescript-eslint/unified-signatures
50845084
/** Note that the resulting nodes cannot be checked. */
50855085
symbolToEntityName(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): EntityName | undefined;
50865086
/** Note that the resulting nodes cannot be checked. */
@@ -5090,7 +5090,7 @@ export interface TypeChecker {
50905090
*
50915091
* @internal
50925092
*/
5093-
symbolToNode(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): Node | undefined;
5093+
symbolToNode(symbol: Symbol, meaning: SymbolFlags, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined, internalFlags: InternalNodeBuilderFlags | undefined): Node | undefined;
50945094
/** Note that the resulting nodes cannot be checked. */
50955095
symbolToTypeParameterDeclarations(symbol: Symbol, enclosingDeclaration: Node | undefined, flags: NodeBuilderFlags | undefined): NodeArray<TypeParameterDeclaration> | undefined;
50965096
/** Note that the resulting nodes cannot be checked. */
@@ -5459,12 +5459,9 @@ export const enum NodeBuilderFlags {
54595459
AllowEmptyTuple = 1 << 19,
54605460
AllowUniqueESSymbolType = 1 << 20,
54615461
AllowEmptyIndexInfoType = 1 << 21,
5462-
/** @internal */ WriteComputedProps = 1 << 30, // { [E.A]: 1 }
5463-
/** @internal */ NoSyntacticPrinter = 1 << 31,
54645462
// Errors (cont.)
54655463
AllowNodeModulesRelativePaths = 1 << 26,
5466-
/** @internal */ DoNotIncludeSymbolChain = 1 << 27, // Skip looking up and printing an accessible symbol chain
5467-
/** @internal */ AllowUnresolvedNames = 1 << 32,
5464+
54685465

54695466
IgnoreErrors = AllowThisInObjectLiteral | AllowQualifiedNameInPlaceOfIdentifier | AllowAnonymousIdentifier | AllowEmptyUnionOrIntersection | AllowEmptyTuple | AllowEmptyIndexInfoType | AllowNodeModulesRelativePaths,
54705467

@@ -5474,6 +5471,16 @@ export const enum NodeBuilderFlags {
54745471
InInitialEntityName = 1 << 24, // Set when writing the LHS of an entity name or entity name expression
54755472
}
54765473

5474+
/** @internal */
5475+
// dprint-ignore
5476+
export const enum InternalNodeBuilderFlags {
5477+
None = 0,
5478+
WriteComputedProps = 1 << 0, // { [E.A]: 1 }
5479+
NoSyntacticPrinter = 1 << 1,
5480+
DoNotIncludeSymbolChain = 1 << 2, // Skip looking up and printing an accessible symbol chain
5481+
AllowUnresolvedNames = 1 << 3,
5482+
}
5483+
54775484
// Ensure the shared flags between this and `NodeBuilderFlags` stay in alignment
54785485
// dprint-ignore
54795486
export const enum TypeFormatFlags {
@@ -5810,9 +5817,9 @@ export interface EmitResolver {
58105817
requiresAddingImplicitUndefined(node: ParameterDeclaration): boolean;
58115818
isExpandoFunctionDeclaration(node: FunctionDeclaration | VariableDeclaration): boolean;
58125819
getPropertiesOfContainerFunction(node: Declaration): Symbol[];
5813-
createTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration | PropertyAccessExpression | ElementAccessExpression | BinaryExpression, enclosingDeclaration: Node, flags: NodeBuilderFlags, tracker: SymbolTracker): TypeNode | undefined;
5814-
createReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: NodeBuilderFlags, tracker: SymbolTracker): TypeNode | undefined;
5815-
createTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: NodeBuilderFlags, tracker: SymbolTracker): TypeNode | undefined;
5820+
createTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration | PropertyAccessExpression | ElementAccessExpression | BinaryExpression, enclosingDeclaration: Node, flags: NodeBuilderFlags, internalFlags: InternalNodeBuilderFlags, tracker: SymbolTracker): TypeNode | undefined;
5821+
createReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: NodeBuilderFlags, internalFlags: InternalNodeBuilderFlags, tracker: SymbolTracker): TypeNode | undefined;
5822+
createTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: NodeBuilderFlags, internalFlags: InternalNodeBuilderFlags, tracker: SymbolTracker): TypeNode | undefined;
58165823
createLiteralConstValue(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration, tracker: SymbolTracker): Expression;
58175824
isSymbolAccessible(symbol: Symbol, enclosingDeclaration: Node | undefined, meaning: SymbolFlags | undefined, shouldComputeAliasToMarkVisible: boolean): SymbolAccessibilityResult;
58185825
isEntityNameVisible(entityName: EntityNameOrEntityNameExpression, enclosingDeclaration: Node): SymbolVisibilityResult;
@@ -5829,7 +5836,7 @@ export interface EmitResolver {
58295836
getJsxFactoryEntity(location?: Node): EntityName | undefined;
58305837
getJsxFragmentFactoryEntity(location?: Node): EntityName | undefined;
58315838
isBindingCapturedByNode(node: Node, decl: VariableDeclaration | BindingElement): boolean;
5832-
getDeclarationStatementsForSourceFile(node: SourceFile, flags: NodeBuilderFlags, tracker: SymbolTracker): Statement[] | undefined;
5839+
getDeclarationStatementsForSourceFile(node: SourceFile, flags: NodeBuilderFlags, internalFlags: InternalNodeBuilderFlags, tracker: SymbolTracker): Statement[] | undefined;
58335840
isImportRequiredByAugmentation(decl: ImportDeclaration): boolean;
58345841
isDefinitelyReferenceToGlobalSymbolObject(node: Node): boolean;
58355842
}

src/services/codefixes/fixAddMissingConstraint.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ function addMissingConstraint(changes: textChanges.ChangeTracker, program: Progr
123123
const scriptTarget = getEmitScriptTarget(program.getCompilerOptions());
124124
const tracker = getNoopSymbolTrackerWithResolver({ program, host });
125125
const importAdder = createImportAdder(sourceFile, program, preferences, host);
126-
const typeNode = typeToAutoImportableTypeNode(checker, importAdder, constraint, /*contextNode*/ undefined, scriptTarget, /*flags*/ undefined, tracker);
126+
const typeNode = typeToAutoImportableTypeNode(checker, importAdder, constraint, /*contextNode*/ undefined, scriptTarget, /*flags*/ undefined, /*internalFlags*/ undefined, tracker);
127127
if (typeNode) {
128128
changes.replaceNode(sourceFile, declaration, factory.updateTypeParameterDeclaration(declaration, /*modifiers*/ undefined, declaration.name, typeNode, declaration.default));
129129
importAdder.writeFixes(changes);

src/services/codefixes/fixAddMissingMember.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import {
5555
Identifier,
5656
idText,
5757
InterfaceDeclaration,
58+
InternalNodeBuilderFlags,
5859
isCallExpression,
5960
isClassLike,
6061
isComputedPropertyName,
@@ -775,7 +776,7 @@ function tryGetContainingMethodDeclaration(node: ClassLikeDeclaration | Interfac
775776

776777
function createPropertyNameFromSymbol(symbol: Symbol, target: ScriptTarget, quotePreference: QuotePreference, checker: TypeChecker) {
777778
if (isTransientSymbol(symbol)) {
778-
const prop = checker.symbolToNode(symbol, SymbolFlags.Value, /*enclosingDeclaration*/ undefined, NodeBuilderFlags.WriteComputedProps);
779+
const prop = checker.symbolToNode(symbol, SymbolFlags.Value, /*enclosingDeclaration*/ undefined, /*flags*/ undefined, InternalNodeBuilderFlags.WriteComputedProps);
779780
if (prop && isComputedPropertyName(prop)) return prop;
780781
}
781782
// We're using these nodes as property names in an object literal; no need to quote names when not needed.

src/services/codefixes/fixClassIncorrectlyImplementsInterface.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ function addMissingDeclarations(
108108
function createMissingIndexSignatureDeclaration(type: InterfaceType, kind: IndexKind): void {
109109
const indexInfoOfKind = checker.getIndexInfoOfType(type, kind);
110110
if (indexInfoOfKind) {
111-
insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, classDeclaration, /*flags*/ undefined, getNoopSymbolTrackerWithResolver(context))!);
111+
insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration(indexInfoOfKind, classDeclaration, /*flags*/ undefined, /*internalFlags*/ undefined, getNoopSymbolTrackerWithResolver(context))!);
112112
}
113113
}
114114

src/services/codefixes/fixMissingTypeAnnotationOnExports.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import {
3636
hasInitializer,
3737
hasSyntacticModifier,
3838
Identifier,
39+
InternalNodeBuilderFlags,
3940
isArrayBindingPattern,
4041
isArrayLiteralExpression,
4142
isAssertionExpression,
@@ -160,8 +161,9 @@ const declarationEmitNodeBuilderFlags = NodeBuilderFlags.MultilineObjectLiterals
160161
| NodeBuilderFlags.UseStructuralFallback
161162
| NodeBuilderFlags.AllowEmptyTuple
162163
| NodeBuilderFlags.GenerateNamesForShadowedTypeParams
163-
| NodeBuilderFlags.NoTruncation
164-
| NodeBuilderFlags.WriteComputedProps;
164+
| NodeBuilderFlags.NoTruncation;
165+
166+
const declarationEmitInternalNodeBuilderFlags = InternalNodeBuilderFlags.WriteComputedProps;
165167

166168
enum TypePrintMode {
167169
// Prints its fully spelled out type
@@ -1096,7 +1098,7 @@ function withContext<T>(
10961098

10971099
function typeToTypeNode(type: Type, enclosingDeclaration: Node, flags = NodeBuilderFlags.None) {
10981100
let isTruncated = false;
1099-
const result = typeToAutoImportableTypeNode(typeChecker, importAdder, type, enclosingDeclaration, scriptTarget, declarationEmitNodeBuilderFlags | flags, {
1101+
const result = typeToAutoImportableTypeNode(typeChecker, importAdder, type, enclosingDeclaration, scriptTarget, declarationEmitNodeBuilderFlags | flags, declarationEmitInternalNodeBuilderFlags, {
11001102
moduleResolverHost: program,
11011103
trackSymbol() {
11021104
return true;
@@ -1110,7 +1112,7 @@ function withContext<T>(
11101112

11111113
function typePredicateToTypeNode(typePredicate: TypePredicate, enclosingDeclaration: Node, flags = NodeBuilderFlags.None): TypeNode | undefined {
11121114
let isTruncated = false;
1113-
const result = typePredicateToAutoImportableTypeNode(typeChecker, importAdder, typePredicate, enclosingDeclaration, scriptTarget, declarationEmitNodeBuilderFlags | flags, {
1115+
const result = typePredicateToAutoImportableTypeNode(typeChecker, importAdder, typePredicate, enclosingDeclaration, scriptTarget, declarationEmitNodeBuilderFlags | flags, declarationEmitInternalNodeBuilderFlags, {
11141116
moduleResolverHost: program,
11151117
trackSymbol() {
11161118
return true;

0 commit comments

Comments
 (0)