From b1fbff8b980cc12b29fcbd552948de4e09b6a623 Mon Sep 17 00:00:00 2001 From: Igor Oleinikov Date: Thu, 18 Oct 2018 00:31:09 -0700 Subject: [PATCH 1/3] Add broken test for issue #27854 --- src/testRunner/unittests/transform.ts | 23 +++++++++++++++++++ .../transformsCorrectly.issue27854.js | 3 +++ 2 files changed, 26 insertions(+) create mode 100644 tests/baselines/reference/transformApi/transformsCorrectly.issue27854.js diff --git a/src/testRunner/unittests/transform.ts b/src/testRunner/unittests/transform.ts index e975e10c09c..7ed6e9760fd 100644 --- a/src/testRunner/unittests/transform.ts +++ b/src/testRunner/unittests/transform.ts @@ -40,6 +40,17 @@ namespace ts { return (file: SourceFile) => file; } + function replaceIdentifiersNamedOldNameWithNewName2(context: TransformationContext) { + const visitor: Visitor = (node) => { + if (isIdentifier(node) && node.text === "oldName") { + return createIdentifier("newName"); + } + + return visitEachChild(node, visitor, context); + } + return (node: SourceFile) => visitNode(node, visitor); + } + function transformSourceFile(sourceText: string, transformers: TransformerFactory[]) { const transformed = transform(createSourceFile("source.ts", sourceText, ScriptTarget.ES2015), transformers); const printer = createPrinter({ newLine: NewLineKind.CarriageReturnLineFeed }, { @@ -81,6 +92,18 @@ namespace ts { }).outputText; }); + testBaseline("issue27854", () => { + return transpileModule(`oldName<{ a: string; }>\` ... \`;`, { + transformers: { + before: [replaceIdentifiersNamedOldNameWithNewName2] + }, + compilerOptions: { + newLine: NewLineKind.CarriageReturnLineFeed, + target: ts.ScriptTarget.Latest + } + }).outputText; + }); + testBaseline("rewrittenNamespace", () => { return transpileModule(`namespace Reflect { const x = 1; }`, { transformers: { diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.issue27854.js b/tests/baselines/reference/transformApi/transformsCorrectly.issue27854.js new file mode 100644 index 00000000000..5afec3fccae --- /dev/null +++ b/tests/baselines/reference/transformApi/transformsCorrectly.issue27854.js @@ -0,0 +1,3 @@ +newName<{ + a: string; +}> ` ... `; From b2cbbbd1d37cdb602483f0d6b908b0152c05540e Mon Sep 17 00:00:00 2001 From: Igor Oleinikov Date: Thu, 18 Oct 2018 01:34:04 -0700 Subject: [PATCH 2/3] Fix bug in reduceEachChild (fixes #27854) - add reducing of type arguments in tagged template expression --- src/compiler/visitor.ts | 1 + src/testRunner/unittests/transform.ts | 5 ++--- .../reference/transformApi/transformsCorrectly.issue27854.js | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/compiler/visitor.ts b/src/compiler/visitor.ts index 2cfb469f152..fbed806a8ad 100644 --- a/src/compiler/visitor.ts +++ b/src/compiler/visitor.ts @@ -1111,6 +1111,7 @@ namespace ts { case SyntaxKind.TaggedTemplateExpression: result = reduceNode((node).tag, cbNode, result); + result = reduceNodes((node).typeArguments, cbNodes, result); result = reduceNode((node).template, cbNode, result); break; diff --git a/src/testRunner/unittests/transform.ts b/src/testRunner/unittests/transform.ts index 7ed6e9760fd..f219fb6c683 100644 --- a/src/testRunner/unittests/transform.ts +++ b/src/testRunner/unittests/transform.ts @@ -45,9 +45,8 @@ namespace ts { if (isIdentifier(node) && node.text === "oldName") { return createIdentifier("newName"); } - return visitEachChild(node, visitor, context); - } + }; return (node: SourceFile) => visitNode(node, visitor); } @@ -99,7 +98,7 @@ namespace ts { }, compilerOptions: { newLine: NewLineKind.CarriageReturnLineFeed, - target: ts.ScriptTarget.Latest + target: ScriptTarget.Latest } }).outputText; }); diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.issue27854.js b/tests/baselines/reference/transformApi/transformsCorrectly.issue27854.js index 5afec3fccae..d1948143086 100644 --- a/tests/baselines/reference/transformApi/transformsCorrectly.issue27854.js +++ b/tests/baselines/reference/transformApi/transformsCorrectly.issue27854.js @@ -1,3 +1 @@ -newName<{ - a: string; -}> ` ... `; +newName ` ... `; From b930d5730fdf0b84cb211ea0dbd7a3c1a39bebb3 Mon Sep 17 00:00:00 2001 From: Igor Oleinikov Date: Thu, 18 Oct 2018 01:36:05 -0700 Subject: [PATCH 3/3] Change cast to the proper type --- src/compiler/visitor.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/visitor.ts b/src/compiler/visitor.ts index fbed806a8ad..b2ab3b19b47 100644 --- a/src/compiler/visitor.ts +++ b/src/compiler/visitor.ts @@ -1111,7 +1111,7 @@ namespace ts { case SyntaxKind.TaggedTemplateExpression: result = reduceNode((node).tag, cbNode, result); - result = reduceNodes((node).typeArguments, cbNodes, result); + result = reduceNodes((node).typeArguments, cbNodes, result); result = reduceNode((node).template, cbNode, result); break;