From 36ce7eac5a6ae47937b38f4ba53d0a7f87b4ce22 Mon Sep 17 00:00:00 2001 From: meyer Date: Tue, 14 Nov 2017 09:40:32 -0800 Subject: [PATCH] =?UTF-8?q?Update=20JSX=20intrinsic=20element=20test=20to?= =?UTF-8?q?=20match=20babel=E2=80=99s=20(#19946)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update JSX intrinsic element test to match babel’s * Update baseline * Move regex out of isIntrinsicJsxName * Switch to non-regex intrinsic name test --- src/compiler/utilities.ts | 6 ++--- .../doubleUnderscoreReactNamespace.js | 13 ++++------ .../doubleUnderscoreReactNamespace.symbols | 24 +++++++------------ .../doubleUnderscoreReactNamespace.types | 20 +++++----------- .../reference/jsxEsprimaFbTestSuite.symbols | 4 ++-- .../reference/jsxFactoryIdentifier.js | 3 ++- .../reference/jsxFactoryIdentifier.symbols | 1 + .../reference/jsxFactoryIdentifier.types | 1 + .../reference/reactNamespaceJSXEmit.js | 3 +++ .../reference/reactNamespaceJSXEmit.symbols | 21 ++++++++++------ .../reference/reactNamespaceJSXEmit.types | 8 +++++++ .../doubleUnderscoreReactNamespace.ts | 10 +++----- tests/cases/compiler/jsxFactoryIdentifier.ts | 22 ++++++++--------- .../cases/compiler/reactNamespaceJSXEmit.tsx | 2 ++ 14 files changed, 68 insertions(+), 70 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index e67635cba0..e488cdcc60 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -2434,10 +2434,8 @@ namespace ts { } export function isIntrinsicJsxName(name: __String | string) { - // An escaped identifier had a leading underscore prior to being escaped, which would return true - // The escape adds an extra underscore which does not change the result - const ch = (name as string).substr(0, 1); - return ch.toLowerCase() === ch; + const ch = (name as string).charCodeAt(0); + return (ch >= CharacterCodes.a && ch <= CharacterCodes.z) || (name as string).indexOf("-") > -1; } function get16BitUnicodeEscapeSequence(charCode: number): string { diff --git a/tests/baselines/reference/doubleUnderscoreReactNamespace.js b/tests/baselines/reference/doubleUnderscoreReactNamespace.js index de2997d53a..376a75d0e7 100644 --- a/tests/baselines/reference/doubleUnderscoreReactNamespace.js +++ b/tests/baselines/reference/doubleUnderscoreReactNamespace.js @@ -1,19 +1,16 @@ //// [index.tsx] declare global { - namespace JSX { - interface IntrinsicElements { - __foot: any; - } - } function __make (params: object): any; } +declare var __foot: any; -const thing = <__foot>; +const thing = <__foot />; -export {} +export {} + //// [index.js] "use strict"; exports.__esModule = true; -var thing = __make("__foot", null); +var thing = __make(__foot, null); diff --git a/tests/baselines/reference/doubleUnderscoreReactNamespace.symbols b/tests/baselines/reference/doubleUnderscoreReactNamespace.symbols index 3f942c5f69..055fb7361e 100644 --- a/tests/baselines/reference/doubleUnderscoreReactNamespace.symbols +++ b/tests/baselines/reference/doubleUnderscoreReactNamespace.symbols @@ -2,25 +2,17 @@ declare global { >global : Symbol(global, Decl(index.tsx, 0, 0)) - namespace JSX { ->JSX : Symbol(JSX, Decl(index.tsx, 0, 16)) - - interface IntrinsicElements { ->IntrinsicElements : Symbol(IntrinsicElements, Decl(index.tsx, 1, 19)) - - __foot: any; ->__foot : Symbol(IntrinsicElements.__foot, Decl(index.tsx, 2, 37)) - } - } function __make (params: object): any; ->__make : Symbol(__make, Decl(index.tsx, 5, 5)) ->params : Symbol(params, Decl(index.tsx, 6, 21)) +>__make : Symbol(__make, Decl(index.tsx, 0, 16)) +>params : Symbol(params, Decl(index.tsx, 1, 21)) } +declare var __foot: any; +>__foot : Symbol(__foot, Decl(index.tsx, 4, 11)) -const thing = <__foot>; ->thing : Symbol(thing, Decl(index.tsx, 10, 5)) ->__foot : Symbol(JSX.IntrinsicElements.__foot, Decl(index.tsx, 2, 37)) ->__foot : Symbol(JSX.IntrinsicElements.__foot, Decl(index.tsx, 2, 37)) +const thing = <__foot />; +>thing : Symbol(thing, Decl(index.tsx, 6, 5)) +>__foot : Symbol(__foot, Decl(index.tsx, 4, 11)) export {} + diff --git a/tests/baselines/reference/doubleUnderscoreReactNamespace.types b/tests/baselines/reference/doubleUnderscoreReactNamespace.types index 6a9b6d4c98..04382944d8 100644 --- a/tests/baselines/reference/doubleUnderscoreReactNamespace.types +++ b/tests/baselines/reference/doubleUnderscoreReactNamespace.types @@ -2,26 +2,18 @@ declare global { >global : typeof global - namespace JSX { ->JSX : any - - interface IntrinsicElements { ->IntrinsicElements : IntrinsicElements - - __foot: any; ->__foot : any - } - } function __make (params: object): any; >__make : (params: object) => any >params : object } - -const thing = <__foot>; ->thing : any -><__foot> : any +declare var __foot: any; >__foot : any + +const thing = <__foot />; +>thing : any +><__foot /> : any >__foot : any export {} + diff --git a/tests/baselines/reference/jsxEsprimaFbTestSuite.symbols b/tests/baselines/reference/jsxEsprimaFbTestSuite.symbols index f8f3dfa28d..969071e435 100644 --- a/tests/baselines/reference/jsxEsprimaFbTestSuite.symbols +++ b/tests/baselines/reference/jsxEsprimaFbTestSuite.symbols @@ -47,8 +47,8 @@ declare var props; />; <日本語>; ->日本語 : Symbol(unknown) ->日本語 : Symbol(unknown) +>日本語 : Symbol(日本語, Decl(jsxEsprimaFbTestSuite.tsx, 1, 11)) +>日本語 : Symbol(日本語, Decl(jsxEsprimaFbTestSuite.tsx, 1, 11)) AbC_def : Symbol(AbC_def, Decl(jsxEsprimaFbTestSuite.tsx, 2, 11)) diff --git a/tests/baselines/reference/jsxFactoryIdentifier.js b/tests/baselines/reference/jsxFactoryIdentifier.js index 3a3c360a8f..817ef769d5 100644 --- a/tests/baselines/reference/jsxFactoryIdentifier.js +++ b/tests/baselines/reference/jsxFactoryIdentifier.js @@ -47,7 +47,8 @@ class A { ]; } -} +} + //// [Element.js] "use strict"; diff --git a/tests/baselines/reference/jsxFactoryIdentifier.symbols b/tests/baselines/reference/jsxFactoryIdentifier.symbols index b66976f888..7c8ad0c97c 100644 --- a/tests/baselines/reference/jsxFactoryIdentifier.symbols +++ b/tests/baselines/reference/jsxFactoryIdentifier.symbols @@ -122,3 +122,4 @@ class A { ]; } } + diff --git a/tests/baselines/reference/jsxFactoryIdentifier.types b/tests/baselines/reference/jsxFactoryIdentifier.types index 76f4956853..f6faa0784c 100644 --- a/tests/baselines/reference/jsxFactoryIdentifier.types +++ b/tests/baselines/reference/jsxFactoryIdentifier.types @@ -137,3 +137,4 @@ class A { ]; } } + diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.js b/tests/baselines/reference/reactNamespaceJSXEmit.js index fc30f7f7bf..3feaea15b0 100644 --- a/tests/baselines/reference/reactNamespaceJSXEmit.js +++ b/tests/baselines/reference/reactNamespaceJSXEmit.js @@ -2,6 +2,7 @@ declare var myReactLib: any; declare var foo: any; declare var Bar: any; +declare var _Bar: any; declare var x: any; ; @@ -9,6 +10,7 @@ declare var x: any; ; ; ; +<_Bar { ...x } />; //// [reactNamespaceJSXEmit.js] @@ -25,3 +27,4 @@ myReactLib.createElement(Bar, { x: x }); myReactLib.createElement("x-component", null); myReactLib.createElement(Bar, __assign({}, x)); myReactLib.createElement(Bar, __assign({}, x, { y: 2 })); +myReactLib.createElement(_Bar, __assign({}, x)); diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.symbols b/tests/baselines/reference/reactNamespaceJSXEmit.symbols index b8e58fb170..ff52f0bff8 100644 --- a/tests/baselines/reference/reactNamespaceJSXEmit.symbols +++ b/tests/baselines/reference/reactNamespaceJSXEmit.symbols @@ -8,27 +8,34 @@ declare var foo: any; declare var Bar: any; >Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 2, 11)) +declare var _Bar: any; +>_Bar : Symbol(_Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11)) + declare var x: any; ->x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 3, 11)) +>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11)) ; >foo : Symbol(unknown) ->data : Symbol(data, Decl(reactNamespaceJSXEmit.tsx, 5, 4)) +>data : Symbol(data, Decl(reactNamespaceJSXEmit.tsx, 6, 4)) ; >Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 2, 11)) ->x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 6, 4)) ->x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 3, 11)) +>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 7, 4)) +>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11)) ; >x-component : Symbol(unknown) ; >Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 2, 11)) ->x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 3, 11)) +>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11)) ; >Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 2, 11)) ->x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 3, 11)) ->y : Symbol(y, Decl(reactNamespaceJSXEmit.tsx, 9, 13)) +>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11)) +>y : Symbol(y, Decl(reactNamespaceJSXEmit.tsx, 10, 13)) + +<_Bar { ...x } />; +>_Bar : Symbol(_Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11)) +>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11)) diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.types b/tests/baselines/reference/reactNamespaceJSXEmit.types index 0c1200b362..e1d76dbfce 100644 --- a/tests/baselines/reference/reactNamespaceJSXEmit.types +++ b/tests/baselines/reference/reactNamespaceJSXEmit.types @@ -8,6 +8,9 @@ declare var foo: any; declare var Bar: any; >Bar : any +declare var _Bar: any; +>_Bar : any + declare var x: any; >x : any @@ -38,3 +41,8 @@ declare var x: any; >y : number >2 : 2 +<_Bar { ...x } />; +><_Bar { ...x } /> : any +>_Bar : any +>x : any + diff --git a/tests/cases/compiler/doubleUnderscoreReactNamespace.ts b/tests/cases/compiler/doubleUnderscoreReactNamespace.ts index bd7789ab1d..0b718b48e2 100644 --- a/tests/cases/compiler/doubleUnderscoreReactNamespace.ts +++ b/tests/cases/compiler/doubleUnderscoreReactNamespace.ts @@ -4,15 +4,11 @@ // @filename: index.tsx declare global { - namespace JSX { - interface IntrinsicElements { - __foot: any; - } - } function __make (params: object): any; } +declare var __foot: any; -const thing = <__foot>; +const thing = <__foot />; -export {} \ No newline at end of file +export {} diff --git a/tests/cases/compiler/jsxFactoryIdentifier.ts b/tests/cases/compiler/jsxFactoryIdentifier.ts index 88caf27482..0ea5c7e850 100644 --- a/tests/cases/compiler/jsxFactoryIdentifier.ts +++ b/tests/cases/compiler/jsxFactoryIdentifier.ts @@ -1,10 +1,10 @@ -//@jsx: react -//@target: es6 -//@module: commonjs -//@jsxFactory: createElement -//@sourcemap: true - -// @filename: Element.ts +//@jsx: react +//@target: es6 +//@module: commonjs +//@jsxFactory: createElement +//@sourcemap: true + +// @filename: Element.ts declare namespace JSX { interface Element { name: string; @@ -33,9 +33,9 @@ export let createElement = Element.createElement; function toCamelCase(text: string): string { return text[0].toLowerCase() + text.substring(1); -} - -// @filename: test.tsx +} + +// @filename: test.tsx import { Element} from './Element'; let createElement = Element.createElement; let c: { @@ -51,4 +51,4 @@ class A { ]; } -} \ No newline at end of file +} diff --git a/tests/cases/compiler/reactNamespaceJSXEmit.tsx b/tests/cases/compiler/reactNamespaceJSXEmit.tsx index f5ec957a78..0d11789a27 100644 --- a/tests/cases/compiler/reactNamespaceJSXEmit.tsx +++ b/tests/cases/compiler/reactNamespaceJSXEmit.tsx @@ -4,6 +4,7 @@ declare var myReactLib: any; declare var foo: any; declare var Bar: any; +declare var _Bar: any; declare var x: any; ; @@ -11,3 +12,4 @@ declare var x: any; ; ; ; +<_Bar { ...x } />;