diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 61f31d7390754..a4b3631c918d4 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -968,6 +968,11 @@ namespace ts {
return file.localJsxFragmentNamespace = getFirstIdentifier(file.localJsxFragmentFactory).escapedText;
}
}
+ const entity = getJsxFragmentFactoryEntity(location);
+ if (entity) {
+ file.localJsxFragmentFactory = entity;
+ return file.localJsxFragmentNamespace = getFirstIdentifier(entity).escapedText;
+ }
}
else {
if (file.localJsxNamespace) {
diff --git a/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.js b/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.js
index 3bffa897aef87..f36a80ec196a6 100644
--- a/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.js
+++ b/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.js
@@ -1,5 +1,6 @@
//// [jsxFactoryAndJsxFragmentFactory.tsx]
declare var h: any;
+declare var Frag: any;
<>>;
<>1<>2.12.2>>;
diff --git a/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.symbols b/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.symbols
index e21f2fac91861..0c7b584e79208 100644
--- a/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.symbols
+++ b/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.symbols
@@ -2,5 +2,8 @@
declare var h: any;
>h : Symbol(h, Decl(jsxFactoryAndJsxFragmentFactory.tsx, 0, 11))
+declare var Frag: any;
+>Frag : Symbol(Frag, Decl(jsxFactoryAndJsxFragmentFactory.tsx, 1, 11))
+
<>>;
<>1<>2.12.2>>;
diff --git a/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.types b/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.types
index 01d2d3003c6b1..d30708d5166b0 100644
--- a/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.types
+++ b/tests/baselines/reference/jsxFactoryAndJsxFragmentFactory.types
@@ -2,6 +2,9 @@
declare var h: any;
>h : any
+declare var Frag: any;
+>Frag : any
+
<>>;
><>> : error
diff --git a/tests/baselines/reference/jsxFragmentFactoryNoUnusedLocals.js b/tests/baselines/reference/jsxFragmentFactoryNoUnusedLocals.js
new file mode 100644
index 0000000000000..90cad7ac3521b
--- /dev/null
+++ b/tests/baselines/reference/jsxFragmentFactoryNoUnusedLocals.js
@@ -0,0 +1,30 @@
+//// [jsxFragmentFactoryNoUnusedLocals.tsx]
+///
{cnt}
+ + > +} + +//// [jsxFragmentFactoryNoUnusedLocals.js] +"use strict"; +exports.__esModule = true; +exports.Counter = void 0; +///{cnt}
+>p : Symbol(JSX.IntrinsicElements.p, Decl(react16.d.ts, 2467, 102)) +>cnt : Symbol(cnt, Decl(jsxFragmentFactoryNoUnusedLocals.tsx, 8, 11)) +>p : Symbol(JSX.IntrinsicElements.p, Decl(react16.d.ts, 2467, 102)) + + +>button : Symbol(JSX.IntrinsicElements.button, Decl(react16.d.ts, 2406, 96)) +>onClick : Symbol(onClick, Decl(jsxFragmentFactoryNoUnusedLocals.tsx, 11, 15)) +>setCnt : Symbol(setCnt, Decl(jsxFragmentFactoryNoUnusedLocals.tsx, 8, 15)) +>prev : Symbol(prev, Decl(jsxFragmentFactoryNoUnusedLocals.tsx, 11, 39)) +>prev : Symbol(prev, Decl(jsxFragmentFactoryNoUnusedLocals.tsx, 11, 39)) +>type : Symbol(type, Decl(jsxFragmentFactoryNoUnusedLocals.tsx, 11, 58)) +>button : Symbol(JSX.IntrinsicElements.button, Decl(react16.d.ts, 2406, 96)) + + > +} diff --git a/tests/baselines/reference/jsxFragmentFactoryNoUnusedLocals.types b/tests/baselines/reference/jsxFragmentFactoryNoUnusedLocals.types new file mode 100644 index 0000000000000..75a9122b486ee --- /dev/null +++ b/tests/baselines/reference/jsxFragmentFactoryNoUnusedLocals.types @@ -0,0 +1,50 @@ +=== tests/cases/compiler/jsxFragmentFactoryNoUnusedLocals.tsx === +///, T extends HTMLElement>(type: "object" | "time" | "link" | "menu" | "dialog" | "a" | "abbr" | "address" | "area" | "article" | "aside" | "audio" | "b" | "base" | "bdi" | "bdo" | "big" | "blockquote" | "body" | "br" | "button" | "canvas" | "caption" | "cite" | "code" | "col" | "colgroup" | "data" | "datalist" | "dd" | "del" | "details" | "dfn" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "footer" | "form" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "input" | "ins" | "kbd" | "keygen" | "label" | "legend" | "li" | "main" | "map" | "mark" | "menuitem" | "meta" | "meter" | "nav" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "param" | "picture" | "pre" | "progress" | "q" | "rp" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "small" | "source" | "span" | "strong" | "style" | "sub" | "summary" | "sup" | "table" | "tbody" | "td" | "textarea" | "tfoot" | "th" | "thead" | "title" | "tr" | "track" | "u" | "ul" | "var" | "video" | "wbr" | "webview", props?: import("react").ClassAttributes ; , T extends SVGElement>(type: "symbol" | "text" | "animate" | "circle" | "clipPath" | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feDropShadow" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "filter" | "foreignObject" | "g" | "image" | "line" | "linearGradient" | "marker" | "mask" | "metadata" | "path" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "stop" | "svg" | "switch" | "textPath" | "tspan" | "use" | "view", props?: import("react").ClassAttributes , T extends Element>(type: string, props?: import("react").ClassAttributes ; (type: import("react").SFC , props?: import("react").Attributes & P, ...children: import("react").ReactNode[]): import("react").SFCElement ; (type: import("react").ClassType , import("react").ClassicComponentClass >, props?: import("react").ClassAttributes >; , C extends import("react").ComponentClass >(type: import("react").ClassType , props?: import("react").ClassAttributes ; (type: string | import("react").SFC | import("react").ComponentClass , props?: import("react").Attributes & P, ...children: import("react").ReactNode[]): import("react").ReactElement ; }
+
+type CounterProps = {
+>CounterProps : CounterProps
+
+ count?: number
+>count : number
+}
+
+export function Counter({ count = 0 }: CounterProps) {
+>Counter : ({ count }: CounterProps) => JSX.Element
+>count : number
+>0 : 0
+
+ const [cnt, setCnt] = null as any;
+>cnt : any
+>setCnt : any
+>null as any : any
+>null : null
+
+ return <>
+><> {cnt} {cnt} {cnt} {cnt}