Skip to content

Commit c53bc89

Browse files
authored
Fix name generation for nodes (microsoft#453)
1 parent 5af6f53 commit c53bc89

File tree

2 files changed

+27
-13
lines changed

2 files changed

+27
-13
lines changed

internal/printer/emitcontext.go

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ func (c *EmitContext) newGeneratedIdentifier(kind GeneratedIdentifierFlags, text
389389
case ast.IsMemberName(node):
390390
text = node.Text()
391391
default:
392-
text = fmt.Sprintf("(generated@%v)", ast.GetNodeId(node))
392+
text = fmt.Sprintf("(generated@%v)", ast.GetNodeId(c.getNodeForGeneratedNameWorker(node, id)))
393393
}
394394
text = FormatGeneratedName(false /*privateName*/, options.Prefix, text, options.Suffix)
395395
}
@@ -445,7 +445,7 @@ func (c *EmitContext) newGeneratedPrivateIdentifier(kind GeneratedIdentifierFlag
445445
case ast.IsMemberName(node):
446446
text = node.Text()
447447
default:
448-
text = fmt.Sprintf("(generated@%v)", ast.GetNodeId(node))
448+
text = fmt.Sprintf("(generated@%v)", ast.GetNodeId(c.getNodeForGeneratedNameWorker(node, id)))
449449
}
450450
text = FormatGeneratedName(true /*privateName*/, options.Prefix, text, options.Suffix)
451451
} else if !strings.HasPrefix(text, "#") {
@@ -500,24 +500,28 @@ func (c *EmitContext) GetAutoGenerateInfo(name *ast.MemberName) *AutoGenerateInf
500500

501501
// Walks the associated AutoGenerateInfo entries of a name to find the root Nopde from which the name should be generated.
502502
func (c *EmitContext) GetNodeForGeneratedName(name *ast.MemberName) *ast.Node {
503-
node := name
504503
if autoGenerate := c.autoGenerate[name]; autoGenerate != nil && autoGenerate.Flags.IsNode() {
505-
autoGenerateId := autoGenerate.Id
506-
source := autoGenerate.Node
507-
for source != nil {
508-
node = source
509-
if !ast.IsMemberName(node) {
510-
break
511-
}
504+
return c.getNodeForGeneratedNameWorker(autoGenerate.Node, autoGenerate.Id)
505+
}
506+
return name
507+
}
512508

509+
func (c *EmitContext) getNodeForGeneratedNameWorker(node *ast.Node, autoGenerateId AutoGenerateId) *ast.Node {
510+
original := c.Original(node)
511+
for original != nil {
512+
node = original
513+
if ast.IsMemberName(node) {
513514
// if "node" is a different generated name (having a different "autoGenerateId"), use it and stop traversing.
514515
autoGenerate := c.autoGenerate[node]
515-
if autoGenerate == nil || !autoGenerate.Flags.IsNode() || autoGenerate.Id != autoGenerateId {
516+
if autoGenerate == nil || autoGenerate.Flags.IsNode() && autoGenerate.Id != autoGenerateId {
516517
break
517518
}
518-
519-
source = autoGenerate.Node
519+
if autoGenerate.Flags.IsNode() {
520+
original = autoGenerate.Node
521+
continue
522+
}
520523
}
524+
original = c.Original(node)
521525
}
522526
return node
523527
}

internal/transformers/commonjsmodule_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -958,6 +958,16 @@ const other_1 = require("other");
958958
x ||
959959
other_1.a;`,
960960
},
961+
{
962+
title: "Identifier#5 (from import specifier)",
963+
input: `import { and } from "./_namespaces/ts.js";
964+
const isNotOverloadAndNotAccessor = and(isNotOverload, isNotAccessor);
965+
`,
966+
output: `"use strict";
967+
Object.defineProperty(exports, "__esModule", { value: true });
968+
const ts_js_1 = require("./_namespaces/ts.js");
969+
const isNotOverloadAndNotAccessor = (0, ts_js_1.and)(isNotOverload, isNotAccessor);`,
970+
},
961971

962972
{
963973
title: "Other",

0 commit comments

Comments
 (0)