diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c5ffd98f9aea8..b1adf6e29bffa 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -24574,11 +24574,7 @@ namespace ts { return getJsxElementTypeAt(node) || anyType; } - /** - * Returns true iff the JSX element name would be 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 return !stringContains(name as string, "-"); } 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/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/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..2eb3df02ad13a --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInName.errors.txt @@ -0,0 +1,119 @@ +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(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 (29 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"}; + + 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 beginOfIdent2 = ; + ~ +!!! error TS1003: Identifier expected. + + 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 new file mode 100644 index 0000000000000..eca335921a34a --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInName.js @@ -0,0 +1,58 @@ +//// [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"}; + +var endOfIdent1 = ; +var endOfIdent2 = ; + +var beginOfIdent1 = <:a attr={"value"} />; +var beginOfIdent2 = ; + +var upcaseComponent1 = ; // Parsed as intrinsic +var upcaseComponent2 = ; // Parsed as instrinsic + + +//// [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"}; +var endOfIdent1 = ; +var endOfIdent2 = ; +var beginOfIdent1 = < , a, attr = { "value": } / > ; +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 new file mode 100644 index 0000000000000..876ffa59e06b2 --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInName.symbols @@ -0,0 +1,92 @@ +=== 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)) + +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)) +>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 beginOfIdent2 = ; +>beginOfIdent2 : Symbol(beginOfIdent2, Decl(jsxNamespacePrefixInName.tsx, 24, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInName.tsx, 24, 24)) + +var upcaseComponent1 = ; // Parsed as intrinsic +>upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInName.tsx, 26, 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 new file mode 100644 index 0000000000000..616ac016b7935 --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInName.types @@ -0,0 +1,186 @@ +=== 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 + +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 beginOfIdent2 = ; +>beginOfIdent2 : any +> : any +>a : any +>attr : string +>"value" : "value" + +var upcaseComponent1 = ; // Parsed as intrinsic +>upcaseComponent1 : any +> : any +>ns:Upcase : any + +var upcaseComponent2 = ; // Parsed as instrinsic +>upcaseComponent2 : any +> : any +>Upcase:element : any + diff --git a/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt new file mode 100644 index 0000000000000..890fc67fc262a --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.errors.txt @@ -0,0 +1,121 @@ +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 (29 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 beginOfIdent2 = ; + ~ +!!! error TS1003: Identifier expected. + + 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 new file mode 100644 index 0000000000000..c0cee80308aac --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.js @@ -0,0 +1,71 @@ +//// [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 beginOfIdent2 = ; + +var upcaseComponent1 = ; // Parsed as intrinsic +var upcaseComponent2 = ; // Parsed as instrinsic + + +//// [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 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 new file mode 100644 index 0000000000000..34136573521b5 --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.symbols @@ -0,0 +1,95 @@ +=== 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)) +>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 beginOfIdent2 = ; +>beginOfIdent2 : Symbol(beginOfIdent2, Decl(jsxNamespacePrefixInNameReact.tsx, 26, 3)) +>attr : Symbol(attr, Decl(jsxNamespacePrefixInNameReact.tsx, 26, 24)) + +var upcaseComponent1 = ; // Parsed as intrinsic +>upcaseComponent1 : Symbol(upcaseComponent1, Decl(jsxNamespacePrefixInNameReact.tsx, 28, 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 new file mode 100644 index 0000000000000..e67a617796670 --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixInNameReact.types @@ -0,0 +1,189 @@ +=== 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 beginOfIdent2 = ; +>beginOfIdent2 : any +> : any +>a : any +>attr : string +>"value" : "value" + +var upcaseComponent1 = ; // Parsed as intrinsic +>upcaseComponent1 : any +> : any +>ns:Upcase : any + +var upcaseComponent2 = ; // Parsed as instrinsic +>upcaseComponent2 : any +> : any +>Upcase:element : any + diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt new file mode 100644 index 0000000000000..f7142133ebe14 --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.errors.txt @@ -0,0 +1,34 @@ +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(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; }'. + + +==== tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx (3 errors) ==== + declare namespace JSX { + interface IntrinsicElements { + "ns:element": { + "ns:attribute": string; + }, + "ns:NamespacedUpcaseAlsoIntrinsic": any, + "NS:NamespacedUpcaseAlsoIntrinsic": any + } + } + + const valid = ; + const validUpcase1 = ; + const validUpcase2 = ; + + 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..bc65094fe3cab --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.js @@ -0,0 +1,27 @@ +//// [jsxNamespacePrefixIntrinsics.tsx] +declare namespace JSX { + interface IntrinsicElements { + "ns:element": { + "ns:attribute": string; + }, + "ns:NamespacedUpcaseAlsoIntrinsic": any, + "NS:NamespacedUpcaseAlsoIntrinsic": any + } +} + +const valid = ; +const validUpcase1 = ; +const validUpcase2 = ; + +const invalid1 = ; +const invalid2 = ; +const invalid3 = ; + + +//// [jsxNamespacePrefixIntrinsics.jsx] +var valid = ; +var validUpcase1 = ; +var validUpcase2 = ; +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..b12b339ca223a --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.symbols @@ -0,0 +1,48 @@ +=== 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)) + + }, + "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, 10, 5)) +>ns:element : Symbol(JSX.IntrinsicElements["ns:element"], Decl(jsxNamespacePrefixIntrinsics.tsx, 1, 31)) +>ns:attribute : Symbol(ns:attribute, Decl(jsxNamespacePrefixIntrinsics.tsx, 10, 25)) + +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, 14, 5)) + +const invalid2 = ; +>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, 15, 28)) + +const invalid3 = ; +>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, 16, 28)) + diff --git a/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types new file mode 100644 index 0000000000000..962128ca2f41a --- /dev/null +++ b/tests/baselines/reference/jsxNamespacePrefixIntrinsics.types @@ -0,0 +1,51 @@ +=== tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx === +declare namespace JSX { + interface IntrinsicElements { + "ns:element": { +>"ns:element" : { "ns:attribute": string; } + + "ns:attribute": string; +>"ns:attribute" : string + + }, + "ns:NamespacedUpcaseAlsoIntrinsic": any, +>"ns:NamespacedUpcaseAlsoIntrinsic" : any + + "NS:NamespacedUpcaseAlsoIntrinsic": any +>"NS:NamespacedUpcaseAlsoIntrinsic" : any + } +} + +const valid = ; +>valid : any +> : any +>ns:element : any +>ns:attribute : string + +const validUpcase1 = ; +>validUpcase1 : any +> : any +>ns:NamespacedUpcaseAlsoIntrinsic : any + +const validUpcase2 = ; +>validUpcase2 : any +> : any +>NS:NamespacedUpcaseAlsoIntrinsic : any + +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/jsxNamespacePrefixInName.tsx b/tests/cases/compiler/jsxNamespacePrefixInName.tsx new file mode 100644 index 0000000000000..0729c1181f87a --- /dev/null +++ b/tests/cases/compiler/jsxNamespacePrefixInName.tsx @@ -0,0 +1,30 @@ +// @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"}; + +var endOfIdent1 = ; +var endOfIdent2 = ; + +var beginOfIdent1 = <:a attr={"value"} />; +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 new file mode 100644 index 0000000000000..60473d74f6bc3 --- /dev/null +++ b/tests/cases/compiler/jsxNamespacePrefixInNameReact.tsx @@ -0,0 +1,31 @@ +// @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 beginOfIdent2 = ; + +var upcaseComponent1 = ; // Parsed as intrinsic +var upcaseComponent2 = ; // Parsed as instrinsic diff --git a/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx b/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx new file mode 100644 index 0000000000000..bee8232dc815e --- /dev/null +++ b/tests/cases/compiler/jsxNamespacePrefixIntrinsics.tsx @@ -0,0 +1,20 @@ +// @noImplicitAny: true +// @jsx: preserve + +declare namespace JSX { + interface IntrinsicElements { + "ns:element": { + "ns:attribute": string; + }, + "ns:NamespacedUpcaseAlsoIntrinsic": any, + "NS:NamespacedUpcaseAlsoIntrinsic": any + } +} + +const valid = ; +const validUpcase1 = ; +const validUpcase2 = ; + +const invalid1 = ; +const invalid2 = ; +const invalid3 = ; 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} ; ;