@@ -2343,14 +2343,12 @@ const _super = (function (geti, seti) {
23432343 return node ;
23442344 }
23452345
2346- function getTextOfNode ( node : Node , includeTrivia ?: boolean ) {
2347- if ( isIdentifier ( node ) ) {
2348- if ( node . autoGenerateKind ) {
2349- return getGeneratedIdentifier ( node ) ;
2350- }
2351- else if ( nodeIsSynthesized ( node ) || ! node . parent ) {
2352- return unescapeIdentifier ( node . text ) ;
2353- }
2346+ function getTextOfNode ( node : Node , includeTrivia ?: boolean ) : string {
2347+ if ( isGeneratedIdentifier ( node ) ) {
2348+ return getGeneratedIdentifier ( node ) ;
2349+ }
2350+ else if ( isIdentifier ( node ) && ( nodeIsSynthesized ( node ) || ! node . parent ) ) {
2351+ return unescapeIdentifier ( node . text ) ;
23542352 }
23552353 else if ( isLiteralExpression ( node ) && ( nodeIsSynthesized ( node ) || ! node . parent ) ) {
23562354 return node . text ;
@@ -2452,7 +2450,7 @@ const _super = (function (geti, seti) {
24522450 }
24532451
24542452 function generateNameForModuleOrEnum ( node : ModuleDeclaration | EnumDeclaration ) {
2455- const name = node . name . text ;
2453+ const name = getTextOfNode ( node . name ) ;
24562454 // Use module/enum name itself if it is unique, otherwise make a unique variation
24572455 return isUniqueLocalName ( name , node ) ? name : makeUniqueName ( name ) ;
24582456 }
@@ -2472,10 +2470,10 @@ const _super = (function (geti, seti) {
24722470 return makeUniqueName ( "class" ) ;
24732471 }
24742472
2475- function generateNameForNode ( node : Node ) {
2473+ function generateNameForNode ( node : Node ) : string {
24762474 switch ( node . kind ) {
24772475 case SyntaxKind . Identifier :
2478- return makeUniqueName ( ( < Identifier > node ) . text ) ;
2476+ return makeUniqueName ( getTextOfNode ( node ) ) ;
24792477 case SyntaxKind . ModuleDeclaration :
24802478 case SyntaxKind . EnumDeclaration :
24812479 return generateNameForModuleOrEnum ( < ModuleDeclaration | EnumDeclaration > node ) ;
@@ -2502,14 +2500,37 @@ const _super = (function (geti, seti) {
25022500 case GeneratedIdentifierKind . Unique :
25032501 return makeUniqueName ( node . text ) ;
25042502 case GeneratedIdentifierKind . Node :
2505- return generateNameForNode ( getOriginalNode ( node ) ) ;
2503+ return generateNameForNode ( getSourceNodeForGeneratedName ( node ) ) ;
25062504 }
25072505 }
25082506
25092507 function getGeneratedIdentifier ( node : Identifier ) {
2510- const id = getOriginalNodeId ( node ) ;
2508+ const id = getNodeIdForGeneratedIdentifier ( node ) ;
25112509 return nodeToGeneratedName [ id ] || ( nodeToGeneratedName [ id ] = unescapeIdentifier ( generateIdentifier ( node ) ) ) ;
25122510 }
2511+
2512+ function getSourceNodeForGeneratedName ( name : Identifier ) {
2513+ let node : Node = name ;
2514+ while ( node . original !== undefined ) {
2515+ node = node . original ;
2516+ if ( isIdentifier ( node ) && node . autoGenerateKind === GeneratedIdentifierKind . Node ) {
2517+ break ;
2518+ }
2519+ }
2520+
2521+ return node ;
2522+ }
2523+
2524+ function getNodeIdForGeneratedIdentifier ( node : Identifier ) {
2525+ switch ( node . autoGenerateKind ) {
2526+ case GeneratedIdentifierKind . Auto :
2527+ case GeneratedIdentifierKind . Loop :
2528+ case GeneratedIdentifierKind . Unique :
2529+ return getNodeId ( node ) ;
2530+ case GeneratedIdentifierKind . Node :
2531+ return getNodeId ( getSourceNodeForGeneratedName ( node ) ) ;
2532+ }
2533+ }
25132534 }
25142535
25152536 function createDelimiterMap ( ) {
0 commit comments