diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 43c9818e623..982d9d9b822 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -26955,6 +26955,9 @@ namespace ts { errorOutputContainer); function checkTagNameDoesNotExpectTooManyArguments(): boolean { + if (getJsxNamespaceContainerForImplicitImport(node)) { + return true; // factory is implicitly jsx/jsxdev - assume it fits the bill, since we don't strongly look for the jsx/jsxs/jsxDEV factory APIs anywhere else (at least not yet) + } const tagType = isJsxOpeningElement(node) || isJsxSelfClosingElement(node) && !isJsxIntrinsicIdentifier(node.tagName) ? checkExpression(node.tagName) : undefined; if (!tagType) { return true; diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).errors.txt b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).errors.txt new file mode 100644 index 00000000000..95387157d76 --- /dev/null +++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).errors.txt @@ -0,0 +1,17 @@ +tests/cases/compiler/index.tsx(3,1): error TS6133: 'React' is declared but its value is never read. + + +==== tests/cases/compiler/index.tsx (1 errors) ==== + /// + + import React from "react"; + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS6133: 'React' is declared but its value is never read. + + function Bar() { + return
; + } + + export function Foo() { + return ; + } \ No newline at end of file diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js new file mode 100644 index 00000000000..2d8f1afe0fb --- /dev/null +++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).js @@ -0,0 +1,25 @@ +//// [index.tsx] +/// + +import React from "react"; + +function Bar() { + return
; +} + +export function Foo() { + return ; +} + +//// [index.js] +"use strict"; +exports.__esModule = true; +exports.Foo = void 0; +var jsx_runtime_1 = require("react/jsx-runtime"); +function Bar() { + return jsx_runtime_1.jsx("div", {}, void 0); +} +function Foo() { + return jsx_runtime_1.jsx(Bar, {}, void 0); +} +exports.Foo = Foo; diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).symbols b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).symbols new file mode 100644 index 00000000000..f7edf35f27f --- /dev/null +++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).symbols @@ -0,0 +1,19 @@ +=== tests/cases/compiler/index.tsx === +/// + +import React from "react"; +>React : Symbol(React, Decl(index.tsx, 2, 6)) + +function Bar() { +>Bar : Symbol(Bar, Decl(index.tsx, 2, 26)) + + return
; +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2420, 114)) +} + +export function Foo() { +>Foo : Symbol(Foo, Decl(index.tsx, 6, 1)) + + return ; +>Bar : Symbol(Bar, Decl(index.tsx, 2, 26)) +} diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).types b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).types new file mode 100644 index 00000000000..61c607c3c1d --- /dev/null +++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsx).types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/index.tsx === +/// + +import React from "react"; +>React : typeof React + +function Bar() { +>Bar : () => JSX.Element + + return
; +>
: JSX.Element +>div : any +} + +export function Foo() { +>Foo : () => JSX.Element + + return ; +> : JSX.Element +>Bar : () => JSX.Element +} diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).errors.txt b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).errors.txt new file mode 100644 index 00000000000..95387157d76 --- /dev/null +++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).errors.txt @@ -0,0 +1,17 @@ +tests/cases/compiler/index.tsx(3,1): error TS6133: 'React' is declared but its value is never read. + + +==== tests/cases/compiler/index.tsx (1 errors) ==== + /// + + import React from "react"; + ~~~~~~~~~~~~~~~~~~~~~~~~~~ +!!! error TS6133: 'React' is declared but its value is never read. + + function Bar() { + return
; + } + + export function Foo() { + return ; + } \ No newline at end of file diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).js b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).js new file mode 100644 index 00000000000..c7235c7eaeb --- /dev/null +++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).js @@ -0,0 +1,26 @@ +//// [index.tsx] +/// + +import React from "react"; + +function Bar() { + return
; +} + +export function Foo() { + return ; +} + +//// [index.js] +"use strict"; +exports.__esModule = true; +exports.Foo = void 0; +var jsx_dev_runtime_1 = require("react/jsx-dev-runtime"); +var _jsxFileName = "tests/cases/compiler/index.tsx"; +function Bar() { + return jsx_dev_runtime_1.jsxDEV("div", {}, void 0, false, { fileName: _jsxFileName, lineNumber: 6, columnNumber: 9 }, this); +} +function Foo() { + return jsx_dev_runtime_1.jsxDEV(Bar, {}, void 0, false, { fileName: _jsxFileName, lineNumber: 10, columnNumber: 9 }, this); +} +exports.Foo = Foo; diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).symbols b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).symbols new file mode 100644 index 00000000000..f7edf35f27f --- /dev/null +++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).symbols @@ -0,0 +1,19 @@ +=== tests/cases/compiler/index.tsx === +/// + +import React from "react"; +>React : Symbol(React, Decl(index.tsx, 2, 6)) + +function Bar() { +>Bar : Symbol(Bar, Decl(index.tsx, 2, 26)) + + return
; +>div : Symbol(JSX.IntrinsicElements.div, Decl(react16.d.ts, 2420, 114)) +} + +export function Foo() { +>Foo : Symbol(Foo, Decl(index.tsx, 6, 1)) + + return ; +>Bar : Symbol(Bar, Decl(index.tsx, 2, 26)) +} diff --git a/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).types b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).types new file mode 100644 index 00000000000..61c607c3c1d --- /dev/null +++ b/tests/baselines/reference/reactImportUnusedInNewJSXEmit(jsx=react-jsxdev).types @@ -0,0 +1,21 @@ +=== tests/cases/compiler/index.tsx === +/// + +import React from "react"; +>React : typeof React + +function Bar() { +>Bar : () => JSX.Element + + return
; +>
: JSX.Element +>div : any +} + +export function Foo() { +>Foo : () => JSX.Element + + return ; +> : JSX.Element +>Bar : () => JSX.Element +} diff --git a/tests/cases/compiler/reactImportUnusedInNewJSXEmit.tsx b/tests/cases/compiler/reactImportUnusedInNewJSXEmit.tsx new file mode 100644 index 00000000000..88a7e2b2b53 --- /dev/null +++ b/tests/cases/compiler/reactImportUnusedInNewJSXEmit.tsx @@ -0,0 +1,16 @@ +// @esModuleInterop: true +// @noUnusedLocals: true +// @jsx: react-jsx,react-jsxdev +// @skipLibCheck: true +// @filename: index.tsx +/// + +import React from "react"; + +function Bar() { + return
; +} + +export function Foo() { + return ; +} \ No newline at end of file