Skip to content

Commit efe502e

Browse files
committed
Address PR comments
1 parent bdb90de commit efe502e

File tree

3 files changed

+14
-38
lines changed

3 files changed

+14
-38
lines changed

src/compiler/checker.ts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22641,16 +22641,6 @@ namespace ts {
2264122641
getSymbolDisplayBuilder().buildTypeDisplay(type, writer, enclosingDeclaration, flags);
2264222642
}
2264322643

22644-
function writeBaseConstructorTypeOfClass(node: ClassLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter) {
22645-
const classType = <InterfaceType>getDeclaredTypeOfSymbol(getSymbolOfNode(node));
22646-
resolveBaseTypesOfClass(classType);
22647-
const baseType = classType.resolvedBaseTypes.length ? classType.resolvedBaseTypes[0] : unknownType;
22648-
if (!baseType.symbol && !(baseType.flags & TypeFlags.Intersection)) {
22649-
writer.reportIllegalExtends();
22650-
}
22651-
getSymbolDisplayBuilder().buildTypeDisplay(baseType, writer, enclosingDeclaration, flags);
22652-
}
22653-
2265422644
function hasGlobalName(name: string): boolean {
2265522645
return globals.has(name);
2265622646
}
@@ -22744,7 +22734,6 @@ namespace ts {
2274422734
writeTypeOfDeclaration,
2274522735
writeReturnTypeOfSignatureDeclaration,
2274622736
writeTypeOfExpression,
22747-
writeBaseConstructorTypeOfClass,
2274822737
isSymbolAccessible,
2274922738
isEntityNameVisible,
2275022739
getConstantValue: node => {

src/compiler/declarationEmitter.ts

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ namespace ts {
617617
if (!noDeclare) {
618618
write("declare ");
619619
}
620-
write("var ");
620+
write("const ");
621621
write(tempVarName);
622622
write(": ");
623623
writer.getSymbolAccessibilityDiagnostic = () => diagnostic;
@@ -1096,7 +1096,7 @@ namespace ts {
10961096
}
10971097
}
10981098

1099-
function emitHeritageClause(className: Identifier, typeReferences: ExpressionWithTypeArguments[], isImplementsList: boolean) {
1099+
function emitHeritageClause(typeReferences: ExpressionWithTypeArguments[], isImplementsList: boolean) {
11001100
if (typeReferences) {
11011101
write(isImplementsList ? " implements " : " extends ");
11021102
emitCommaList(typeReferences, emitTypeOfTypeReference);
@@ -1109,16 +1109,6 @@ namespace ts {
11091109
else if (!isImplementsList && node.expression.kind === SyntaxKind.NullKeyword) {
11101110
write("null");
11111111
}
1112-
else {
1113-
writer.getSymbolAccessibilityDiagnostic = getHeritageClauseVisibilityError;
1114-
errorNameNode = className;
1115-
resolver.writeBaseConstructorTypeOfClass(
1116-
enclosingDeclaration as ClassLikeDeclaration,
1117-
enclosingDeclaration,
1118-
TypeFormatFlags.UseTypeOfFunction | TypeFormatFlags.UseTypeAliasValue,
1119-
writer);
1120-
errorNameNode = undefined;
1121-
}
11221112

11231113
function getHeritageClauseVisibilityError(): SymbolAccessibilityDiagnostic {
11241114
let diagnosticMessage: DiagnosticMessage;
@@ -1158,12 +1148,14 @@ namespace ts {
11581148
enclosingDeclaration = node;
11591149
const baseTypeNode = getClassExtendsHeritageClauseElement(node);
11601150
let tempVarName: string;
1161-
if (isNonNullExpression(baseTypeNode)) {
1162-
tempVarName = emitTempVariableDeclaration(baseTypeNode.expression, `_${node.name.text}_intersection_base`, {
1163-
diagnosticMessage: Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1,
1164-
errorNode: baseTypeNode,
1165-
typeName: node.name
1166-
});
1151+
if (baseTypeNode && !isEntityNameExpression(baseTypeNode.expression)) {
1152+
tempVarName = baseTypeNode.expression.kind === SyntaxKind.NullKeyword ?
1153+
"null" :
1154+
emitTempVariableDeclaration(baseTypeNode.expression, `${node.name.text}_base`, {
1155+
diagnosticMessage: Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1,
1156+
errorNode: baseTypeNode,
1157+
typeName: node.name
1158+
});
11671159
}
11681160

11691161
emitJsDocComments(node);
@@ -1175,7 +1167,7 @@ namespace ts {
11751167
writeTextOfNode(currentText, node.name);
11761168
emitTypeParameters(node.typeParameters);
11771169
if (baseTypeNode) {
1178-
if (isNonNullExpression(baseTypeNode)) {
1170+
if (!isEntityNameExpression(baseTypeNode.expression)) {
11791171
write(" extends ");
11801172
write(tempVarName);
11811173
if (baseTypeNode.typeArguments) {
@@ -1185,10 +1177,10 @@ namespace ts {
11851177
}
11861178
}
11871179
else {
1188-
emitHeritageClause(node.name, [baseTypeNode], /*isImplementsList*/ false);
1180+
emitHeritageClause([baseTypeNode], /*isImplementsList*/ false);
11891181
}
11901182
}
1191-
emitHeritageClause(node.name, getClassImplementsHeritageClauseElements(node), /*isImplementsList*/ true);
1183+
emitHeritageClause(getClassImplementsHeritageClauseElements(node), /*isImplementsList*/ true);
11921184
write(" {");
11931185
writeLine();
11941186
increaseIndent();
@@ -1210,7 +1202,7 @@ namespace ts {
12101202
emitTypeParameters(node.typeParameters);
12111203
const interfaceExtendsTypes = filter(getInterfaceBaseTypeNodes(node), base => isEntityNameExpression(base.expression));
12121204
if (interfaceExtendsTypes && interfaceExtendsTypes.length) {
1213-
emitHeritageClause(node.name, interfaceExtendsTypes, /*isImplementsList*/ false);
1205+
emitHeritageClause(interfaceExtendsTypes, /*isImplementsList*/ false);
12141206
}
12151207
write(" {");
12161208
writeLine();
@@ -1222,10 +1214,6 @@ namespace ts {
12221214
enclosingDeclaration = prevEnclosingDeclaration;
12231215
}
12241216

1225-
function isNonNullExpression(node: ExpressionWithTypeArguments) {
1226-
return node && !isEntityNameExpression(node.expression) && node.expression.kind !== SyntaxKind.NullKeyword;
1227-
}
1228-
12291217
function emitPropertyDeclaration(node: Declaration) {
12301218
if (hasDynamicName(node)) {
12311219
return;

src/compiler/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2727,7 +2727,6 @@ namespace ts {
27272727
writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;
27282728
writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;
27292729
writeTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;
2730-
writeBaseConstructorTypeOfClass(node: ClassLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: SymbolWriter): void;
27312730
isSymbolAccessible(symbol: Symbol, enclosingDeclaration: Node, meaning: SymbolFlags, shouldComputeAliasToMarkVisible: boolean): SymbolAccessibilityResult;
27322731
isEntityNameVisible(entityName: EntityNameOrEntityNameExpression, enclosingDeclaration: Node): SymbolVisibilityResult;
27332732
// Returns the constant value this property access resolves to, or 'undefined' for a non-constant

0 commit comments

Comments
 (0)