@@ -3684,10 +3684,6 @@ namespace ts {
3684
3684
isExternalModuleAugmentation(node.parent.parent);
3685
3685
}
3686
3686
3687
- function literalTypeToString(type: LiteralType) {
3688
- return type.flags & TypeFlags.StringLiteral ? '"' + escapeString((<StringLiteralType>type).value) + '"' : "" + (<NumberLiteralType>type).value;
3689
- }
3690
-
3691
3687
interface NodeBuilderContext {
3692
3688
enclosingDeclaration: Node | undefined;
3693
3689
flags: NodeBuilderFlags | undefined;
@@ -3748,7 +3744,7 @@ namespace ts {
3748
3744
return symbolName(symbol);
3749
3745
}
3750
3746
3751
- function isDeclarationVisible(node: Declaration): boolean {
3747
+ function isDeclarationVisible(node: Declaration | AnyImportSyntax ): boolean {
3752
3748
if (node) {
3753
3749
const links = getNodeLinks(node);
3754
3750
if (links.isVisible === undefined) {
@@ -25497,6 +25493,7 @@ namespace ts {
25497
25493
25498
25494
function isImplementationOfOverload(node: SignatureDeclaration) {
25499
25495
if (nodeIsPresent((node as FunctionLikeDeclaration).body)) {
25496
+ if (isGetAccessor(node) || isSetAccessor(node)) return false; // Get or set accessors can never be overload implementations, but can have up to 2 signatures
25500
25497
const symbol = getSymbolOfNode(node);
25501
25498
const signaturesOfSymbol = getSignaturesOfSymbol(symbol);
25502
25499
// If this function body corresponds to function with multiple signature, it is implementation of overload
@@ -25636,30 +25633,42 @@ namespace ts {
25636
25633
}
25637
25634
}
25638
25635
25639
- function writeTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: EmitTextWriter) {
25636
+ function createTypeOfDeclaration(declaration: AccessorDeclaration | VariableLikeDeclaration, enclosingDeclaration: Node, flags: NodeBuilderFlags, tracker: SymbolTracker, addUndefined?: boolean) {
25637
+ declaration = getParseTreeNode(declaration, isVariableLikeOrAccessor);
25638
+ if (!declaration) {
25639
+ return createToken(SyntaxKind.AnyKeyword) as KeywordTypeNode;
25640
+ }
25640
25641
// Get type of the symbol if this is the valid symbol otherwise get type at location
25641
25642
const symbol = getSymbolOfNode(declaration);
25642
25643
let type = symbol && !(symbol.flags & (SymbolFlags.TypeLiteral | SymbolFlags.Signature))
25643
25644
? getWidenedLiteralType(getTypeOfSymbol(symbol))
25644
25645
: unknownType;
25645
25646
if (type.flags & TypeFlags.UniqueESSymbol &&
25646
25647
type.symbol === symbol) {
25647
- flags |= TypeFormatFlags .AllowUniqueESSymbolType;
25648
+ flags |= NodeBuilderFlags .AllowUniqueESSymbolType;
25648
25649
}
25649
- if (flags & TypeFormatFlags.AddUndefined ) {
25650
+ if (addUndefined ) {
25650
25651
type = getOptionalType(type);
25651
25652
}
25652
- typeToString (type, enclosingDeclaration, flags | TypeFormatFlags .MultilineObjectLiterals, writer );
25653
+ return nodeBuilder.typeToTypeNode (type, enclosingDeclaration, flags | NodeBuilderFlags .MultilineObjectLiterals, tracker );
25653
25654
}
25654
25655
25655
- function writeReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: EmitTextWriter) {
25656
+ function createReturnTypeOfSignatureDeclaration(signatureDeclaration: SignatureDeclaration, enclosingDeclaration: Node, flags: NodeBuilderFlags, tracker: SymbolTracker) {
25657
+ signatureDeclaration = getParseTreeNode(signatureDeclaration, isFunctionLike);
25658
+ if (!signatureDeclaration) {
25659
+ return createToken(SyntaxKind.AnyKeyword) as KeywordTypeNode;
25660
+ }
25656
25661
const signature = getSignatureFromDeclaration(signatureDeclaration);
25657
- typeToString (getReturnTypeOfSignature(signature), enclosingDeclaration, flags | TypeFormatFlags .MultilineObjectLiterals, writer );
25662
+ return nodeBuilder.typeToTypeNode (getReturnTypeOfSignature(signature), enclosingDeclaration, flags | NodeBuilderFlags .MultilineObjectLiterals, tracker );
25658
25663
}
25659
25664
25660
- function writeTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: TypeFormatFlags, writer: EmitTextWriter) {
25665
+ function createTypeOfExpression(expr: Expression, enclosingDeclaration: Node, flags: NodeBuilderFlags, tracker: SymbolTracker) {
25666
+ expr = getParseTreeNode(expr, isExpression);
25667
+ if (!expr) {
25668
+ return createToken(SyntaxKind.AnyKeyword) as KeywordTypeNode;
25669
+ }
25661
25670
const type = getWidenedType(getRegularTypeOfExpression(expr));
25662
- typeToString (type, enclosingDeclaration, flags | TypeFormatFlags .MultilineObjectLiterals, writer );
25671
+ return nodeBuilder.typeToTypeNode (type, enclosingDeclaration, flags | NodeBuilderFlags .MultilineObjectLiterals, tracker );
25663
25672
}
25664
25673
25665
25674
function hasGlobalName(name: string): boolean {
@@ -25707,9 +25716,13 @@ namespace ts {
25707
25716
return false;
25708
25717
}
25709
25718
25710
- function writeLiteralConstValue(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration, writer: EmitTextWriter) {
25719
+ function literalTypeToNode(type: LiteralType): Expression {
25720
+ return createLiteral(type.value);
25721
+ }
25722
+
25723
+ function createLiteralConstValue(node: VariableDeclaration | PropertyDeclaration | PropertySignature | ParameterDeclaration) {
25711
25724
const type = getTypeOfSymbol(getSymbolOfNode(node));
25712
- writer.writeStringLiteral(literalTypeToString( <LiteralType>type) );
25725
+ return literalTypeToNode( <LiteralType>type);
25713
25726
}
25714
25727
25715
25728
function createResolver(): EmitResolver {
@@ -25753,9 +25766,10 @@ namespace ts {
25753
25766
isImplementationOfOverload,
25754
25767
isRequiredInitializedParameter,
25755
25768
isOptionalUninitializedParameterProperty,
25756
- writeTypeOfDeclaration,
25757
- writeReturnTypeOfSignatureDeclaration,
25758
- writeTypeOfExpression,
25769
+ createTypeOfDeclaration,
25770
+ createReturnTypeOfSignatureDeclaration,
25771
+ createTypeOfExpression,
25772
+ createLiteralConstValue,
25759
25773
isSymbolAccessible,
25760
25774
isEntityNameVisible,
25761
25775
getConstantValue: node => {
@@ -25777,7 +25791,6 @@ namespace ts {
25777
25791
const symbol = node && getSymbolOfNode(node);
25778
25792
return !!(symbol && getCheckFlags(symbol) & CheckFlags.Late);
25779
25793
},
25780
- writeLiteralConstValue,
25781
25794
getJsxFactoryEntity: location => location ? (getJsxNamespace(location), (getSourceFileOfNode(location).localJsxFactory || _jsxFactoryEntity)) : _jsxFactoryEntity
25782
25795
};
25783
25796
0 commit comments