From 04f8c32d32ebcc83d6b862e7e2e15e3e265813e0 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 7 Dec 2015 11:07:37 -0800 Subject: [PATCH 1/2] Identify JSX closing tags as identifiers so they emit correctly Fixes bug #5955 --- tests/baselines/reference/tsxPreserveEmit1.js | 20 ++++++++++++++++-- .../reference/tsxPreserveEmit1.symbols | 20 ++++++++++++++++-- .../reference/tsxPreserveEmit1.types | 21 +++++++++++++++++-- .../conformance/jsx/tsxPreserveEmit1.tsx | 10 ++++++++- 4 files changed, 64 insertions(+), 7 deletions(-) diff --git a/tests/baselines/reference/tsxPreserveEmit1.js b/tests/baselines/reference/tsxPreserveEmit1.js index 894d0c3d698..7ac6c18ebca 100644 --- a/tests/baselines/reference/tsxPreserveEmit1.js +++ b/tests/baselines/reference/tsxPreserveEmit1.js @@ -22,12 +22,28 @@ import ReactRouter = require('react-router'); import Route = ReactRouter.Route; -var routes = ; +var routes1 = ; + +module M { + export var X: any; +} +module M { + // Should emit 'M.X' in both opening and closing tags + var y = ; +} //// [test.jsx] define(["require", "exports", 'react-router'], function (require, exports, ReactRouter) { "use strict"; var Route = ReactRouter.Route; - var routes = ; + var routes1 = ; + var M; + (function (M) { + })(M || (M = {})); + var M; + (function (M) { + // Should emit 'M.X' in both opening and closing tags + var y = ; + })(M || (M = {})); }); diff --git a/tests/baselines/reference/tsxPreserveEmit1.symbols b/tests/baselines/reference/tsxPreserveEmit1.symbols index 6dcf4d9ac49..53707b86104 100644 --- a/tests/baselines/reference/tsxPreserveEmit1.symbols +++ b/tests/baselines/reference/tsxPreserveEmit1.symbols @@ -11,10 +11,26 @@ import Route = ReactRouter.Route; >ReactRouter : Symbol(ReactRouter, Decl(react.d.ts, 4, 1)) >Route : Symbol(ReactRouter.Route, Decl(react.d.ts, 7, 4)) -var routes = ; ->routes : Symbol(routes, Decl(test.tsx, 6, 3)) +var routes1 = ; +>routes1 : Symbol(routes1, Decl(test.tsx, 6, 3)) >Route : Symbol(Route, Decl(test.tsx, 2, 45)) +module M { +>M : Symbol(M, Decl(test.tsx, 6, 24), Decl(test.tsx, 10, 1)) + + export var X: any; +>X : Symbol(X, Decl(test.tsx, 9, 11)) +} +module M { +>M : Symbol(M, Decl(test.tsx, 6, 24), Decl(test.tsx, 10, 1)) + + // Should emit 'M.X' in both opening and closing tags + var y = ; +>y : Symbol(y, Decl(test.tsx, 13, 4)) +>X : Symbol(X, Decl(test.tsx, 9, 11)) +>X : Symbol(X, Decl(test.tsx, 9, 11)) +} + === tests/cases/conformance/jsx/react.d.ts === declare module 'react' { diff --git a/tests/baselines/reference/tsxPreserveEmit1.types b/tests/baselines/reference/tsxPreserveEmit1.types index ea64e2d2e94..26da75b39e4 100644 --- a/tests/baselines/reference/tsxPreserveEmit1.types +++ b/tests/baselines/reference/tsxPreserveEmit1.types @@ -11,11 +11,28 @@ import Route = ReactRouter.Route; >ReactRouter : typeof ReactRouter >Route : any -var routes = ; ->routes : any +var routes1 = ; +>routes1 : any > : any >Route : any +module M { +>M : typeof M + + export var X: any; +>X : any +} +module M { +>M : typeof M + + // Should emit 'M.X' in both opening and closing tags + var y = ; +>y : any +> : any +>X : any +>X : any +} + === tests/cases/conformance/jsx/react.d.ts === declare module 'react' { diff --git a/tests/cases/conformance/jsx/tsxPreserveEmit1.tsx b/tests/cases/conformance/jsx/tsxPreserveEmit1.tsx index e75a1dbfde2..179a3116b43 100644 --- a/tests/cases/conformance/jsx/tsxPreserveEmit1.tsx +++ b/tests/cases/conformance/jsx/tsxPreserveEmit1.tsx @@ -23,4 +23,12 @@ import ReactRouter = require('react-router'); import Route = ReactRouter.Route; -var routes = ; +var routes1 = ; + +module M { + export var X: any; +} +module M { + // Should emit 'M.X' in both opening and closing tags + var y = ; +} From 05c17032a99830036d1c4ab8e28023bf742bcd67 Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Mon, 7 Dec 2015 11:57:54 -0800 Subject: [PATCH 2/2] Actually include the fix.... --- src/compiler/emitter.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index dcfce6a2c81..4d14e38df92 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1453,6 +1453,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi case SyntaxKind.ForInStatement: case SyntaxKind.ForOfStatement: case SyntaxKind.IfStatement: + case SyntaxKind.JsxClosingElement: case SyntaxKind.JsxSelfClosingElement: case SyntaxKind.JsxOpeningElement: case SyntaxKind.JsxSpreadAttribute: