From 7000ca7519f895f7c7f8d5a8db8481b676dd0212 Mon Sep 17 00:00:00 2001 From: tomjw64 Date: Mon, 16 Mar 2020 14:54:31 -0500 Subject: [PATCH 1/9] Support xml namespace prefix for JSX elements and attributes Just as with the `-` character, `:` is now also treated specially in JSX element and attribute names, but is only allowed a single time, and not at the beginning or end of the name, as is specified in the JSX spec. All tests in jsxInvalidEsprimaTestSuite still fail, but for slightly different reasons now. Two lines in jsxEsprimaFbTestSuite were uncommented as they included elements with namespaces, and they now pass without error. --- src/compiler/scanner.ts | 15 +- .../jsxEsprimaFbTestSuite.errors.txt | 19 +-- .../reference/jsxEsprimaFbTestSuite.js | 9 +- .../reference/jsxEsprimaFbTestSuite.symbols | 38 +++-- .../reference/jsxEsprimaFbTestSuite.types | 20 ++- .../jsxInvalidEsprimaTestSuite.errors.txt | 32 ++-- .../reference/jsxInvalidEsprimaTestSuite.js | 5 +- .../jsxInvalidEsprimaTestSuite.symbols | 9 +- .../jsxInvalidEsprimaTestSuite.types | 18 +-- .../jsxNamespacePrefixInName.errors.txt | 74 +++++++++ .../reference/jsxNamespacePrefixInName.js | 43 ++++++ .../jsxNamespacePrefixInName.symbols | 68 +++++++++ .../reference/jsxNamespacePrefixInName.types | 140 ++++++++++++++++++ .../compiler/jsxNamespacePrefixInName.tsx | 21 +++ .../conformance/jsx/jsxEsprimaFbTestSuite.tsx | 5 +- 15 files changed, 439 insertions(+), 77 deletions(-) create mode 100644 tests/baselines/reference/jsxNamespacePrefixInName.errors.txt create mode 100644 tests/baselines/reference/jsxNamespacePrefixInName.js create mode 100644 tests/baselines/reference/jsxNamespacePrefixInName.symbols create mode 100644 tests/baselines/reference/jsxNamespacePrefixInName.types create mode 100644 tests/cases/compiler/jsxNamespacePrefixInName.tsx diff --git a/src/compiler/scanner.ts b/src/compiler/scanner.ts index 5f5248e1073f3..9f9ed352ab7f3 100644 --- a/src/compiler/scanner.ts +++ b/src/compiler/scanner.ts @@ -2305,9 +2305,11 @@ namespace ts { // they allow dashes function scanJsxIdentifier(): SyntaxKind { if (tokenIsIdentifierOrKeyword(token)) { - // An identifier or keyword has already been parsed - check for a `-` and then append it and everything after it to the token + // An identifier or keyword has already been parsed - check for a `-` or a single instance of `:` and then append it and + // everything after it to the token // Do note that this means that `scanJsxIdentifier` effectively _mutates_ the visible token without advancing to a new token // Any caller should be expecting this behavior and should only read the pos or token value after calling it. + let namespaceSeparator = false; while (pos < end) { const ch = text.charCodeAt(pos); if (ch === CharacterCodes.minus) { @@ -2315,12 +2317,23 @@ namespace ts { pos++; continue; } + else if (ch === CharacterCodes.colon && !namespaceSeparator) { + tokenValue += ":"; + pos++; + namespaceSeparator = true; + continue; + } const oldPos = pos; tokenValue += scanIdentifierParts(); // reuse `scanIdentifierParts` so unicode escapes are handled if (pos === oldPos) { break; } } + // Do not include a trailing namespace separator in the token, since this is against the spec. + if (tokenValue.slice(-1) === ":") { + tokenValue = tokenValue.slice(0, -1); + pos--; + } } return token; } diff --git a/tests/baselines/reference/jsxEsprimaFbTestSuite.errors.txt b/tests/baselines/reference/jsxEsprimaFbTestSuite.errors.txt index c9e4aeb457cbe..22f3c94b6e1e0 100644 --- a/tests/baselines/reference/jsxEsprimaFbTestSuite.errors.txt +++ b/tests/baselines/reference/jsxEsprimaFbTestSuite.errors.txt @@ -1,10 +1,10 @@ -tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(39,1): error TS2657: JSX expressions must have one parent element. -tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(39,17): error TS1005: '{' expected. -tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(39,23): error TS1005: ';' expected. -tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(39,23): error TS2304: Cannot find name 'right'. -tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(39,41): error TS1382: Unexpected token. Did you mean `{'>'}` or `>`? -tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(39,57): error TS1109: Expression expected. -tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(39,58): error TS1109: Expression expected. +tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(40,1): error TS2657: JSX expressions must have one parent element. +tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(40,17): error TS1005: '{' expected. +tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(40,23): error TS1005: ';' expected. +tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(40,23): error TS2304: Cannot find name 'right'. +tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(40,41): error TS1382: Unexpected token. Did you mean `{'>'}` or `>`? +tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(40,57): error TS1109: Expression expected. +tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(40,58): error TS1109: Expression expected. ==== tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx (7 errors) ==== @@ -15,12 +15,13 @@ tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx(39,58): error TS1109: Expr declare var x; declare var a; declare var props; + declare var value; ; - //; Namespace unsuported + ; - // {value} ; Namespace unsuported + {value} ; ; diff --git a/tests/baselines/reference/jsxEsprimaFbTestSuite.js b/tests/baselines/reference/jsxEsprimaFbTestSuite.js index 169429a724954..8fe51d678f76e 100644 --- a/tests/baselines/reference/jsxEsprimaFbTestSuite.js +++ b/tests/baselines/reference/jsxEsprimaFbTestSuite.js @@ -6,12 +6,13 @@ declare var LeftRight; declare var x; declare var a; declare var props; +declare var value; ; -//; Namespace unsuported +; -// {value} ; Namespace unsuported + {value} ; ; @@ -56,8 +57,8 @@ baz //// [jsxEsprimaFbTestSuite.jsx] ; -//; Namespace unsuported -// {value} ; Namespace unsuported +; + {value} ; ; ; ; diff --git a/tests/baselines/reference/jsxEsprimaFbTestSuite.symbols b/tests/baselines/reference/jsxEsprimaFbTestSuite.symbols index f6d2fef6081d2..64d739a9d62dd 100644 --- a/tests/baselines/reference/jsxEsprimaFbTestSuite.symbols +++ b/tests/baselines/reference/jsxEsprimaFbTestSuite.symbols @@ -20,23 +20,29 @@ declare var a; declare var props; >props : Symbol(props, Decl(jsxEsprimaFbTestSuite.tsx, 6, 11)) +declare var value; +>value : Symbol(value, Decl(jsxEsprimaFbTestSuite.tsx, 7, 11)) + ; -//; Namespace unsuported +; +>n:v : Symbol(n:v, Decl(jsxEsprimaFbTestSuite.tsx, 11, 4)) -// {value} ; Namespace unsuported + {value} ; +>n:foo : Symbol(n:foo, Decl(jsxEsprimaFbTestSuite.tsx, 13, 2)) +>value : Symbol(value, Decl(jsxEsprimaFbTestSuite.tsx, 7, 11)) ; ->b : Symbol(b, Decl(jsxEsprimaFbTestSuite.tsx, 14, 2)) ->c : Symbol(c, Decl(jsxEsprimaFbTestSuite.tsx, 14, 10)) ->d : Symbol(d, Decl(jsxEsprimaFbTestSuite.tsx, 14, 16)) ->e : Symbol(e, Decl(jsxEsprimaFbTestSuite.tsx, 14, 26)) ->f : Symbol(f, Decl(jsxEsprimaFbTestSuite.tsx, 14, 43)) ->g : Symbol(g, Decl(jsxEsprimaFbTestSuite.tsx, 14, 59)) ->h : Symbol(h, Decl(jsxEsprimaFbTestSuite.tsx, 14, 71)) +>b : Symbol(b, Decl(jsxEsprimaFbTestSuite.tsx, 15, 2)) +>c : Symbol(c, Decl(jsxEsprimaFbTestSuite.tsx, 15, 10)) +>d : Symbol(d, Decl(jsxEsprimaFbTestSuite.tsx, 15, 16)) +>e : Symbol(e, Decl(jsxEsprimaFbTestSuite.tsx, 15, 26)) +>f : Symbol(f, Decl(jsxEsprimaFbTestSuite.tsx, 15, 43)) +>g : Symbol(g, Decl(jsxEsprimaFbTestSuite.tsx, 15, 59)) +>h : Symbol(h, Decl(jsxEsprimaFbTestSuite.tsx, 15, 71)) ; ->b : Symbol(b, Decl(jsxEsprimaFbTestSuite.tsx, 16, 2)) +>b : Symbol(b, Decl(jsxEsprimaFbTestSuite.tsx, 17, 2)) ; @@ -49,7 +55,7 @@ declare var props; >AbC_def : Symbol(AbC_def, Decl(jsxEsprimaFbTestSuite.tsx, 2, 11)) test="&&"> ->test : Symbol(test, Decl(jsxEsprimaFbTestSuite.tsx, 22, 8)) +>test : Symbol(test, Decl(jsxEsprimaFbTestSuite.tsx, 23, 8)) bar baz @@ -57,7 +63,7 @@ baz >AbC_def : Symbol(AbC_def, Decl(jsxEsprimaFbTestSuite.tsx, 2, 11)) : } />; ->b : Symbol(b, Decl(jsxEsprimaFbTestSuite.tsx, 28, 2)) +>b : Symbol(b, Decl(jsxEsprimaFbTestSuite.tsx, 29, 2)) >x : Symbol(x, Decl(jsxEsprimaFbTestSuite.tsx, 4, 11)) {}; @@ -70,7 +76,7 @@ baz right=monkeys /> gorillas />; >LeftRight : Symbol(LeftRight, Decl(jsxEsprimaFbTestSuite.tsx, 3, 11)) ->left : Symbol(left, Decl(jsxEsprimaFbTestSuite.tsx, 38, 10)) +>left : Symbol(left, Decl(jsxEsprimaFbTestSuite.tsx, 39, 10)) ; >a : Symbol(a, Decl(jsxEsprimaFbTestSuite.tsx, 5, 11)) @@ -88,11 +94,11 @@ baz
; >props : Symbol(props, Decl(jsxEsprimaFbTestSuite.tsx, 6, 11)) ->post : Symbol(post, Decl(jsxEsprimaFbTestSuite.tsx, 48, 15)) +>post : Symbol(post, Decl(jsxEsprimaFbTestSuite.tsx, 49, 15))
; ->pre : Symbol(pre, Decl(jsxEsprimaFbTestSuite.tsx, 50, 4)) ->pre2 : Symbol(pre2, Decl(jsxEsprimaFbTestSuite.tsx, 50, 18)) +>pre : Symbol(pre, Decl(jsxEsprimaFbTestSuite.tsx, 51, 4)) +>pre2 : Symbol(pre2, Decl(jsxEsprimaFbTestSuite.tsx, 51, 18)) >props : Symbol(props, Decl(jsxEsprimaFbTestSuite.tsx, 6, 11)) ; diff --git a/tests/baselines/reference/jsxEsprimaFbTestSuite.types b/tests/baselines/reference/jsxEsprimaFbTestSuite.types index 990f8332fd272..7061befb881aa 100644 --- a/tests/baselines/reference/jsxEsprimaFbTestSuite.types +++ b/tests/baselines/reference/jsxEsprimaFbTestSuite.types @@ -20,13 +20,29 @@ declare var a; declare var props; >props : any +declare var value; +>value : any + ; > : any >a : any -//; Namespace unsuported +; +> : any +>n:a : any +>n:v : true -// {value} ; Namespace unsuported + {value} ; +> {value} : any +>a : any +>n:foo : string +>value : any +> : any +>b : any +> : any +>c : any +>b : any +>a : any ; > : any diff --git a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.errors.txt b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.errors.txt index a7deeac2aaaeb..be20bc527a510 100644 --- a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.errors.txt +++ b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.errors.txt @@ -75,13 +75,9 @@ tests/cases/conformance/jsx/5.tsx(1,2): error TS17008: JSX element 'a' has no co tests/cases/conformance/jsx/5.tsx(1,5): error TS1005: '' expected. -tests/cases/conformance/jsx/9.tsx(1,12): error TS2304: Cannot find name 'b'. -tests/cases/conformance/jsx/9.tsx(1,16): error TS1109: Expression expected. +tests/cases/conformance/jsx/8.tsx(1,6): error TS17002: Expected corresponding JSX closing tag for 'a:b'. +tests/cases/conformance/jsx/9.tsx(1,2): error TS2304: Cannot find name 'a:b'. +tests/cases/conformance/jsx/9.tsx(1,10): error TS2304: Cannot find name 'a:b'. ==== tests/cases/conformance/jsx/1.tsx (3 errors) ==== @@ -128,24 +124,16 @@ tests/cases/conformance/jsx/9.tsx(1,16): error TS1109: Expression expected. ; //// [8.jsx] -; +; //// [9.jsx] -; -b.c > ; +; //// [10.jsx] ; c > ; diff --git a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.symbols b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.symbols index 3e029e49c79a6..b5e2de25fcde3 100644 --- a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.symbols +++ b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.symbols @@ -22,14 +22,9 @@ No type information for this code.=== tests/cases/conformance/jsx/7.tsx === === tests/cases/conformance/jsx/8.tsx === ; ->b : Symbol(b, Decl(8.tsx, 0, 3)) - -=== tests/cases/conformance/jsx/9.tsx === +No type information for this code.=== tests/cases/conformance/jsx/9.tsx === ; ->b : Symbol(b, Decl(9.tsx, 0, 3)) ->c : Symbol(c, Decl(9.tsx, 0, 5)) - -=== tests/cases/conformance/jsx/10.tsx === +No type information for this code.=== tests/cases/conformance/jsx/10.tsx === ; >c : Symbol(c, Decl(10.tsx, 0, 5)) diff --git a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.types b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.types index 3b7ca699c8c86..cb54dc62c3af7 100644 --- a/tests/baselines/reference/jsxInvalidEsprimaTestSuite.types +++ b/tests/baselines/reference/jsxInvalidEsprimaTestSuite.types @@ -51,22 +51,18 @@ declare var React: any; === tests/cases/conformance/jsx/8.tsx === ; > : any ->a : any ->b : true +>a:b : any >b : any === tests/cases/conformance/jsx/9.tsx === ; ->a : any ->b : true ->c : true ->a : any ->b.c> : boolean ->b.c : any ->b : any +> : any +>a:b.c : any +>a:b : any +>c : any +>a:b.c : any +>a:b : any >c : any -> : any === tests/cases/conformance/jsx/10.tsx === ; diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt new file mode 100644 index 0000000000000..ca1d1eaf9081f --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt @@ -0,0 +1,74 @@ +tests/cases/compiler/jsxNamespacePrefixInName.tsx(7,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(8,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(8,45): error TS1005: '>' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(8,50): error TS1005: ',' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(8,51): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(9,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(9,60): error TS1005: '>' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(9,65): error TS1005: ',' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(9,66): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(10,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(10,53): error TS1005: '>' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(10,58): error TS1005: ',' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(10,59): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,68): error TS1005: '>' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,73): error TS1005: ',' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,74): error TS1109: Expression expected. + + +==== tests/cases/compiler/jsxNamespacePrefixInName.tsx (17 errors) ==== + var justElement1 = ; + var justElement2 = ; + var justElement3 = ; + var justElement4 = {"text"}; + var justElement5 = {"text"}; + + var tooManySeparators1 = ; + ~ +!!! error TS1003: Identifier expected. + var tooManySeparators2 = ; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: '>' expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1109: Expression expected. + var tooManySeparators3 = ; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: '>' expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1109: Expression expected. + var tooManySeparators4 = {"text"}; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: '>' expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1109: Expression expected. + var tooManySeparators5 = {"text"}; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: '>' expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1109: Expression expected. + + var justAttribute1 = ; + var justAttribute2 = ; + var justAttribute3 = {"text"}; + + var both1 = ; + var both2 = ; + var both3 = {"text"}; + \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.js b/tests/baselines/reference/jsxNamespacePrefixInName.js new file mode 100644 index 0000000000000..7e0576a26276e --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInName.js @@ -0,0 +1,43 @@ +//// [jsxNamespacePrefixInName.tsx] +var justElement1 = ; +var justElement2 = ; +var justElement3 = ; +var justElement4 = {"text"}; +var justElement5 = {"text"}; + +var tooManySeparators1 = ; +var tooManySeparators2 = ; +var tooManySeparators3 = ; +var tooManySeparators4 = {"text"}; +var tooManySeparators5 = {"text"}; + +var justAttribute1 = ; +var justAttribute2 = ; +var justAttribute3 = {"text"}; + +var both1 = ; +var both2 = ; +var both3 = {"text"}; + + +//// [jsxNamespacePrefixInName.jsx] +var justElement1 = ; +var justElement2 = ; +var justElement3 = ; +var justElement4 = {"text"}; +var justElement5 = {"text"}; +var tooManySeparators1 = ; +var tooManySeparators2 = , ment; + > ; +var tooManySeparators3 = , ment; + > ; +var tooManySeparators4 = {"text"}, ment; + > ; +var tooManySeparators5 = {"text"}, ment; + > ; +var justAttribute1 = ; +var justAttribute2 = ; +var justAttribute3 = {"text"}; +var both1 = ; +var both2 = ; +var both3 = {"text"}; diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.symbols b/tests/baselines/reference/jsxNamespacePrefixInName.symbols new file mode 100644 index 0000000000000..624e321d940dc --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInName.symbols @@ -0,0 +1,68 @@ +=== tests/cases/compiler/jsxNamespacePrefixInName.tsx === +var justElement1 = ; +>justElement1 : Symbol(justElement1, Decl(jsxNamespacePrefixInName.tsx, 0, 3)) + +var justElement2 = ; +>justElement2 : Symbol(justElement2, Decl(jsxNamespacePrefixInName.tsx, 1, 3)) + +var justElement3 = ; +>justElement3 : Symbol(justElement3, Decl(jsxNamespacePrefixInName.tsx, 2, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 2, 29)) + +var justElement4 = {"text"}; +>justElement4 : Symbol(justElement4, Decl(jsxNamespacePrefixInName.tsx, 3, 3)) + +var justElement5 = {"text"}; +>justElement5 : Symbol(justElement5, Decl(jsxNamespacePrefixInName.tsx, 4, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 4, 29)) + +var tooManySeparators1 = ; +>tooManySeparators1 : Symbol(tooManySeparators1, Decl(jsxNamespacePrefixInName.tsx, 6, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInName.tsx, 6, 32)) + +var tooManySeparators2 = ; +>tooManySeparators2 : Symbol(tooManySeparators2, Decl(jsxNamespacePrefixInName.tsx, 7, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInName.tsx, 7, 32)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInName.tsx, 7, 45), Decl(jsxNamespacePrefixInName.tsx, 8, 60), Decl(jsxNamespacePrefixInName.tsx, 9, 53), Decl(jsxNamespacePrefixInName.tsx, 10, 68)) + +var tooManySeparators3 = ; +>tooManySeparators3 : Symbol(tooManySeparators3, Decl(jsxNamespacePrefixInName.tsx, 8, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInName.tsx, 8, 32)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 8, 36)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInName.tsx, 7, 45), Decl(jsxNamespacePrefixInName.tsx, 8, 60), Decl(jsxNamespacePrefixInName.tsx, 9, 53), Decl(jsxNamespacePrefixInName.tsx, 10, 68)) + +var tooManySeparators4 = {"text"}; +>tooManySeparators4 : Symbol(tooManySeparators4, Decl(jsxNamespacePrefixInName.tsx, 9, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInName.tsx, 9, 32)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInName.tsx, 7, 45), Decl(jsxNamespacePrefixInName.tsx, 8, 60), Decl(jsxNamespacePrefixInName.tsx, 9, 53), Decl(jsxNamespacePrefixInName.tsx, 10, 68)) + +var tooManySeparators5 = {"text"}; +>tooManySeparators5 : Symbol(tooManySeparators5, Decl(jsxNamespacePrefixInName.tsx, 10, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInName.tsx, 10, 32)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 10, 36)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInName.tsx, 7, 45), Decl(jsxNamespacePrefixInName.tsx, 8, 60), Decl(jsxNamespacePrefixInName.tsx, 9, 53), Decl(jsxNamespacePrefixInName.tsx, 10, 68)) + +var justAttribute1 = ; +>justAttribute1 : Symbol(justAttribute1, Decl(jsxNamespacePrefixInName.tsx, 12, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInName.tsx, 12, 29)) + +var justAttribute2 = ; +>justAttribute2 : Symbol(justAttribute2, Decl(jsxNamespacePrefixInName.tsx, 13, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInName.tsx, 13, 29)) + +var justAttribute3 = {"text"}; +>justAttribute3 : Symbol(justAttribute3, Decl(jsxNamespacePrefixInName.tsx, 14, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInName.tsx, 14, 29)) + +var both1 = ; +>both1 : Symbol(both1, Decl(jsxNamespacePrefixInName.tsx, 16, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInName.tsx, 16, 22)) + +var both2 = ; +>both2 : Symbol(both2, Decl(jsxNamespacePrefixInName.tsx, 17, 3)) +>k:attr : Symbol(k:attr, Decl(jsxNamespacePrefixInName.tsx, 17, 22)) + +var both3 = {"text"}; +>both3 : Symbol(both3, Decl(jsxNamespacePrefixInName.tsx, 18, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInName.tsx, 18, 22)) + diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.types b/tests/baselines/reference/jsxNamespacePrefixInName.types new file mode 100644 index 0000000000000..a76988ee91836 --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInName.types @@ -0,0 +1,140 @@ +=== tests/cases/compiler/jsxNamespacePrefixInName.tsx === +var justElement1 = ; +>justElement1 : any +> : any +>a:element : any + +var justElement2 = ; +>justElement2 : any +> : any +>a:element : any +>a:element : any + +var justElement3 = ; +>justElement3 : any +> : any +>a:element : any +>attr : string +>"value" : "value" +>a:element : any + +var justElement4 = {"text"}; +>justElement4 : any +>{"text"} : any +>a:element : any +>"text" : "text" +>a:element : any + +var justElement5 = {"text"}; +>justElement5 : any +>{"text"} : any +>a:element : any +>attr : string +>"value" : "value" +>"text" : "text" +>a:element : any + +var tooManySeparators1 = ; +>tooManySeparators1 : any +> : any +>a:ele : any +>ment : true + +var tooManySeparators2 = ; +>tooManySeparators2 : any +>a:ele : any +>ment : true +>a:ele : any +>ment : any +>> : boolean +> : any +> : any + +var tooManySeparators3 = ; +>tooManySeparators3 : any +>a:ele : any +>ment : true +>attr : string +>"value" : "value" +>a:ele : any +>ment : any +>> : boolean +> : any +> : any + +var tooManySeparators4 = {"text"}; +>tooManySeparators4 : any +>{"text"}a:ele : any +>ment : true +>"text" : "text" +>a:ele : any +>ment : any +>> : boolean +> : any +> : any + +var tooManySeparators5 = {"text"}; +>tooManySeparators5 : any +>{"text"}a:ele : any +>ment : true +>attr : string +>"value" : "value" +>"text" : "text" +>a:ele : any +>ment : any +>> : boolean +> : any +> : any + +var justAttribute1 = ; +>justAttribute1 : any +> : any +>element : any +>a:attr : string +>"value" : "value" + +var justAttribute2 = ; +>justAttribute2 : any +> : any +>element : any +>a:attr : string +>"value" : "value" +>element : any + +var justAttribute3 = {"text"}; +>justAttribute3 : any +>{"text"} : any +>element : any +>a:attr : string +>"value" : "value" +>"text" : "text" +>element : any + +var both1 = ; +>both1 : any +> : any +>a:element : any +>a:attr : string +>"value" : "value" + +var both2 = ; +>both2 : any +> : any +>a:element : any +>k:attr : string +>"value" : "value" +>a:element : any + +var both3 = {"text"}; +>both3 : any +>{"text"} : any +>a:element : any +>a:attr : string +>"value" : "value" +>"text" : "text" +>a:element : any + diff --git a/tests/cases/compiler/jsxNamespacePrefixInName.tsx b/tests/cases/compiler/jsxNamespacePrefixInName.tsx new file mode 100644 index 0000000000000..9c88715f72e06 --- /dev/null +++ b/tests/cases/compiler/jsxNamespacePrefixInName.tsx @@ -0,0 +1,21 @@ +// @jsx: preserve + +var justElement1 = ; +var justElement2 = ; +var justElement3 = ; +var justElement4 = {"text"}; +var justElement5 = {"text"}; + +var tooManySeparators1 = ; +var tooManySeparators2 = ; +var tooManySeparators3 = ; +var tooManySeparators4 = {"text"}; +var tooManySeparators5 = {"text"}; + +var justAttribute1 = ; +var justAttribute2 = ; +var justAttribute3 = {"text"}; + +var both1 = ; +var both2 = ; +var both3 = {"text"}; diff --git a/tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx b/tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx index 163357454aacc..e18c6ddfc2ccf 100644 --- a/tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx +++ b/tests/cases/conformance/jsx/jsxEsprimaFbTestSuite.tsx @@ -6,12 +6,13 @@ declare var LeftRight; declare var x; declare var a; declare var props; +declare var value; ; -//; Namespace unsuported +; -// {value} ; Namespace unsuported + {value} ; ; From d5b883a8ea482950c65c2cdaec7b272c37460d81 Mon Sep 17 00:00:00 2001 From: tomjw64 Date: Sat, 19 Sep 2020 15:41:00 -0500 Subject: [PATCH 2/9] Add case for colons at ends of identifier --- .../jsxNamespacePrefixInName.errors.txt | 44 ++++++++++++++++++- .../reference/jsxNamespacePrefixInName.js | 10 +++++ .../jsxNamespacePrefixInName.symbols | 18 ++++++++ .../reference/jsxNamespacePrefixInName.types | 36 +++++++++++++++ .../compiler/jsxNamespacePrefixInName.tsx | 6 +++ 5 files changed, 113 insertions(+), 1 deletion(-) diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt index ca1d1eaf9081f..3764a57609e10 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt @@ -15,9 +15,21 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,32): error TS1003: Identifi tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,68): error TS1005: '>' expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,73): error TS1005: ',' expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,74): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(21,21): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(22,26): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(22,27): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(22,29): error TS1005: '...' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,21): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,22): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,25): error TS1005: ',' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,30): error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,38): error TS1005: ':' expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,41): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,42): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,24): error TS1003: Identifier expected. -==== tests/cases/compiler/jsxNamespacePrefixInName.tsx (17 errors) ==== +==== tests/cases/compiler/jsxNamespacePrefixInName.tsx (29 errors) ==== var justElement1 = ; var justElement2 = ; var justElement3 = ; @@ -71,4 +83,34 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(11,74): error TS1109: Expressi var both1 = ; var both2 = ; var both3 = {"text"}; + + var endOfIdent1 = ; + ~ +!!! error TS1003: Identifier expected. + var endOfIdent2 = ; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1003: Identifier expected. + ~~~~~~~ +!!! error TS1005: '...' expected. + + var beginOfIdent1 = <:a attr={"value"} />; + ~ +!!! error TS1109: Expression expected. + ~ +!!! error TS1109: Expression expected. + ~~~~ +!!! error TS1005: ',' expected. + ~~~~~~~~~ +!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. + ~ +!!! error TS1005: ':' expected. + ~ +!!! error TS1109: Expression expected. + ~ +!!! error TS1109: Expression expected. + var beginOfIdent1 = ; + ~ +!!! error TS1003: Identifier expected. \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.js b/tests/baselines/reference/jsxNamespacePrefixInName.js index 7e0576a26276e..a8b05c7868653 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.js +++ b/tests/baselines/reference/jsxNamespacePrefixInName.js @@ -18,6 +18,12 @@ var justAttribute3 = {"text"}; var both1 = ; var both2 = ; var both3 = {"text"}; + +var endOfIdent1 = ; +var endOfIdent2 = ; + +var beginOfIdent1 = <:a attr={"value"} />; +var beginOfIdent1 = ; //// [jsxNamespacePrefixInName.jsx] @@ -41,3 +47,7 @@ var justAttribute3 = {"text"}; var both1 = ; var both2 = ; var both3 = {"text"}; +var endOfIdent1 = ; +var endOfIdent2 = ; +var beginOfIdent1 = < , a, attr = { "value": } / > ; +var beginOfIdent1 = ; diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.symbols b/tests/baselines/reference/jsxNamespacePrefixInName.symbols index 624e321d940dc..2d3dc5982c6ce 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixInName.symbols @@ -66,3 +66,21 @@ var both3 = {"text"}; >both3 : Symbol(both3, Decl(jsxNamespacePrefixInName.tsx, 18, 3)) >a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInName.tsx, 18, 22)) +var endOfIdent1 = ; +>endOfIdent1 : Symbol(endOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 20, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 20, 21)) + +var endOfIdent2 = ; +>endOfIdent2 : Symbol(endOfIdent2, Decl(jsxNamespacePrefixInName.tsx, 21, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 21, 20)) + +var beginOfIdent1 = <:a attr={"value"} />; +>beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 23, 3), Decl(jsxNamespacePrefixInName.tsx, 24, 3)) +>a : Symbol(a, Decl(jsxNamespacePrefixInName.tsx, 23, 22)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 23, 23)) +>"value" : Symbol("value", Decl(jsxNamespacePrefixInName.tsx, 23, 30)) + +var beginOfIdent1 = ; +>beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 23, 3), Decl(jsxNamespacePrefixInName.tsx, 24, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 24, 24)) + diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.types b/tests/baselines/reference/jsxNamespacePrefixInName.types index a76988ee91836..7cb72a51b8db9 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.types +++ b/tests/baselines/reference/jsxNamespacePrefixInName.types @@ -138,3 +138,39 @@ var both3 = {"text"}; >"text" : "text" >a:element : any +var endOfIdent1 = ; +>endOfIdent1 : any +> : any +>a : any +>attr : string +>"value" : "value" + +var endOfIdent2 = ; +>endOfIdent2 : any +> : any +>a : any +>attr : true +>"value" : "value" + +var beginOfIdent1 = <:a attr={"value"} />; +>beginOfIdent1 : boolean +>< : boolean +> : any +> : any +>a : any +>attr : boolean +>{"value"} /> : boolean +>{"value"} / : number +>{"value"} : { value: any; } +>"value" : any +> : any +> : any +> : any + +var beginOfIdent1 = ; +>beginOfIdent1 : boolean +> : any +>a : any +>attr : string +>"value" : "value" + diff --git a/tests/cases/compiler/jsxNamespacePrefixInName.tsx b/tests/cases/compiler/jsxNamespacePrefixInName.tsx index 9c88715f72e06..63fd53cc38222 100644 --- a/tests/cases/compiler/jsxNamespacePrefixInName.tsx +++ b/tests/cases/compiler/jsxNamespacePrefixInName.tsx @@ -19,3 +19,9 @@ var justAttribute3 = {"text"}; var both1 = ; var both2 = ; var both3 = {"text"}; + +var endOfIdent1 = ; +var endOfIdent2 = ; + +var beginOfIdent1 = <:a attr={"value"} />; +var beginOfIdent1 = ; From 83c6814771cd67555bd01a9e8fc66d57276e83ca Mon Sep 17 00:00:00 2001 From: tomjw64 Date: Sat, 19 Sep 2020 15:57:09 -0500 Subject: [PATCH 3/9] Add case for jsx namepsace intrinsics --- .../jsxNamespacePrefixIntrinsics.errors.txt | 30 ++++++++++++++++ .../reference/jsxNamespacePrefixIntrinsics.js | 21 +++++++++++ .../jsxNamespacePrefixIntrinsics.symbols | 34 ++++++++++++++++++ .../jsxNamespacePrefixIntrinsics.types | 35 +++++++++++++++++++ .../compiler/jsxNamespacePrefixIntrinsics.tsx | 16 +++++++++ 5 files changed, 136 insertions(+) create mode 100644 tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt create mode 100644 tests/baselines/reference/jsxNamespacePrefixIntrinsics.js create mode 100644 tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols create mode 100644 tests/baselines/reference/jsxNamespacePrefixIntrinsics.types create mode 100644 tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt new file mode 100644 index 0000000000000..e3c33e28f6c4f --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt @@ -0,0 +1,30 @@ +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(11,18): error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'. +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(12,30): error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'. + Property 'attribute' does not exist on type '{ "ns:attribute": string; }'. +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(13,30): error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'. + Property 'ns:invalid' does not exist on type '{ "ns:attribute": string; }'. + + +==== tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx (3 errors) ==== + declare namespace JSX { + interface IntrinsicElements { + "ns:element": { + "ns:attribute": string; + } + } + } + + const valid = ; + + const invalid1 = ; + ~~~~~~~~~~~ +!!! error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'. + const invalid2 = ; + ~~~~~~~~~ +!!! error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'. +!!! error TS2322: Property 'attribute' does not exist on type '{ "ns:attribute": string; }'. + const invalid3 = ; + ~~~~~~~~~~ +!!! error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'. +!!! error TS2322: Property 'ns:invalid' does not exist on type '{ "ns:attribute": string; }'. + \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js new file mode 100644 index 0000000000000..29de2a623a7ef --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js @@ -0,0 +1,21 @@ +//// [jsxNamespacePrefixIntrinsics.tsx] +declare namespace JSX { + interface IntrinsicElements { + "ns:element": { + "ns:attribute": string; + } + } +} + +const valid = ; + +const invalid1 = ; +const invalid2 = ; +const invalid3 = ; + + +//// [jsxNamespacePrefixIntrinsics.jsx] +var valid = ; +var invalid1 = ; +var invalid2 = ; +var invalid3 = ; diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols new file mode 100644 index 0000000000000..72dd092754ac8 --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols @@ -0,0 +1,34 @@ +=== tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx === +declare namespace JSX { +>JSX : Symbol(JSX, Decl(jsxNamespacePrefixIntrinsics.tsx, 0, 0)) + + interface IntrinsicElements { +>IntrinsicElements : Symbol(IntrinsicElements, Decl(jsxNamespacePrefixIntrinsics.tsx, 0, 23)) + + "ns:element": { +>"ns:element" : Symbol(IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) + + "ns:attribute": string; +>"ns:attribute" : Symbol("ns:attribute", Decl(jsxNamespacePrefixIntrinsics.tsx, 2, 19)) + } + } +} + +const valid = ; +>valid : Symbol(valid, Decl(jsxNamespacePrefixIntrinsics.tsx, 8, 5)) +>ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) +>ns:attribute : Symbol(ns:attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 8, 25)) + +const invalid1 = ; +>invalid1 : Symbol(invalid1, Decl(jsxNamespacePrefixIntrinsics.tsx, 10, 5)) + +const invalid2 = ; +>invalid2 : Symbol(invalid2, Decl(jsxNamespacePrefixIntrinsics.tsx, 11, 5)) +>ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) +>attribute : Symbol(attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 11, 28)) + +const invalid3 = ; +>invalid3 : Symbol(invalid3, Decl(jsxNamespacePrefixIntrinsics.tsx, 12, 5)) +>ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) +>ns:invalid : Symbol(ns:invalid, Decl(jsxNamespacePrefixIntrinsics.tsx, 12, 28)) + diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types new file mode 100644 index 0000000000000..4439a7ac04531 --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types @@ -0,0 +1,35 @@ +=== tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx === +declare namespace JSX { + interface IntrinsicElements { + "ns:element": { +>"ns:element" : { "ns:attribute": string; } + + "ns:attribute": string; +>"ns:attribute" : string + } + } +} + +const valid = ; +>valid : any +> : any +>ns:element : any +>ns:attribute : string + +const invalid1 = ; +>invalid1 : any +> : any +>element : any + +const invalid2 = ; +>invalid2 : any +> : any +>ns:element : any +>attribute : string + +const invalid3 = ; +>invalid3 : any +> : any +>ns:element : any +>ns:invalid : string + diff --git a/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx b/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx new file mode 100644 index 0000000000000..70b97b0f721f5 --- /dev/null +++ b/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx @@ -0,0 +1,16 @@ +// @noImplicitAny: true +// @jsx: preserve + +declare namespace JSX { + interface IntrinsicElements { + "ns:element": { + "ns:attribute": string; + } + } +} + +const valid = ; + +const invalid1 = ; +const invalid2 = ; +const invalid3 = ; From 443ddbed558ed93d8c743de33b51d04f57d44eb2 Mon Sep 17 00:00:00 2001 From: tomjw64 Date: Sat, 19 Sep 2020 16:11:52 -0500 Subject: [PATCH 4/9] Add cases with upcase idents for jsx namespaces --- .../jsxNamespacePrefixInName.errors.txt | 15 ++++++++++-- .../reference/jsxNamespacePrefixInName.js | 11 ++++++++- .../jsxNamespacePrefixInName.symbols | 12 ++++++++++ .../reference/jsxNamespacePrefixInName.types | 19 +++++++++++++++ .../jsxNamespacePrefixIntrinsics.errors.txt | 10 ++++---- .../reference/jsxNamespacePrefixIntrinsics.js | 5 +++- .../jsxNamespacePrefixIntrinsics.symbols | 23 ++++++++++++------- .../jsxNamespacePrefixIntrinsics.types | 10 +++++++- .../compiler/jsxNamespacePrefixInName.tsx | 6 +++++ .../compiler/jsxNamespacePrefixIntrinsics.tsx | 4 +++- 10 files changed, 97 insertions(+), 18 deletions(-) diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt index 3764a57609e10..ab499d1c8dbf4 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt @@ -27,9 +27,11 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,38): error TS1005: ':' expe tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,41): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,42): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,24): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(29,25): error TS2304: Cannot find name 'Upcase:element'. +tests/cases/compiler/jsxNamespacePrefixInName.tsx(31,34): error TS2304: Cannot find name 'NS:something'. -==== tests/cases/compiler/jsxNamespacePrefixInName.tsx (29 errors) ==== +==== tests/cases/compiler/jsxNamespacePrefixInName.tsx (31 errors) ==== var justElement1 = ; var justElement2 = ; var justElement3 = ; @@ -113,4 +115,13 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,24): error TS1003: Identifi var beginOfIdent1 = ; ~ !!! error TS1003: Identifier expected. - \ No newline at end of file + + var Upcase = "mycomponent" + var upcaseComponent1 = // Parsed as intrinsic: ok + var upcaseComponent2 = // Parsed as component: not ok + ~~~~~~~~~~~~~~ +!!! error TS2304: Cannot find name 'Upcase:element'. + + var upcaseComponentUndeclared = + ~~~~~~~~~~~~ +!!! error TS2304: Cannot find name 'NS:something'. \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.js b/tests/baselines/reference/jsxNamespacePrefixInName.js index a8b05c7868653..7918c7e16ec9b 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.js +++ b/tests/baselines/reference/jsxNamespacePrefixInName.js @@ -24,7 +24,12 @@ var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; var beginOfIdent1 = ; - + +var Upcase = "mycomponent" +var upcaseComponent1 = // Parsed as intrinsic: ok +var upcaseComponent2 = // Parsed as component: not ok + +var upcaseComponentUndeclared = //// [jsxNamespacePrefixInName.jsx] var justElement1 = ; @@ -51,3 +56,7 @@ var endOfIdent1 = ; var endOfIdent2 = ; var beginOfIdent1 = < , a, attr = { "value": } / > ; var beginOfIdent1 = ; +var Upcase = "mycomponent"; +var upcaseComponent1 = ; // Parsed as intrinsic: ok +var upcaseComponent2 = ; // Parsed as component: not ok +var upcaseComponentUndeclared = ; diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.symbols b/tests/baselines/reference/jsxNamespacePrefixInName.symbols index 2d3dc5982c6ce..9da677b9be9d5 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixInName.symbols @@ -84,3 +84,15 @@ var beginOfIdent1 = ; >beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 23, 3), Decl(jsxNamespacePrefixInName.tsx, 24, 3)) >attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 24, 24)) +var Upcase = "mycomponent" +>Upcase : Symbol(Upcase, Decl(jsxNamespacePrefixInName.tsx, 26, 3)) + +var upcaseComponent1 = // Parsed as intrinsic: ok +>upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInName.tsx, 27, 3)) + +var upcaseComponent2 = // Parsed as component: not ok +>upcaseComponent2 : Symbol(upcaseComponent2, Decl(jsxNamespacePrefixInName.tsx, 28, 3)) + +var upcaseComponentUndeclared = +>upcaseComponentUndeclared : Symbol(upcaseComponentUndeclared, Decl(jsxNamespacePrefixInName.tsx, 30, 3)) + diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.types b/tests/baselines/reference/jsxNamespacePrefixInName.types index 7cb72a51b8db9..3a4daffecf6a2 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.types +++ b/tests/baselines/reference/jsxNamespacePrefixInName.types @@ -174,3 +174,22 @@ var beginOfIdent1 = ; >attr : string >"value" : "value" +var Upcase = "mycomponent" +>Upcase : string +>"mycomponent" : "mycomponent" + +var upcaseComponent1 = // Parsed as intrinsic: ok +>upcaseComponent1 : any +> : any +>ns:Upcase : any + +var upcaseComponent2 = // Parsed as component: not ok +>upcaseComponent2 : any +> : any +>Upcase:element : any + +var upcaseComponentUndeclared = +>upcaseComponentUndeclared : any +> : any +>NS:something : any + diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt index e3c33e28f6c4f..e82afb32abd2b 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(11,18): error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'. -tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(12,30): error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'. +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(13,18): error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'. +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(14,30): error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'. Property 'attribute' does not exist on type '{ "ns:attribute": string; }'. -tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(13,30): error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'. +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(15,30): error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'. Property 'ns:invalid' does not exist on type '{ "ns:attribute": string; }'. @@ -10,11 +10,13 @@ tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(13,30): error TS2322: Type interface IntrinsicElements { "ns:element": { "ns:attribute": string; - } + }, + "ns:NamespacedUpcaseAlsoIntrinsic": any } } const valid = ; + const validUpcase = ; const invalid1 = ; ~~~~~~~~~~~ diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js index 29de2a623a7ef..6b4ceb04c493a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js @@ -3,11 +3,13 @@ declare namespace JSX { interface IntrinsicElements { "ns:element": { "ns:attribute": string; - } + }, + "ns:NamespacedUpcaseAlsoIntrinsic": any } } const valid = ; +const validUpcase = ; const invalid1 = ; const invalid2 = ; @@ -16,6 +18,7 @@ const invalid3 = ; //// [jsxNamespacePrefixIntrinsics.jsx] var valid = ; +var validUpcase = ; var invalid1 = ; var invalid2 = ; var invalid3 = ; diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols index 72dd092754ac8..ba14ff67e6802 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols @@ -10,25 +10,32 @@ declare namespace JSX { "ns:attribute": string; >"ns:attribute" : Symbol("ns:attribute", Decl(jsxNamespacePrefixIntrinsics.tsx, 2, 19)) - } + + }, + "ns:NamespacedUpcaseAlsoIntrinsic": any +>"ns:NamespacedUpcaseAlsoIntrinsic" : Symbol(IntrinsicElements["ns:NamespacedUpcaseAlsoIntrinsic"], Decl(jsxNamespacePrefixIntrinsics.tsx, 4, 6)) } } const valid = ; ->valid : Symbol(valid, Decl(jsxNamespacePrefixIntrinsics.tsx, 8, 5)) +>valid : Symbol(valid, Decl(jsxNamespacePrefixIntrinsics.tsx, 9, 5)) >ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) ->ns:attribute : Symbol(ns:attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 8, 25)) +>ns:attribute : Symbol(ns:attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 9, 25)) + +const validUpcase = ; +>validUpcase : Symbol(validUpcase, Decl(jsxNamespacePrefixIntrinsics.tsx, 10, 5)) +>ns:NamespacedUpcaseAlsoIntrinsic : Symbol(JSX.IntrinsicElements["ns:NamespacedUpcaseAlsoIntrinsic"], Decl(jsxNamespacePrefixIntrinsics.tsx, 4, 6)) const invalid1 = ; ->invalid1 : Symbol(invalid1, Decl(jsxNamespacePrefixIntrinsics.tsx, 10, 5)) +>invalid1 : Symbol(invalid1, Decl(jsxNamespacePrefixIntrinsics.tsx, 12, 5)) const invalid2 = ; ->invalid2 : Symbol(invalid2, Decl(jsxNamespacePrefixIntrinsics.tsx, 11, 5)) +>invalid2 : Symbol(invalid2, Decl(jsxNamespacePrefixIntrinsics.tsx, 13, 5)) >ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) ->attribute : Symbol(attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 11, 28)) +>attribute : Symbol(attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 13, 28)) const invalid3 = ; ->invalid3 : Symbol(invalid3, Decl(jsxNamespacePrefixIntrinsics.tsx, 12, 5)) +>invalid3 : Symbol(invalid3, Decl(jsxNamespacePrefixIntrinsics.tsx, 14, 5)) >ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) ->ns:invalid : Symbol(ns:invalid, Decl(jsxNamespacePrefixIntrinsics.tsx, 12, 28)) +>ns:invalid : Symbol(ns:invalid, Decl(jsxNamespacePrefixIntrinsics.tsx, 14, 28)) diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types index 4439a7ac04531..5bdfe4993c275 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types @@ -6,7 +6,10 @@ declare namespace JSX { "ns:attribute": string; >"ns:attribute" : string - } + + }, + "ns:NamespacedUpcaseAlsoIntrinsic": any +>"ns:NamespacedUpcaseAlsoIntrinsic" : any } } @@ -16,6 +19,11 @@ const valid = ; >ns:element : any >ns:attribute : string +const validUpcase = ; +>validUpcase : any +> : any +>ns:NamespacedUpcaseAlsoIntrinsic : any + const invalid1 = ; >invalid1 : any > : any diff --git a/tests/cases/compiler/jsxNamespacePrefixInName.tsx b/tests/cases/compiler/jsxNamespacePrefixInName.tsx index 63fd53cc38222..b9fae5abd600d 100644 --- a/tests/cases/compiler/jsxNamespacePrefixInName.tsx +++ b/tests/cases/compiler/jsxNamespacePrefixInName.tsx @@ -25,3 +25,9 @@ var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; var beginOfIdent1 = ; + +var Upcase = "mycomponent" +var upcaseComponent1 = // Parsed as intrinsic: ok +var upcaseComponent2 = // Parsed as component: not ok + +var upcaseComponentUndeclared = \ No newline at end of file diff --git a/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx b/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx index 70b97b0f721f5..364df2366f1a8 100644 --- a/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx +++ b/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx @@ -5,11 +5,13 @@ declare namespace JSX { interface IntrinsicElements { "ns:element": { "ns:attribute": string; - } + }, + "ns:NamespacedUpcaseAlsoIntrinsic": any } } const valid = ; +const validUpcase = ; const invalid1 = ; const invalid2 = ; From 6292eaa3bec07a06d32a125d93750330fca54134 Mon Sep 17 00:00:00 2001 From: tomjw64 Date: Sat, 19 Sep 2020 16:23:54 -0500 Subject: [PATCH 5/9] Add case for jsx namespaces with react option --- .../jsxNamespacePrefixInName.errors.txt | 3 +- .../reference/jsxNamespacePrefixInName.js | 3 +- .../jsxNamespacePrefixInNameReact.errors.txt | 130 ++++++++++++ .../jsxNamespacePrefixInNameReact.js | 76 +++++++ .../jsxNamespacePrefixInNameReact.symbols | 101 +++++++++ .../jsxNamespacePrefixInNameReact.types | 198 ++++++++++++++++++ .../compiler/jsxNamespacePrefixInName.tsx | 2 +- .../jsxNamespacePrefixInNameReact.tsx | 34 +++ 8 files changed, 544 insertions(+), 3 deletions(-) create mode 100644 tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt create mode 100644 tests/baselines/reference/jsxNamespacePrefixInNameReact.js create mode 100644 tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols create mode 100644 tests/baselines/reference/jsxNamespacePrefixInNameReact.types create mode 100644 tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt index ab499d1c8dbf4..a99cb575c3e8a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt @@ -124,4 +124,5 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(31,34): error TS2304: Cannot f var upcaseComponentUndeclared = ~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'NS:something'. \ No newline at end of file +!!! error TS2304: Cannot find name 'NS:something'. + \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.js b/tests/baselines/reference/jsxNamespacePrefixInName.js index 7918c7e16ec9b..ad478c3b02ca6 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.js +++ b/tests/baselines/reference/jsxNamespacePrefixInName.js @@ -29,7 +29,8 @@ var Upcase = "mycomponent" var upcaseComponent1 = // Parsed as intrinsic: ok var upcaseComponent2 = // Parsed as component: not ok -var upcaseComponentUndeclared = +var upcaseComponentUndeclared = + //// [jsxNamespacePrefixInName.jsx] var justElement1 = ; diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt new file mode 100644 index 0000000000000..da48858f09d49 --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt @@ -0,0 +1,130 @@ +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(9,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(10,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(10,45): error TS1005: '>' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(10,50): error TS1005: ',' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(10,51): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(11,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(11,60): error TS1005: '>' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(11,65): error TS1005: ',' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(11,66): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(12,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(12,53): error TS1005: '>' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(12,58): error TS1005: ',' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(12,59): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,32): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,68): error TS1005: '>' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,73): error TS1005: ',' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(13,74): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(23,21): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,26): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,27): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(24,29): error TS1005: '...' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,21): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,22): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,25): error TS1005: ',' expected. +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. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,38): error TS1005: ':' expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,41): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,42): error TS1109: Expression expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,24): error TS1003: Identifier expected. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(31,25): error TS2304: Cannot find name 'Upcase:element'. +tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(33,34): error TS2304: Cannot find name 'NS:something'. + + +==== tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx (31 errors) ==== + declare var React: any; + + var justElement1 = ; + var justElement2 = ; + var justElement3 = ; + var justElement4 = {"text"}; + var justElement5 = {"text"}; + + var tooManySeparators1 = ; + ~ +!!! error TS1003: Identifier expected. + var tooManySeparators2 = ; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: '>' expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1109: Expression expected. + var tooManySeparators3 = ; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: '>' expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1109: Expression expected. + var tooManySeparators4 = {"text"}; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: '>' expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1109: Expression expected. + var tooManySeparators5 = {"text"}; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1005: '>' expected. + ~ +!!! error TS1005: ',' expected. + ~ +!!! error TS1109: Expression expected. + + var justAttribute1 = ; + var justAttribute2 = ; + var justAttribute3 = {"text"}; + + var both1 = ; + var both2 = ; + var both3 = {"text"}; + + var endOfIdent1 = ; + ~ +!!! error TS1003: Identifier expected. + var endOfIdent2 = ; + ~ +!!! error TS1003: Identifier expected. + ~ +!!! error TS1003: Identifier expected. + ~~~~~~~ +!!! error TS1005: '...' expected. + + var beginOfIdent1 = <:a attr={"value"} />; + ~ +!!! error TS1109: Expression expected. + ~ +!!! error TS1109: Expression expected. + ~~~~ +!!! error TS1005: ',' expected. + ~~~~~~~~~ +!!! error TS2362: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type. + ~ +!!! error TS1005: ':' expected. + ~ +!!! error TS1109: Expression expected. + ~ +!!! error TS1109: Expression expected. + var beginOfIdent1 = ; + ~ +!!! error TS1003: Identifier expected. + + var Upcase = "mycomponent" + var upcaseComponent1 = // Parsed as intrinsic: ok + var upcaseComponent2 = // Parsed as component: not ok + ~~~~~~~~~~~~~~ +!!! error TS2304: Cannot find name 'Upcase:element'. + + var upcaseComponentUndeclared = + ~~~~~~~~~~~~ +!!! error TS2304: Cannot find name 'NS:something'. + \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.js b/tests/baselines/reference/jsxNamespacePrefixInNameReact.js new file mode 100644 index 0000000000000..edb0cc818bdbc --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.js @@ -0,0 +1,76 @@ +//// [jsxNamespacePrefixInNameReact.tsx] +declare var React: any; + +var justElement1 = ; +var justElement2 = ; +var justElement3 = ; +var justElement4 = {"text"}; +var justElement5 = {"text"}; + +var tooManySeparators1 = ; +var tooManySeparators2 = ; +var tooManySeparators3 = ; +var tooManySeparators4 = {"text"}; +var tooManySeparators5 = {"text"}; + +var justAttribute1 = ; +var justAttribute2 = ; +var justAttribute3 = {"text"}; + +var both1 = ; +var both2 = ; +var both3 = {"text"}; + +var endOfIdent1 = ; +var endOfIdent2 = ; + +var beginOfIdent1 = <:a attr={"value"} />; +var beginOfIdent1 = ; + +var Upcase = "mycomponent" +var upcaseComponent1 = // Parsed as intrinsic: ok +var upcaseComponent2 = // Parsed as component: not ok + +var upcaseComponentUndeclared = + + +//// [jsxNamespacePrefixInNameReact.js] +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var justElement1 = React.createElement("a:element", null); +var justElement2 = React.createElement("a:element", null); +var justElement3 = React.createElement("a:element", { attr: "value" }); +var justElement4 = React.createElement("a:element", null, "text"); +var justElement5 = React.createElement("a:element", { attr: "value" }, "text"); +var tooManySeparators1 = React.createElement("a:ele", { ment: true }); +var tooManySeparators2 = React.createElement("a:ele", { ment: true }), ment; + > ; +var tooManySeparators3 = React.createElement("a:ele", { ment: true, attr: "value" }), ment; + > ; +var tooManySeparators4 = React.createElement("a:ele", { ment: true }, "text"), ment; + > ; +var tooManySeparators5 = React.createElement("a:ele", { ment: true, attr: "value" }, "text"), ment; + > ; +var justAttribute1 = React.createElement("element", { "a:attr": "value" }); +var justAttribute2 = React.createElement("element", { "a:attr": "value" }); +var justAttribute3 = React.createElement("element", { "a:attr": "value" }, "text"); +var both1 = React.createElement("a:element", { "a:attr": "value" }); +var both2 = React.createElement("a:element", { "k:attr": "value" }); +var both3 = React.createElement("a:element", { "a:attr": "value" }, "text"); +var endOfIdent1 = React.createElement("a", { attr: "value" }); +var endOfIdent2 = React.createElement("a", __assign({ attr: true }, "value")); +var beginOfIdent1 = < , a, attr = { "value": } / > ; +var beginOfIdent1 = React.createElement("a", { attr: "value" }); +var Upcase = "mycomponent"; +var upcaseComponent1 = React.createElement("ns:Upcase", null); // Parsed as intrinsic: ok +var upcaseComponent2 = React.createElement(Upcase:element, null); // Parsed as component: not ok +var upcaseComponentUndeclared = React.createElement(NS:something, null); diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols b/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols new file mode 100644 index 0000000000000..1cf79e845f5ea --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols @@ -0,0 +1,101 @@ +=== tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx === +declare var React: any; +>React : Symbol(React, Decl(jsxNamespacePrefixInNameReact.tsx, 0, 11)) + +var justElement1 = ; +>justElement1 : Symbol(justElement1, Decl(jsxNamespacePrefixInNameReact.tsx, 2, 3)) + +var justElement2 = ; +>justElement2 : Symbol(justElement2, Decl(jsxNamespacePrefixInNameReact.tsx, 3, 3)) + +var justElement3 = ; +>justElement3 : Symbol(justElement3, Decl(jsxNamespacePrefixInNameReact.tsx, 4, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 4, 29)) + +var justElement4 = {"text"}; +>justElement4 : Symbol(justElement4, Decl(jsxNamespacePrefixInNameReact.tsx, 5, 3)) + +var justElement5 = {"text"}; +>justElement5 : Symbol(justElement5, Decl(jsxNamespacePrefixInNameReact.tsx, 6, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 6, 29)) + +var tooManySeparators1 = ; +>tooManySeparators1 : Symbol(tooManySeparators1, Decl(jsxNamespacePrefixInNameReact.tsx, 8, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 8, 32)) + +var tooManySeparators2 = ; +>tooManySeparators2 : Symbol(tooManySeparators2, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 32)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 45), Decl(jsxNamespacePrefixInNameReact.tsx, 10, 60), Decl(jsxNamespacePrefixInNameReact.tsx, 11, 53), Decl(jsxNamespacePrefixInNameReact.tsx, 12, 68)) + +var tooManySeparators3 = ; +>tooManySeparators3 : Symbol(tooManySeparators3, Decl(jsxNamespacePrefixInNameReact.tsx, 10, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 10, 32)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 10, 36)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 45), Decl(jsxNamespacePrefixInNameReact.tsx, 10, 60), Decl(jsxNamespacePrefixInNameReact.tsx, 11, 53), Decl(jsxNamespacePrefixInNameReact.tsx, 12, 68)) + +var tooManySeparators4 = {"text"}; +>tooManySeparators4 : Symbol(tooManySeparators4, Decl(jsxNamespacePrefixInNameReact.tsx, 11, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 11, 32)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 45), Decl(jsxNamespacePrefixInNameReact.tsx, 10, 60), Decl(jsxNamespacePrefixInNameReact.tsx, 11, 53), Decl(jsxNamespacePrefixInNameReact.tsx, 12, 68)) + +var tooManySeparators5 = {"text"}; +>tooManySeparators5 : Symbol(tooManySeparators5, Decl(jsxNamespacePrefixInNameReact.tsx, 12, 3)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 12, 32)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 12, 36)) +>ment : Symbol(ment, Decl(jsxNamespacePrefixInNameReact.tsx, 9, 45), Decl(jsxNamespacePrefixInNameReact.tsx, 10, 60), Decl(jsxNamespacePrefixInNameReact.tsx, 11, 53), Decl(jsxNamespacePrefixInNameReact.tsx, 12, 68)) + +var justAttribute1 = ; +>justAttribute1 : Symbol(justAttribute1, Decl(jsxNamespacePrefixInNameReact.tsx, 14, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 14, 29)) + +var justAttribute2 = ; +>justAttribute2 : Symbol(justAttribute2, Decl(jsxNamespacePrefixInNameReact.tsx, 15, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 15, 29)) + +var justAttribute3 = {"text"}; +>justAttribute3 : Symbol(justAttribute3, Decl(jsxNamespacePrefixInNameReact.tsx, 16, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 16, 29)) + +var both1 = ; +>both1 : Symbol(both1, Decl(jsxNamespacePrefixInNameReact.tsx, 18, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 18, 22)) + +var both2 = ; +>both2 : Symbol(both2, Decl(jsxNamespacePrefixInNameReact.tsx, 19, 3)) +>k:attr : Symbol(k:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 19, 22)) + +var both3 = {"text"}; +>both3 : Symbol(both3, Decl(jsxNamespacePrefixInNameReact.tsx, 20, 3)) +>a:attr : Symbol(a:attr, Decl(jsxNamespacePrefixInNameReact.tsx, 20, 22)) + +var endOfIdent1 = ; +>endOfIdent1 : Symbol(endOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 22, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 22, 21)) + +var endOfIdent2 = ; +>endOfIdent2 : Symbol(endOfIdent2, Decl(jsxNamespacePrefixInNameReact.tsx, 23, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 23, 20)) + +var beginOfIdent1 = <:a attr={"value"} />; +>beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 3), Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3)) +>a : Symbol(a, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 22)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 23)) +>"value" : Symbol("value", Decl(jsxNamespacePrefixInNameReact.tsx, 25, 30)) + +var beginOfIdent1 = ; +>beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 3), Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 26, 24)) + +var Upcase = "mycomponent" +>Upcase : Symbol(Upcase, Decl(jsxNamespacePrefixInNameReact.tsx, 28, 3)) + +var upcaseComponent1 = // Parsed as intrinsic: ok +>upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInNameReact.tsx, 29, 3)) + +var upcaseComponent2 = // Parsed as component: not ok +>upcaseComponent2 : Symbol(upcaseComponent2, Decl(jsxNamespacePrefixInNameReact.tsx, 30, 3)) + +var upcaseComponentUndeclared = +>upcaseComponentUndeclared : Symbol(upcaseComponentUndeclared, Decl(jsxNamespacePrefixInNameReact.tsx, 32, 3)) + diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.types b/tests/baselines/reference/jsxNamespacePrefixInNameReact.types new file mode 100644 index 0000000000000..aae05b31accce --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.types @@ -0,0 +1,198 @@ +=== tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx === +declare var React: any; +>React : any + +var justElement1 = ; +>justElement1 : any +> : any +>a:element : any + +var justElement2 = ; +>justElement2 : any +> : any +>a:element : any +>a:element : any + +var justElement3 = ; +>justElement3 : any +> : any +>a:element : any +>attr : string +>"value" : "value" +>a:element : any + +var justElement4 = {"text"}; +>justElement4 : any +>{"text"} : any +>a:element : any +>"text" : "text" +>a:element : any + +var justElement5 = {"text"}; +>justElement5 : any +>{"text"} : any +>a:element : any +>attr : string +>"value" : "value" +>"text" : "text" +>a:element : any + +var tooManySeparators1 = ; +>tooManySeparators1 : any +> : any +>a:ele : any +>ment : true + +var tooManySeparators2 = ; +>tooManySeparators2 : any +>a:ele : any +>ment : true +>a:ele : any +>ment : any +>> : boolean +> : any +> : any + +var tooManySeparators3 = ; +>tooManySeparators3 : any +>a:ele : any +>ment : true +>attr : string +>"value" : "value" +>a:ele : any +>ment : any +>> : boolean +> : any +> : any + +var tooManySeparators4 = {"text"}; +>tooManySeparators4 : any +>{"text"}a:ele : any +>ment : true +>"text" : "text" +>a:ele : any +>ment : any +>> : boolean +> : any +> : any + +var tooManySeparators5 = {"text"}; +>tooManySeparators5 : any +>{"text"}a:ele : any +>ment : true +>attr : string +>"value" : "value" +>"text" : "text" +>a:ele : any +>ment : any +>> : boolean +> : any +> : any + +var justAttribute1 = ; +>justAttribute1 : any +> : any +>element : any +>a:attr : string +>"value" : "value" + +var justAttribute2 = ; +>justAttribute2 : any +> : any +>element : any +>a:attr : string +>"value" : "value" +>element : any + +var justAttribute3 = {"text"}; +>justAttribute3 : any +>{"text"} : any +>element : any +>a:attr : string +>"value" : "value" +>"text" : "text" +>element : any + +var both1 = ; +>both1 : any +> : any +>a:element : any +>a:attr : string +>"value" : "value" + +var both2 = ; +>both2 : any +> : any +>a:element : any +>k:attr : string +>"value" : "value" +>a:element : any + +var both3 = {"text"}; +>both3 : any +>{"text"} : any +>a:element : any +>a:attr : string +>"value" : "value" +>"text" : "text" +>a:element : any + +var endOfIdent1 = ; +>endOfIdent1 : any +> : any +>a : any +>attr : string +>"value" : "value" + +var endOfIdent2 = ; +>endOfIdent2 : any +> : any +>a : any +>attr : true +>"value" : "value" + +var beginOfIdent1 = <:a attr={"value"} />; +>beginOfIdent1 : boolean +>< : boolean +> : any +> : any +>a : any +>attr : boolean +>{"value"} /> : boolean +>{"value"} / : number +>{"value"} : { value: any; } +>"value" : any +> : any +> : any +> : any + +var beginOfIdent1 = ; +>beginOfIdent1 : boolean +> : any +>a : any +>attr : string +>"value" : "value" + +var Upcase = "mycomponent" +>Upcase : string +>"mycomponent" : "mycomponent" + +var upcaseComponent1 = // Parsed as intrinsic: ok +>upcaseComponent1 : any +> : any +>ns:Upcase : any + +var upcaseComponent2 = // Parsed as component: not ok +>upcaseComponent2 : any +> : any +>Upcase:element : any + +var upcaseComponentUndeclared = +>upcaseComponentUndeclared : any +> : any +>NS:something : any + diff --git a/tests/cases/compiler/jsxNamespacePrefixInName.tsx b/tests/cases/compiler/jsxNamespacePrefixInName.tsx index b9fae5abd600d..9f66effd4ab24 100644 --- a/tests/cases/compiler/jsxNamespacePrefixInName.tsx +++ b/tests/cases/compiler/jsxNamespacePrefixInName.tsx @@ -30,4 +30,4 @@ var Upcase = "mycomponent" var upcaseComponent1 = // Parsed as intrinsic: ok var upcaseComponent2 = // Parsed as component: not ok -var upcaseComponentUndeclared = \ No newline at end of file +var upcaseComponentUndeclared = diff --git a/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx b/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx new file mode 100644 index 0000000000000..7c0d96e3d4c07 --- /dev/null +++ b/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx @@ -0,0 +1,34 @@ +// @jsx: react +declare var React: any; + +var justElement1 = ; +var justElement2 = ; +var justElement3 = ; +var justElement4 = {"text"}; +var justElement5 = {"text"}; + +var tooManySeparators1 = ; +var tooManySeparators2 = ; +var tooManySeparators3 = ; +var tooManySeparators4 = {"text"}; +var tooManySeparators5 = {"text"}; + +var justAttribute1 = ; +var justAttribute2 = ; +var justAttribute3 = {"text"}; + +var both1 = ; +var both2 = ; +var both3 = {"text"}; + +var endOfIdent1 = ; +var endOfIdent2 = ; + +var beginOfIdent1 = <:a attr={"value"} />; +var beginOfIdent1 = ; + +var Upcase = "mycomponent" +var upcaseComponent1 = // Parsed as intrinsic: ok +var upcaseComponent2 = // Parsed as component: not ok + +var upcaseComponentUndeclared = From 5edf8c07b05f6e4db02c9b4b2dbd00811df910c9 Mon Sep 17 00:00:00 2001 From: tomjw64 Date: Tue, 22 Sep 2020 00:57:35 -0500 Subject: [PATCH 6/9] Always consider jsx names with colon to be intrinsics --- src/compiler/utilities.ts | 2 +- .../jsxNamespacePrefixInName.errors.txt | 15 +++-------- .../reference/jsxNamespacePrefixInName.js | 13 +++------ .../jsxNamespacePrefixInName.symbols | 14 +++------- .../reference/jsxNamespacePrefixInName.types | 13 ++------- .../jsxNamespacePrefixInNameReact.errors.txt | 15 +++-------- .../jsxNamespacePrefixInNameReact.js | 13 +++------ .../jsxNamespacePrefixInNameReact.symbols | 14 +++------- .../jsxNamespacePrefixInNameReact.types | 13 ++------- .../jsxNamespacePrefixIntrinsics.errors.txt | 12 +++++---- .../reference/jsxNamespacePrefixIntrinsics.js | 9 ++++--- .../jsxNamespacePrefixIntrinsics.symbols | 27 ++++++++++++------- .../jsxNamespacePrefixIntrinsics.types | 14 +++++++--- .../compiler/jsxNamespacePrefixInName.tsx | 7 ++--- .../jsxNamespacePrefixInNameReact.tsx | 7 ++--- .../compiler/jsxNamespacePrefixIntrinsics.tsx | 6 +++-- 16 files changed, 76 insertions(+), 118 deletions(-) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 973528096a1f3..9791931a335fc 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -3810,7 +3810,7 @@ namespace ts { export function isIntrinsicJsxName(name: __String | string) { const ch = (name as string).charCodeAt(0); - return (ch >= CharacterCodes.a && ch <= CharacterCodes.z) || stringContains((name as string), "-"); + return (ch >= CharacterCodes.a && ch <= CharacterCodes.z) || stringContains((name as string), "-") || stringContains((name as string), ":"); } const indentStrings: string[] = ["", " "]; diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt index a99cb575c3e8a..35d8632ae9511 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt @@ -27,11 +27,9 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,38): error TS1005: ':' expe tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,41): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(24,42): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,24): error TS1003: Identifier expected. -tests/cases/compiler/jsxNamespacePrefixInName.tsx(29,25): error TS2304: Cannot find name 'Upcase:element'. -tests/cases/compiler/jsxNamespacePrefixInName.tsx(31,34): error TS2304: Cannot find name 'NS:something'. -==== tests/cases/compiler/jsxNamespacePrefixInName.tsx (31 errors) ==== +==== tests/cases/compiler/jsxNamespacePrefixInName.tsx (29 errors) ==== var justElement1 = ; var justElement2 = ; var justElement3 = ; @@ -116,13 +114,6 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(31,34): error TS2304: Cannot f ~ !!! error TS1003: Identifier expected. - var Upcase = "mycomponent" - var upcaseComponent1 = // Parsed as intrinsic: ok - var upcaseComponent2 = // Parsed as component: not ok - ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'Upcase:element'. - - var upcaseComponentUndeclared = - ~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'NS:something'. + var upcaseComponent1 = ; // Parsed as intrinsic + var upcaseComponent2 = ; // Parsed as instrinsic \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.js b/tests/baselines/reference/jsxNamespacePrefixInName.js index ad478c3b02ca6..d4b3940b63426 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.js +++ b/tests/baselines/reference/jsxNamespacePrefixInName.js @@ -25,11 +25,8 @@ var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; var beginOfIdent1 = ; -var Upcase = "mycomponent" -var upcaseComponent1 = // Parsed as intrinsic: ok -var upcaseComponent2 = // Parsed as component: not ok - -var upcaseComponentUndeclared = +var upcaseComponent1 = ; // Parsed as intrinsic +var upcaseComponent2 = ; // Parsed as instrinsic //// [jsxNamespacePrefixInName.jsx] @@ -57,7 +54,5 @@ var endOfIdent1 = ; var endOfIdent2 = ; var beginOfIdent1 = < , a, attr = { "value": } / > ; var beginOfIdent1 = ; -var Upcase = "mycomponent"; -var upcaseComponent1 = ; // Parsed as intrinsic: ok -var upcaseComponent2 = ; // Parsed as component: not ok -var upcaseComponentUndeclared = ; +var upcaseComponent1 = ; // Parsed as intrinsic +var upcaseComponent2 = ; // Parsed as instrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.symbols b/tests/baselines/reference/jsxNamespacePrefixInName.symbols index 9da677b9be9d5..24174154c3aa9 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixInName.symbols @@ -84,15 +84,9 @@ var beginOfIdent1 = ; >beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 23, 3), Decl(jsxNamespacePrefixInName.tsx, 24, 3)) >attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 24, 24)) -var Upcase = "mycomponent" ->Upcase : Symbol(Upcase, Decl(jsxNamespacePrefixInName.tsx, 26, 3)) +var upcaseComponent1 = ; // Parsed as intrinsic +>upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInName.tsx, 26, 3)) -var upcaseComponent1 = // Parsed as intrinsic: ok ->upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInName.tsx, 27, 3)) - -var upcaseComponent2 = // Parsed as component: not ok ->upcaseComponent2 : Symbol(upcaseComponent2, Decl(jsxNamespacePrefixInName.tsx, 28, 3)) - -var upcaseComponentUndeclared = ->upcaseComponentUndeclared : Symbol(upcaseComponentUndeclared, Decl(jsxNamespacePrefixInName.tsx, 30, 3)) +var upcaseComponent2 = ; // Parsed as instrinsic +>upcaseComponent2 : Symbol(upcaseComponent2, Decl(jsxNamespacePrefixInName.tsx, 27, 3)) diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.types b/tests/baselines/reference/jsxNamespacePrefixInName.types index 3a4daffecf6a2..c41718486293f 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.types +++ b/tests/baselines/reference/jsxNamespacePrefixInName.types @@ -174,22 +174,13 @@ var beginOfIdent1 = ; >attr : string >"value" : "value" -var Upcase = "mycomponent" ->Upcase : string ->"mycomponent" : "mycomponent" - -var upcaseComponent1 = // Parsed as intrinsic: ok +var upcaseComponent1 = ; // Parsed as intrinsic >upcaseComponent1 : any > : any >ns:Upcase : any -var upcaseComponent2 = // Parsed as component: not ok +var upcaseComponent2 = ; // Parsed as instrinsic >upcaseComponent2 : any > : any >Upcase:element : any -var upcaseComponentUndeclared = ->upcaseComponentUndeclared : any -> : any ->NS:something : any - diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt index da48858f09d49..730cc220cd14a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt @@ -27,11 +27,9 @@ tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,38): error TS1005: ':' tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,41): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(26,42): error TS1109: Expression expected. tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,24): error TS1003: Identifier expected. -tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(31,25): error TS2304: Cannot find name 'Upcase:element'. -tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(33,34): error TS2304: Cannot find name 'NS:something'. -==== tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx (31 errors) ==== +==== tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx (29 errors) ==== declare var React: any; var justElement1 = ; @@ -118,13 +116,6 @@ tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(33,34): error TS2304: Can ~ !!! error TS1003: Identifier expected. - var Upcase = "mycomponent" - var upcaseComponent1 = // Parsed as intrinsic: ok - var upcaseComponent2 = // Parsed as component: not ok - ~~~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'Upcase:element'. - - var upcaseComponentUndeclared = - ~~~~~~~~~~~~ -!!! error TS2304: Cannot find name 'NS:something'. + var upcaseComponent1 = ; // Parsed as intrinsic + var upcaseComponent2 = ; // Parsed as instrinsic \ No newline at end of file diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.js b/tests/baselines/reference/jsxNamespacePrefixInNameReact.js index edb0cc818bdbc..72d88cf446da0 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.js +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.js @@ -27,11 +27,8 @@ var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; var beginOfIdent1 = ; -var Upcase = "mycomponent" -var upcaseComponent1 = // Parsed as intrinsic: ok -var upcaseComponent2 = // Parsed as component: not ok - -var upcaseComponentUndeclared = +var upcaseComponent1 = ; // Parsed as intrinsic +var upcaseComponent2 = ; // Parsed as instrinsic //// [jsxNamespacePrefixInNameReact.js] @@ -70,7 +67,5 @@ var endOfIdent1 = React.createElement("a", { attr: "value" }); var endOfIdent2 = React.createElement("a", __assign({ attr: true }, "value")); var beginOfIdent1 = < , a, attr = { "value": } / > ; var beginOfIdent1 = React.createElement("a", { attr: "value" }); -var Upcase = "mycomponent"; -var upcaseComponent1 = React.createElement("ns:Upcase", null); // Parsed as intrinsic: ok -var upcaseComponent2 = React.createElement(Upcase:element, null); // Parsed as component: not ok -var upcaseComponentUndeclared = React.createElement(NS:something, null); +var upcaseComponent1 = React.createElement("ns:Upcase", null); // Parsed as intrinsic +var upcaseComponent2 = React.createElement("Upcase:element", null); // Parsed as instrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols b/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols index 1cf79e845f5ea..2544efdac0beb 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols @@ -87,15 +87,9 @@ var beginOfIdent1 = ; >beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 3), Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3)) >attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 26, 24)) -var Upcase = "mycomponent" ->Upcase : Symbol(Upcase, Decl(jsxNamespacePrefixInNameReact.tsx, 28, 3)) +var upcaseComponent1 = ; // Parsed as intrinsic +>upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInNameReact.tsx, 28, 3)) -var upcaseComponent1 = // Parsed as intrinsic: ok ->upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInNameReact.tsx, 29, 3)) - -var upcaseComponent2 = // Parsed as component: not ok ->upcaseComponent2 : Symbol(upcaseComponent2, Decl(jsxNamespacePrefixInNameReact.tsx, 30, 3)) - -var upcaseComponentUndeclared = ->upcaseComponentUndeclared : Symbol(upcaseComponentUndeclared, Decl(jsxNamespacePrefixInNameReact.tsx, 32, 3)) +var upcaseComponent2 = ; // Parsed as instrinsic +>upcaseComponent2 : Symbol(upcaseComponent2, Decl(jsxNamespacePrefixInNameReact.tsx, 29, 3)) diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.types b/tests/baselines/reference/jsxNamespacePrefixInNameReact.types index aae05b31accce..8b0f388586611 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.types +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.types @@ -177,22 +177,13 @@ var beginOfIdent1 = ; >attr : string >"value" : "value" -var Upcase = "mycomponent" ->Upcase : string ->"mycomponent" : "mycomponent" - -var upcaseComponent1 = // Parsed as intrinsic: ok +var upcaseComponent1 = ; // Parsed as intrinsic >upcaseComponent1 : any > : any >ns:Upcase : any -var upcaseComponent2 = // Parsed as component: not ok +var upcaseComponent2 = ; // Parsed as instrinsic >upcaseComponent2 : any > : any >Upcase:element : any -var upcaseComponentUndeclared = ->upcaseComponentUndeclared : any -> : any ->NS:something : any - diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt index e82afb32abd2b..f7142133ebe14 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt @@ -1,7 +1,7 @@ -tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(13,18): error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'. -tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(14,30): error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'. +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(15,18): error TS2339: Property 'element' does not exist on type 'JSX.IntrinsicElements'. +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(16,30): error TS2322: Type '{ attribute: string; }' is not assignable to type '{ "ns:attribute": string; }'. Property 'attribute' does not exist on type '{ "ns:attribute": string; }'. -tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(15,30): error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'. +tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(17,30): error TS2322: Type '{ "ns:invalid": string; }' is not assignable to type '{ "ns:attribute": string; }'. Property 'ns:invalid' does not exist on type '{ "ns:attribute": string; }'. @@ -11,12 +11,14 @@ tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx(15,30): error TS2322: Type "ns:element": { "ns:attribute": string; }, - "ns:NamespacedUpcaseAlsoIntrinsic": any + "ns:NamespacedUpcaseAlsoIntrinsic": any, + "NS:NamespacedUpcaseAlsoIntrinsic": any } } const valid = ; - const validUpcase = ; + const validUpcase1 = ; + const validUpcase2 = ; const invalid1 = ; ~~~~~~~~~~~ diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js index 6b4ceb04c493a..bc65094fe3cab 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js @@ -4,12 +4,14 @@ declare namespace JSX { "ns:element": { "ns:attribute": string; }, - "ns:NamespacedUpcaseAlsoIntrinsic": any + "ns:NamespacedUpcaseAlsoIntrinsic": any, + "NS:NamespacedUpcaseAlsoIntrinsic": any } } const valid = ; -const validUpcase = ; +const validUpcase1 = ; +const validUpcase2 = ; const invalid1 = ; const invalid2 = ; @@ -18,7 +20,8 @@ const invalid3 = ; //// [jsxNamespacePrefixIntrinsics.jsx] var valid = ; -var validUpcase = ; +var validUpcase1 = ; +var validUpcase2 = ; var invalid1 = ; var invalid2 = ; var invalid3 = ; diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols index ba14ff67e6802..b12b339ca223a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols @@ -12,30 +12,37 @@ declare namespace JSX { >"ns:attribute" : Symbol("ns:attribute", Decl(jsxNamespacePrefixIntrinsics.tsx, 2, 19)) }, - "ns:NamespacedUpcaseAlsoIntrinsic": any + "ns:NamespacedUpcaseAlsoIntrinsic": any, >"ns:NamespacedUpcaseAlsoIntrinsic" : Symbol(IntrinsicElements["ns:NamespacedUpcaseAlsoIntrinsic"], Decl(jsxNamespacePrefixIntrinsics.tsx, 4, 6)) + + "NS:NamespacedUpcaseAlsoIntrinsic": any +>"NS:NamespacedUpcaseAlsoIntrinsic" : Symbol(IntrinsicElements["NS:NamespacedUpcaseAlsoIntrinsic"], Decl(jsxNamespacePrefixIntrinsics.tsx, 5, 44)) } } const valid = ; ->valid : Symbol(valid, Decl(jsxNamespacePrefixIntrinsics.tsx, 9, 5)) +>valid : Symbol(valid, Decl(jsxNamespacePrefixIntrinsics.tsx, 10, 5)) >ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) ->ns:attribute : Symbol(ns:attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 9, 25)) +>ns:attribute : Symbol(ns:attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 10, 25)) -const validUpcase = ; ->validUpcase : Symbol(validUpcase, Decl(jsxNamespacePrefixIntrinsics.tsx, 10, 5)) +const validUpcase1 = ; +>validUpcase1 : Symbol(validUpcase1, Decl(jsxNamespacePrefixIntrinsics.tsx, 11, 5)) >ns:NamespacedUpcaseAlsoIntrinsic : Symbol(JSX.IntrinsicElements["ns:NamespacedUpcaseAlsoIntrinsic"], Decl(jsxNamespacePrefixIntrinsics.tsx, 4, 6)) +const validUpcase2 = ; +>validUpcase2 : Symbol(validUpcase2, Decl(jsxNamespacePrefixIntrinsics.tsx, 12, 5)) +>NS:NamespacedUpcaseAlsoIntrinsic : Symbol(JSX.IntrinsicElements["NS:NamespacedUpcaseAlsoIntrinsic"], Decl(jsxNamespacePrefixIntrinsics.tsx, 5, 44)) + const invalid1 = ; ->invalid1 : Symbol(invalid1, Decl(jsxNamespacePrefixIntrinsics.tsx, 12, 5)) +>invalid1 : Symbol(invalid1, Decl(jsxNamespacePrefixIntrinsics.tsx, 14, 5)) const invalid2 = ; ->invalid2 : Symbol(invalid2, Decl(jsxNamespacePrefixIntrinsics.tsx, 13, 5)) +>invalid2 : Symbol(invalid2, Decl(jsxNamespacePrefixIntrinsics.tsx, 15, 5)) >ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) ->attribute : Symbol(attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 13, 28)) +>attribute : Symbol(attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 15, 28)) const invalid3 = ; ->invalid3 : Symbol(invalid3, Decl(jsxNamespacePrefixIntrinsics.tsx, 14, 5)) +>invalid3 : Symbol(invalid3, Decl(jsxNamespacePrefixIntrinsics.tsx, 16, 5)) >ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) ->ns:invalid : Symbol(ns:invalid, Decl(jsxNamespacePrefixIntrinsics.tsx, 14, 28)) +>ns:invalid : Symbol(ns:invalid, Decl(jsxNamespacePrefixIntrinsics.tsx, 16, 28)) diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types index 5bdfe4993c275..962128ca2f41a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types @@ -8,8 +8,11 @@ declare namespace JSX { >"ns:attribute" : string }, - "ns:NamespacedUpcaseAlsoIntrinsic": any + "ns:NamespacedUpcaseAlsoIntrinsic": any, >"ns:NamespacedUpcaseAlsoIntrinsic" : any + + "NS:NamespacedUpcaseAlsoIntrinsic": any +>"NS:NamespacedUpcaseAlsoIntrinsic" : any } } @@ -19,11 +22,16 @@ const valid = ; >ns:element : any >ns:attribute : string -const validUpcase = ; ->validUpcase : any +const validUpcase1 = ; +>validUpcase1 : any > : any >ns:NamespacedUpcaseAlsoIntrinsic : any +const validUpcase2 = ; +>validUpcase2 : any +> : any +>NS:NamespacedUpcaseAlsoIntrinsic : any + const invalid1 = ; >invalid1 : any > : any diff --git a/tests/cases/compiler/jsxNamespacePrefixInName.tsx b/tests/cases/compiler/jsxNamespacePrefixInName.tsx index 9f66effd4ab24..7b9091ab077a3 100644 --- a/tests/cases/compiler/jsxNamespacePrefixInName.tsx +++ b/tests/cases/compiler/jsxNamespacePrefixInName.tsx @@ -26,8 +26,5 @@ var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; var beginOfIdent1 = ; -var Upcase = "mycomponent" -var upcaseComponent1 = // Parsed as intrinsic: ok -var upcaseComponent2 = // Parsed as component: not ok - -var upcaseComponentUndeclared = +var upcaseComponent1 = ; // Parsed as intrinsic +var upcaseComponent2 = ; // Parsed as instrinsic diff --git a/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx b/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx index 7c0d96e3d4c07..4e750b4c31b06 100644 --- a/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx +++ b/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx @@ -27,8 +27,5 @@ var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; var beginOfIdent1 = ; -var Upcase = "mycomponent" -var upcaseComponent1 = // Parsed as intrinsic: ok -var upcaseComponent2 = // Parsed as component: not ok - -var upcaseComponentUndeclared = +var upcaseComponent1 = ; // Parsed as intrinsic +var upcaseComponent2 = ; // Parsed as instrinsic diff --git a/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx b/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx index 364df2366f1a8..bee8232dc815e 100644 --- a/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx +++ b/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx @@ -6,12 +6,14 @@ declare namespace JSX { "ns:element": { "ns:attribute": string; }, - "ns:NamespacedUpcaseAlsoIntrinsic": any + "ns:NamespacedUpcaseAlsoIntrinsic": any, + "NS:NamespacedUpcaseAlsoIntrinsic": any } } const valid = ; -const validUpcase = ; +const validUpcase1 = ; +const validUpcase2 = ; const invalid1 = ; const invalid2 = ; From 079e82f89cfb6bdd1fcb0f5935575c4c71b6c4d1 Mon Sep 17 00:00:00 2001 From: tomjw64 Date: Tue, 22 Sep 2020 00:57:39 -0500 Subject: [PATCH 7/9] Adjust comment about chars valid in jsx names but not js idents --- src/compiler/checker.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c5ffd98f9aea8..c507f50f909e8 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24575,10 +24575,11 @@ namespace ts { } /** - * Returns true iff the JSX element name would be a valid JS identifier, ignoring restrictions about keywords not being identifiers + * Returns true if the hyphen character is not in the JSX element name. The hyphen character, if present, + * would prevent it from being a valid JS identifier, ignoring restrictions about keywords not being identifiers */ function isUnhyphenatedJsxName(name: string | __String) { - // - is the only character supported in JSX attribute names that isn't valid in JavaScript identifiers + // - is one of only two characters supported in JSX attribute names that isn't valid in JavaScript identifiers, : being the other return !stringContains(name as string, "-"); } From d542e87b50186893efcf252dfeecb02c32ff72da Mon Sep 17 00:00:00 2001 From: tomjw64 Date: Tue, 22 Sep 2020 01:04:34 -0500 Subject: [PATCH 8/9] Fix minor typo in namespace prefix test case variable name --- .../baselines/reference/jsxNamespacePrefixInName.errors.txt | 2 +- tests/baselines/reference/jsxNamespacePrefixInName.js | 4 ++-- tests/baselines/reference/jsxNamespacePrefixInName.symbols | 6 +++--- tests/baselines/reference/jsxNamespacePrefixInName.types | 4 ++-- .../reference/jsxNamespacePrefixInNameReact.errors.txt | 2 +- tests/baselines/reference/jsxNamespacePrefixInNameReact.js | 4 ++-- .../reference/jsxNamespacePrefixInNameReact.symbols | 6 +++--- .../baselines/reference/jsxNamespacePrefixInNameReact.types | 4 ++-- tests/cases/compiler/jsxNamespacePrefixInName.tsx | 2 +- tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt index 35d8632ae9511..2eb3df02ad13a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt @@ -110,7 +110,7 @@ tests/cases/compiler/jsxNamespacePrefixInName.tsx(25,24): error TS1003: Identifi !!! error TS1109: Expression expected. ~ !!! error TS1109: Expression expected. - var beginOfIdent1 = ; + var beginOfIdent2 = ; ~ !!! error TS1003: Identifier expected. diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.js b/tests/baselines/reference/jsxNamespacePrefixInName.js index d4b3940b63426..eca335921a34a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.js +++ b/tests/baselines/reference/jsxNamespacePrefixInName.js @@ -23,7 +23,7 @@ var endOfIdent1 = ; var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; -var beginOfIdent1 = ; +var beginOfIdent2 = ; var upcaseComponent1 = ; // Parsed as intrinsic var upcaseComponent2 = ; // Parsed as instrinsic @@ -53,6 +53,6 @@ var both3 = {"text"}; var endOfIdent1 = ; var endOfIdent2 = ; var beginOfIdent1 = < , a, attr = { "value": } / > ; -var beginOfIdent1 = ; +var beginOfIdent2 = ; var upcaseComponent1 = ; // Parsed as intrinsic var upcaseComponent2 = ; // Parsed as instrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.symbols b/tests/baselines/reference/jsxNamespacePrefixInName.symbols index 24174154c3aa9..876ffa59e06b2 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixInName.symbols @@ -75,13 +75,13 @@ var endOfIdent2 = ; >attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 21, 20)) var beginOfIdent1 = <:a attr={"value"} />; ->beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 23, 3), Decl(jsxNamespacePrefixInName.tsx, 24, 3)) +>beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 23, 3)) >a : Symbol(a, Decl(jsxNamespacePrefixInName.tsx, 23, 22)) >attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 23, 23)) >"value" : Symbol("value", Decl(jsxNamespacePrefixInName.tsx, 23, 30)) -var beginOfIdent1 = ; ->beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInName.tsx, 23, 3), Decl(jsxNamespacePrefixInName.tsx, 24, 3)) +var beginOfIdent2 = ; +>beginOfIdent2 : Symbol(beginOfIdent2, Decl(jsxNamespacePrefixInName.tsx, 24, 3)) >attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 24, 24)) var upcaseComponent1 = ; // Parsed as intrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInName.types b/tests/baselines/reference/jsxNamespacePrefixInName.types index c41718486293f..616ac016b7935 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInName.types +++ b/tests/baselines/reference/jsxNamespacePrefixInName.types @@ -167,8 +167,8 @@ var beginOfIdent1 = <:a attr={"value"} />; > : any > : any -var beginOfIdent1 = ; ->beginOfIdent1 : boolean +var beginOfIdent2 = ; +>beginOfIdent2 : any > : any >a : any >attr : string diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt index 730cc220cd14a..890fc67fc262a 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt @@ -112,7 +112,7 @@ tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx(27,24): error TS1003: Ide !!! error TS1109: Expression expected. ~ !!! error TS1109: Expression expected. - var beginOfIdent1 = ; + var beginOfIdent2 = ; ~ !!! error TS1003: Identifier expected. diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.js b/tests/baselines/reference/jsxNamespacePrefixInNameReact.js index 72d88cf446da0..c0cee80308aac 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.js +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.js @@ -25,7 +25,7 @@ var endOfIdent1 = ; var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; -var beginOfIdent1 = ; +var beginOfIdent2 = ; var upcaseComponent1 = ; // Parsed as intrinsic var upcaseComponent2 = ; // Parsed as instrinsic @@ -66,6 +66,6 @@ var both3 = React.createElement("a:element", { "a:attr": "value" }, "text"); var endOfIdent1 = React.createElement("a", { attr: "value" }); var endOfIdent2 = React.createElement("a", __assign({ attr: true }, "value")); var beginOfIdent1 = < , a, attr = { "value": } / > ; -var beginOfIdent1 = React.createElement("a", { attr: "value" }); +var beginOfIdent2 = React.createElement("a", { attr: "value" }); var upcaseComponent1 = React.createElement("ns:Upcase", null); // Parsed as intrinsic var upcaseComponent2 = React.createElement("Upcase:element", null); // Parsed as instrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols b/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols index 2544efdac0beb..34136573521b5 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols @@ -78,13 +78,13 @@ var endOfIdent2 = ; >attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 23, 20)) var beginOfIdent1 = <:a attr={"value"} />; ->beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 3), Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3)) +>beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 3)) >a : Symbol(a, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 22)) >attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 23)) >"value" : Symbol("value", Decl(jsxNamespacePrefixInNameReact.tsx, 25, 30)) -var beginOfIdent1 = ; ->beginOfIdent1 : Symbol(beginOfIdent1, Decl(jsxNamespacePrefixInNameReact.tsx, 25, 3), Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3)) +var beginOfIdent2 = ; +>beginOfIdent2 : Symbol(beginOfIdent2, Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3)) >attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 26, 24)) var upcaseComponent1 = ; // Parsed as intrinsic diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.types b/tests/baselines/reference/jsxNamespacePrefixInNameReact.types index 8b0f388586611..e67a617796670 100644 --- a/tests/baselines/reference/jsxNamespacePrefixInNameReact.types +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.types @@ -170,8 +170,8 @@ var beginOfIdent1 = <:a attr={"value"} />; > : any > : any -var beginOfIdent1 = ; ->beginOfIdent1 : boolean +var beginOfIdent2 = ; +>beginOfIdent2 : any > : any >a : any >attr : string diff --git a/tests/cases/compiler/jsxNamespacePrefixInName.tsx b/tests/cases/compiler/jsxNamespacePrefixInName.tsx index 7b9091ab077a3..0729c1181f87a 100644 --- a/tests/cases/compiler/jsxNamespacePrefixInName.tsx +++ b/tests/cases/compiler/jsxNamespacePrefixInName.tsx @@ -24,7 +24,7 @@ var endOfIdent1 = ; var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; -var beginOfIdent1 = ; +var beginOfIdent2 = ; var upcaseComponent1 = ; // Parsed as intrinsic var upcaseComponent2 = ; // Parsed as instrinsic diff --git a/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx b/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx index 4e750b4c31b06..60473d74f6bc3 100644 --- a/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx +++ b/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx @@ -25,7 +25,7 @@ var endOfIdent1 = ; var endOfIdent2 = ; var beginOfIdent1 = <:a attr={"value"} />; -var beginOfIdent1 = ; +var beginOfIdent2 = ; var upcaseComponent1 = ; // Parsed as intrinsic var upcaseComponent2 = ; // Parsed as instrinsic From 2b0829103a234a0ca0710125e2730fc6f4a277ce Mon Sep 17 00:00:00 2001 From: tomjw64 Date: Mon, 28 Sep 2020 19:16:03 -0500 Subject: [PATCH 9/9] Remove misleading comments on isUnhyphenatedJsxName --- src/compiler/checker.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c507f50f909e8..b1adf6e29bffa 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24574,12 +24574,7 @@ namespace ts { return getJsxElementTypeAt(node) || anyType; } - /** - * Returns true if the hyphen character is not in the JSX element name. The hyphen character, if present, - * would prevent it from being a valid JS identifier, ignoring restrictions about keywords not being identifiers - */ function isUnhyphenatedJsxName(name: string | __String) { - // - is one of only two characters supported in JSX attribute names that isn't valid in JavaScript identifiers, : being the other return !stringContains(name as string, "-"); }