mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Improve parser recovery for unclosed/mismatched JSX elements (#43780)
* First draft Everything works, the error messages for unmatched opening elements could still use improvement, plus there is tonnes of unused and ugly code. 1. Make sure the parser can recover from all kinds of unclosed tags. 2. Improve the parse tree for unmatched opening tags. 3. Better errors at some point. * Lots of cleanup * Improve readability of construction/fix lint * improve line-length formatting
This commit is contained in:
+66
-27
@@ -4865,18 +4865,45 @@ namespace ts {
|
||||
return finishNode(factory.createPropertyAccessExpression(expression, parseRightSideOfDot(/*allowIdentifierNames*/ true, /*allowPrivateIdentifiers*/ true)), pos);
|
||||
}
|
||||
|
||||
function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext: boolean, topInvalidNodePosition?: number): JsxElement | JsxSelfClosingElement | JsxFragment {
|
||||
function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext: boolean, topInvalidNodePosition?: number, openingTag?: JsxOpeningElement | JsxOpeningFragment): JsxElement | JsxSelfClosingElement | JsxFragment {
|
||||
const pos = getNodePos();
|
||||
const opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext);
|
||||
let result: JsxElement | JsxSelfClosingElement | JsxFragment;
|
||||
if (opening.kind === SyntaxKind.JsxOpeningElement) {
|
||||
const children = parseJsxChildren(opening);
|
||||
const closingElement = parseJsxClosingElement(inExpressionContext);
|
||||
let children = parseJsxChildren(opening);
|
||||
let closingElement: JsxClosingElement;
|
||||
|
||||
if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
|
||||
parseErrorAtRange(closingElement, Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, getTextOfNodeFromSourceText(sourceText, opening.tagName));
|
||||
const lastChild: JsxChild | undefined = children[children.length - 1];
|
||||
if (lastChild?.kind === SyntaxKind.JsxElement
|
||||
&& !tagNamesAreEquivalent(lastChild.openingElement.tagName, lastChild.closingElement.tagName)
|
||||
&& tagNamesAreEquivalent(opening.tagName, lastChild.closingElement.tagName)) {
|
||||
// when an unclosed JsxOpeningElement incorrectly parses its parent's JsxClosingElement,
|
||||
// restructure (<div>(...<span></div>)) --> (<div>(...<span></span>)</div>)
|
||||
// (no need to error; the parent will error)
|
||||
const end = lastChild.openingElement.end; // newly-created children and closing are both zero-width end/end
|
||||
const newLast = finishNode(factory.createJsxElement(
|
||||
lastChild.openingElement,
|
||||
createNodeArray([], end, end),
|
||||
finishNode(factory.createJsxClosingElement(finishNode(factory.createIdentifier(""), end, end)), end, end)),
|
||||
lastChild.openingElement.pos,
|
||||
end);
|
||||
|
||||
children = createNodeArray([...children.slice(0, children.length - 1), newLast], children.pos, end);
|
||||
closingElement = lastChild.closingElement;
|
||||
}
|
||||
else {
|
||||
closingElement = parseJsxClosingElement(opening, inExpressionContext);
|
||||
if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) {
|
||||
if (openingTag && isJsxOpeningElement(openingTag) && tagNamesAreEquivalent(closingElement.tagName, openingTag.tagName)) {
|
||||
// opening incorrectly matched with its parent's closing -- put error on opening
|
||||
parseErrorAtRange(opening.tagName, Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, getTextOfNodeFromSourceText(sourceText, opening.tagName));
|
||||
}
|
||||
else {
|
||||
// other opening/closing mismatches -- put error on closing
|
||||
parseErrorAtRange(closingElement.tagName, Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, getTextOfNodeFromSourceText(sourceText, opening.tagName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result = finishNode(factory.createJsxElement(opening, children, closingElement), pos);
|
||||
}
|
||||
else if (opening.kind === SyntaxKind.JsxOpeningFragment) {
|
||||
@@ -4941,7 +4968,7 @@ namespace ts {
|
||||
case SyntaxKind.OpenBraceToken:
|
||||
return parseJsxExpression(/*inExpressionContext*/ false);
|
||||
case SyntaxKind.LessThanToken:
|
||||
return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false);
|
||||
return parseJsxElementOrSelfClosingElementOrFragment(/*inExpressionContext*/ false, /*topInvalidNodePosition*/ undefined, openingTag);
|
||||
default:
|
||||
return Debug.assertNever(token);
|
||||
}
|
||||
@@ -4957,6 +4984,13 @@ namespace ts {
|
||||
const child = parseJsxChild(openingTag, currentToken = scanner.reScanJsxToken());
|
||||
if (!child) break;
|
||||
list.push(child);
|
||||
if (isJsxOpeningElement(openingTag)
|
||||
&& child?.kind === SyntaxKind.JsxElement
|
||||
&& !tagNamesAreEquivalent(child.openingElement.tagName, child.closingElement.tagName)
|
||||
&& tagNamesAreEquivalent(openingTag.tagName, child.closingElement.tagName)) {
|
||||
// stop after parsing a mismatched child like <div>...(<span></div>) in order to reattach the </div> higher
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
parsingContext = saveParsingContext;
|
||||
@@ -4978,7 +5012,6 @@ namespace ts {
|
||||
scanJsxText();
|
||||
return finishNode(factory.createJsxOpeningFragment(), pos);
|
||||
}
|
||||
|
||||
const tagName = parseJsxElementName();
|
||||
const typeArguments = (contextFlags & NodeFlags.JavaScriptFile) === 0 ? tryParseTypeArguments() : undefined;
|
||||
const attributes = parseJsxAttributes();
|
||||
@@ -4994,12 +5027,14 @@ namespace ts {
|
||||
}
|
||||
else {
|
||||
parseExpected(SyntaxKind.SlashToken);
|
||||
if (inExpressionContext) {
|
||||
parseExpected(SyntaxKind.GreaterThanToken);
|
||||
}
|
||||
else {
|
||||
parseExpected(SyntaxKind.GreaterThanToken, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
|
||||
scanJsxText();
|
||||
if (parseExpected(SyntaxKind.GreaterThanToken, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
|
||||
// manually advance the scanner in order to look for jsx text inside jsx
|
||||
if (inExpressionContext) {
|
||||
nextToken();
|
||||
}
|
||||
else {
|
||||
scanJsxText();
|
||||
}
|
||||
}
|
||||
node = factory.createJsxSelfClosingElement(tagName, typeArguments, attributes);
|
||||
}
|
||||
@@ -5077,16 +5112,18 @@ namespace ts {
|
||||
return finishNode(factory.createJsxSpreadAttribute(expression), pos);
|
||||
}
|
||||
|
||||
function parseJsxClosingElement(inExpressionContext: boolean): JsxClosingElement {
|
||||
function parseJsxClosingElement(open: JsxOpeningElement, inExpressionContext: boolean): JsxClosingElement {
|
||||
const pos = getNodePos();
|
||||
parseExpected(SyntaxKind.LessThanSlashToken);
|
||||
const tagName = parseJsxElementName();
|
||||
if (inExpressionContext) {
|
||||
parseExpected(SyntaxKind.GreaterThanToken);
|
||||
}
|
||||
else {
|
||||
parseExpected(SyntaxKind.GreaterThanToken, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
|
||||
scanJsxText();
|
||||
if (parseExpected(SyntaxKind.GreaterThanToken, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
|
||||
// manually advance the scanner in order to look for jsx text inside jsx
|
||||
if (inExpressionContext || !tagNamesAreEquivalent(open.tagName, tagName)) {
|
||||
nextToken();
|
||||
}
|
||||
else {
|
||||
scanJsxText();
|
||||
}
|
||||
}
|
||||
return finishNode(factory.createJsxClosingElement(tagName), pos);
|
||||
}
|
||||
@@ -5097,12 +5134,14 @@ namespace ts {
|
||||
if (tokenIsIdentifierOrKeyword(token())) {
|
||||
parseErrorAtRange(parseJsxElementName(), Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment);
|
||||
}
|
||||
if (inExpressionContext) {
|
||||
parseExpected(SyntaxKind.GreaterThanToken);
|
||||
}
|
||||
else {
|
||||
parseExpected(SyntaxKind.GreaterThanToken, /*diagnostic*/ undefined, /*shouldAdvance*/ false);
|
||||
scanJsxText();
|
||||
if (parseExpected(SyntaxKind.GreaterThanToken, /*diagnostic*/ undefined, /*shouldAdvance*/ false)) {
|
||||
// manually advance the scanner in order to look for jsx text inside jsx
|
||||
if (inExpressionContext) {
|
||||
nextToken();
|
||||
}
|
||||
else {
|
||||
scanJsxText();
|
||||
}
|
||||
}
|
||||
return finishNode(factory.createJsxJsxClosingFragment(), pos);
|
||||
}
|
||||
|
||||
@@ -3177,7 +3177,7 @@ namespace FourSlash {
|
||||
for (const markerName in map) {
|
||||
this.goToMarker(markerName);
|
||||
const actual = this.languageService.getJsxClosingTagAtPosition(this.activeFile.fileName, this.currentCaretPosition);
|
||||
assert.deepEqual(actual, map[markerName]);
|
||||
assert.deepEqual(actual, map[markerName], markerName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ tests/cases/compiler/a.jsx(1,13): error TS1109: Expression expected.
|
||||
tests/cases/compiler/a.jsx(4,1): error TS2657: JSX expressions must have one parent element.
|
||||
tests/cases/compiler/a.jsx(4,5): error TS1003: Identifier expected.
|
||||
tests/cases/compiler/a.jsx(4,13): error TS1382: Unexpected token. Did you mean `{'>'}` or `>`?
|
||||
tests/cases/compiler/a.jsx(4,14): error TS17002: Expected corresponding JSX closing tag for 'number'.
|
||||
tests/cases/compiler/a.jsx(4,16): error TS17002: Expected corresponding JSX closing tag for 'number'.
|
||||
tests/cases/compiler/a.jsx(5,1): error TS2657: JSX expressions must have one parent element.
|
||||
tests/cases/compiler/a.jsx(5,5): error TS1003: Identifier expected.
|
||||
tests/cases/compiler/a.jsx(5,6): error TS17008: JSX element 'number' has no corresponding closing tag.
|
||||
@@ -23,7 +23,7 @@ tests/cases/compiler/a.jsx(6,1): error TS1005: '</' expected.
|
||||
!!! error TS1003: Identifier expected.
|
||||
~
|
||||
!!! error TS1382: Unexpected token. Did you mean `{'>'}` or `>`?
|
||||
~~~~~~
|
||||
~~~
|
||||
!!! error TS17002: Expected corresponding JSX closing tag for 'number'.
|
||||
<Foo<number>/>;
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -34,7 +34,7 @@ x = <any><any></any>;
|
||||
|
||||
x = <foo>hello {<foo>} </foo>};
|
||||
|
||||
x = <foo test={<foo>}>hello</foo>}/>
|
||||
x = <foo test={<foo>}>hello</foo>}/>;
|
||||
|
||||
x = <foo test={<foo>}>hello{<foo>}</foo>};
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ x = <foo>hello {<foo>{}} </foo>;
|
||||
>foo : typeof foo
|
||||
|
||||
x = <foo test={<foo>{}}>hello</foo>;
|
||||
><foo test={<foo>{}}>hello</foo>; : any
|
||||
><foo test={<foo>{}}>hello</foo> : any
|
||||
>foo : typeof foo
|
||||
>test : any
|
||||
><foo>{}}>hello</foo> : any
|
||||
|
||||
@@ -8,7 +8,7 @@ tests/cases/conformance/jsx/10.tsx(1,13): error TS1005: '>' expected.
|
||||
tests/cases/conformance/jsx/10.tsx(1,14): error TS2304: Cannot find name 'c'.
|
||||
tests/cases/conformance/jsx/10.tsx(1,16): error TS1109: Expression expected.
|
||||
tests/cases/conformance/jsx/11.tsx(1,2): error TS2304: Cannot find name 'a'.
|
||||
tests/cases/conformance/jsx/11.tsx(1,8): error TS17002: Expected corresponding JSX closing tag for 'a.b.c'.
|
||||
tests/cases/conformance/jsx/11.tsx(1,10): error TS17002: Expected corresponding JSX closing tag for 'a.b.c'.
|
||||
tests/cases/conformance/jsx/12.tsx(1,1): error TS1109: Expression expected.
|
||||
tests/cases/conformance/jsx/12.tsx(1,2): error TS1109: Expression expected.
|
||||
tests/cases/conformance/jsx/12.tsx(1,5): error TS1109: Expression expected.
|
||||
@@ -73,9 +73,9 @@ tests/cases/conformance/jsx/31.tsx(1,4): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/4.tsx(1,6): error TS1005: '{' expected.
|
||||
tests/cases/conformance/jsx/5.tsx(1,2): error TS17008: JSX element 'a' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/5.tsx(1,5): error TS1005: '</' expected.
|
||||
tests/cases/conformance/jsx/6.tsx(1,4): error TS17002: Expected corresponding JSX closing tag for 'a'.
|
||||
tests/cases/conformance/jsx/6.tsx(1,6): error TS17002: Expected corresponding JSX closing tag for 'a'.
|
||||
tests/cases/conformance/jsx/7.tsx(1,13): error TS1002: Unterminated string literal.
|
||||
tests/cases/conformance/jsx/8.tsx(1,6): error TS17002: Expected corresponding JSX closing tag for 'a:b'.
|
||||
tests/cases/conformance/jsx/8.tsx(1,8): 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,2): error TS2633: JSX property access expressions cannot include JSX namespace names
|
||||
tests/cases/conformance/jsx/9.tsx(1,10): error TS2304: Cannot find name 'a:b'.
|
||||
@@ -119,7 +119,7 @@ tests/cases/conformance/jsx/9.tsx(1,10): error TS2304: Cannot find name 'a:b'.
|
||||
!!! error TS1005: '</' expected.
|
||||
==== tests/cases/conformance/jsx/6.tsx (1 errors) ====
|
||||
<a></b>;
|
||||
~~~~
|
||||
~
|
||||
!!! error TS17002: Expected corresponding JSX closing tag for 'a'.
|
||||
==== tests/cases/conformance/jsx/7.tsx (1 errors) ====
|
||||
<a foo="bar;
|
||||
@@ -127,7 +127,7 @@ tests/cases/conformance/jsx/9.tsx(1,10): error TS2304: Cannot find name 'a:b'.
|
||||
!!! error TS1002: Unterminated string literal.
|
||||
==== tests/cases/conformance/jsx/8.tsx (1 errors) ====
|
||||
<a:b></b>;
|
||||
~~~~
|
||||
~
|
||||
!!! error TS17002: Expected corresponding JSX closing tag for 'a:b'.
|
||||
==== tests/cases/conformance/jsx/9.tsx (3 errors) ====
|
||||
<a:b.c></a:b.c>;
|
||||
@@ -155,7 +155,7 @@ tests/cases/conformance/jsx/9.tsx(1,10): error TS2304: Cannot find name 'a:b'.
|
||||
<a.b.c></a>;
|
||||
~
|
||||
!!! error TS2304: Cannot find name 'a'.
|
||||
~~~~
|
||||
~
|
||||
!!! error TS17002: Expected corresponding JSX closing tag for 'a.b.c'.
|
||||
==== tests/cases/conformance/jsx/12.tsx (6 errors) ====
|
||||
<.a></.a>;
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
tests/cases/conformance/jsx/Error1.tsx(2,11): error TS17008: JSX element 'div' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/Error1.tsx(2,21): error TS17002: Expected corresponding JSX closing tag for 'span'.
|
||||
tests/cases/conformance/jsx/Error1.tsx(3,1): error TS1005: '</' expected.
|
||||
tests/cases/conformance/jsx/Error2.tsx(1,15): error TS17002: Expected corresponding JSX closing tag for 'div'.
|
||||
tests/cases/conformance/jsx/Error1.tsx(2,16): error TS17008: JSX element 'span' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/Error2.tsx(1,17): error TS17002: Expected corresponding JSX closing tag for 'div'.
|
||||
tests/cases/conformance/jsx/Error3.tsx(1,11): error TS17008: JSX element 'div' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/Error3.tsx(3,1): error TS1005: '</' expected.
|
||||
tests/cases/conformance/jsx/Error4.tsx(1,11): error TS17008: JSX element 'div' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/Error4.tsx(1,20): error TS17002: Expected corresponding JSX closing tag for 'div'.
|
||||
tests/cases/conformance/jsx/Error4.tsx(1,22): error TS17002: Expected corresponding JSX closing tag for 'div'.
|
||||
tests/cases/conformance/jsx/Error4.tsx(2,1): error TS1005: '</' expected.
|
||||
tests/cases/conformance/jsx/Error5.tsx(1,11): error TS17008: JSX element 'div' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/Error5.tsx(1,16): error TS17008: JSX element 'span' has no corresponding closing tag.
|
||||
@@ -20,19 +18,15 @@ tests/cases/conformance/jsx/Error5.tsx(3,1): error TS1005: '</' expected.
|
||||
}
|
||||
}
|
||||
|
||||
==== tests/cases/conformance/jsx/Error1.tsx (3 errors) ====
|
||||
==== tests/cases/conformance/jsx/Error1.tsx (1 errors) ====
|
||||
// Issue error about missing span closing tag, not missing div closing tag
|
||||
let x1 = <div><span></div>;
|
||||
~~~
|
||||
!!! error TS17008: JSX element 'div' has no corresponding closing tag.
|
||||
~~~~~~
|
||||
!!! error TS17002: Expected corresponding JSX closing tag for 'span'.
|
||||
~~~~
|
||||
!!! error TS17008: JSX element 'span' has no corresponding closing tag.
|
||||
|
||||
|
||||
!!! error TS1005: '</' expected.
|
||||
==== tests/cases/conformance/jsx/Error2.tsx (1 errors) ====
|
||||
let x2 = <div></span>;
|
||||
~~~~~~~
|
||||
~~~~
|
||||
!!! error TS17002: Expected corresponding JSX closing tag for 'div'.
|
||||
|
||||
|
||||
@@ -48,7 +42,7 @@ tests/cases/conformance/jsx/Error5.tsx(3,1): error TS1005: '</' expected.
|
||||
let x4 = <div><div></span>;
|
||||
~~~
|
||||
!!! error TS17008: JSX element 'div' has no corresponding closing tag.
|
||||
~~~~~~~
|
||||
~~~~
|
||||
!!! error TS17002: Expected corresponding JSX closing tag for 'div'.
|
||||
|
||||
|
||||
|
||||
@@ -31,8 +31,7 @@ let x5 = <div><span>
|
||||
//// [file.jsx]
|
||||
//// [Error1.jsx]
|
||||
// Issue error about missing span closing tag, not missing div closing tag
|
||||
var x1 = <div><span></div>;
|
||||
</>;
|
||||
var x1 = <div><span></></div>;
|
||||
//// [Error2.jsx]
|
||||
var x2 = <div></span>;
|
||||
//// [Error3.jsx]
|
||||
|
||||
@@ -11,13 +11,12 @@ declare module JSX {
|
||||
// Issue error about missing span closing tag, not missing div closing tag
|
||||
let x1 = <div><span></div>;
|
||||
>x1 : JSX.Element
|
||||
><div><span></div>; : JSX.Element
|
||||
><div><span></div> : JSX.Element
|
||||
>div : any
|
||||
><span></div> : JSX.Element
|
||||
><span> : JSX.Element
|
||||
>span : any
|
||||
>div : any
|
||||
|
||||
> : any
|
||||
>div : any
|
||||
|
||||
=== tests/cases/conformance/jsx/Error2.tsx ===
|
||||
let x2 = <div></span>;
|
||||
|
||||
@@ -0,0 +1,273 @@
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(12,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(16,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(19,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(20,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(24,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(27,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(28,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(32,1): error TS1005: '>' expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(35,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(36,1): error TS1005: '>' expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(39,6): error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(43,6): error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(43,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(49,5): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(49,6): error TS2749: 'diddy' refers to a value, but is being used as a type here. Did you mean 'typeof diddy'?
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(49,11): error TS1005: '>' expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(54,6): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(54,6): error TS2749: 'diddy' refers to a value, but is being used as a type here. Did you mean 'typeof diddy'?
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(54,11): error TS1005: '>' expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(58,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(59,5): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(64,5): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(68,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(69,5): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(74,5): error TS1005: '>' expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(78,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(79,5): error TS1005: '>' expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(83,6): error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(88,6): error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(88,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(95,5): error TS2304: Cannot find name 'Cranky'.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(96,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(101,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(104,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(106,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(111,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(114,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(116,1): error TS1003: Identifier expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(120,5): error TS1005: '>' expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(124,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(125,5): error TS1005: '>' expected.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(129,6): error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(134,6): error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
tests/cases/conformance/jsx/jsxParserRecovery.tsx(134,12): error TS2558: Expected 0 type arguments, but got 1.
|
||||
|
||||
|
||||
==== tests/cases/conformance/jsx/jsxParserRecovery.tsx (44 errors) ====
|
||||
// should have no errors here; all these functions should parse and resolve
|
||||
noName(); noClose(); noCloseTypeArg(); noCloseAttrs(); noCloseTypeArgAttrs(); noCloseBracket(); noCloseBracketTypeArgAttrs(); noSelfclose(); noSelfcloseTypeArgAttrs();
|
||||
noNameTrailingTag(); noCloseTrailingTag(); noCloseTypeArgTrailingTag(); noCloseAttrsTrailingTag(); noCloseTypeArgAttrsTrailingTag(); noCloseBracketTrailingTag(); noCloseBracketTypeArgAttrsTrailingTag(); // noSelfcloseTrailingTag(); noSelfcloseTypeArgAttrsTrailingTag();
|
||||
noNameTrailingText(); noCloseTrailingText(); noCloseTypeArgTrailingText(); noCloseAttrsTrailingText(); noCloseTypeArgAttrsTrailingText(); noCloseBracketTrailingText(); noCloseBracketTypeArgAttrsTrailingText(); // noSelfcloseTrailingText(); noSelfcloseTypeArgAttrsTrailingText();
|
||||
|
||||
function diddy() {
|
||||
return null;
|
||||
}
|
||||
|
||||
var donkey = <div>
|
||||
<
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noName() { }
|
||||
var donkey = <div>
|
||||
<diddy
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noClose() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean>
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noCloseTypeArg() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noCloseAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noCloseTypeArgAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy/
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1005: '>' expected.
|
||||
function noCloseBracket() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"/
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1005: '>' expected.
|
||||
function noCloseBracketTypeArgAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy>
|
||||
~~~~~
|
||||
!!! error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
</div>;
|
||||
function noSelfclose() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please">
|
||||
~~~~~
|
||||
!!! error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrs() { }
|
||||
|
||||
var donkey = <div>
|
||||
<
|
||||
<diddy/>
|
||||
~
|
||||
!!! error TS1003: Identifier expected.
|
||||
~~~~~
|
||||
!!! error TS2749: 'diddy' refers to a value, but is being used as a type here. Did you mean 'typeof diddy'?
|
||||
~
|
||||
!!! error TS1005: '>' expected.
|
||||
</div>;
|
||||
function noNameTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy
|
||||
<diddy/>
|
||||
~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
~~~~~
|
||||
!!! error TS2749: 'diddy' refers to a value, but is being used as a type here. Did you mean 'typeof diddy'?
|
||||
~
|
||||
!!! error TS1005: '>' expected.
|
||||
</div>;
|
||||
function noCloseTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean>
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
<diddy/>
|
||||
~
|
||||
!!! error TS1003: Identifier expected.
|
||||
</div>;
|
||||
function noCloseTypeArgTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"
|
||||
<diddy/>
|
||||
~
|
||||
!!! error TS1003: Identifier expected.
|
||||
</div>;
|
||||
function noCloseAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
<diddy/>
|
||||
~
|
||||
!!! error TS1003: Identifier expected.
|
||||
</div>;
|
||||
function noCloseTypeArgAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy/
|
||||
<diddy/>
|
||||
~
|
||||
!!! error TS1005: '>' expected.
|
||||
</div>;
|
||||
function noCloseBracketTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"/
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
<diddy/>
|
||||
~
|
||||
!!! error TS1005: '>' expected.
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy>
|
||||
~~~~~
|
||||
!!! error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noSelfcloseTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please">
|
||||
~~~~~
|
||||
!!! error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingTag() { }
|
||||
|
||||
var donkey = <div>
|
||||
<
|
||||
Cranky Wrinkly Funky
|
||||
~~~~~~
|
||||
!!! error TS2304: Cannot find name 'Cranky'.
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noNameTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noCloseTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean>
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noCloseTypeArgTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noCloseAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
~~
|
||||
!!! error TS1003: Identifier expected.
|
||||
function noCloseTypeArgAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy/
|
||||
Cranky Wrinkly Funky
|
||||
~~~~~~
|
||||
!!! error TS1005: '>' expected.
|
||||
</div>;
|
||||
function noCloseBracketTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"/
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
Cranky Wrinkly Funky
|
||||
~~~~~~
|
||||
!!! error TS1005: '>' expected.
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy>
|
||||
~~~~~
|
||||
!!! error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noSelfcloseTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please">
|
||||
~~~~~
|
||||
!!! error TS17008: JSX element 'diddy' has no corresponding closing tag.
|
||||
~~~~~~~
|
||||
!!! error TS2558: Expected 0 type arguments, but got 1.
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingText() { }
|
||||
|
||||
@@ -0,0 +1,277 @@
|
||||
//// [jsxParserRecovery.tsx]
|
||||
// should have no errors here; all these functions should parse and resolve
|
||||
noName(); noClose(); noCloseTypeArg(); noCloseAttrs(); noCloseTypeArgAttrs(); noCloseBracket(); noCloseBracketTypeArgAttrs(); noSelfclose(); noSelfcloseTypeArgAttrs();
|
||||
noNameTrailingTag(); noCloseTrailingTag(); noCloseTypeArgTrailingTag(); noCloseAttrsTrailingTag(); noCloseTypeArgAttrsTrailingTag(); noCloseBracketTrailingTag(); noCloseBracketTypeArgAttrsTrailingTag(); // noSelfcloseTrailingTag(); noSelfcloseTypeArgAttrsTrailingTag();
|
||||
noNameTrailingText(); noCloseTrailingText(); noCloseTypeArgTrailingText(); noCloseAttrsTrailingText(); noCloseTypeArgAttrsTrailingText(); noCloseBracketTrailingText(); noCloseBracketTypeArgAttrsTrailingText(); // noSelfcloseTrailingText(); noSelfcloseTypeArgAttrsTrailingText();
|
||||
|
||||
function diddy() {
|
||||
return null;
|
||||
}
|
||||
|
||||
var donkey = <div>
|
||||
<
|
||||
</div>;
|
||||
function noName() { }
|
||||
var donkey = <div>
|
||||
<diddy
|
||||
</div>;
|
||||
function noClose() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean>
|
||||
</div>;
|
||||
function noCloseTypeArg() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"
|
||||
</div>;
|
||||
function noCloseAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"
|
||||
</div>;
|
||||
function noCloseTypeArgAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy/
|
||||
</div>;
|
||||
function noCloseBracket() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"/
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy>
|
||||
</div>;
|
||||
function noSelfclose() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please">
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrs() { }
|
||||
|
||||
var donkey = <div>
|
||||
<
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noNameTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean>
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseTypeArgTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseTypeArgAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy/
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseBracketTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"/
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy>
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noSelfcloseTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please">
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingTag() { }
|
||||
|
||||
var donkey = <div>
|
||||
<
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noNameTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean>
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseTypeArgTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseTypeArgAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy/
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseBracketTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"/
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy>
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noSelfcloseTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please">
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingText() { }
|
||||
|
||||
|
||||
//// [jsxParserRecovery.jsx]
|
||||
// should have no errors here; all these functions should parse and resolve
|
||||
noName();
|
||||
noClose();
|
||||
noCloseTypeArg();
|
||||
noCloseAttrs();
|
||||
noCloseTypeArgAttrs();
|
||||
noCloseBracket();
|
||||
noCloseBracketTypeArgAttrs();
|
||||
noSelfclose();
|
||||
noSelfcloseTypeArgAttrs();
|
||||
noNameTrailingTag();
|
||||
noCloseTrailingTag();
|
||||
noCloseTypeArgTrailingTag();
|
||||
noCloseAttrsTrailingTag();
|
||||
noCloseTypeArgAttrsTrailingTag();
|
||||
noCloseBracketTrailingTag();
|
||||
noCloseBracketTypeArgAttrsTrailingTag(); // noSelfcloseTrailingTag(); noSelfcloseTypeArgAttrsTrailingTag();
|
||||
noNameTrailingText();
|
||||
noCloseTrailingText();
|
||||
noCloseTypeArgTrailingText();
|
||||
noCloseAttrsTrailingText();
|
||||
noCloseTypeArgAttrsTrailingText();
|
||||
noCloseBracketTrailingText();
|
||||
noCloseBracketTypeArgAttrsTrailingText(); // noSelfcloseTrailingText(); noSelfcloseTypeArgAttrsTrailingText();
|
||||
function diddy() {
|
||||
return null;
|
||||
}
|
||||
var donkey = <div>
|
||||
< />
|
||||
</div>;
|
||||
function noName() { }
|
||||
var donkey = <div>
|
||||
<diddy />
|
||||
</div>;
|
||||
function noClose() { }
|
||||
var donkey = <div>
|
||||
<diddy />
|
||||
</div>;
|
||||
function noCloseTypeArg() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"/>
|
||||
</div>;
|
||||
function noCloseAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"/>
|
||||
</div>;
|
||||
function noCloseTypeArgAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy />
|
||||
</div>;
|
||||
function noCloseBracket() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"/>
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy></></div>;
|
||||
function noSelfclose() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"></></div>;
|
||||
function noSelfcloseTypeArgAttrs() { }
|
||||
var donkey = <div>
|
||||
< />
|
||||
</div>;
|
||||
function noNameTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy />
|
||||
</div>;
|
||||
function noCloseTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy />
|
||||
<diddy />
|
||||
</div>;
|
||||
function noCloseTypeArgTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"/>
|
||||
<diddy />
|
||||
</div>;
|
||||
function noCloseAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"/>
|
||||
<diddy />
|
||||
</div>;
|
||||
function noCloseTypeArgAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy />
|
||||
<diddy />
|
||||
</div>;
|
||||
function noCloseBracketTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"/>
|
||||
<diddy />
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy></></div>;
|
||||
function noSelfcloseTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"></></div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<Cranky Wrinkly Funky/>
|
||||
</div>;
|
||||
function noNameTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy Cranky Wrinkly Funky/>
|
||||
</div>;
|
||||
function noCloseTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy Cranky Wrinkly Funky/>
|
||||
</div>;
|
||||
function noCloseTypeArgTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please" Cranky Wrinkly Funky/>
|
||||
</div>;
|
||||
function noCloseAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please" Cranky Wrinkly Funky/>
|
||||
</div>;
|
||||
function noCloseTypeArgAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy />
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseBracketTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"/>
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy></></div>;
|
||||
function noSelfcloseTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"></></div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingText() { }
|
||||
@@ -0,0 +1,314 @@
|
||||
=== tests/cases/conformance/jsx/jsxParserRecovery.tsx ===
|
||||
// should have no errors here; all these functions should parse and resolve
|
||||
noName(); noClose(); noCloseTypeArg(); noCloseAttrs(); noCloseTypeArgAttrs(); noCloseBracket(); noCloseBracketTypeArgAttrs(); noSelfclose(); noSelfcloseTypeArgAttrs();
|
||||
>noName : Symbol(noName, Decl(jsxParserRecovery.tsx, 11, 7))
|
||||
>noClose : Symbol(noClose, Decl(jsxParserRecovery.tsx, 15, 7))
|
||||
>noCloseTypeArg : Symbol(noCloseTypeArg, Decl(jsxParserRecovery.tsx, 19, 7))
|
||||
>noCloseAttrs : Symbol(noCloseAttrs, Decl(jsxParserRecovery.tsx, 23, 7))
|
||||
>noCloseTypeArgAttrs : Symbol(noCloseTypeArgAttrs, Decl(jsxParserRecovery.tsx, 27, 7))
|
||||
>noCloseBracket : Symbol(noCloseBracket, Decl(jsxParserRecovery.tsx, 31, 7))
|
||||
>noCloseBracketTypeArgAttrs : Symbol(noCloseBracketTypeArgAttrs, Decl(jsxParserRecovery.tsx, 35, 7))
|
||||
>noSelfclose : Symbol(noSelfclose, Decl(jsxParserRecovery.tsx, 39, 7))
|
||||
>noSelfcloseTypeArgAttrs : Symbol(noSelfcloseTypeArgAttrs, Decl(jsxParserRecovery.tsx, 43, 7))
|
||||
|
||||
noNameTrailingTag(); noCloseTrailingTag(); noCloseTypeArgTrailingTag(); noCloseAttrsTrailingTag(); noCloseTypeArgAttrsTrailingTag(); noCloseBracketTrailingTag(); noCloseBracketTypeArgAttrsTrailingTag(); // noSelfcloseTrailingTag(); noSelfcloseTypeArgAttrsTrailingTag();
|
||||
>noNameTrailingTag : Symbol(noNameTrailingTag, Decl(jsxParserRecovery.tsx, 49, 7))
|
||||
>noCloseTrailingTag : Symbol(noCloseTrailingTag, Decl(jsxParserRecovery.tsx, 54, 7))
|
||||
>noCloseTypeArgTrailingTag : Symbol(noCloseTypeArgTrailingTag, Decl(jsxParserRecovery.tsx, 59, 7))
|
||||
>noCloseAttrsTrailingTag : Symbol(noCloseAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 64, 7))
|
||||
>noCloseTypeArgAttrsTrailingTag : Symbol(noCloseTypeArgAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 69, 7))
|
||||
>noCloseBracketTrailingTag : Symbol(noCloseBracketTrailingTag, Decl(jsxParserRecovery.tsx, 74, 7))
|
||||
>noCloseBracketTypeArgAttrsTrailingTag : Symbol(noCloseBracketTypeArgAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 79, 7))
|
||||
|
||||
noNameTrailingText(); noCloseTrailingText(); noCloseTypeArgTrailingText(); noCloseAttrsTrailingText(); noCloseTypeArgAttrsTrailingText(); noCloseBracketTrailingText(); noCloseBracketTypeArgAttrsTrailingText(); // noSelfcloseTrailingText(); noSelfcloseTypeArgAttrsTrailingText();
|
||||
>noNameTrailingText : Symbol(noNameTrailingText, Decl(jsxParserRecovery.tsx, 95, 7))
|
||||
>noCloseTrailingText : Symbol(noCloseTrailingText, Decl(jsxParserRecovery.tsx, 100, 7))
|
||||
>noCloseTypeArgTrailingText : Symbol(noCloseTypeArgTrailingText, Decl(jsxParserRecovery.tsx, 105, 7))
|
||||
>noCloseAttrsTrailingText : Symbol(noCloseAttrsTrailingText, Decl(jsxParserRecovery.tsx, 110, 7))
|
||||
>noCloseTypeArgAttrsTrailingText : Symbol(noCloseTypeArgAttrsTrailingText, Decl(jsxParserRecovery.tsx, 115, 7))
|
||||
>noCloseBracketTrailingText : Symbol(noCloseBracketTrailingText, Decl(jsxParserRecovery.tsx, 120, 7))
|
||||
>noCloseBracketTypeArgAttrsTrailingText : Symbol(noCloseBracketTypeArgAttrsTrailingText, Decl(jsxParserRecovery.tsx, 125, 7))
|
||||
|
||||
function diddy() {
|
||||
>diddy : Symbol(diddy, Decl(jsxParserRecovery.tsx, 3, 209))
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<
|
||||
</div>;
|
||||
function noName() { }
|
||||
>noName : Symbol(noName, Decl(jsxParserRecovery.tsx, 11, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy
|
||||
</div>;
|
||||
function noClose() { }
|
||||
>noClose : Symbol(noClose, Decl(jsxParserRecovery.tsx, 15, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean>
|
||||
</div>;
|
||||
function noCloseTypeArg() { }
|
||||
>noCloseTypeArg : Symbol(noCloseTypeArg, Decl(jsxParserRecovery.tsx, 19, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy bananas="please"
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 22, 10))
|
||||
|
||||
</div>;
|
||||
function noCloseAttrs() { }
|
||||
>noCloseAttrs : Symbol(noCloseAttrs, Decl(jsxParserRecovery.tsx, 23, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean> bananas="please"
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 26, 19))
|
||||
|
||||
</div>;
|
||||
function noCloseTypeArgAttrs() { }
|
||||
>noCloseTypeArgAttrs : Symbol(noCloseTypeArgAttrs, Decl(jsxParserRecovery.tsx, 27, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy/
|
||||
</div>;
|
||||
function noCloseBracket() { }
|
||||
>noCloseBracket : Symbol(noCloseBracket, Decl(jsxParserRecovery.tsx, 31, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean> bananas="please"/
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 34, 19))
|
||||
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrs() { }
|
||||
>noCloseBracketTypeArgAttrs : Symbol(noCloseBracketTypeArgAttrs, Decl(jsxParserRecovery.tsx, 35, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy>
|
||||
</div>;
|
||||
function noSelfclose() { }
|
||||
>noSelfclose : Symbol(noSelfclose, Decl(jsxParserRecovery.tsx, 39, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean> bananas="please">
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 42, 19))
|
||||
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrs() { }
|
||||
>noSelfcloseTypeArgAttrs : Symbol(noSelfcloseTypeArgAttrs, Decl(jsxParserRecovery.tsx, 43, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noNameTrailingTag() { }
|
||||
>noNameTrailingTag : Symbol(noNameTrailingTag, Decl(jsxParserRecovery.tsx, 49, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseTrailingTag() { }
|
||||
>noCloseTrailingTag : Symbol(noCloseTrailingTag, Decl(jsxParserRecovery.tsx, 54, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean>
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseTypeArgTrailingTag() { }
|
||||
>noCloseTypeArgTrailingTag : Symbol(noCloseTypeArgTrailingTag, Decl(jsxParserRecovery.tsx, 59, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy bananas="please"
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 62, 10))
|
||||
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseAttrsTrailingTag() { }
|
||||
>noCloseAttrsTrailingTag : Symbol(noCloseAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 64, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean> bananas="please"
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 67, 19))
|
||||
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseTypeArgAttrsTrailingTag() { }
|
||||
>noCloseTypeArgAttrsTrailingTag : Symbol(noCloseTypeArgAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 69, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy/
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseBracketTrailingTag() { }
|
||||
>noCloseBracketTrailingTag : Symbol(noCloseBracketTrailingTag, Decl(jsxParserRecovery.tsx, 74, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean> bananas="please"/
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 77, 19))
|
||||
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingTag() { }
|
||||
>noCloseBracketTypeArgAttrsTrailingTag : Symbol(noCloseBracketTypeArgAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 79, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy>
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noSelfcloseTrailingTag() { }
|
||||
>noSelfcloseTrailingTag : Symbol(noSelfcloseTrailingTag, Decl(jsxParserRecovery.tsx, 84, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean> bananas="please">
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 87, 19))
|
||||
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingTag() { }
|
||||
>noSelfcloseTypeArgAttrsTrailingTag : Symbol(noSelfcloseTypeArgAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 89, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<
|
||||
Cranky Wrinkly Funky
|
||||
>Wrinkly : Symbol(Wrinkly, Decl(jsxParserRecovery.tsx, 94, 10))
|
||||
>Funky : Symbol(Funky, Decl(jsxParserRecovery.tsx, 94, 18))
|
||||
|
||||
</div>;
|
||||
function noNameTrailingText() { }
|
||||
>noNameTrailingText : Symbol(noNameTrailingText, Decl(jsxParserRecovery.tsx, 95, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy
|
||||
Cranky Wrinkly Funky
|
||||
>Cranky : Symbol(Cranky, Decl(jsxParserRecovery.tsx, 98, 10))
|
||||
>Wrinkly : Symbol(Wrinkly, Decl(jsxParserRecovery.tsx, 99, 10))
|
||||
>Funky : Symbol(Funky, Decl(jsxParserRecovery.tsx, 99, 18))
|
||||
|
||||
</div>;
|
||||
function noCloseTrailingText() { }
|
||||
>noCloseTrailingText : Symbol(noCloseTrailingText, Decl(jsxParserRecovery.tsx, 100, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean>
|
||||
Cranky Wrinkly Funky
|
||||
>Cranky : Symbol(Cranky, Decl(jsxParserRecovery.tsx, 103, 19))
|
||||
>Wrinkly : Symbol(Wrinkly, Decl(jsxParserRecovery.tsx, 104, 10))
|
||||
>Funky : Symbol(Funky, Decl(jsxParserRecovery.tsx, 104, 18))
|
||||
|
||||
</div>;
|
||||
function noCloseTypeArgTrailingText() { }
|
||||
>noCloseTypeArgTrailingText : Symbol(noCloseTypeArgTrailingText, Decl(jsxParserRecovery.tsx, 105, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy bananas="please"
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 108, 10))
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
>Cranky : Symbol(Cranky, Decl(jsxParserRecovery.tsx, 108, 27))
|
||||
>Wrinkly : Symbol(Wrinkly, Decl(jsxParserRecovery.tsx, 109, 10))
|
||||
>Funky : Symbol(Funky, Decl(jsxParserRecovery.tsx, 109, 18))
|
||||
|
||||
</div>;
|
||||
function noCloseAttrsTrailingText() { }
|
||||
>noCloseAttrsTrailingText : Symbol(noCloseAttrsTrailingText, Decl(jsxParserRecovery.tsx, 110, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean> bananas="please"
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 113, 19))
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
>Cranky : Symbol(Cranky, Decl(jsxParserRecovery.tsx, 113, 36))
|
||||
>Wrinkly : Symbol(Wrinkly, Decl(jsxParserRecovery.tsx, 114, 10))
|
||||
>Funky : Symbol(Funky, Decl(jsxParserRecovery.tsx, 114, 18))
|
||||
|
||||
</div>;
|
||||
function noCloseTypeArgAttrsTrailingText() { }
|
||||
>noCloseTypeArgAttrsTrailingText : Symbol(noCloseTypeArgAttrsTrailingText, Decl(jsxParserRecovery.tsx, 115, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy/
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseBracketTrailingText() { }
|
||||
>noCloseBracketTrailingText : Symbol(noCloseBracketTrailingText, Decl(jsxParserRecovery.tsx, 120, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean> bananas="please"/
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 123, 19))
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingText() { }
|
||||
>noCloseBracketTypeArgAttrsTrailingText : Symbol(noCloseBracketTypeArgAttrsTrailingText, Decl(jsxParserRecovery.tsx, 125, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy>
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noSelfcloseTrailingText() { }
|
||||
>noSelfcloseTrailingText : Symbol(noSelfcloseTrailingText, Decl(jsxParserRecovery.tsx, 130, 7))
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : Symbol(donkey, Decl(jsxParserRecovery.tsx, 9, 3), Decl(jsxParserRecovery.tsx, 13, 3), Decl(jsxParserRecovery.tsx, 17, 3), Decl(jsxParserRecovery.tsx, 21, 3), Decl(jsxParserRecovery.tsx, 25, 3) ... and 22 more)
|
||||
|
||||
<diddy<boolean> bananas="please">
|
||||
>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 133, 19))
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingText() { }
|
||||
>noSelfcloseTypeArgAttrsTrailingText : Symbol(noSelfcloseTypeArgAttrsTrailingText, Decl(jsxParserRecovery.tsx, 135, 7))
|
||||
|
||||
@@ -0,0 +1,541 @@
|
||||
=== tests/cases/conformance/jsx/jsxParserRecovery.tsx ===
|
||||
// should have no errors here; all these functions should parse and resolve
|
||||
noName(); noClose(); noCloseTypeArg(); noCloseAttrs(); noCloseTypeArgAttrs(); noCloseBracket(); noCloseBracketTypeArgAttrs(); noSelfclose(); noSelfcloseTypeArgAttrs();
|
||||
>noName() : void
|
||||
>noName : () => void
|
||||
>noClose() : void
|
||||
>noClose : () => void
|
||||
>noCloseTypeArg() : void
|
||||
>noCloseTypeArg : () => void
|
||||
>noCloseAttrs() : void
|
||||
>noCloseAttrs : () => void
|
||||
>noCloseTypeArgAttrs() : void
|
||||
>noCloseTypeArgAttrs : () => void
|
||||
>noCloseBracket() : void
|
||||
>noCloseBracket : () => void
|
||||
>noCloseBracketTypeArgAttrs() : void
|
||||
>noCloseBracketTypeArgAttrs : () => void
|
||||
>noSelfclose() : void
|
||||
>noSelfclose : () => void
|
||||
>noSelfcloseTypeArgAttrs() : void
|
||||
>noSelfcloseTypeArgAttrs : () => void
|
||||
|
||||
noNameTrailingTag(); noCloseTrailingTag(); noCloseTypeArgTrailingTag(); noCloseAttrsTrailingTag(); noCloseTypeArgAttrsTrailingTag(); noCloseBracketTrailingTag(); noCloseBracketTypeArgAttrsTrailingTag(); // noSelfcloseTrailingTag(); noSelfcloseTypeArgAttrsTrailingTag();
|
||||
>noNameTrailingTag() : void
|
||||
>noNameTrailingTag : () => void
|
||||
>noCloseTrailingTag() : void
|
||||
>noCloseTrailingTag : () => void
|
||||
>noCloseTypeArgTrailingTag() : void
|
||||
>noCloseTypeArgTrailingTag : () => void
|
||||
>noCloseAttrsTrailingTag() : void
|
||||
>noCloseAttrsTrailingTag : () => void
|
||||
>noCloseTypeArgAttrsTrailingTag() : void
|
||||
>noCloseTypeArgAttrsTrailingTag : () => void
|
||||
>noCloseBracketTrailingTag() : void
|
||||
>noCloseBracketTrailingTag : () => void
|
||||
>noCloseBracketTypeArgAttrsTrailingTag() : void
|
||||
>noCloseBracketTypeArgAttrsTrailingTag : () => void
|
||||
|
||||
noNameTrailingText(); noCloseTrailingText(); noCloseTypeArgTrailingText(); noCloseAttrsTrailingText(); noCloseTypeArgAttrsTrailingText(); noCloseBracketTrailingText(); noCloseBracketTypeArgAttrsTrailingText(); // noSelfcloseTrailingText(); noSelfcloseTypeArgAttrsTrailingText();
|
||||
>noNameTrailingText() : void
|
||||
>noNameTrailingText : () => void
|
||||
>noCloseTrailingText() : void
|
||||
>noCloseTrailingText : () => void
|
||||
>noCloseTypeArgTrailingText() : void
|
||||
>noCloseTypeArgTrailingText : () => void
|
||||
>noCloseAttrsTrailingText() : void
|
||||
>noCloseAttrsTrailingText : () => void
|
||||
>noCloseTypeArgAttrsTrailingText() : void
|
||||
>noCloseTypeArgAttrsTrailingText : () => void
|
||||
>noCloseBracketTrailingText() : void
|
||||
>noCloseBracketTrailingText : () => void
|
||||
>noCloseBracketTypeArgAttrsTrailingText() : void
|
||||
>noCloseBracketTypeArgAttrsTrailingText : () => void
|
||||
|
||||
function diddy() {
|
||||
>diddy : () => any
|
||||
|
||||
return null;
|
||||
>null : null
|
||||
}
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <</div> : any
|
||||
>div : any
|
||||
|
||||
<
|
||||
>< : any
|
||||
|
||||
</div>;
|
||||
> : any
|
||||
>div : any
|
||||
|
||||
function noName() { }
|
||||
>noName : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy
|
||||
><diddy : any
|
||||
>diddy : () => any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noClose() { }
|
||||
>noClose : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean>
|
||||
><diddy<boolean> : any
|
||||
>diddy : () => any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseTypeArg() { }
|
||||
>noCloseTypeArg : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy bananas="please"</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy bananas="please"
|
||||
><diddy bananas="please" : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseAttrs() { }
|
||||
>noCloseAttrs : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> bananas="please"</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean> bananas="please"
|
||||
><diddy<boolean> bananas="please" : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseTypeArgAttrs() { }
|
||||
>noCloseTypeArgAttrs : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy/</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy/
|
||||
><diddy/ : any
|
||||
>diddy : () => any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseBracket() { }
|
||||
>noCloseBracket : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> bananas="please"/</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean> bananas="please"/
|
||||
><diddy<boolean> bananas="please"/ : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseBracketTypeArgAttrs() { }
|
||||
>noCloseBracketTypeArgAttrs : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy>
|
||||
><diddy> : any
|
||||
>diddy : () => any
|
||||
|
||||
</div>;
|
||||
> : any
|
||||
>div : any
|
||||
|
||||
function noSelfclose() { }
|
||||
>noSelfclose : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> bananas="please"></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean> bananas="please">
|
||||
><diddy<boolean> bananas="please"> : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
</div>;
|
||||
> : any
|
||||
>div : any
|
||||
|
||||
function noSelfcloseTypeArgAttrs() { }
|
||||
>noSelfcloseTypeArgAttrs : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> < <diddy/></div> : any
|
||||
>div : any
|
||||
|
||||
<
|
||||
>< <diddy/> : any
|
||||
|
||||
<diddy/>
|
||||
> : any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noNameTrailingTag() { }
|
||||
>noNameTrailingTag : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy <diddy/></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy
|
||||
><diddy <diddy/> : any
|
||||
>diddy : () => any
|
||||
|
||||
<diddy/>
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseTrailingTag() { }
|
||||
>noCloseTrailingTag : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> <diddy/></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean>
|
||||
><diddy<boolean> : any
|
||||
>diddy : () => any
|
||||
|
||||
<diddy/>
|
||||
><diddy/> : any
|
||||
>diddy : () => any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseTypeArgTrailingTag() { }
|
||||
>noCloseTypeArgTrailingTag : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy bananas="please" <diddy/></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy bananas="please"
|
||||
><diddy bananas="please" : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
<diddy/>
|
||||
><diddy/> : any
|
||||
>diddy : () => any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseAttrsTrailingTag() { }
|
||||
>noCloseAttrsTrailingTag : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> bananas="please" <diddy/></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean> bananas="please"
|
||||
><diddy<boolean> bananas="please" : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
<diddy/>
|
||||
><diddy/> : any
|
||||
>diddy : () => any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseTypeArgAttrsTrailingTag() { }
|
||||
>noCloseTypeArgAttrsTrailingTag : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy/ <diddy/></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy/
|
||||
><diddy/ : any
|
||||
>diddy : () => any
|
||||
|
||||
<diddy/>
|
||||
><diddy/> : any
|
||||
>diddy : () => any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseBracketTrailingTag() { }
|
||||
>noCloseBracketTrailingTag : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> bananas="please"/ <diddy/></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean> bananas="please"/
|
||||
><diddy<boolean> bananas="please"/ : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
<diddy/>
|
||||
><diddy/> : any
|
||||
>diddy : () => any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseBracketTypeArgAttrsTrailingTag() { }
|
||||
>noCloseBracketTypeArgAttrsTrailingTag : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy> <diddy/></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy>
|
||||
><diddy> : any
|
||||
>diddy : () => any
|
||||
|
||||
<diddy/>
|
||||
> : any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noSelfcloseTrailingTag() { }
|
||||
>noSelfcloseTrailingTag : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> bananas="please"> <diddy/></div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean> bananas="please">
|
||||
><diddy<boolean> bananas="please"> : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
<diddy/>
|
||||
> : any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noSelfcloseTypeArgAttrsTrailingTag() { }
|
||||
>noSelfcloseTypeArgAttrsTrailingTag : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> < Cranky Wrinkly Funky</div> : any
|
||||
>div : any
|
||||
|
||||
<
|
||||
>< Cranky Wrinkly Funky : any
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
>Cranky : any
|
||||
>Wrinkly : true
|
||||
>Funky : true
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noNameTrailingText() { }
|
||||
>noNameTrailingText : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy Cranky Wrinkly Funky</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy
|
||||
><diddy Cranky Wrinkly Funky : any
|
||||
>diddy : () => any
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
>Cranky : true
|
||||
>Wrinkly : true
|
||||
>Funky : true
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseTrailingText() { }
|
||||
>noCloseTrailingText : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> Cranky Wrinkly Funky</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean>
|
||||
><diddy<boolean> Cranky Wrinkly Funky : any
|
||||
>diddy : () => any
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
>Cranky : true
|
||||
>Wrinkly : true
|
||||
>Funky : true
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseTypeArgTrailingText() { }
|
||||
>noCloseTypeArgTrailingText : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy bananas="please" Cranky Wrinkly Funky</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy bananas="please"
|
||||
><diddy bananas="please" Cranky Wrinkly Funky : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
>Cranky : true
|
||||
>Wrinkly : true
|
||||
>Funky : true
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseAttrsTrailingText() { }
|
||||
>noCloseAttrsTrailingText : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> bananas="please" Cranky Wrinkly Funky</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean> bananas="please"
|
||||
><diddy<boolean> bananas="please" Cranky Wrinkly Funky : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
>Cranky : true
|
||||
>Wrinkly : true
|
||||
>Funky : true
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseTypeArgAttrsTrailingText() { }
|
||||
>noCloseTypeArgAttrsTrailingText : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy/ Cranky Wrinkly Funky</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy/
|
||||
><diddy/ : any
|
||||
>diddy : () => any
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseBracketTrailingText() { }
|
||||
>noCloseBracketTrailingText : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> bananas="please"/ Cranky Wrinkly Funky</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean> bananas="please"/
|
||||
><diddy<boolean> bananas="please"/ : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noCloseBracketTypeArgAttrsTrailingText() { }
|
||||
>noCloseBracketTypeArgAttrsTrailingText : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy> Cranky Wrinkly Funky</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy>
|
||||
><diddy> : any
|
||||
>diddy : () => any
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
> : any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noSelfcloseTrailingText() { }
|
||||
>noSelfcloseTrailingText : () => void
|
||||
|
||||
var donkey = <div>
|
||||
>donkey : any
|
||||
><div> <diddy<boolean> bananas="please"> Cranky Wrinkly Funky</div> : any
|
||||
>div : any
|
||||
|
||||
<diddy<boolean> bananas="please">
|
||||
><diddy<boolean> bananas="please"> : any
|
||||
>diddy : () => any
|
||||
>bananas : string
|
||||
|
||||
Cranky Wrinkly Funky
|
||||
> : any
|
||||
|
||||
</div>;
|
||||
>div : any
|
||||
|
||||
function noSelfcloseTypeArgAttrsTrailingText() { }
|
||||
>noSelfcloseTypeArgAttrsTrailingText : () => void
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
// @Filename: jsxParserRecovery.tsx
|
||||
// @jsx: preserve
|
||||
|
||||
// should have no errors here; all these functions should parse and resolve
|
||||
noName(); noClose(); noCloseTypeArg(); noCloseAttrs(); noCloseTypeArgAttrs(); noCloseBracket(); noCloseBracketTypeArgAttrs(); noSelfclose(); noSelfcloseTypeArgAttrs();
|
||||
noNameTrailingTag(); noCloseTrailingTag(); noCloseTypeArgTrailingTag(); noCloseAttrsTrailingTag(); noCloseTypeArgAttrsTrailingTag(); noCloseBracketTrailingTag(); noCloseBracketTypeArgAttrsTrailingTag(); // noSelfcloseTrailingTag(); noSelfcloseTypeArgAttrsTrailingTag();
|
||||
noNameTrailingText(); noCloseTrailingText(); noCloseTypeArgTrailingText(); noCloseAttrsTrailingText(); noCloseTypeArgAttrsTrailingText(); noCloseBracketTrailingText(); noCloseBracketTypeArgAttrsTrailingText(); // noSelfcloseTrailingText(); noSelfcloseTypeArgAttrsTrailingText();
|
||||
|
||||
function diddy() {
|
||||
return null;
|
||||
}
|
||||
|
||||
var donkey = <div>
|
||||
<
|
||||
</div>;
|
||||
function noName() { }
|
||||
var donkey = <div>
|
||||
<diddy
|
||||
</div>;
|
||||
function noClose() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean>
|
||||
</div>;
|
||||
function noCloseTypeArg() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"
|
||||
</div>;
|
||||
function noCloseAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"
|
||||
</div>;
|
||||
function noCloseTypeArgAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy/
|
||||
</div>;
|
||||
function noCloseBracket() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"/
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrs() { }
|
||||
var donkey = <div>
|
||||
<diddy>
|
||||
</div>;
|
||||
function noSelfclose() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please">
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrs() { }
|
||||
|
||||
var donkey = <div>
|
||||
<
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noNameTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean>
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseTypeArgTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseTypeArgAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy/
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseBracketTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"/
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy>
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noSelfcloseTrailingTag() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please">
|
||||
<diddy/>
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingTag() { }
|
||||
|
||||
var donkey = <div>
|
||||
<
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noNameTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean>
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseTypeArgTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy bananas="please"
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseTypeArgAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy/
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseBracketTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please"/
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noCloseBracketTypeArgAttrsTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy>
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noSelfcloseTrailingText() { }
|
||||
var donkey = <div>
|
||||
<diddy<boolean> bananas="please">
|
||||
Cranky Wrinkly Funky
|
||||
</div>;
|
||||
function noSelfcloseTypeArgAttrsTrailingText() { }
|
||||
Reference in New Issue
Block a user