diff --git a/base.js b/base.js
index eb06698..10a3cb1 100644
--- a/base.js
+++ b/base.js
@@ -21,6 +21,7 @@ export default defineConfig(
parserOptions: {
ecmaFeatures: {
jsx: true,
+ jsxPragma: null,
},
},
},
@@ -83,7 +84,7 @@ export default defineConfig(
'react/jsx-no-undef': 'error',
'react/jsx-no-useless-fragment': ['error', { allowExpressions: true }],
'react/jsx-pascal-case': ['error', { allowAllCaps: true }],
- 'react/jsx-uses-react': 'error',
+ 'react/jsx-uses-react': 'off',
'react/jsx-uses-vars': 'error',
},
},
diff --git a/test/not_ok.jsx b/test/not_ok.jsx
new file mode 100644
index 0000000..b2d23e8
--- /dev/null
+++ b/test/not_ok.jsx
@@ -0,0 +1,7 @@
+import React, { useEffect, useState } from 'react';
+
+export default function MyComponent() {
+ const [value] = useState('');
+ useEffect(() => value, []);
+ return
Hello world
;
+}
diff --git a/test/test.js b/test/test.js
index 6e2306f..ea125c1 100644
--- a/test/test.js
+++ b/test/test.js
@@ -6,6 +6,39 @@ const ESLint = await loadESLint({ useFlatConfig: true });
/** @type {import('eslint').ESLint} */
const eslint = new ESLint();
-const [okResult] = await eslint.lintFiles(['test/ok.jsx']);
+const [okResult, notOkResult] = await eslint.lintFiles([
+ 'test/ok.jsx',
+ 'test/not_ok.jsx',
+]);
assert.strictEqual(okResult.errorCount, 0, 'ok.jsx should have no error');
+
+const errors = notOkResult.messages.filter(isError).map(getRuleId).sort();
+
+assert.deepStrictEqual(errors, [
+ 'no-unused-vars',
+ 'react-hooks/exhaustive-deps',
+]);
+
+const warnings = notOkResult.messages
+ .filter(isWarning)
+ .filter(excludeJsdoc)
+ .map(getRuleId)
+ .sort();
+assert.deepStrictEqual(warnings, []);
+
+function isError(message) {
+ return message.severity === 2;
+}
+
+function isWarning(message) {
+ return message.severity === 1;
+}
+
+function excludeJsdoc(message) {
+ return !message.ruleId.startsWith('jsdoc/');
+}
+
+function getRuleId(message) {
+ return message.ruleId;
+}