Skip to content

Commit c3d75d1

Browse files
committed
Add case for jsx namespaces with react option
1 parent 443ddbe commit c3d75d1

5 files changed

+537
-0
lines changed
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(9,32): error TS1003: Identifier expected.
2+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(10,32): error TS1003: Identifier expected.
3+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(10,45): error TS1005: '>' expected.
4+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(10,50): error TS1005: ',' expected.
5+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(10,51): error TS1109: Expression expected.
6+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(11,32): error TS1003: Identifier expected.
7+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(11,60): error TS1005: '>' expected.
8+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(11,65): error TS1005: ',' expected.
9+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(11,66): error TS1109: Expression expected.
10+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(12,32): error TS1003: Identifier expected.
11+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(12,53): error TS1005: '>' expected.
12+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(12,58): error TS1005: ',' expected.
13+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(12,59): error TS1109: Expression expected.
14+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,32): error TS1003: Identifier expected.
15+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,68): error TS1005: '>' expected.
16+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,73): error TS1005: ',' expected.
17+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,74): error TS1109: Expression expected.
18+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(23,21): error TS1003: Identifier expected.
19+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,26): error TS1003: Identifier expected.
20+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,27): error TS1003: Identifier expected.
21+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,29): error TS1005: '...' expected.
22+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,21): error TS1109: Expression expected.
23+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,22): error TS1109: Expression expected.
24+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,25): error TS1005: ',' expected.
25+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,30): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
26+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,38): error TS1005: ':' expected.
27+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,41): error TS1109: Expression expected.
28+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,42): error TS1109: Expression expected.
29+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,24): error TS1003: Identifier expected.
30+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(31,25): error TS2304: Cannot find name 'Upcase:element'.
31+
tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(33,34): error TS2304: Cannot find name 'NS:something'.
32+
33+
34+
==== tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx (31 errors) ====
35+
declare var React: any;
36+
37+
var justElement1 = <a:element />;
38+
var justElement2 = <a:element></a:element>;
39+
var justElement3 = <a:element attr={"value"}></a:element>;
40+
var justElement4 = <a:element>{"text"}</a:element>;
41+
var justElement5 = <a:element attr={"value"}>{"text"}</a:element>;
42+
43+
var tooManySeparators1 = <a:ele:ment />;
44+
~
45+
!!! error TS1003: Identifier expected.
46+
var tooManySeparators2 = <a:ele:ment></a:ele:ment>;
47+
~
48+
!!! error TS1003: Identifier expected.
49+
~
50+
!!! error TS1005: '>' expected.
51+
~
52+
!!! error TS1005: ',' expected.
53+
~
54+
!!! error TS1109: Expression expected.
55+
var tooManySeparators3 = <a:ele:ment attr={"value"}></a:ele:ment>;
56+
~
57+
!!! error TS1003: Identifier expected.
58+
~
59+
!!! error TS1005: '>' expected.
60+
~
61+
!!! error TS1005: ',' expected.
62+
~
63+
!!! error TS1109: Expression expected.
64+
var tooManySeparators4 = <a:ele:ment>{"text"}</a:ele:ment>;
65+
~
66+
!!! error TS1003: Identifier expected.
67+
~
68+
!!! error TS1005: '>' expected.
69+
~
70+
!!! error TS1005: ',' expected.
71+
~
72+
!!! error TS1109: Expression expected.
73+
var tooManySeparators5 = <a:ele:ment attr={"value"}>{"text"}</a:ele:ment>;
74+
~
75+
!!! error TS1003: Identifier expected.
76+
~
77+
!!! error TS1005: '>' expected.
78+
~
79+
!!! error TS1005: ',' expected.
80+
~
81+
!!! error TS1109: Expression expected.
82+
83+
var justAttribute1 = <element a:attr={"value"} />;
84+
var justAttribute2 = <element a:attr={"value"}></element>;
85+
var justAttribute3 = <element a:attr={"value"}>{"text"}</element>;
86+
87+
var both1 = <a:element a:attr={"value"} />;
88+
var both2 = <a:element k:attr={"value"}></a:element>;
89+
var both3 = <a:element a:attr={"value"}>{"text"}</a:element>;
90+
91+
var endOfIdent1 = <a: attr={"value"} />;
92+
~
93+
!!! error TS1003: Identifier expected.
94+
var endOfIdent2 = <a attr:={"value"} />;
95+
~
96+
!!! error TS1003: Identifier expected.
97+
~
98+
!!! error TS1003: Identifier expected.
99+
~~~~~~~
100+
!!! error TS1005: '...' expected.
101+
102+
var beginOfIdent1 = <:a attr={"value"} />;
103+
~
104+
!!! error TS1109: Expression expected.
105+
~
106+
!!! error TS1109: Expression expected.
107+
~~~~
108+
!!! error TS1005: ',' expected.
109+
~~~~~~~~~
110+
!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
111+
~
112+
!!! error TS1005: ':' expected.
113+
~
114+
!!! error TS1109: Expression expected.
115+
~
116+
!!! error TS1109: Expression expected.
117+
var beginOfIdent1 = <a :attr={"value"} />;
118+
~
119+
!!! error TS1003: Identifier expected.
120+
121+
var Upcase = "mycomponent"
122+
var upcaseComponent1 = <ns:Upcase /> // Parsed as intrinsic: ok
123+
var upcaseComponent2 = <Upcase:element /> // Parsed as component: not ok
124+
~~~~~~~~~~~~~~
125+
!!! error TS2304: Cannot find name 'Upcase:element'.
126+
127+
var upcaseComponentUndeclared = <NS:something />
128+
~~~~~~~~~~~~
129+
!!! error TS2304: Cannot find name 'NS:something'.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
//// [jsxNamespacePrefixInNameReact.tsx]
2+
declare var React: any;
3+
4+
var justElement1 = <a:element />;
5+
var justElement2 = <a:element></a:element>;
6+
var justElement3 = <a:element attr={"value"}></a:element>;
7+
var justElement4 = <a:element>{"text"}</a:element>;
8+
var justElement5 = <a:element attr={"value"}>{"text"}</a:element>;
9+
10+
var tooManySeparators1 = <a:ele:ment />;
11+
var tooManySeparators2 = <a:ele:ment></a:ele:ment>;
12+
var tooManySeparators3 = <a:ele:ment attr={"value"}></a:ele:ment>;
13+
var tooManySeparators4 = <a:ele:ment>{"text"}</a:ele:ment>;
14+
var tooManySeparators5 = <a:ele:ment attr={"value"}>{"text"}</a:ele:ment>;
15+
16+
var justAttribute1 = <element a:attr={"value"} />;
17+
var justAttribute2 = <element a:attr={"value"}></element>;
18+
var justAttribute3 = <element a:attr={"value"}>{"text"}</element>;
19+
20+
var both1 = <a:element a:attr={"value"} />;
21+
var both2 = <a:element k:attr={"value"}></a:element>;
22+
var both3 = <a:element a:attr={"value"}>{"text"}</a:element>;
23+
24+
var endOfIdent1 = <a: attr={"value"} />;
25+
var endOfIdent2 = <a attr:={"value"} />;
26+
27+
var beginOfIdent1 = <:a attr={"value"} />;
28+
var beginOfIdent1 = <a :attr={"value"} />;
29+
30+
var Upcase = "mycomponent"
31+
var upcaseComponent1 = <ns:Upcase /> // Parsed as intrinsic: ok
32+
var upcaseComponent2 = <Upcase:element /> // Parsed as component: not ok
33+
34+
var upcaseComponentUndeclared = <NS:something />
35+
36+
//// [jsxNamespacePrefixInNameReact.js]
37+
var __assign = (this && this.__assign) || function () {
38+
__assign = Object.assign || function(t) {
39+
for (var s, i = 1, n = arguments.length; i < n; i++) {
40+
s = arguments[i];
41+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
42+
t[p] = s[p];
43+
}
44+
return t;
45+
};
46+
return __assign.apply(this, arguments);
47+
};
48+
var justElement1 = React.createElement("a:element", null);
49+
var justElement2 = React.createElement("a:element", null);
50+
var justElement3 = React.createElement("a:element", { attr: "value" });
51+
var justElement4 = React.createElement("a:element", null, "text");
52+
var justElement5 = React.createElement("a:element", { attr: "value" }, "text");
53+
var tooManySeparators1 = React.createElement("a:ele", { ment: true });
54+
var tooManySeparators2 = React.createElement("a:ele", { ment: true }), ment;
55+
> ;
56+
var tooManySeparators3 = React.createElement("a:ele", { ment: true, attr: "value" }), ment;
57+
> ;
58+
var tooManySeparators4 = React.createElement("a:ele", { ment: true }, "text"), ment;
59+
> ;
60+
var tooManySeparators5 = React.createElement("a:ele", { ment: true, attr: "value" }, "text"), ment;
61+
> ;
62+
var justAttribute1 = React.createElement("element", { "a:attr": "value" });
63+
var justAttribute2 = React.createElement("element", { "a:attr": "value" });
64+
var justAttribute3 = React.createElement("element", { "a:attr": "value" }, "text");
65+
var both1 = React.createElement("a:element", { "a:attr": "value" });
66+
var both2 = React.createElement("a:element", { "k:attr": "value" });
67+
var both3 = React.createElement("a:element", { "a:attr": "value" }, "text");
68+
var endOfIdent1 = React.createElement("a", { attr: "value" });
69+
var endOfIdent2 = React.createElement("a", __assign({ attr: true }, "value"));
70+
var beginOfIdent1 = < , a, attr = { "value": } / > ;
71+
var beginOfIdent1 = React.createElement("a", { attr: "value" });
72+
var Upcase = "mycomponent";
73+
var upcaseComponent1 = React.createElement("ns:Upcase", null); // Parsed as intrinsic: ok
74+
var upcaseComponent2 = React.createElement(Upcase:element, null); // Parsed as component: not ok
75+
var upcaseComponentUndeclared = React.createElement(NS:something, null);
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
=== tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx ===
2+
declare var React: any;
3+
>React : Symbol(React, Decl(jsxNamespacePrefixInNameReact.tsx, 0, 11))
4+
5+
var justElement1 = <a:element />;
6+
>justElement1 : Symbol(justElement1, Decl(jsxNamespacePrefixInNameReact.tsx, 2, 3))
7+
8+
var justElement2 = <a:element></a:element>;
9+
>justElement2 : Symbol(justElement2, Decl(jsxNamespacePrefixInNameReact.tsx, 3, 3))
10+
11+
var justElement3 = <a:element attr={"value"}></a:element>;
12+
>justElement3 : Symbol(justElement3, Decl(jsxNamespacePrefixInNameReact.tsx, 4, 3))
13+
>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 4, 29))
14+
15+
var justElement4 = <a:element>{"text"}</a:element>;
16+
>justElement4 : Symbol(justElement4, Decl(jsxNamespacePrefixInNameReact.tsx, 5, 3))
17+
18+
var justElement5 = <a:element attr={"value"}>{"text"}</a:element>;
19+
>justElement5 : Symbol(justElement5, Decl(jsxNamespacePrefixInNameReact.tsx, 6, 3))
20+
>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 6, 29))
21+
22+
var tooManySeparators1 = <a:ele:ment />;
23+
>tooManySeparators1 : Symbol(tooManySeparators1, Decl(jsxNamespacePrefixInNameReact.tsx, 8, 3))
24+
>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 8, 32))
25+
26+
var tooManySeparators2 = <a:ele:ment></a:ele:ment>;
27+
>tooManySeparators2 : Symbol(tooManySeparators2, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 3))
28+
>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 32))
29+
>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 45), Decl(jsxNamespacePrefixInNameReact.tsx, 10, 60), Decl(jsxNamespacePrefixInNameReact.tsx, 11, 53), Decl(jsxNamespacePrefixInNameReact.tsx, 12, 68))
30+
31+
var tooManySeparators3 = <a:ele:ment attr={"value"}></a:ele:ment>;
32+
>tooManySeparators3 : Symbol(tooManySeparators3, Decl(jsxNamespacePrefixInNameReact.tsx, 10, 3))
33+
>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 10, 32))
34+
>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 10, 36))
35+
>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 45), Decl(jsxNamespacePrefixInNameReact.tsx, 10, 60), Decl(jsxNamespacePrefixInNameReact.tsx, 11, 53), Decl(jsxNamespacePrefixInNameReact.tsx, 12, 68))
36+
37+
var tooManySeparators4 = <a:ele:ment>{"text"}</a:ele:ment>;
38+
>tooManySeparators4 : Symbol(tooManySeparators4, Decl(jsxNamespacePrefixInNameReact.tsx, 11, 3))
39+
>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 11, 32))
40+
>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 45), Decl(jsxNamespacePrefixInNameReact.tsx, 10, 60), Decl(jsxNamespacePrefixInNameReact.tsx, 11, 53), Decl(jsxNamespacePrefixInNameReact.tsx, 12, 68))
41+
42+
var tooManySeparators5 = <a:ele:ment attr={"value"}>{"text"}</a:ele:ment>;
43+
>tooManySeparators5 : Symbol(tooManySeparators5, Decl(jsxNamespacePrefixInNameReact.tsx, 12, 3))
44+
>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 12, 32))
45+
>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 12, 36))
46+
>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 45), Decl(jsxNamespacePrefixInNameReact.tsx, 10, 60), Decl(jsxNamespacePrefixInNameReact.tsx, 11, 53), Decl(jsxNamespacePrefixInNameReact.tsx, 12, 68))
47+
48+
var justAttribute1 = <element a:attr={"value"} />;
49+
>justAttribute1 : Symbol(justAttribute1, Decl(jsxNamespacePrefixInNameReact.tsx, 14, 3))
50+
>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 14, 29))
51+
52+
var justAttribute2 = <element a:attr={"value"}></element>;
53+
>justAttribute2 : Symbol(justAttribute2, Decl(jsxNamespacePrefixInNameReact.tsx, 15, 3))
54+
>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 15, 29))
55+
56+
var justAttribute3 = <element a:attr={"value"}>{"text"}</element>;
57+
>justAttribute3 : Symbol(justAttribute3, Decl(jsxNamespacePrefixInNameReact.tsx, 16, 3))
58+
>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 16, 29))
59+
60+
var both1 = <a:element a:attr={"value"} />;
61+
>both1 : Symbol(both1, Decl(jsxNamespacePrefixInNameReact.tsx, 18, 3))
62+
>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 18, 22))
63+
64+
var both2 = <a:element k:attr={"value"}></a:element>;
65+
>both2 : Symbol(both2, Decl(jsxNamespacePrefixInNameReact.tsx, 19, 3))
66+
>k:attr : Symbol(k:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 19, 22))
67+
68+
var both3 = <a:element a:attr={"value"}>{"text"}</a:element>;
69+
>both3 : Symbol(both3, Decl(jsxNamespacePrefixInNameReact.tsx, 20, 3))
70+
>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 20, 22))
71+
72+
var endOfIdent1 = <a: attr={"value"} />;
73+
>endOfIdent1 : Symbol(endOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 22, 3))
74+
>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 22, 21))
75+
76+
var endOfIdent2 = <a attr:={"value"} />;
77+
>endOfIdent2 : Symbol(endOfIdent2, Decl(jsxNamespacePrefixInNameReact.tsx, 23, 3))
78+
>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 23, 20))
79+
80+
var beginOfIdent1 = <:a attr={"value"} />;
81+
>beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 3), Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3))
82+
>a : Symbol(a, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 22))
83+
>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 23))
84+
>"value" : Symbol("value", Decl(jsxNamespacePrefixInNameReact.tsx, 25, 30))
85+
86+
var beginOfIdent1 = <a :attr={"value"} />;
87+
>beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 3), Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3))
88+
>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 26, 24))
89+
90+
var Upcase = "mycomponent"
91+
>Upcase : Symbol(Upcase, Decl(jsxNamespacePrefixInNameReact.tsx, 28, 3))
92+
93+
var upcaseComponent1 = <ns:Upcase /> // Parsed as intrinsic: ok
94+
>upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInNameReact.tsx, 29, 3))
95+
96+
var upcaseComponent2 = <Upcase:element /> // Parsed as component: not ok
97+
>upcaseComponent2 : Symbol(upcaseComponent2, Decl(jsxNamespacePrefixInNameReact.tsx, 30, 3))
98+
99+
var upcaseComponentUndeclared = <NS:something />
100+
>upcaseComponentUndeclared : Symbol(upcaseComponentUndeclared, Decl(jsxNamespacePrefixInNameReact.tsx, 32, 3))
101+

0 commit comments

Comments
 (0)