Skip to content

Commit c2bef6d

Browse files
authoredNov 23, 2016
Merge pull request #12475 from Microsoft/jsxFactoryLeaf
Instead of creating clone of the jsxFactory's leaf node, create synthesized node
2 parents c05bf3b + 20a8a30 commit c2bef6d

5 files changed

+98
-10
lines changed
 

‎src/compiler/factory.ts

+4-10
Original file line numberDiff line numberDiff line change
@@ -1677,16 +1677,10 @@ namespace ts {
16771677

16781678
function createJsxFactoryExpressionFromEntityName(jsxFactory: EntityName, parent: JsxOpeningLikeElement): Expression {
16791679
if (isQualifiedName(jsxFactory)) {
1680-
return createPropertyAccess(
1681-
createJsxFactoryExpressionFromEntityName(
1682-
jsxFactory.left,
1683-
parent
1684-
),
1685-
setEmitFlags(
1686-
getMutableClone(jsxFactory.right),
1687-
EmitFlags.NoSourceMap
1688-
)
1689-
);
1680+
const left = createJsxFactoryExpressionFromEntityName(jsxFactory.left, parent);
1681+
const right = <Identifier>createSynthesizedNode(SyntaxKind.Identifier);
1682+
right.text = jsxFactory.right.text;
1683+
return createPropertyAccess(left, right);
16901684
}
16911685
else {
16921686
return createReactNamespace(jsxFactory.text, parent);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [index.tsx]
2+
3+
import "./jsx";
4+
5+
var skate: any;
6+
const React = { createElement: skate.h };
7+
8+
class Component {
9+
renderCallback() {
10+
return <div>test</div>;
11+
}
12+
};
13+
14+
//// [index.js]
15+
"use strict";
16+
require("./jsx");
17+
var skate;
18+
var React = { createElement: skate.h };
19+
var Component = (function () {
20+
function Component() {
21+
}
22+
Component.prototype.renderCallback = function () {
23+
return skate.h("div", null, "test");
24+
};
25+
return Component;
26+
}());
27+
;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
=== tests/cases/compiler/index.tsx ===
2+
3+
import "./jsx";
4+
5+
var skate: any;
6+
>skate : Symbol(skate, Decl(index.tsx, 3, 3))
7+
8+
const React = { createElement: skate.h };
9+
>React : Symbol(React, Decl(index.tsx, 4, 5))
10+
>createElement : Symbol(createElement, Decl(index.tsx, 4, 15))
11+
>skate : Symbol(skate, Decl(index.tsx, 3, 3))
12+
13+
class Component {
14+
>Component : Symbol(Component, Decl(index.tsx, 4, 41))
15+
16+
renderCallback() {
17+
>renderCallback : Symbol(Component.renderCallback, Decl(index.tsx, 6, 17))
18+
19+
return <div>test</div>;
20+
>div : Symbol(unknown)
21+
>div : Symbol(unknown)
22+
}
23+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
=== tests/cases/compiler/index.tsx ===
2+
3+
import "./jsx";
4+
5+
var skate: any;
6+
>skate : any
7+
8+
const React = { createElement: skate.h };
9+
>React : { createElement: any; }
10+
>{ createElement: skate.h } : { createElement: any; }
11+
>createElement : any
12+
>skate.h : any
13+
>skate : any
14+
>h : any
15+
16+
class Component {
17+
>Component : Component
18+
19+
renderCallback() {
20+
>renderCallback : () => any
21+
22+
return <div>test</div>;
23+
><div>test</div> : any
24+
>div : any
25+
>div : any
26+
}
27+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
//@module: commonjs
2+
//@target: es5
3+
//@jsx: react
4+
//@jsxFactory: skate.h
5+
//@noEmit: false
6+
7+
// @filename: index.tsx
8+
import "./jsx";
9+
10+
var skate: any;
11+
const React = { createElement: skate.h };
12+
13+
class Component {
14+
renderCallback() {
15+
return <div>test</div>;
16+
}
17+
};

0 commit comments

Comments
 (0)
Please sign in to comment.