Skip to content

Correctly identify JSX Expressions as Expression parent nodes #4406

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 21, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/compiler/utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -978,6 +978,7 @@ namespace ts {
case SyntaxKind.ComputedPropertyName:
return node === (<ComputedPropertyName>parent).expression;
case SyntaxKind.Decorator:
case SyntaxKind.JsxExpression:
return true;
case SyntaxKind.ExpressionWithTypeArguments:
return (<ExpressionWithTypeArguments>parent).expression === node && isExpressionWithTypeArgumentsInClassExtendsClause(parent);
Expand Down
3 changes: 3 additions & 0 deletions tests/baselines/reference/jsxHash.types
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,21 @@ var t02 = <a>{0}#</a>;
>t02 : any
><a>{0}#</a> : any
>a : any
>0 : number
>a : any

var t03 = <a>#{0}</a>;
>t03 : any
><a>#{0}</a> : any
>a : any
>0 : number
>a : any

var t04 = <a>#{0}#</a>;
>t04 : any
><a>#{0}#</a> : any
>a : any
>0 : number
>a : any

var t05 = <a>#<i></i></a>;
Expand Down
1 change: 1 addition & 0 deletions tests/baselines/reference/jsxImportInAttribute.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ let x = Test; // emit test_1.default

<anything attr={Test} />; // ?
>attr : Symbol(unknown)
>Test : Symbol(Test, Decl(consumer.tsx, 1, 6))

=== tests/cases/compiler/component.d.ts ===

Expand Down
2 changes: 1 addition & 1 deletion tests/baselines/reference/jsxImportInAttribute.types
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ let x = Test; // emit test_1.default
><anything attr={Test} /> : any
>anything : any
>attr : any
>Test : any
>Test : typeof Test

=== tests/cases/compiler/component.d.ts ===

Expand Down
3 changes: 3 additions & 0 deletions tests/baselines/reference/jsxReactTestSuite.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ declare var hasOwnProperty:any;
<div><br /></div>
<Component>{foo}<br />{bar}</Component>
>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>foo : Symbol(foo, Decl(jsxReactTestSuite.tsx, 7, 11))
>bar : Symbol(bar, Decl(jsxReactTestSuite.tsx, 8, 11))
>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))

<br />
Expand Down Expand Up @@ -159,6 +161,7 @@ var x =
<Component x={y} />;
>Component : Symbol(Component, Decl(jsxReactTestSuite.tsx, 2, 11))
>x : Symbol(unknown)
>y : Symbol(y, Decl(jsxReactTestSuite.tsx, 9, 11))

<x-component />;

Expand Down
6 changes: 6 additions & 0 deletions tests/baselines/reference/jsxReactTestSuite.types
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,7 @@ var x =
>y : any

={2 } z />;
>2 : number
>z : any

<Component
Expand Down Expand Up @@ -287,25 +288,29 @@ var x =
>Component : any
>x : any
>y : any
>2 : number

<Component { ... x } y={2} z />;
><Component { ... x } y={2} z /> : any
>Component : any
>x : any
>y : any
>2 : number
>z : any

<Component x={1} {...y} />;
><Component x={1} {...y} /> : any
>Component : any
>x : any
>1 : number
>y : any


<Component x={1} y="2" {...z} {...z}><Child /></Component>;
><Component x={1} y="2" {...z} {...z}><Child /></Component> : any
>Component : any
>x : any
>1 : number
>y : any
>z : any
>z : any
Expand All @@ -326,6 +331,7 @@ var x =
>2 : number
>z : any
>z : any
>3 : number
>Component : any


Expand Down
1 change: 1 addition & 0 deletions tests/baselines/reference/tsxElementResolution13.types
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ var obj1: Obj1;
><obj1 x={10} /> : JSX.Element
>obj1 : Obj1
>x : any
>10 : number

1 change: 1 addition & 0 deletions tests/baselines/reference/tsxElementResolution14.types
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,5 @@ var obj1: Obj1;
><obj1 x={10} /> : JSX.Element
>obj1 : Obj1
>x : any
>10 : number

1 change: 1 addition & 0 deletions tests/baselines/reference/tsxElementResolution9.types
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,5 @@ var Obj3: Obj3;
><Obj3 x={42} /> : JSX.Element
>Obj3 : Obj3
>x : any
>42 : number

5 changes: 5 additions & 0 deletions tests/baselines/reference/tsxEmit1.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ var selfClosed7 = <div x={p} y='p' />;
>selfClosed7 : Symbol(selfClosed7, Decl(tsxEmit1.tsx, 14, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit1.tsx, 1, 22))
>x : Symbol(unknown)
>p : Symbol(p, Decl(tsxEmit1.tsx, 7, 3))
>y : Symbol(unknown)

var openClosed1 = <div></div>;
Expand All @@ -69,6 +70,7 @@ var openClosed3 = <div n='m'>{p}</div>;
>openClosed3 : Symbol(openClosed3, Decl(tsxEmit1.tsx, 18, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit1.tsx, 1, 22))
>n : Symbol(unknown)
>p : Symbol(p, Decl(tsxEmit1.tsx, 7, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit1.tsx, 1, 22))

var openClosed4 = <div n='m'>{p < p}</div>;
Expand Down Expand Up @@ -146,13 +148,16 @@ var whitespace1 = <div> </div>;
var whitespace2 = <div> {p} </div>;
>whitespace2 : Symbol(whitespace2, Decl(tsxEmit1.tsx, 35, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit1.tsx, 1, 22))
>p : Symbol(p, Decl(tsxEmit1.tsx, 7, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit1.tsx, 1, 22))

var whitespace3 = <div>
>whitespace3 : Symbol(whitespace3, Decl(tsxEmit1.tsx, 36, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit1.tsx, 1, 22))

{p}
>p : Symbol(p, Decl(tsxEmit1.tsx, 7, 3))

</div>;
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit1.tsx, 1, 22))

2 changes: 2 additions & 0 deletions tests/baselines/reference/tsxEmit1.types
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,15 @@ var selfClosed5 = <div x={0} y='0' />;
><div x={0} y='0' /> : JSX.Element
>div : any
>x : any
>0 : number
>y : any

var selfClosed6 = <div x={"1"} y='0' />;
>selfClosed6 : JSX.Element
><div x={"1"} y='0' /> : JSX.Element
>div : any
>x : any
>"1" : string
>y : any

var selfClosed7 = <div x={p} y='p' />;
Expand Down
9 changes: 9 additions & 0 deletions tests/baselines/reference/tsxEmit2.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -21,29 +21,38 @@ var p1, p2, p3;
var spreads1 = <div {...p1}>{p2}</div>;
>spreads1 : Symbol(spreads1, Decl(tsxEmit2.tsx, 8, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))
>p2 : Symbol(p2, Decl(tsxEmit2.tsx, 7, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))

var spreads2 = <div {...p1}>{p2}</div>;
>spreads2 : Symbol(spreads2, Decl(tsxEmit2.tsx, 9, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))
>p2 : Symbol(p2, Decl(tsxEmit2.tsx, 7, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))

var spreads3 = <div x={p3} {...p1}>{p2}</div>;
>spreads3 : Symbol(spreads3, Decl(tsxEmit2.tsx, 10, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))
>x : Symbol(unknown)
>p3 : Symbol(p3, Decl(tsxEmit2.tsx, 7, 11))
>p2 : Symbol(p2, Decl(tsxEmit2.tsx, 7, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))

var spreads4 = <div {...p1} x={p3} >{p2}</div>;
>spreads4 : Symbol(spreads4, Decl(tsxEmit2.tsx, 11, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))
>x : Symbol(unknown)
>p3 : Symbol(p3, Decl(tsxEmit2.tsx, 7, 11))
>p2 : Symbol(p2, Decl(tsxEmit2.tsx, 7, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))

var spreads5 = <div x={p2} {...p1} y={p3}>{p2}</div>;
>spreads5 : Symbol(spreads5, Decl(tsxEmit2.tsx, 12, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))
>x : Symbol(unknown)
>p2 : Symbol(p2, Decl(tsxEmit2.tsx, 7, 7))
>y : Symbol(unknown)
>p3 : Symbol(p3, Decl(tsxEmit2.tsx, 7, 11))
>p2 : Symbol(p2, Decl(tsxEmit2.tsx, 7, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxEmit2.tsx, 1, 22))

1 change: 1 addition & 0 deletions tests/baselines/reference/tsxExternalModuleEmit2.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ declare var Foo, React;
<Foo handler={Main}></Foo>;
>Foo : Symbol(Foo, Decl(app.tsx, 1, 11))
>handler : Symbol(unknown)
>Main : Symbol(Main, Decl(app.tsx, 0, 6))
>Foo : Symbol(Foo, Decl(app.tsx, 1, 11))

// Should see mod_1['default'] in emit here
Expand Down
5 changes: 5 additions & 0 deletions tests/baselines/reference/tsxReactEmit1.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ var selfClosed7 = <div x={p} y='p' b />;
>selfClosed7 : Symbol(selfClosed7, Decl(tsxReactEmit1.tsx, 15, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
>x : Symbol(unknown)
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
>y : Symbol(unknown)
>b : Symbol(unknown)

Expand All @@ -72,6 +73,7 @@ var openClosed3 = <div n='m'>{p}</div>;
>openClosed3 : Symbol(openClosed3, Decl(tsxReactEmit1.tsx, 19, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
>n : Symbol(unknown)
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))

var openClosed4 = <div n='m'>{p < p}</div>;
Expand Down Expand Up @@ -150,13 +152,16 @@ var whitespace1 = <div> </div>;
var whitespace2 = <div> {p} </div>;
>whitespace2 : Symbol(whitespace2, Decl(tsxReactEmit1.tsx, 36, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))

var whitespace3 = <div>
>whitespace3 : Symbol(whitespace3, Decl(tsxReactEmit1.tsx, 37, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))

{p}
>p : Symbol(p, Decl(tsxReactEmit1.tsx, 8, 3))

</div>;
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit1.tsx, 1, 22))

2 changes: 2 additions & 0 deletions tests/baselines/reference/tsxReactEmit1.types
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,15 @@ var selfClosed5 = <div x={0} y='0' />;
><div x={0} y='0' /> : JSX.Element
>div : any
>x : any
>0 : number
>y : any

var selfClosed6 = <div x={"1"} y='0' />;
>selfClosed6 : JSX.Element
><div x={"1"} y='0' /> : JSX.Element
>div : any
>x : any
>"1" : string
>y : any

var selfClosed7 = <div x={p} y='p' b />;
Expand Down
9 changes: 9 additions & 0 deletions tests/baselines/reference/tsxReactEmit2.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -23,29 +23,38 @@ var p1, p2, p3;
var spreads1 = <div {...p1}>{p2}</div>;
>spreads1 : Symbol(spreads1, Decl(tsxReactEmit2.tsx, 9, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
>p2 : Symbol(p2, Decl(tsxReactEmit2.tsx, 8, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))

var spreads2 = <div {...p1}>{p2}</div>;
>spreads2 : Symbol(spreads2, Decl(tsxReactEmit2.tsx, 10, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
>p2 : Symbol(p2, Decl(tsxReactEmit2.tsx, 8, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))

var spreads3 = <div x={p3} {...p1}>{p2}</div>;
>spreads3 : Symbol(spreads3, Decl(tsxReactEmit2.tsx, 11, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
>x : Symbol(unknown)
>p3 : Symbol(p3, Decl(tsxReactEmit2.tsx, 8, 11))
>p2 : Symbol(p2, Decl(tsxReactEmit2.tsx, 8, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))

var spreads4 = <div {...p1} x={p3} >{p2}</div>;
>spreads4 : Symbol(spreads4, Decl(tsxReactEmit2.tsx, 12, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
>x : Symbol(unknown)
>p3 : Symbol(p3, Decl(tsxReactEmit2.tsx, 8, 11))
>p2 : Symbol(p2, Decl(tsxReactEmit2.tsx, 8, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))

var spreads5 = <div x={p2} {...p1} y={p3}>{p2}</div>;
>spreads5 : Symbol(spreads5, Decl(tsxReactEmit2.tsx, 13, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))
>x : Symbol(unknown)
>p2 : Symbol(p2, Decl(tsxReactEmit2.tsx, 8, 7))
>y : Symbol(unknown)
>p3 : Symbol(p3, Decl(tsxReactEmit2.tsx, 8, 11))
>p2 : Symbol(p2, Decl(tsxReactEmit2.tsx, 8, 7))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmit2.tsx, 1, 22))

5 changes: 5 additions & 0 deletions tests/baselines/reference/tsxReactEmitWhitespace.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,16 @@ var p = 0;
// Emit " ", p, " "
<div> {p} </div>;
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace.tsx, 1, 22))
>p : Symbol(p, Decl(tsxReactEmitWhitespace.tsx, 11, 3))
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace.tsx, 1, 22))

// Emit only p
<div>
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace.tsx, 1, 22))

{p}
>p : Symbol(p, Decl(tsxReactEmitWhitespace.tsx, 11, 3))

</div>;
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace.tsx, 1, 22))

Expand All @@ -44,6 +47,8 @@ var p = 0;
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace.tsx, 1, 22))

{p}
>p : Symbol(p, Decl(tsxReactEmitWhitespace.tsx, 11, 3))

</div>;
>div : Symbol(JSX.IntrinsicElements, Decl(tsxReactEmitWhitespace.tsx, 1, 22))

Expand Down
6 changes: 3 additions & 3 deletions tests/baselines/reference/tsxReactEmitWhitespace.types
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ var p = 0;
<div> {p} </div>;
><div> {p} </div> : JSX.Element
>div : any
>p : any
>p : number
>div : any

// Emit only p
Expand All @@ -41,7 +41,7 @@ var p = 0;
>div : any

{p}
>p : any
>p : number

</div>;
>div : any
Expand All @@ -52,7 +52,7 @@ var p = 0;
>div : any

{p}
>p : any
>p : number

</div>;
>div : any
Expand Down
1 change: 1 addition & 0 deletions tests/baselines/reference/tsxTypeErrors.symbols
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ var thing = { oops: 100 };
var a3 = <div id={thing} />
>a3 : Symbol(a3, Decl(tsxTypeErrors.tsx, 9, 3))
>id : Symbol(unknown)
>thing : Symbol(thing, Decl(tsxTypeErrors.tsx, 8, 3))

// Mistyped html name (error)
var e1 = <imag src="bar.jpg" />
Expand Down
2 changes: 1 addition & 1 deletion tests/baselines/reference/tsxTypeErrors.types
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ var a3 = <div id={thing} />
><div id={thing} /> : any
>div : any
>id : any
>thing : any
>thing : { oops: number; }

// Mistyped html name (error)
var e1 = <imag src="bar.jpg" />
Expand Down
Loading