+>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)
+
+
;
+function noCloseBracket() { }
+>noCloseBracket : Symbol(noCloseBracket, Decl(jsxParserRecovery.tsx, 31, 7))
+
+var donkey =
+>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)
+
+ bananas="please"/
+>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 34, 19))
+
+
;
+function noCloseBracketTypeArgAttrs() { }
+>noCloseBracketTypeArgAttrs : Symbol(noCloseBracketTypeArgAttrs, Decl(jsxParserRecovery.tsx, 35, 7))
+
+var donkey =
+>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)
+
+
+
;
+function noSelfclose() { }
+>noSelfclose : Symbol(noSelfclose, Decl(jsxParserRecovery.tsx, 39, 7))
+
+var donkey =
+>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)
+
+ bananas="please">
+>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 42, 19))
+
+
;
+function noSelfcloseTypeArgAttrs() { }
+>noSelfcloseTypeArgAttrs : Symbol(noSelfcloseTypeArgAttrs, Decl(jsxParserRecovery.tsx, 43, 7))
+
+var donkey =
+>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)
+
+ <
+
+
;
+function noNameTrailingTag() { }
+>noNameTrailingTag : Symbol(noNameTrailingTag, Decl(jsxParserRecovery.tsx, 49, 7))
+
+var donkey =
+>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)
+
+
+
;
+function noCloseTrailingTag() { }
+>noCloseTrailingTag : Symbol(noCloseTrailingTag, Decl(jsxParserRecovery.tsx, 54, 7))
+
+var donkey =
+>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)
+
+
+
+
;
+function noCloseTypeArgTrailingTag() { }
+>noCloseTypeArgTrailingTag : Symbol(noCloseTypeArgTrailingTag, Decl(jsxParserRecovery.tsx, 59, 7))
+
+var donkey =
+>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)
+
+ bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 62, 10))
+
+
+
;
+function noCloseAttrsTrailingTag() { }
+>noCloseAttrsTrailingTag : Symbol(noCloseAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 64, 7))
+
+var donkey =
+>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)
+
+ bananas="please"
+>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 67, 19))
+
+
+
;
+function noCloseTypeArgAttrsTrailingTag() { }
+>noCloseTypeArgAttrsTrailingTag : Symbol(noCloseTypeArgAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 69, 7))
+
+var donkey =
+>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)
+
+
+
;
+function noCloseBracketTrailingTag() { }
+>noCloseBracketTrailingTag : Symbol(noCloseBracketTrailingTag, Decl(jsxParserRecovery.tsx, 74, 7))
+
+var donkey =
+>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)
+
+ bananas="please"/
+>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 77, 19))
+
+
+
;
+function noCloseBracketTypeArgAttrsTrailingTag() { }
+>noCloseBracketTypeArgAttrsTrailingTag : Symbol(noCloseBracketTypeArgAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 79, 7))
+
+var donkey =
+>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)
+
+
+
+
;
+function noSelfcloseTrailingTag() { }
+>noSelfcloseTrailingTag : Symbol(noSelfcloseTrailingTag, Decl(jsxParserRecovery.tsx, 84, 7))
+
+var donkey =
+>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)
+
+ bananas="please">
+>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 87, 19))
+
+
+
;
+function noSelfcloseTypeArgAttrsTrailingTag() { }
+>noSelfcloseTypeArgAttrsTrailingTag : Symbol(noSelfcloseTypeArgAttrsTrailingTag, Decl(jsxParserRecovery.tsx, 89, 7))
+
+var donkey =
+>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))
+
+
;
+function noNameTrailingText() { }
+>noNameTrailingText : Symbol(noNameTrailingText, Decl(jsxParserRecovery.tsx, 95, 7))
+
+var donkey =
+>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 : Symbol(Cranky, Decl(jsxParserRecovery.tsx, 98, 10))
+>Wrinkly : Symbol(Wrinkly, Decl(jsxParserRecovery.tsx, 99, 10))
+>Funky : Symbol(Funky, Decl(jsxParserRecovery.tsx, 99, 18))
+
+
;
+function noCloseTrailingText() { }
+>noCloseTrailingText : Symbol(noCloseTrailingText, Decl(jsxParserRecovery.tsx, 100, 7))
+
+var donkey =
+>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
+>Cranky : Symbol(Cranky, Decl(jsxParserRecovery.tsx, 103, 19))
+>Wrinkly : Symbol(Wrinkly, Decl(jsxParserRecovery.tsx, 104, 10))
+>Funky : Symbol(Funky, Decl(jsxParserRecovery.tsx, 104, 18))
+
+
;
+function noCloseTypeArgTrailingText() { }
+>noCloseTypeArgTrailingText : Symbol(noCloseTypeArgTrailingText, Decl(jsxParserRecovery.tsx, 105, 7))
+
+var donkey =
+>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)
+
+ 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))
+
+
;
+function noCloseAttrsTrailingText() { }
+>noCloseAttrsTrailingText : Symbol(noCloseAttrsTrailingText, Decl(jsxParserRecovery.tsx, 110, 7))
+
+var donkey =
+>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)
+
+ 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))
+
+
;
+function noCloseTypeArgAttrsTrailingText() { }
+>noCloseTypeArgAttrsTrailingText : Symbol(noCloseTypeArgAttrsTrailingText, Decl(jsxParserRecovery.tsx, 115, 7))
+
+var donkey =
+>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)
+
+
;
+function noCloseBracketTrailingText() { }
+>noCloseBracketTrailingText : Symbol(noCloseBracketTrailingText, Decl(jsxParserRecovery.tsx, 120, 7))
+
+var donkey =
+>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)
+
+ bananas="please"/
+>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 123, 19))
+
+ Cranky Wrinkly Funky
+
;
+function noCloseBracketTypeArgAttrsTrailingText() { }
+>noCloseBracketTypeArgAttrsTrailingText : Symbol(noCloseBracketTypeArgAttrsTrailingText, Decl(jsxParserRecovery.tsx, 125, 7))
+
+var donkey =
+>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
+
;
+function noSelfcloseTrailingText() { }
+>noSelfcloseTrailingText : Symbol(noSelfcloseTrailingText, Decl(jsxParserRecovery.tsx, 130, 7))
+
+var donkey =
+>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)
+
+ bananas="please">
+>bananas : Symbol(bananas, Decl(jsxParserRecovery.tsx, 133, 19))
+
+ Cranky Wrinkly Funky
+
;
+function noSelfcloseTypeArgAttrsTrailingText() { }
+>noSelfcloseTypeArgAttrsTrailingText : Symbol(noSelfcloseTypeArgAttrsTrailingText, Decl(jsxParserRecovery.tsx, 135, 7))
+
diff --git a/tests/baselines/reference/jsxUnclosedParserRecovery.types b/tests/baselines/reference/jsxUnclosedParserRecovery.types
new file mode 100644
index 00000000000..0c836329c7c
--- /dev/null
+++ b/tests/baselines/reference/jsxUnclosedParserRecovery.types
@@ -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 =
+>donkey : any
+>
<
: any
+>div : any
+
+ <
+>< : any
+
+
;
+> : any
+>div : any
+
+function noName() { }
+>noName : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+ diddy : () => any
+
+
;
+>div : any
+
+function noClose() { }
+>noClose : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+
+> : any
+>diddy : () => any
+
+;
+>div : any
+
+function noCloseTypeArg() { }
+>noCloseTypeArg : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+ diddy : () => any
+>bananas : string
+
+
;
+>div : any
+
+function noCloseAttrs() { }
+>noCloseAttrs : () => void
+
+var donkey =
+>donkey : any
+>
bananas="please"
: any
+>div : any
+
+
bananas="please"
+> bananas="please" : any
+>diddy : () => any
+>bananas : string
+
+;
+>div : any
+
+function noCloseTypeArgAttrs() { }
+>noCloseTypeArgAttrs : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+ diddy : () => any
+
+
;
+>div : any
+
+function noCloseBracket() { }
+>noCloseBracket : () => void
+
+var donkey =
+>donkey : any
+>
bananas="please"/
: any
+>div : any
+
+
bananas="please"/
+> bananas="please"/ : any
+>diddy : () => any
+>bananas : string
+
+;
+>div : any
+
+function noCloseBracketTypeArgAttrs() { }
+>noCloseBracketTypeArgAttrs : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+
+> : any
+>diddy : () => any
+
+;
+> : any
+>div : any
+
+function noSelfclose() { }
+>noSelfclose : () => void
+
+var donkey =
+>donkey : any
+>
bananas="please">
: any
+>div : any
+
+
bananas="please">
+> bananas="please"> : any
+>diddy : () => any
+>bananas : string
+
+;
+> : any
+>div : any
+
+function noSelfcloseTypeArgAttrs() { }
+>noSelfcloseTypeArgAttrs : () => void
+
+var donkey =
+>donkey : any
+>
<
: any
+>div : any
+
+ <
+><
: any
+
+
+> : any
+
+
;
+>div : any
+
+function noNameTrailingTag() { }
+>noNameTrailingTag : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+
: any
+>diddy : () => any
+
+
+;
+>div : any
+
+function noCloseTrailingTag() { }
+>noCloseTrailingTag : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+
+> : any
+>diddy : () => any
+
+
+> : any
+>diddy : () => any
+
+;
+>div : any
+
+function noCloseTypeArgTrailingTag() { }
+>noCloseTypeArgTrailingTag : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+
diddy : () => any
+>bananas : string
+
+
+> : any
+>diddy : () => any
+
+;
+>div : any
+
+function noCloseAttrsTrailingTag() { }
+>noCloseAttrsTrailingTag : () => void
+
+var donkey =
+>donkey : any
+>
bananas="please"
: any
+>div : any
+
+
bananas="please"
+> bananas="please" : any
+>diddy : () => any
+>bananas : string
+
+
+> : any
+>diddy : () => any
+
+;
+>div : any
+
+function noCloseTypeArgAttrsTrailingTag() { }
+>noCloseTypeArgAttrsTrailingTag : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+
diddy : () => any
+
+
+> : any
+>diddy : () => any
+
+;
+>div : any
+
+function noCloseBracketTrailingTag() { }
+>noCloseBracketTrailingTag : () => void
+
+var donkey =
+>donkey : any
+>
bananas="please"/
: any
+>div : any
+
+
bananas="please"/
+> bananas="please"/ : any
+>diddy : () => any
+>bananas : string
+
+
+> : any
+>diddy : () => any
+
+;
+>div : any
+
+function noCloseBracketTypeArgAttrsTrailingTag() { }
+>noCloseBracketTypeArgAttrsTrailingTag : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+
+> : any
+>diddy : () => any
+
+
+> : any
+
+;
+>div : any
+
+function noSelfcloseTrailingTag() { }
+>noSelfcloseTrailingTag : () => void
+
+var donkey =
+>donkey : any
+>
bananas="please">
: any
+>div : any
+
+
bananas="please">
+> bananas="please"> : any
+>diddy : () => any
+>bananas : string
+
+
+> : any
+
+;
+>div : any
+
+function noSelfcloseTypeArgAttrsTrailingTag() { }
+>noSelfcloseTypeArgAttrsTrailingTag : () => void
+
+var donkey =
+>donkey : any
+>
< Cranky Wrinkly Funky
: any
+>div : any
+
+ <
+>< Cranky Wrinkly Funky : any
+
+ Cranky Wrinkly Funky
+>Cranky : any
+>Wrinkly : true
+>Funky : true
+
+
;
+>div : any
+
+function noNameTrailingText() { }
+>noNameTrailingText : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+ diddy : () => any
+
+ Cranky Wrinkly Funky
+>Cranky : true
+>Wrinkly : true
+>Funky : true
+
+
;
+>div : any
+
+function noCloseTrailingText() { }
+>noCloseTrailingText : () => void
+
+var donkey =
+>donkey : any
+>
Cranky Wrinkly Funky
: any
+>div : any
+
+
+> Cranky Wrinkly Funky : any
+>diddy : () => any
+
+ Cranky Wrinkly Funky
+>Cranky : true
+>Wrinkly : true
+>Funky : true
+
+;
+>div : any
+
+function noCloseTypeArgTrailingText() { }
+>noCloseTypeArgTrailingText : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+ diddy : () => any
+>bananas : string
+
+ Cranky Wrinkly Funky
+>Cranky : true
+>Wrinkly : true
+>Funky : true
+
+
;
+>div : any
+
+function noCloseAttrsTrailingText() { }
+>noCloseAttrsTrailingText : () => void
+
+var donkey =
+>donkey : any
+>
bananas="please" Cranky Wrinkly Funky
: any
+>div : any
+
+
bananas="please"
+> bananas="please" Cranky Wrinkly Funky : any
+>diddy : () => any
+>bananas : string
+
+ Cranky Wrinkly Funky
+>Cranky : true
+>Wrinkly : true
+>Funky : true
+
+;
+>div : any
+
+function noCloseTypeArgAttrsTrailingText() { }
+>noCloseTypeArgAttrsTrailingText : () => void
+
+var donkey =
+>donkey : any
+>
: any
+>div : any
+
+ diddy : () => any
+
+ Cranky Wrinkly Funky
+
;
+>div : any
+
+function noCloseBracketTrailingText() { }
+>noCloseBracketTrailingText : () => void
+
+var donkey =
+>donkey : any
+>
bananas="please"/ Cranky Wrinkly Funky
: any
+>div : any
+
+
bananas="please"/
+> bananas="please"/ : any
+>diddy : () => any
+>bananas : string
+
+ Cranky Wrinkly Funky
+;
+>div : any
+
+function noCloseBracketTypeArgAttrsTrailingText() { }
+>noCloseBracketTypeArgAttrsTrailingText : () => void
+
+var donkey =
+>donkey : any
+>
Cranky Wrinkly Funky
: any
+>div : any
+
+
+> : any
+>diddy : () => any
+
+ Cranky Wrinkly Funky
+> : any
+
+;
+>div : any
+
+function noSelfcloseTrailingText() { }
+>noSelfcloseTrailingText : () => void
+
+var donkey =
+>donkey : any
+>
bananas="please"> Cranky Wrinkly Funky
: any
+>div : any
+
+
bananas="please">
+> bananas="please"> : any
+>diddy : () => any
+>bananas : string
+
+ Cranky Wrinkly Funky
+> : any
+
+;
+>div : any
+
+function noSelfcloseTypeArgAttrsTrailingText() { }
+>noSelfcloseTypeArgAttrsTrailingText : () => void
+
diff --git a/tests/cases/conformance/jsx/jsxUnclosedParserRecovery.ts b/tests/cases/conformance/jsx/jsxUnclosedParserRecovery.ts
new file mode 100644
index 00000000000..08b6149d37d
--- /dev/null
+++ b/tests/cases/conformance/jsx/jsxUnclosedParserRecovery.ts
@@ -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 =
+ <
+
;
+function noName() { }
+var donkey =
+
;
+function noClose() { }
+var donkey =
+
+
;
+function noCloseTypeArg() { }
+var donkey =
+
;
+function noCloseAttrs() { }
+var donkey =
+ bananas="please"
+
;
+function noCloseTypeArgAttrs() { }
+var donkey =
+
;
+function noCloseBracket() { }
+var donkey =
+ bananas="please"/
+
;
+function noCloseBracketTypeArgAttrs() { }
+var donkey =
+
+
;
+function noSelfclose() { }
+var donkey =
+ bananas="please">
+
;
+function noSelfcloseTypeArgAttrs() { }
+
+var donkey =
+ <
+
+
;
+function noNameTrailingTag() { }
+var donkey =
+
+
;
+function noCloseTrailingTag() { }
+var donkey =
+
+
+
;
+function noCloseTypeArgTrailingTag() { }
+var donkey =
+
+
;
+function noCloseAttrsTrailingTag() { }
+var donkey =
+ bananas="please"
+
+
;
+function noCloseTypeArgAttrsTrailingTag() { }
+var donkey =
+
+
;
+function noCloseBracketTrailingTag() { }
+var donkey =
+ bananas="please"/
+
+
;
+function noCloseBracketTypeArgAttrsTrailingTag() { }
+var donkey =
+
+
+
;
+function noSelfcloseTrailingTag() { }
+var donkey =
+ bananas="please">
+
+
;
+function noSelfcloseTypeArgAttrsTrailingTag() { }
+
+var donkey =
+ <
+ Cranky Wrinkly Funky
+
;
+function noNameTrailingText() { }
+var donkey =
+
;
+function noCloseTrailingText() { }
+var donkey =
+
+ Cranky Wrinkly Funky
+
;
+function noCloseTypeArgTrailingText() { }
+var donkey =
+
;
+function noCloseAttrsTrailingText() { }
+var donkey =
+ bananas="please"
+ Cranky Wrinkly Funky
+
;
+function noCloseTypeArgAttrsTrailingText() { }
+var donkey =
+
;
+function noCloseBracketTrailingText() { }
+var donkey =
+ bananas="please"/
+ Cranky Wrinkly Funky
+
;
+function noCloseBracketTypeArgAttrsTrailingText() { }
+var donkey =
+
+ Cranky Wrinkly Funky
+
;
+function noSelfcloseTrailingText() { }
+var donkey =
+ bananas="please">
+ Cranky Wrinkly Funky
+
;
+function noSelfcloseTypeArgAttrsTrailingText() { }