Merge pull request #3770 from RyanCavanaugh/fix3764

Fix #3764
This commit is contained in:
Ryan Cavanaugh 2015-07-07 14:38:26 -07:00
commit 719498eb0f
41 changed files with 209 additions and 249 deletions

View file

@ -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) {

View 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);
});

View 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))

View 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

View file

@ -5,6 +5,7 @@ declare module JSX {
[s: string]: any;
}
}
declare var React: any;
var p;
var selfClosed1 = <div />;

View file

@ -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}

View file

@ -12,6 +12,8 @@ declare module JSX {
>s : string
}
}
declare var React: any;
>React : any
var p;
>p : any

View file

@ -5,6 +5,7 @@ declare module JSX {
[s: string]: any;
}
}
declare var React: any;
var p1, p2, p3;
var spreads1 = <div {...p1}>{p2}</div>;

View file

@ -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)

View file

@ -12,6 +12,8 @@ declare module JSX {
>s : string
}
}
declare var React: any;
>React : any
var p1, p2, p3;
>p1 : any

View file

@ -1,6 +1,7 @@
//// [tsxReactEmit3.tsx]
declare module JSX { interface Element { } }
declare var React: any;
declare var Foo, Bar, baz;

View file

@ -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))

View file

@ -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

View file

@ -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>

View file

@ -5,6 +5,7 @@ declare module JSX {
[s: string]: any;
}
}
declare var React: any;
var p;
var openClosed1 = <div>

View file

@ -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

View file

@ -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>;

View file

@ -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

View file

@ -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

View file

@ -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'

View file

@ -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}/>;

View file

@ -1,4 +0,0 @@
// OK
<test1 {...{ x: function (n) { return 0; } }}/>;
// Error, no member 'len' on 'string'
<test1 {...{ x: function (n) { return n.len; } }}/>;

View file

@ -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

View file

@ -1,4 +0,0 @@
// OK
<div />;
// Fail
<span />;

View file

@ -1,6 +0,0 @@
var Obj1;
<Obj1 x={10}/>; // OK
var Obj2;
<Obj2 x={10}/>; // Error
var Obj3;
<Obj3 x={10}/>; // OK

View file

@ -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

View file

@ -1,2 +0,0 @@
var obj1;
<obj1 x={10}/>; // Error

View file

@ -1,2 +0,0 @@
var obj1;
<obj1 x={10}/>; // OK

View file

@ -1,2 +0,0 @@
var obj1;
<obj1 x={10}/>; // Error

View file

@ -1,2 +0,0 @@
var obj1;
<obj1 x={10}/>; // Error (JSX.Element is missing)

View 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 />;

View file

@ -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 = {}));

View file

@ -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

View file

@ -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

View file

@ -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>;
*/

View file

@ -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 = {}));

View file

@ -6,6 +6,7 @@ declare module JSX {
[s: string]: any;
}
}
declare var React: any;
var p;
var selfClosed1 = <div />;

View file

@ -6,6 +6,7 @@ declare module JSX {
[s: string]: any;
}
}
declare var React: any;
var p1, p2, p3;
var spreads1 = <div {...p1}>{p2}</div>;

View file

@ -2,6 +2,7 @@
//@filename: test.tsx
declare module JSX { interface Element { } }
declare var React: any;
declare var Foo, Bar, baz;

View file

@ -6,6 +6,7 @@ declare module JSX {
[s: string]: any;
}
}
declare var React: any;
var p;
var openClosed1 = <div>

View file

@ -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