From b7f60704bb7f6ad941148cab586afd3e26eff41e Mon Sep 17 00:00:00 2001 From: Rowan Wyborn Date: Fri, 18 Dec 2015 21:56:08 +1100 Subject: [PATCH 1/7] Initial check in - Support other JSX factories Issue #3788 - added jsxNamespace compile option - when jsx mode is "react", jsxNamespace optionally specifies the emit namespace for React calls, eg "--jsxNamespace MyDOMLib" will emit calls as MyDOMLib.createElement (instead of React.createElement) - symbol specified by jsxNamespace must be present, else compile error is generated (same handling as is done for React symbol when no jsxNamespace is specified) --- src/compiler/checker.ts | 11 ++++++----- src/compiler/commandLineParser.ts | 5 +++++ src/compiler/diagnosticMessages.json | 4 ++++ src/compiler/emitter.ts | 2 +- src/compiler/types.ts | 1 + 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 2b3852eede..76f218906b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8491,13 +8491,14 @@ namespace ts { checkGrammarJsxElement(node); checkJsxPreconditions(node); - // If we're compiling under --jsx react, the symbol 'React' should + // If we're compiling under --jsx react, the JSX namespace symbol should // be marked as 'used' so we don't incorrectly elide its import. And if there - // is no 'React' symbol in scope, we should issue an error. + // is no JSX namespace symbol in scope, we should issue an error. if (compilerOptions.jsx === JsxEmit.React) { - const reactSym = resolveName(node.tagName, "React", SymbolFlags.Value, Diagnostics.Cannot_find_name_0, "React"); - if (reactSym) { - getSymbolLinks(reactSym).referenced = true; + const jsxNamespace = compilerOptions.jsxNamespace ? compilerOptions.jsxNamespace : "React"; + const jsxSym = resolveName(node.tagName, jsxNamespace, SymbolFlags.Value, Diagnostics.Cannot_find_name_0, jsxNamespace); + if (jsxSym) { + getSymbolLinks(jsxSym).referenced = true; } } diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 034b7022e8..210c6f7293 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -54,6 +54,11 @@ namespace ts { description: Diagnostics.Specify_JSX_code_generation_Colon_preserve_or_react, error: Diagnostics.Argument_for_jsx_must_be_preserve_or_react }, + { + name: "jsxNamespace", + type: "string", + description: Diagnostics.Specify_JSX_emit_namespace_when_JSX_code_generation_mode_is_react + }, { name: "listFiles", type: "boolean", diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 1d1510e6eb..ec57722c9a 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2389,6 +2389,10 @@ "category": "Message", "code": 6083 }, + "Specify JSX emit namespace when JSX code generation mode is 'react'": { + "category": "Message", + "code": 6084 + }, "Variable '{0}' implicitly has an '{1}' type.": { "category": "Error", diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f0b4985473..a5f2228f7e 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1192,7 +1192,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi function emitJsxElement(openingNode: JsxOpeningLikeElement, children?: JsxChild[]) { const syntheticReactRef = createSynthesizedNode(SyntaxKind.Identifier); - syntheticReactRef.text = "React"; + syntheticReactRef.text = compilerOptions.jsxNamespace ? compilerOptions.jsxNamespace : "React"; syntheticReactRef.parent = openingNode; // Call React.createElement(tag, ... diff --git a/src/compiler/types.ts b/src/compiler/types.ts index a8c4ee211c..977b2efac6 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2382,6 +2382,7 @@ namespace ts { inlineSourceMap?: boolean; inlineSources?: boolean; jsx?: JsxEmit; + jsxNamespace? : string; listFiles?: boolean; locale?: string; mapRoot?: string; From 2395890268ebfe6daf053d9c3b3e29555c307226 Mon Sep 17 00:00:00 2001 From: Rowan Wyborn Date: Fri, 18 Dec 2015 22:25:23 +1100 Subject: [PATCH 2/7] fix trailing whitespace --- src/compiler/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 977b2efac6..d09ebfef81 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2382,7 +2382,7 @@ namespace ts { inlineSourceMap?: boolean; inlineSources?: boolean; jsx?: JsxEmit; - jsxNamespace? : string; + jsxNamespace? : string; listFiles?: boolean; locale?: string; mapRoot?: string; From cc1947b94f61b0cb87d1535093b95c8b625353a8 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 7 Jan 2016 13:59:25 -0800 Subject: [PATCH 3/7] Rename jsxNamespace to reactNamespace --- src/compiler/checker.ts | 8 ++++---- src/compiler/commandLineParser.ts | 4 ++-- src/compiler/diagnosticMessages.json | 4 ++-- src/compiler/emitter.ts | 2 +- src/compiler/types.ts | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 0d6cd8706d..8907323c48 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -8360,11 +8360,11 @@ namespace ts { checkGrammarJsxElement(node); checkJsxPreconditions(node); - // The symbol 'React' should be marked as 'used' so we don't incorrectly elide its import. And if there - // is no 'React' symbol in scope when targeting React emit, we should issue an error. + // The reactNamespace symbol should be marked as 'used' so we don't incorrectly elide its import. And if there + // is no reactNamespace symbol in scope when targeting React emit, we should issue an error. const reactRefErr = compilerOptions.jsx === JsxEmit.React ? Diagnostics.Cannot_find_name_0 : undefined; - const jsxNamespace = compilerOptions.jsxNamespace ? compilerOptions.jsxNamespace : "React"; - const reactSym = resolveName(node.tagName, jsxNamespace, SymbolFlags.Value, reactRefErr, jsxNamespace); + const reactNamespace = compilerOptions.reactNamespace ? compilerOptions.reactNamespace : "React"; + const reactSym = resolveName(node.tagName, reactNamespace, SymbolFlags.Value, reactRefErr, reactNamespace); if (reactSym) { getSymbolLinks(reactSym).referenced = true; } diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 457786fdf8..247a204e9b 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -55,9 +55,9 @@ namespace ts { error: Diagnostics.Argument_for_jsx_must_be_preserve_or_react }, { - name: "jsxNamespace", + name: "reactNamespace", type: "string", - description: Diagnostics.Specify_JSX_emit_namespace_when_JSX_code_generation_mode_is_react + description: Diagnostics.Specifies_the_object_invoked_for_createElement_and_spread_when_targeting_react_JSX_emit }, { name: "listFiles", diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index e67b6c31fb..defce6469e 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2393,9 +2393,9 @@ "category": "Message", "code": 6083 }, - "Specify JSX emit namespace when JSX code generation mode is 'react'": { + "Specifies the object invoked for createElement and __spread when targeting 'react' JSX emit": { "category": "Message", - "code": 6084 + "code": 6084 }, "Variable '{0}' implicitly has an '{1}' type.": { diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 547e4a2114..e6286b06aa 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1186,7 +1186,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi function emitJsxElement(openingNode: JsxOpeningLikeElement, children?: JsxChild[]) { const syntheticReactRef = createSynthesizedNode(SyntaxKind.Identifier); - syntheticReactRef.text = compilerOptions.jsxNamespace ? compilerOptions.jsxNamespace : "React"; + syntheticReactRef.text = compilerOptions.reactNamespace ? compilerOptions.reactNamespace : "React"; syntheticReactRef.parent = openingNode; // Call React.createElement(tag, ... diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 499aefe29a..edf3a9d63a 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2382,7 +2382,7 @@ namespace ts { inlineSourceMap?: boolean; inlineSources?: boolean; jsx?: JsxEmit; - jsxNamespace? : string; + reactNamespace?: string; listFiles?: boolean; locale?: string; mapRoot?: string; From 1e433bfb4f5007b752c749d6dd4590606ffd997e Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 7 Jan 2016 14:33:47 -0800 Subject: [PATCH 4/7] Add tests --- .../reactNamespaceImportPresevation.js | 20 +++++++++ .../reactNamespaceImportPresevation.symbols | 20 +++++++++ .../reactNamespaceImportPresevation.types | 22 ++++++++++ .../reference/reactNamespaceJSXEmit.js | 20 +++++++++ .../reference/reactNamespaceJSXEmit.symbols | 32 +++++++++++++++ .../reference/reactNamespaceJSXEmit.types | 41 +++++++++++++++++++ ...eactNamespaceMissingDeclaration.errors.txt | 9 ++++ .../reactNamespaceMissingDeclaration.js | 8 ++++ .../reactNamespaceImportPresevation.tsx | 15 +++++++ .../cases/compiler/reactNamespaceJSXEmit.tsx | 13 ++++++ .../reactNamespaceMissingDeclaration.tsx | 5 +++ 11 files changed, 205 insertions(+) create mode 100644 tests/baselines/reference/reactNamespaceImportPresevation.js create mode 100644 tests/baselines/reference/reactNamespaceImportPresevation.symbols create mode 100644 tests/baselines/reference/reactNamespaceImportPresevation.types create mode 100644 tests/baselines/reference/reactNamespaceJSXEmit.js create mode 100644 tests/baselines/reference/reactNamespaceJSXEmit.symbols create mode 100644 tests/baselines/reference/reactNamespaceJSXEmit.types create mode 100644 tests/baselines/reference/reactNamespaceMissingDeclaration.errors.txt create mode 100644 tests/baselines/reference/reactNamespaceMissingDeclaration.js create mode 100644 tests/cases/compiler/reactNamespaceImportPresevation.tsx create mode 100644 tests/cases/compiler/reactNamespaceJSXEmit.tsx create mode 100644 tests/cases/compiler/reactNamespaceMissingDeclaration.tsx diff --git a/tests/baselines/reference/reactNamespaceImportPresevation.js b/tests/baselines/reference/reactNamespaceImportPresevation.js new file mode 100644 index 0000000000..5c44674d03 --- /dev/null +++ b/tests/baselines/reference/reactNamespaceImportPresevation.js @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/reactNamespaceImportPresevation.tsx] //// + +//// [modules.d.ts] + +declare module "my-React-Lib" { + var a: any; + export = a; +} + +//// [test.tsx] +import * as myReactLib from "my-React-Lib"; // should not be elided +declare var foo: any; + +; + + +//// [test.jsx] +"use strict"; +var myReactLib = require("my-React-Lib"); // should not be elided +; diff --git a/tests/baselines/reference/reactNamespaceImportPresevation.symbols b/tests/baselines/reference/reactNamespaceImportPresevation.symbols new file mode 100644 index 0000000000..8a4407c816 --- /dev/null +++ b/tests/baselines/reference/reactNamespaceImportPresevation.symbols @@ -0,0 +1,20 @@ +=== tests/cases/compiler/modules.d.ts === + +declare module "my-React-Lib" { + var a: any; +>a : Symbol(a, Decl(modules.d.ts, 2, 7)) + + export = a; +>a : Symbol(a, Decl(modules.d.ts, 2, 7)) +} + +=== tests/cases/compiler/test.tsx === +import * as myReactLib from "my-React-Lib"; // should not be elided +>myReactLib : Symbol(myReactLib, Decl(test.tsx, 0, 6)) + +declare var foo: any; +>foo : Symbol(foo, Decl(test.tsx, 1, 11)) + +; +>data : Symbol(unknown) + diff --git a/tests/baselines/reference/reactNamespaceImportPresevation.types b/tests/baselines/reference/reactNamespaceImportPresevation.types new file mode 100644 index 0000000000..adb1d60d2d --- /dev/null +++ b/tests/baselines/reference/reactNamespaceImportPresevation.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/modules.d.ts === + +declare module "my-React-Lib" { + var a: any; +>a : any + + export = a; +>a : any +} + +=== tests/cases/compiler/test.tsx === +import * as myReactLib from "my-React-Lib"; // should not be elided +>myReactLib : any + +declare var foo: any; +>foo : any + +; +> : any +>foo : any +>data : any + diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.js b/tests/baselines/reference/reactNamespaceJSXEmit.js new file mode 100644 index 0000000000..26967d56b7 --- /dev/null +++ b/tests/baselines/reference/reactNamespaceJSXEmit.js @@ -0,0 +1,20 @@ +//// [reactNamespaceJSXEmit.tsx] + +declare var myReactLib: any; +declare var foo: any; +declare var Bar: any; +declare var x: any; + +; +; +; +; +; + + +//// [reactNamespaceJSXEmit.js] +myReactLib.createElement("foo", {data: true}); +myReactLib.createElement(Bar, {x: x}); +myReactLib.createElement("x-component", null); +myReactLib.createElement(Bar, myReactLib.__spread({}, x)); +myReactLib.createElement(Bar, myReactLib.__spread({}, x, {y: 2})); diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.symbols b/tests/baselines/reference/reactNamespaceJSXEmit.symbols new file mode 100644 index 0000000000..d79c1cf531 --- /dev/null +++ b/tests/baselines/reference/reactNamespaceJSXEmit.symbols @@ -0,0 +1,32 @@ +=== tests/cases/compiler/reactNamespaceJSXEmit.tsx === + +declare var myReactLib: any; +>myReactLib : Symbol(myReactLib, Decl(reactNamespaceJSXEmit.tsx, 1, 11)) + +declare var foo: any; +>foo : Symbol(foo, 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, 4, 11)) + +; +>data : Symbol(unknown) + +; +>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11)) +>x : Symbol(unknown) +>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11)) + +; +; +>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11)) +>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11)) + +; +>Bar : Symbol(Bar, Decl(reactNamespaceJSXEmit.tsx, 3, 11)) +>x : Symbol(x, Decl(reactNamespaceJSXEmit.tsx, 4, 11)) +>y : Symbol(unknown) + diff --git a/tests/baselines/reference/reactNamespaceJSXEmit.types b/tests/baselines/reference/reactNamespaceJSXEmit.types new file mode 100644 index 0000000000..06c803ef7f --- /dev/null +++ b/tests/baselines/reference/reactNamespaceJSXEmit.types @@ -0,0 +1,41 @@ +=== tests/cases/compiler/reactNamespaceJSXEmit.tsx === + +declare var myReactLib: any; +>myReactLib : any + +declare var foo: any; +>foo : any + +declare var Bar: any; +>Bar : any + +declare var x: any; +>x : any + +; +> : any +>foo : any +>data : any + +; +> : any +>Bar : any +>x : any +>x : any + +; +> : any +>x-component : any + +; +> : any +>Bar : any +>x : any + +; +> : any +>Bar : any +>x : any +>y : any +>2 : number + diff --git a/tests/baselines/reference/reactNamespaceMissingDeclaration.errors.txt b/tests/baselines/reference/reactNamespaceMissingDeclaration.errors.txt new file mode 100644 index 0000000000..f87d223f82 --- /dev/null +++ b/tests/baselines/reference/reactNamespaceMissingDeclaration.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/reactNamespaceMissingDeclaration.tsx(3,2): error TS2304: Cannot find name 'myReactLib'. + + +==== tests/cases/compiler/reactNamespaceMissingDeclaration.tsx (1 errors) ==== + + // Error myReactLib not declared + + ~~~ +!!! error TS2304: Cannot find name 'myReactLib'. \ No newline at end of file diff --git a/tests/baselines/reference/reactNamespaceMissingDeclaration.js b/tests/baselines/reference/reactNamespaceMissingDeclaration.js new file mode 100644 index 0000000000..d972f319f8 --- /dev/null +++ b/tests/baselines/reference/reactNamespaceMissingDeclaration.js @@ -0,0 +1,8 @@ +//// [reactNamespaceMissingDeclaration.tsx] + +// Error myReactLib not declared + + +//// [reactNamespaceMissingDeclaration.js] +// Error myReactLib not declared +myReactLib.createElement("foo", {data: true}); diff --git a/tests/cases/compiler/reactNamespaceImportPresevation.tsx b/tests/cases/compiler/reactNamespaceImportPresevation.tsx new file mode 100644 index 0000000000..ec7e5d0d6a --- /dev/null +++ b/tests/cases/compiler/reactNamespaceImportPresevation.tsx @@ -0,0 +1,15 @@ +//@jsx: preserve +//@module: commonjs +//@reactNamespace: myReactLib + +//@filename: modules.d.ts +declare module "my-React-Lib" { + var a: any; + export = a; +} + +//@filename: test.tsx +import * as myReactLib from "my-React-Lib"; // should not be elided +declare var foo: any; + +; diff --git a/tests/cases/compiler/reactNamespaceJSXEmit.tsx b/tests/cases/compiler/reactNamespaceJSXEmit.tsx new file mode 100644 index 0000000000..a3ed9aea4e --- /dev/null +++ b/tests/cases/compiler/reactNamespaceJSXEmit.tsx @@ -0,0 +1,13 @@ +//@jsx: react +//@reactNamespace: myReactLib + +declare var myReactLib: any; +declare var foo: any; +declare var Bar: any; +declare var x: any; + +; +; +; +; +; diff --git a/tests/cases/compiler/reactNamespaceMissingDeclaration.tsx b/tests/cases/compiler/reactNamespaceMissingDeclaration.tsx new file mode 100644 index 0000000000..fdfed62960 --- /dev/null +++ b/tests/cases/compiler/reactNamespaceMissingDeclaration.tsx @@ -0,0 +1,5 @@ +//@jsx: react +//@reactNamespace: myReactLib + +// Error myReactLib not declared + \ No newline at end of file From 9b92697a61fc65867689364af7bfbc53fefc58e0 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 7 Jan 2016 14:56:05 -0800 Subject: [PATCH 5/7] Add new helper to check for valid identifiers --- src/compiler/scanner.ts | 15 +++++++++++++++ src/services/services.ts | 8 +------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 6c0489ff1d..8161ea998c 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -688,6 +688,21 @@ namespace ts { ch > CharacterCodes.maxAsciiCharacter && isUnicodeIdentifierPart(ch, languageVersion); } + /* @internal */ + export function isIdentifier(name: string, languageVersion: ScriptTarget): boolean { + if (!isIdentifierStart(name.charCodeAt(0), languageVersion)) { + return false; + } + + for (let i = 1, n = name.length; i < n; i++) { + if (!isIdentifierPart(name.charCodeAt(i), languageVersion)) { + return false; + } + } + + return true; + } + // Creates a scanner over a (possibly unspecified) range of a piece of text. export function createScanner(languageVersion: ScriptTarget, skipTrivia: boolean, diff --git a/src/services/services.ts b/src/services/services.ts index f265116361..4efd87555a 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2978,15 +2978,9 @@ namespace ts { // e.g "b a" is valid quoted name but when we strip off the quotes, it is invalid. // We, thus, need to check if whatever was inside the quotes is actually a valid identifier name. if (performCharacterChecks) { - if (!isIdentifierStart(name.charCodeAt(0), target)) { + if (!isIdentifier(name, target)) { return undefined; } - - for (let i = 1, n = name.length; i < n; i++) { - if (!isIdentifierPart(name.charCodeAt(i), target)) { - return undefined; - } - } } return name; From ec70105c9dd4099d093fb91191862b9b21a4d600 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 7 Jan 2016 15:00:50 -0800 Subject: [PATCH 6/7] Add check for reactNamespace value --- src/compiler/diagnosticMessages.json | 4 ++++ src/compiler/program.ts | 4 ++++ .../reference/reactNamespaceInvalidInput.errors.txt | 11 +++++++++++ .../baselines/reference/reactNamespaceInvalidInput.js | 7 +++++++ tests/cases/compiler/reactNamespaceInvalidInput.tsx | 4 ++++ 5 files changed, 30 insertions(+) create mode 100644 tests/baselines/reference/reactNamespaceInvalidInput.errors.txt create mode 100644 tests/baselines/reference/reactNamespaceInvalidInput.js create mode 100644 tests/cases/compiler/reactNamespaceInvalidInput.tsx diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index defce6469e..dbdd09fdda 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -2123,6 +2123,10 @@ "category": "Error", "code": 5058 }, + "Invalide value for '--reactNamespace'. '{0}' is not a valid identifier.": { + "category": "Error", + "code": 5059 + }, "Concatenate and emit output to single file.": { "category": "Message", diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 349c4a86ef..6905e01b1e 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1305,6 +1305,10 @@ namespace ts { programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDecoratorMetadata", "experimentalDecorators")); } + if (options.reactNamespace && !isIdentifier(options.reactNamespace, languageVersion)) { + programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Invalide_value_for_reactNamespace_0_is_not_a_valid_identifier, options.reactNamespace)); + } + // If the emit is enabled make sure that every output file is unique and not overwriting any of the input files if (!options.noEmit) { const emitHost = getEmitHost(); diff --git a/tests/baselines/reference/reactNamespaceInvalidInput.errors.txt b/tests/baselines/reference/reactNamespaceInvalidInput.errors.txt new file mode 100644 index 0000000000..e08ec52086 --- /dev/null +++ b/tests/baselines/reference/reactNamespaceInvalidInput.errors.txt @@ -0,0 +1,11 @@ +error TS5059: Invalide value for '--reactNamespace'. 'my-React-Lib' is not a valid identifier. +tests/cases/compiler/reactNamespaceInvalidInput.tsx(2,2): error TS2304: Cannot find name 'my-React-Lib'. + + +!!! error TS5059: Invalide value for '--reactNamespace'. 'my-React-Lib' is not a valid identifier. +==== tests/cases/compiler/reactNamespaceInvalidInput.tsx (1 errors) ==== + + ; + ~~~ +!!! error TS2304: Cannot find name 'my-React-Lib'. + \ No newline at end of file diff --git a/tests/baselines/reference/reactNamespaceInvalidInput.js b/tests/baselines/reference/reactNamespaceInvalidInput.js new file mode 100644 index 0000000000..bf079d6b9a --- /dev/null +++ b/tests/baselines/reference/reactNamespaceInvalidInput.js @@ -0,0 +1,7 @@ +//// [reactNamespaceInvalidInput.tsx] + +; + + +//// [reactNamespaceInvalidInput.js] +my-React-Lib.createElement("foo", {data: true}); diff --git a/tests/cases/compiler/reactNamespaceInvalidInput.tsx b/tests/cases/compiler/reactNamespaceInvalidInput.tsx new file mode 100644 index 0000000000..a8595de5d6 --- /dev/null +++ b/tests/cases/compiler/reactNamespaceInvalidInput.tsx @@ -0,0 +1,4 @@ +//@jsx: react +//@reactNamespace: my-React-Lib + +; From 8f273dca62f05bf3dbfa64a36df60b484211ced3 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Thu, 7 Jan 2016 15:01:00 -0800 Subject: [PATCH 7/7] Fix whitespaces --- tests/cases/compiler/reactNamespaceJSXEmit.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/cases/compiler/reactNamespaceJSXEmit.tsx b/tests/cases/compiler/reactNamespaceJSXEmit.tsx index a3ed9aea4e..f5ec957a78 100644 --- a/tests/cases/compiler/reactNamespaceJSXEmit.tsx +++ b/tests/cases/compiler/reactNamespaceJSXEmit.tsx @@ -2,12 +2,12 @@ //@reactNamespace: myReactLib declare var myReactLib: any; -declare var foo: any; +declare var foo: any; declare var Bar: any; declare var x: any; ; -; -; -; -; +; +; +; +;