commit
719498eb0f
|
@ -7299,6 +7299,16 @@ namespace ts {
|
|||
checkGrammarJsxElement(node);
|
||||
checkJsxPreconditions(node);
|
||||
|
||||
// If we're compiling under --jsx react, 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, we should issue an error.
|
||||
if (compilerOptions.jsx === JsxEmit.React) {
|
||||
let reactSym = resolveName(node.tagName, 'React', SymbolFlags.Value, Diagnostics.Cannot_find_name_0, 'React');
|
||||
if (reactSym) {
|
||||
getSymbolLinks(reactSym).referenced = true;
|
||||
}
|
||||
}
|
||||
|
||||
let targetAttributesType = getJsxElementAttributesType(node);
|
||||
|
||||
if (getNodeLinks(node).jsxFlags & JsxFlags.ClassElement) {
|
||||
|
|
36
tests/baselines/reference/tsxElementResolution19.js
Normal file
36
tests/baselines/reference/tsxElementResolution19.js
Normal file
|
@ -0,0 +1,36 @@
|
|||
//// [tests/cases/conformance/jsx/tsxElementResolution19.tsx] ////
|
||||
|
||||
//// [react.d.ts]
|
||||
|
||||
declare module "react" {
|
||||
|
||||
}
|
||||
|
||||
//// [file1.tsx]
|
||||
declare module JSX {
|
||||
interface Element { }
|
||||
}
|
||||
export class MyClass { }
|
||||
|
||||
//// [file2.tsx]
|
||||
|
||||
// Should not elide React import
|
||||
import * as React from 'react';
|
||||
import {MyClass} from './file1';
|
||||
|
||||
<MyClass />;
|
||||
|
||||
|
||||
//// [file1.js]
|
||||
define(["require", "exports"], function (require, exports) {
|
||||
var MyClass = (function () {
|
||||
function MyClass() {
|
||||
}
|
||||
return MyClass;
|
||||
})();
|
||||
exports.MyClass = MyClass;
|
||||
});
|
||||
//// [file2.js]
|
||||
define(["require", "exports", 'react', './file1'], function (require, exports, React, file1_1) {
|
||||
React.createElement(file1_1.MyClass, null);
|
||||
});
|
28
tests/baselines/reference/tsxElementResolution19.symbols
Normal file
28
tests/baselines/reference/tsxElementResolution19.symbols
Normal file
|
@ -0,0 +1,28 @@
|
|||
=== tests/cases/conformance/jsx/react.d.ts ===
|
||||
|
||||
No type information for this code.declare module "react" {
|
||||
No type information for this code.
|
||||
No type information for this code.}
|
||||
No type information for this code.
|
||||
No type information for this code.=== tests/cases/conformance/jsx/file1.tsx ===
|
||||
declare module JSX {
|
||||
>JSX : Symbol(JSX, Decl(file1.tsx, 0, 0))
|
||||
|
||||
interface Element { }
|
||||
>Element : Symbol(Element, Decl(file1.tsx, 0, 20))
|
||||
}
|
||||
export class MyClass { }
|
||||
>MyClass : Symbol(MyClass, Decl(file1.tsx, 2, 1))
|
||||
|
||||
=== tests/cases/conformance/jsx/file2.tsx ===
|
||||
|
||||
// Should not elide React import
|
||||
import * as React from 'react';
|
||||
>React : Symbol(React, Decl(file2.tsx, 2, 6))
|
||||
|
||||
import {MyClass} from './file1';
|
||||
>MyClass : Symbol(MyClass, Decl(file2.tsx, 3, 8))
|
||||
|
||||
<MyClass />;
|
||||
>MyClass : Symbol(MyClass, Decl(file2.tsx, 3, 8))
|
||||
|
29
tests/baselines/reference/tsxElementResolution19.types
Normal file
29
tests/baselines/reference/tsxElementResolution19.types
Normal file
|
@ -0,0 +1,29 @@
|
|||
=== tests/cases/conformance/jsx/react.d.ts ===
|
||||
|
||||
No type information for this code.declare module "react" {
|
||||
No type information for this code.
|
||||
No type information for this code.}
|
||||
No type information for this code.
|
||||
No type information for this code.=== tests/cases/conformance/jsx/file1.tsx ===
|
||||
declare module JSX {
|
||||
>JSX : any
|
||||
|
||||
interface Element { }
|
||||
>Element : Element
|
||||
}
|
||||
export class MyClass { }
|
||||
>MyClass : MyClass
|
||||
|
||||
=== tests/cases/conformance/jsx/file2.tsx ===
|
||||
|
||||
// Should not elide React import
|
||||
import * as React from 'react';
|
||||
>React : typeof React
|
||||
|
||||
import {MyClass} from './file1';
|
||||
>MyClass : typeof MyClass
|
||||
|
||||
<MyClass />;
|
||||
><MyClass /> : any
|
||||
>MyClass : typeof MyClass
|
||||
|
|
@ -5,6 +5,7 @@ declare module JSX {
|
|||
[s: string]: any;
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
|
||||
var p;
|
||||
var selfClosed1 = <div />;
|
||||
|
|
|
@ -12,133 +12,135 @@ declare module JSX {
|
|||
>s : Symbol(s, Decl(tsxReactEmit1.tsx, 3, 3))
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
>React : Symbol(React, Decl(tsxReactEmit1.tsx, 6, 11))
|
||||
|
||||
var p;
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
|
||||
var selfClosed1 = <div />;
|
||||
>selfClosed1 : Symbol(selfClosed1, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
>selfClosed1 : Symbol(selfClosed1, Decl(tsxReactEmit1.tsx, 9, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
|
||||
var selfClosed2 = <div x="1" />;
|
||||
>selfClosed2 : Symbol(selfClosed2, Decl(tsxReactEmit1.tsx, 9, 3))
|
||||
>selfClosed2 : Symbol(selfClosed2, Decl(tsxReactEmit1.tsx, 10, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>x : Symbol(unknown)
|
||||
|
||||
var selfClosed3 = <div x='1' />;
|
||||
>selfClosed3 : Symbol(selfClosed3, Decl(tsxReactEmit1.tsx, 10, 3))
|
||||
>selfClosed3 : Symbol(selfClosed3, Decl(tsxReactEmit1.tsx, 11, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>x : Symbol(unknown)
|
||||
|
||||
var selfClosed4 = <div x="1" y='0' />;
|
||||
>selfClosed4 : Symbol(selfClosed4, Decl(tsxReactEmit1.tsx, 11, 3))
|
||||
>selfClosed4 : Symbol(selfClosed4, Decl(tsxReactEmit1.tsx, 12, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>x : Symbol(unknown)
|
||||
>y : Symbol(unknown)
|
||||
|
||||
var selfClosed5 = <div x={0} y='0' />;
|
||||
>selfClosed5 : Symbol(selfClosed5, Decl(tsxReactEmit1.tsx, 12, 3))
|
||||
>selfClosed5 : Symbol(selfClosed5, Decl(tsxReactEmit1.tsx, 13, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>x : Symbol(unknown)
|
||||
>y : Symbol(unknown)
|
||||
|
||||
var selfClosed6 = <div x={"1"} y='0' />;
|
||||
>selfClosed6 : Symbol(selfClosed6, Decl(tsxReactEmit1.tsx, 13, 3))
|
||||
>selfClosed6 : Symbol(selfClosed6, Decl(tsxReactEmit1.tsx, 14, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>x : Symbol(unknown)
|
||||
>y : Symbol(unknown)
|
||||
|
||||
var selfClosed7 = <div x={p} y='p' b />;
|
||||
>selfClosed7 : Symbol(selfClosed7, Decl(tsxReactEmit1.tsx, 14, 3))
|
||||
>selfClosed7 : Symbol(selfClosed7, Decl(tsxReactEmit1.tsx, 15, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>x : Symbol(unknown)
|
||||
>y : Symbol(unknown)
|
||||
>b : Symbol(unknown)
|
||||
|
||||
var openClosed1 = <div></div>;
|
||||
>openClosed1 : Symbol(openClosed1, Decl(tsxReactEmit1.tsx, 16, 3))
|
||||
>openClosed1 : Symbol(openClosed1, Decl(tsxReactEmit1.tsx, 17, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
|
||||
var openClosed2 = <div n='m'>foo</div>;
|
||||
>openClosed2 : Symbol(openClosed2, Decl(tsxReactEmit1.tsx, 17, 3))
|
||||
>openClosed2 : Symbol(openClosed2, Decl(tsxReactEmit1.tsx, 18, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>n : Symbol(unknown)
|
||||
|
||||
var openClosed3 = <div n='m'>{p}</div>;
|
||||
>openClosed3 : Symbol(openClosed3, Decl(tsxReactEmit1.tsx, 18, 3))
|
||||
>openClosed3 : Symbol(openClosed3, Decl(tsxReactEmit1.tsx, 19, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>n : Symbol(unknown)
|
||||
|
||||
var openClosed4 = <div n='m'>{p < p}</div>;
|
||||
>openClosed4 : Symbol(openClosed4, Decl(tsxReactEmit1.tsx, 19, 3))
|
||||
>openClosed4 : Symbol(openClosed4, Decl(tsxReactEmit1.tsx, 20, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>n : Symbol(unknown)
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
|
||||
var openClosed5 = <div n='m' b>{p > p}</div>;
|
||||
>openClosed5 : Symbol(openClosed5, Decl(tsxReactEmit1.tsx, 20, 3))
|
||||
>openClosed5 : Symbol(openClosed5, Decl(tsxReactEmit1.tsx, 21, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>n : Symbol(unknown)
|
||||
>b : Symbol(unknown)
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
|
||||
class SomeClass {
|
||||
>SomeClass : Symbol(SomeClass, Decl(tsxReactEmit1.tsx, 20, 45))
|
||||
>SomeClass : Symbol(SomeClass, Decl(tsxReactEmit1.tsx, 21, 45))
|
||||
|
||||
f() {
|
||||
>f : Symbol(f, Decl(tsxReactEmit1.tsx, 22, 17))
|
||||
>f : Symbol(f, Decl(tsxReactEmit1.tsx, 23, 17))
|
||||
|
||||
var rewrites1 = <div>{() => this}</div>;
|
||||
>rewrites1 : Symbol(rewrites1, Decl(tsxReactEmit1.tsx, 24, 5))
|
||||
>rewrites1 : Symbol(rewrites1, Decl(tsxReactEmit1.tsx, 25, 5))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>this : Symbol(SomeClass, Decl(tsxReactEmit1.tsx, 20, 45))
|
||||
>this : Symbol(SomeClass, Decl(tsxReactEmit1.tsx, 21, 45))
|
||||
|
||||
var rewrites2 = <div>{[p, ...p, p]}</div>;
|
||||
>rewrites2 : Symbol(rewrites2, Decl(tsxReactEmit1.tsx, 25, 5))
|
||||
>rewrites2 : Symbol(rewrites2, Decl(tsxReactEmit1.tsx, 26, 5))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
|
||||
var rewrites3 = <div>{{p}}</div>;
|
||||
>rewrites3 : Symbol(rewrites3, Decl(tsxReactEmit1.tsx, 26, 5))
|
||||
>rewrites3 : Symbol(rewrites3, Decl(tsxReactEmit1.tsx, 27, 5))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 26, 25))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 27, 25))
|
||||
|
||||
var rewrites4 = <div a={() => this}></div>;
|
||||
>rewrites4 : Symbol(rewrites4, Decl(tsxReactEmit1.tsx, 28, 5))
|
||||
>rewrites4 : Symbol(rewrites4, Decl(tsxReactEmit1.tsx, 29, 5))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>a : Symbol(unknown)
|
||||
>this : Symbol(SomeClass, Decl(tsxReactEmit1.tsx, 20, 45))
|
||||
>this : Symbol(SomeClass, Decl(tsxReactEmit1.tsx, 21, 45))
|
||||
|
||||
var rewrites5 = <div a={[p, ...p, p]}></div>;
|
||||
>rewrites5 : Symbol(rewrites5, Decl(tsxReactEmit1.tsx, 29, 5))
|
||||
>rewrites5 : Symbol(rewrites5, Decl(tsxReactEmit1.tsx, 30, 5))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>a : Symbol(unknown)
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 7, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
|
||||
|
||||
var rewrites6 = <div a={{p}}></div>;
|
||||
>rewrites6 : Symbol(rewrites6, Decl(tsxReactEmit1.tsx, 30, 5))
|
||||
>rewrites6 : Symbol(rewrites6, Decl(tsxReactEmit1.tsx, 31, 5))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
>a : Symbol(unknown)
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 30, 27))
|
||||
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 31, 27))
|
||||
}
|
||||
}
|
||||
|
||||
var whitespace1 = <div> </div>;
|
||||
>whitespace1 : Symbol(whitespace1, Decl(tsxReactEmit1.tsx, 34, 3))
|
||||
>whitespace1 : Symbol(whitespace1, Decl(tsxReactEmit1.tsx, 35, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
|
||||
var whitespace2 = <div> {p} </div>;
|
||||
>whitespace2 : Symbol(whitespace2, Decl(tsxReactEmit1.tsx, 35, 3))
|
||||
>whitespace2 : Symbol(whitespace2, Decl(tsxReactEmit1.tsx, 36, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
|
||||
var whitespace3 = <div>
|
||||
>whitespace3 : Symbol(whitespace3, Decl(tsxReactEmit1.tsx, 36, 3))
|
||||
>whitespace3 : Symbol(whitespace3, Decl(tsxReactEmit1.tsx, 37, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
|
||||
|
||||
{p}
|
||||
|
|
|
@ -12,6 +12,8 @@ declare module JSX {
|
|||
>s : string
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
>React : any
|
||||
|
||||
var p;
|
||||
>p : any
|
||||
|
|
|
@ -5,6 +5,7 @@ declare module JSX {
|
|||
[s: string]: any;
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
|
||||
var p1, p2, p3;
|
||||
var spreads1 = <div {...p1}>{p2}</div>;
|
||||
|
|
|
@ -12,32 +12,34 @@ declare module JSX {
|
|||
>s : Symbol(s, Decl(tsxReactEmit2.tsx, 3, 3))
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
>React : Symbol(React, Decl(tsxReactEmit2.tsx, 6, 11))
|
||||
|
||||
var p1, p2, p3;
|
||||
>p1 : Symbol(p1, Decl(tsxReactEmit2.tsx, 7, 3))
|
||||
>p2 : Symbol(p2, Decl(tsxReactEmit2.tsx, 7, 7))
|
||||
>p3 : Symbol(p3, Decl(tsxReactEmit2.tsx, 7, 11))
|
||||
>p1 : Symbol(p1, Decl(tsxReactEmit2.tsx, 8, 3))
|
||||
>p2 : Symbol(p2, Decl(tsxReactEmit2.tsx, 8, 7))
|
||||
>p3 : Symbol(p3, Decl(tsxReactEmit2.tsx, 8, 11))
|
||||
|
||||
var spreads1 = <div {...p1}>{p2}</div>;
|
||||
>spreads1 : Symbol(spreads1, Decl(tsxReactEmit2.tsx, 8, 3))
|
||||
>spreads1 : Symbol(spreads1, Decl(tsxReactEmit2.tsx, 9, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
|
||||
|
||||
var spreads2 = <div {...p1}>{p2}</div>;
|
||||
>spreads2 : Symbol(spreads2, Decl(tsxReactEmit2.tsx, 9, 3))
|
||||
>spreads2 : Symbol(spreads2, Decl(tsxReactEmit2.tsx, 10, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
|
||||
|
||||
var spreads3 = <div x={p3} {...p1}>{p2}</div>;
|
||||
>spreads3 : Symbol(spreads3, Decl(tsxReactEmit2.tsx, 10, 3))
|
||||
>spreads3 : Symbol(spreads3, Decl(tsxReactEmit2.tsx, 11, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
|
||||
>x : Symbol(unknown)
|
||||
|
||||
var spreads4 = <div {...p1} x={p3} >{p2}</div>;
|
||||
>spreads4 : Symbol(spreads4, Decl(tsxReactEmit2.tsx, 11, 3))
|
||||
>spreads4 : Symbol(spreads4, Decl(tsxReactEmit2.tsx, 12, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
|
||||
>x : Symbol(unknown)
|
||||
|
||||
var spreads5 = <div x={p2} {...p1} y={p3}>{p2}</div>;
|
||||
>spreads5 : Symbol(spreads5, Decl(tsxReactEmit2.tsx, 12, 3))
|
||||
>spreads5 : Symbol(spreads5, Decl(tsxReactEmit2.tsx, 13, 3))
|
||||
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
|
||||
>x : Symbol(unknown)
|
||||
>y : Symbol(unknown)
|
||||
|
|
|
@ -12,6 +12,8 @@ declare module JSX {
|
|||
>s : string
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
>React : any
|
||||
|
||||
var p1, p2, p3;
|
||||
>p1 : any
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
//// [tsxReactEmit3.tsx]
|
||||
|
||||
declare module JSX { interface Element { } }
|
||||
declare var React: any;
|
||||
|
||||
declare var Foo, Bar, baz;
|
||||
|
||||
|
|
|
@ -4,15 +4,18 @@ declare module JSX { interface Element { } }
|
|||
>JSX : Symbol(JSX, Decl(tsxReactEmit3.tsx, 0, 0))
|
||||
>Element : Symbol(Element, Decl(tsxReactEmit3.tsx, 1, 20))
|
||||
|
||||
declare var React: any;
|
||||
>React : Symbol(React, Decl(tsxReactEmit3.tsx, 2, 11))
|
||||
|
||||
declare var Foo, Bar, baz;
|
||||
>Foo : Symbol(Foo, Decl(tsxReactEmit3.tsx, 3, 11))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 3, 16))
|
||||
>baz : Symbol(baz, Decl(tsxReactEmit3.tsx, 3, 21))
|
||||
>Foo : Symbol(Foo, Decl(tsxReactEmit3.tsx, 4, 11))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 4, 16))
|
||||
>baz : Symbol(baz, Decl(tsxReactEmit3.tsx, 4, 21))
|
||||
|
||||
<Foo> <Bar> q </Bar> <Bar/> s <Bar/><Bar/></Foo>;
|
||||
>Foo : Symbol(Foo, Decl(tsxReactEmit3.tsx, 3, 11))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 3, 16))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 3, 16))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 3, 16))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 3, 16))
|
||||
>Foo : Symbol(Foo, Decl(tsxReactEmit3.tsx, 4, 11))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 4, 16))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 4, 16))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 4, 16))
|
||||
>Bar : Symbol(Bar, Decl(tsxReactEmit3.tsx, 4, 16))
|
||||
|
||||
|
|
|
@ -4,6 +4,9 @@ declare module JSX { interface Element { } }
|
|||
>JSX : any
|
||||
>Element : Element
|
||||
|
||||
declare var React: any;
|
||||
>React : any
|
||||
|
||||
declare var Foo, Bar, baz;
|
||||
>Foo : any
|
||||
>Bar : any
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
tests/cases/conformance/jsx/tsxReactEmit4.tsx(11,5): error TS2304: Cannot find name 'blah'.
|
||||
tests/cases/conformance/jsx/tsxReactEmit4.tsx(12,5): error TS2304: Cannot find name 'blah'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/jsx/tsxReactEmit4.tsx (1 errors) ====
|
||||
|
@ -8,6 +8,7 @@ tests/cases/conformance/jsx/tsxReactEmit4.tsx(11,5): error TS2304: Cannot find n
|
|||
[s: string]: any;
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
|
||||
var p;
|
||||
var openClosed1 = <div>
|
||||
|
|
|
@ -5,6 +5,7 @@ declare module JSX {
|
|||
[s: string]: any;
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
|
||||
var p;
|
||||
var openClosed1 = <div>
|
||||
|
|
|
@ -5,6 +5,7 @@ declare module JSX {
|
|||
[s: string]: any;
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
|
||||
// THIS FILE HAS TEST-SIGNIFICANT LEADING/TRAILING
|
||||
// WHITESPACE, DO NOT RUN 'FORMAT DOCUMENT' ON IT
|
||||
|
|
|
@ -12,12 +12,14 @@ declare module JSX {
|
|||
>s : Symbol(s, Decl(tsxReactEmitWhitespace.tsx, 3, 3))
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
>React : Symbol(React, Decl(tsxReactEmitWhitespace.tsx, 6, 11))
|
||||
|
||||
// THIS FILE HAS TEST-SIGNIFICANT LEADING/TRAILING
|
||||
// WHITESPACE, DO NOT RUN 'FORMAT DOCUMENT' ON IT
|
||||
|
||||
var p = 0;
|
||||
>p : Symbol(p, Decl(tsxReactEmitWhitespace.tsx, 10, 3))
|
||||
>p : Symbol(p, Decl(tsxReactEmitWhitespace.tsx, 11, 3))
|
||||
|
||||
// Emit " "
|
||||
<div> </div>;
|
||||
|
|
|
@ -12,6 +12,8 @@ declare module JSX {
|
|||
>s : string
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
>React : any
|
||||
|
||||
// THIS FILE HAS TEST-SIGNIFICANT LEADING/TRAILING
|
||||
// WHITESPACE, DO NOT RUN 'FORMAT DOCUMENT' ON IT
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
// OK
|
||||
<test1 x={0}/>; // OK
|
||||
<test1 />; // OK
|
||||
<test1 data-x={true}/>; // OK
|
||||
<test2 reqd='true'/>; // OK
|
||||
<test2 reqd={'true'}/>; // OK
|
||||
// Errors
|
||||
<test1 x={'0'}/>; // Error, '0' is not number
|
||||
<test1 y={0}/>; // Error, no property "y"
|
||||
<test1 y="foo"/>; // Error, no property "y"
|
||||
<test1 x="32"/>; // Error, "32" is not number
|
||||
// TODO attribute 'var' should be parseable
|
||||
// <test1 var="10" />; // Error, no 'var' property
|
||||
<test2 />; // Error, missing reqd
|
||||
<test2 reqd={10}/>; // Error, reqd is not string
|
|
@ -1,5 +0,0 @@
|
|||
// OK
|
||||
<test1 c1={function (x) { return x.length; }}/>; // OK
|
||||
<test1 data-c1={function (x) { return x.leng; }}/>; // OK
|
||||
// Errors
|
||||
<test1 c1={function (x) { return x.leng; }}/>; // Error, no leng on 'string'
|
|
@ -1,21 +0,0 @@
|
|||
// OK
|
||||
var obj1 = { x: 'foo' };
|
||||
<test1 {...obj1}/>;
|
||||
// Error, x is not string
|
||||
var obj2 = { x: 32 };
|
||||
<test1 {...obj2}/>;
|
||||
// Error, x is missing
|
||||
var obj3 = { y: 32 };
|
||||
<test1 {...obj3}/>;
|
||||
// OK
|
||||
var obj4 = { x: 32, y: 32 };
|
||||
<test1 {...obj4} x="ok"/>;
|
||||
// Error
|
||||
var obj5 = { x: 32, y: 32 };
|
||||
<test1 x="ok" {...obj5}/>;
|
||||
// OK
|
||||
var obj6 = { x: 'ok', y: 32, extra: 100 };
|
||||
<test1 {...obj6}/>;
|
||||
// Error
|
||||
var obj7 = { x: 'foo' };
|
||||
<test1 x={32} {...obj7}/>;
|
|
@ -1,4 +0,0 @@
|
|||
// OK
|
||||
<test1 {...{ x: function (n) { return 0; } }}/>;
|
||||
// Error, no member 'len' on 'string'
|
||||
<test1 {...{ x: function (n) { return n.len; } }}/>;
|
|
@ -1,11 +0,0 @@
|
|||
function make1(obj) {
|
||||
return <test1 {...obj}/>; // OK
|
||||
}
|
||||
function make2(obj) {
|
||||
return <test1 {...obj}/>; // Error (x is number, not string)
|
||||
}
|
||||
function make3(obj) {
|
||||
return <test1 {...obj}/>; // Error, missing x
|
||||
}
|
||||
<test1 {...{}}/>; // Error, missing x
|
||||
<test2 {...{}}/>; // OK
|
|
@ -1,4 +0,0 @@
|
|||
// OK
|
||||
<div />;
|
||||
// Fail
|
||||
<span />;
|
|
@ -1,6 +0,0 @@
|
|||
var Obj1;
|
||||
<Obj1 x={10}/>; // OK
|
||||
var Obj2;
|
||||
<Obj2 x={10}/>; // Error
|
||||
var Obj3;
|
||||
<Obj3 x={10}/>; // OK
|
|
@ -1,9 +0,0 @@
|
|||
var obj1;
|
||||
<obj1 x={10}/>; // OK
|
||||
var obj2;
|
||||
<obj2 x={10}/>; // OK
|
||||
var obj3;
|
||||
<obj3 x={10}/>; // Error
|
||||
var obj4;
|
||||
<obj4 x={10}/>; // OK
|
||||
<obj4 x={'10'}/>; // Error
|
|
@ -1,2 +0,0 @@
|
|||
var obj1;
|
||||
<obj1 x={10}/>; // Error
|
|
@ -1,2 +0,0 @@
|
|||
var obj1;
|
||||
<obj1 x={10}/>; // OK
|
|
@ -1,2 +0,0 @@
|
|||
var obj1;
|
||||
<obj1 x={10}/>; // Error
|
|
@ -1,2 +0,0 @@
|
|||
var obj1;
|
||||
<obj1 x={10}/>; // Error (JSX.Element is missing)
|
21
tests/cases/conformance/jsx/tsxElementResolution19.tsx
Normal file
21
tests/cases/conformance/jsx/tsxElementResolution19.tsx
Normal file
|
@ -0,0 +1,21 @@
|
|||
//@jsx: react
|
||||
//@module: amd
|
||||
|
||||
//@filename: react.d.ts
|
||||
declare module "react" {
|
||||
|
||||
}
|
||||
|
||||
//@filename: file1.tsx
|
||||
declare module JSX {
|
||||
interface Element { }
|
||||
}
|
||||
export class MyClass { }
|
||||
|
||||
//@filename: file2.tsx
|
||||
|
||||
// Should not elide React import
|
||||
import * as React from 'react';
|
||||
import {MyClass} from './file1';
|
||||
|
||||
<MyClass />;
|
|
@ -1,14 +0,0 @@
|
|||
var my;
|
||||
(function (my) {
|
||||
})(my || (my = {}));
|
||||
// OK
|
||||
<my.div n='x'/>;
|
||||
// Error
|
||||
<my.other />;
|
||||
var q;
|
||||
(function (q) {
|
||||
// OK
|
||||
<mine.div n='x'/>;
|
||||
// Error
|
||||
<mine.non />;
|
||||
})(q || (q = {}));
|
|
@ -1,15 +0,0 @@
|
|||
// Error
|
||||
var div = 3;
|
||||
<div />;
|
||||
// OK
|
||||
function fact() { return null; }
|
||||
<fact />;
|
||||
// Error
|
||||
function fnum() { return 42; }
|
||||
<fnum />;
|
||||
var obj1;
|
||||
<obj1 />; // OK, prefer construct signatures
|
||||
var obj2;
|
||||
<obj2 />; // Error
|
||||
var obj3;
|
||||
<obj3 />; // Error
|
|
@ -1,6 +0,0 @@
|
|||
var obj1;
|
||||
<obj1 />; // Error, return type is not an object type
|
||||
var obj2;
|
||||
<obj2 />; // Error, return type is not an object type
|
||||
var obj3;
|
||||
<obj3 x={42}/>; // OK
|
|
@ -1,34 +0,0 @@
|
|||
var p;
|
||||
/*
|
||||
var selfClosed1 = <div />;
|
||||
var selfClosed2 = <div x="1" />;
|
||||
var selfClosed3 = <div x='1' />;
|
||||
var selfClosed4 = <div x="1" y='0' />;
|
||||
var selfClosed5 = <div x={0} y='0' />;
|
||||
var selfClosed6 = <div x={"1"} y='0' />;
|
||||
var selfClosed7 = <div x={p} y='p' />;
|
||||
|
||||
var openClosed1 = <div></div>;
|
||||
var openClosed2 = <div n='m'>foo</div>;
|
||||
var openClosed3 = <div n='m'>{p}</div>;
|
||||
var openClosed4 = <div n='m'>{p < p}</div>;
|
||||
var openClosed5 = <div n='m'>{p > p}</div>;
|
||||
*/
|
||||
var SomeClass = (function () {
|
||||
function SomeClass() {
|
||||
}
|
||||
SomeClass.prototype.f = function () {
|
||||
var _this = this;
|
||||
var rewrites1 = <div>{function () { return _this; }}</div>;
|
||||
var rewrites4 = <div a={function () { return _this; }}></div>;
|
||||
};
|
||||
return SomeClass;
|
||||
})();
|
||||
/*
|
||||
var q = () => this;
|
||||
var rewrites2 = <div>{[p, ...p, p]}</div>;
|
||||
var rewrites3 = <div>{{p}}</div>;
|
||||
|
||||
var rewrites5 = <div a={[p, ...p, p]}></div>;
|
||||
var rewrites6 = <div a={{p}}></div>;
|
||||
*/
|
|
@ -1,41 +0,0 @@
|
|||
var M;
|
||||
(function (M) {
|
||||
var Foo = (function () {
|
||||
function Foo() {
|
||||
}
|
||||
return Foo;
|
||||
})();
|
||||
M.Foo = Foo;
|
||||
var S;
|
||||
(function (S) {
|
||||
var Bar = (function () {
|
||||
function Bar() {
|
||||
}
|
||||
return Bar;
|
||||
})();
|
||||
S.Bar = Bar;
|
||||
})(S = M.S || (M.S = {}));
|
||||
})(M || (M = {}));
|
||||
var M;
|
||||
(function (M) {
|
||||
// Emit M.Foo
|
||||
M.Foo, <M.Foo />;
|
||||
var S;
|
||||
(function (S) {
|
||||
// Emit M.Foo
|
||||
M.Foo, <M.Foo />;
|
||||
// Emit S.Bar
|
||||
S.Bar, <S.Bar />;
|
||||
})(S = M.S || (M.S = {}));
|
||||
})(M || (M = {}));
|
||||
var M;
|
||||
(function (M) {
|
||||
// Emit M.S.Bar
|
||||
M.S.Bar, <M.S.Bar />;
|
||||
})(M || (M = {}));
|
||||
var M;
|
||||
(function (M_1) {
|
||||
var M = 100;
|
||||
// Emit M_1.Foo
|
||||
M_1.Foo, <M_1.Foo />;
|
||||
})(M || (M = {}));
|
|
@ -6,6 +6,7 @@ declare module JSX {
|
|||
[s: string]: any;
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
|
||||
var p;
|
||||
var selfClosed1 = <div />;
|
||||
|
|
|
@ -6,6 +6,7 @@ declare module JSX {
|
|||
[s: string]: any;
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
|
||||
var p1, p2, p3;
|
||||
var spreads1 = <div {...p1}>{p2}</div>;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
//@filename: test.tsx
|
||||
|
||||
declare module JSX { interface Element { } }
|
||||
declare var React: any;
|
||||
|
||||
declare var Foo, Bar, baz;
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ declare module JSX {
|
|||
[s: string]: any;
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
|
||||
var p;
|
||||
var openClosed1 = <div>
|
||||
|
|
|
@ -6,6 +6,7 @@ declare module JSX {
|
|||
[s: string]: any;
|
||||
}
|
||||
}
|
||||
declare var React: any;
|
||||
|
||||
// THIS FILE HAS TEST-SIGNIFICANT LEADING/TRAILING
|
||||
// WHITESPACE, DO NOT RUN 'FORMAT DOCUMENT' ON IT
|
||||
|
|
Loading…
Reference in a new issue