@@ -1710,7 +1710,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1710
1710
return typeToStringWorker(type, getParseTreeNode(enclosingDeclaration), flags);
1711
1711
},
1712
1712
symbolToString: (symbol, enclosingDeclaration, meaning, flags) => {
1713
- return symbolToString (symbol, getParseTreeNode(enclosingDeclaration), meaning, flags);
1713
+ return symbolToStringWorker (symbol, getParseTreeNode(enclosingDeclaration), meaning, flags);
1714
1714
},
1715
1715
typePredicateToString: (predicate, enclosingDeclaration, flags) => {
1716
1716
return typePredicateToString(predicate, getParseTreeNode(enclosingDeclaration), flags);
@@ -1722,7 +1722,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1722
1722
return typeToStringWorker(type, getParseTreeNode(enclosingDeclaration), flags, writer, verbosityLevel, out);
1723
1723
},
1724
1724
writeSymbol: (symbol, enclosingDeclaration, meaning, flags, writer) => {
1725
- return symbolToString (symbol, getParseTreeNode(enclosingDeclaration), meaning, flags, writer);
1725
+ return symbolToStringWorker (symbol, getParseTreeNode(enclosingDeclaration), meaning, flags, writer);
1726
1726
},
1727
1727
writeTypePredicate: (predicate, enclosingDeclaration, flags, writer) => {
1728
1728
return typePredicateToString(predicate, getParseTreeNode(enclosingDeclaration), flags, writer);
@@ -5988,8 +5988,17 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
5988
5988
}
5989
5989
5990
5990
function symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags: SymbolFormatFlags = SymbolFormatFlags.AllowAnyNodeKind, writer?: EmitTextWriter): string {
5991
- let nodeFlags = NodeBuilderFlags.IgnoreErrors | NodeBuilderFlags.UseDoubleQuotesForStringLiteralType;
5991
+ return symbolToStringWorker(symbol, enclosingDeclaration, meaning, flags | SymbolFormatFlags.UseDoubleQuotesForStringLiteralType, writer);
5992
+ }
5993
+ function symbolToStringWorker(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags, flags: SymbolFormatFlags = SymbolFormatFlags.AllowAnyNodeKind, writer?: EmitTextWriter): string {
5994
+ let nodeFlags = NodeBuilderFlags.IgnoreErrors;
5992
5995
let internalNodeFlags = InternalNodeBuilderFlags.None;
5996
+ if (flags & SymbolFormatFlags.UseSingleQuotesForStringLiteralType) {
5997
+ nodeFlags |= NodeBuilderFlags.UseSingleQuotesForStringLiteralType;
5998
+ }
5999
+ if (flags & SymbolFormatFlags.UseDoubleQuotesForStringLiteralType) {
6000
+ nodeFlags |= NodeBuilderFlags.UseDoubleQuotesForStringLiteralType;
6001
+ }
5993
6002
if (flags & SymbolFormatFlags.UseOnlyExternalAliasing) {
5994
6003
nodeFlags |= NodeBuilderFlags.UseOnlyExternalAliasing;
5995
6004
}
@@ -6330,9 +6339,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
6330
6339
const node = range as Node as StringLiteral;
6331
6340
return setOriginalNode(
6332
6341
context.flags & (NodeBuilderFlags.UseSingleQuotesForStringLiteralType | NodeBuilderFlags.UseDoubleQuotesForStringLiteralType) ?
6333
- factory.createStringLiteral(node.text, !!(context.flags & NodeBuilderFlags.UseSingleQuotesForStringLiteralType)):
6334
- factory.createStringLiteralFromNode(node),
6335
- node
6342
+ factory.createStringLiteral(node.text, !!(context.flags & NodeBuilderFlags.UseSingleQuotesForStringLiteralType)) :
6343
+ factory.createStringLiteralFromNode(node),
6344
+ node,
6336
6345
) as Node as T;
6337
6346
}
6338
6347
else {
@@ -8543,10 +8552,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
8543
8552
}
8544
8553
let firstChar = symbolName.charCodeAt(0);
8545
8554
8555
+ let useSingleQuote = !(context.flags & NodeBuilderFlags.UseDoubleQuotesForStringLiteralType) &&
8556
+ (!!(context.flags & NodeBuilderFlags.UseSingleQuotesForStringLiteralType) || firstChar === CharacterCodes.singleQuote);
8557
+
8546
8558
if (isSingleOrDoubleQuote(firstChar) && some(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) {
8547
- return factory.createStringLiteral(getSpecifierForModuleSymbol(symbol, context));
8559
+ return factory.createStringLiteral(getSpecifierForModuleSymbol(symbol, context), useSingleQuote );
8548
8560
}
8549
- if (index === 0 || canUsePropertyAccess(symbolName, languageVersion )) {
8561
+ if (canUsePropertyAccess(symbolName, languageVersion) || ( index === 0 && firstChar === CharacterCodes.openBracket )) {
8550
8562
const identifier = setEmitFlags(factory.createIdentifier(symbolName), EmitFlags.NoAsciiEscaping);
8551
8563
if (typeParameterNodes) setIdentifierTypeArguments(identifier, factory.createNodeArray<TypeNode | TypeParameterDeclaration>(typeParameterNodes));
8552
8564
identifier.symbol = symbol;
@@ -8557,21 +8569,27 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
8557
8569
if (firstChar === CharacterCodes.openBracket) {
8558
8570
symbolName = symbolName.substring(1, symbolName.length - 1);
8559
8571
firstChar = symbolName.charCodeAt(0);
8572
+ useSingleQuote = !(context.flags & NodeBuilderFlags.UseDoubleQuotesForStringLiteralType) &&
8573
+ (!!(context.flags & NodeBuilderFlags.UseSingleQuotesForStringLiteralType) || firstChar === CharacterCodes.singleQuote);
8560
8574
}
8561
8575
let expression: Expression | undefined;
8562
8576
if (isSingleOrDoubleQuote(firstChar) && !(symbol.flags & SymbolFlags.EnumMember)) {
8563
- expression = factory.createStringLiteral(stripQuotes(symbolName).replace(/\\./g, s => s.substring(1)), firstChar === CharacterCodes.singleQuote);
8577
+ const stringLiteralName = factory.createStringLiteral(stripQuotes(symbolName).replace(/\\./g, s => s.substring(1)), useSingleQuote);
8578
+ stringLiteralName.symbol = symbol;
8579
+ expression = stringLiteralName;
8564
8580
}
8565
8581
else if (("" + +symbolName) === symbolName) {
8566
- expression = factory.createNumericLiteral(+symbolName);
8582
+ const numberLiteralName = factory.createNumericLiteral(+symbolName);
8583
+ numberLiteralName.symbol = symbol;
8584
+ expression = numberLiteralName;
8567
8585
}
8568
8586
if (!expression) {
8569
8587
const identifier = setEmitFlags(factory.createIdentifier(symbolName), EmitFlags.NoAsciiEscaping);
8570
8588
if (typeParameterNodes) setIdentifierTypeArguments(identifier, factory.createNodeArray<TypeNode | TypeParameterDeclaration>(typeParameterNodes));
8571
8589
identifier.symbol = symbol;
8572
8590
expression = identifier;
8573
8591
}
8574
- return factory.createElementAccessExpression(createExpressionFromSymbolChain(chain, index - 1), expression);
8592
+ return index === 0 ? expression : factory.createElementAccessExpression(createExpressionFromSymbolChain(chain, index - 1), expression);
8575
8593
}
8576
8594
}
8577
8595
}
@@ -8599,7 +8617,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
8599
8617
8600
8618
function getPropertyNameNodeForSymbol(symbol: Symbol, context: NodeBuilderContext) {
8601
8619
const stringNamed = !!length(symbol.declarations) && every(symbol.declarations, isStringNamed);
8602
- const singleQuote = context.flags & NodeBuilderFlags.UseSingleQuotesForStringLiteralType ? true:
8620
+ const singleQuote = context.flags & NodeBuilderFlags.UseSingleQuotesForStringLiteralType ? true :
8603
8621
context.flags & NodeBuilderFlags.UseDoubleQuotesForStringLiteralType ? false :
8604
8622
!!length(symbol.declarations) && every(symbol.declarations, isSingleQuotedStringNamed);
8605
8623
const isMethod = !!(symbol.flags & SymbolFlags.Method);
0 commit comments