diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index d0314649b88..84d6f091039 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1592,13 +1592,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi /// these emit into an object literal property name, we don't need to be worried /// about keywords, just non-identifier characters function emitAttributeName(name: Identifier) { - if (/[A-Za-z_]+[\w*]/.test(name.text)) { - write("\""); + if (/^[A-Za-z_]\w*$/.test(name.text)) { emit(name); - write("\""); } else { + write("\""); emit(name); + write("\""); } } diff --git a/tests/baselines/reference/getEmitOutputTsxFile_React.baseline b/tests/baselines/reference/getEmitOutputTsxFile_React.baseline index c796f8e78bc..57b55c8a1f8 100644 --- a/tests/baselines/reference/getEmitOutputTsxFile_React.baseline +++ b/tests/baselines/reference/getEmitOutputTsxFile_React.baseline @@ -17,9 +17,9 @@ declare class Bar { EmitSkipped: false FileName : tests/cases/fourslash/inputFile2.js.map -{"version":3,"file":"inputFile2.js","sourceRoot":"","sources":["inputFile2.tsx"],"names":[],"mappings":"AAAA,IAAI,CAAC,GAAG,QAAQ,CAAC;AACjB,IAAI,CAAC,GAAG,qBAAC,GAAG,KAAC,IAAI,GAAG,CAAE,EAAG,CAAA"}FileName : tests/cases/fourslash/inputFile2.js +{"version":3,"file":"inputFile2.js","sourceRoot":"","sources":["inputFile2.tsx"],"names":[],"mappings":"AAAA,IAAI,CAAC,GAAG,QAAQ,CAAC;AACjB,IAAI,CAAC,GAAG,qBAAC,GAAG,IAAC,IAAI,EAAG,CAAE,EAAG,CAAA"}FileName : tests/cases/fourslash/inputFile2.js var y = "my div"; -var x = React.createElement("div", {"name": y}); +var x = React.createElement("div", {name: y}); //# sourceMappingURL=inputFile2.js.mapFileName : tests/cases/fourslash/inputFile2.d.ts declare var y: string; declare var x: any; diff --git a/tests/baselines/reference/keywordInJsxIdentifier.js b/tests/baselines/reference/keywordInJsxIdentifier.js index 677a79138e6..39f33449dad 100644 --- a/tests/baselines/reference/keywordInJsxIdentifier.js +++ b/tests/baselines/reference/keywordInJsxIdentifier.js @@ -9,6 +9,6 @@ declare var React: any; //// [keywordInJsxIdentifier.js] React.createElement("foo", {"class-id": true}); -React.createElement("foo", {"class": true}); +React.createElement("foo", {class: true}); React.createElement("foo", {"class-id": "1"}); -React.createElement("foo", {"class": "1"}); +React.createElement("foo", {class: "1"}); diff --git a/tests/baselines/reference/tsxExternalModuleEmit2.js b/tests/baselines/reference/tsxExternalModuleEmit2.js index f8fe6096090..9968fa8d708 100644 --- a/tests/baselines/reference/tsxExternalModuleEmit2.js +++ b/tests/baselines/reference/tsxExternalModuleEmit2.js @@ -20,6 +20,6 @@ declare var Foo, React; //// [app.js] var mod_1 = require('mod'); // Should see mod_1['default'] in emit here -React.createElement(Foo, {"handler": mod_1["default"]}); +React.createElement(Foo, {handler: mod_1["default"]}); // Should see mod_1['default'] in emit here React.createElement(Foo, React.__spread({}, mod_1["default"])); diff --git a/tests/baselines/reference/tsxReactEmit7.errors.txt b/tests/baselines/reference/tsxReactEmit7.errors.txt new file mode 100644 index 00000000000..d2ab2f046e9 --- /dev/null +++ b/tests/baselines/reference/tsxReactEmit7.errors.txt @@ -0,0 +1,50 @@ +tests/cases/conformance/jsx/tsxReactEmit7.tsx(9,10): error TS2304: Cannot find name 'React'. +tests/cases/conformance/jsx/tsxReactEmit7.tsx(10,10): error TS2304: Cannot find name 'React'. +tests/cases/conformance/jsx/tsxReactEmit7.tsx(11,10): error TS2304: Cannot find name 'React'. +tests/cases/conformance/jsx/tsxReactEmit7.tsx(12,10): error TS2304: Cannot find name 'React'. +tests/cases/conformance/jsx/tsxReactEmit7.tsx(15,10): error TS2304: Cannot find name 'React'. +tests/cases/conformance/jsx/tsxReactEmit7.tsx(16,10): error TS2304: Cannot find name 'React'. +tests/cases/conformance/jsx/tsxReactEmit7.tsx(17,10): error TS2304: Cannot find name 'React'. +tests/cases/conformance/jsx/tsxReactEmit7.tsx(18,10): error TS2304: Cannot find name 'React'. +tests/cases/conformance/jsx/tsxReactEmit7.tsx(19,10): error TS2304: Cannot find name 'React'. + + +==== tests/cases/conformance/jsx/tsxReactEmit7.tsx (9 errors) ==== + + declare module JSX { + interface Element { } + interface IntrinsicElements { + [s: string]: any; + } + } + + var m =
; + ~~~ +!!! error TS2304: Cannot find name 'React'. + var n =
; + ~~~ +!!! error TS2304: Cannot find name 'React'. + var o =
; + ~~~ +!!! error TS2304: Cannot find name 'React'. + var p =
; + ~~~ +!!! error TS2304: Cannot find name 'React'. + + // Investigation + var a =
; + ~~~ +!!! error TS2304: Cannot find name 'React'. + var b =
; + ~~~ +!!! error TS2304: Cannot find name 'React'. + var c =
; + ~~~ +!!! error TS2304: Cannot find name 'React'. + var d =
; + ~~~ +!!! error TS2304: Cannot find name 'React'. + var e =
; + ~~~ +!!! error TS2304: Cannot find name 'React'. + \ No newline at end of file diff --git a/tests/baselines/reference/tsxReactEmit7.js b/tests/baselines/reference/tsxReactEmit7.js new file mode 100644 index 00000000000..6340b321b9c --- /dev/null +++ b/tests/baselines/reference/tsxReactEmit7.js @@ -0,0 +1,33 @@ +//// [tsxReactEmit7.tsx] + +declare module JSX { + interface Element { } + interface IntrinsicElements { + [s: string]: any; + } +} + +var m =
; +var n =
; +var o =
; +var p =
; + +// Investigation +var a =
; +var b =
; +var c =
; +var d =
; +var e =
; + + +//// [tsxReactEmit7.js] +var m = React.createElement("div", {"x-y": "val"}); +var n = React.createElement("div", {"xx-y": "val"}); +var o = React.createElement("div", {"x-yy": "val"}); +var p = React.createElement("div", {"xx-yy": "val"}); +// Investigation +var a = React.createElement("div", {x: "val"}); +var b = React.createElement("div", {xx: "val"}); +var c = React.createElement("div", {xxx: "val"}); +var d = React.createElement("div", {xxxx: "val"}); +var e = React.createElement("div", {xxxxx: "val"}); diff --git a/tests/cases/conformance/jsx/tsxReactEmit7.tsx b/tests/cases/conformance/jsx/tsxReactEmit7.tsx new file mode 100644 index 00000000000..847a55d4719 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxReactEmit7.tsx @@ -0,0 +1,22 @@ +//@jsx: react +//@module: commonjs + +//@filename: file.tsx +declare module JSX { + interface Element { } + interface IntrinsicElements { + [s: string]: any; + } +} + +var m =
; +var n =
; +var o =
; +var p =
; + +// Investigation +var a =
; +var b =
; +var c =
; +var d =
; +var e =
;