From da38763d0370e1809fdf5842abb444122e7bf008 Mon Sep 17 00:00:00 2001 From: golopot Date: Mon, 6 May 2019 20:10:43 +0800 Subject: [PATCH] Use pragma settings to recognize fragment --- lib/rules/jsx-no-useless-fragment.js | 16 +++++++++++----- tests/lib/rules/jsx-no-useless-fragment.js | 13 ++++++++++--- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/lib/rules/jsx-no-useless-fragment.js b/lib/rules/jsx-no-useless-fragment.js index 2681e2a99a..5a0380cd5c 100644 --- a/lib/rules/jsx-no-useless-fragment.js +++ b/lib/rules/jsx-no-useless-fragment.js @@ -3,29 +3,35 @@ */ 'use strict'; +const pragmaUtil = require('../util/pragma'); const docsUrl = require('../util/docsUrl'); /** * Test whether a JSXElement is a fragment * @param {JSXElement} node + * @param {object} context * @returns {boolean} */ -function isFragment(node) { +function isFragment(node, context) { const name = node.openingElement.name; + const reactPragma = pragmaUtil.getFromContext(context); + const fragmentPragma = pragmaUtil.getFragmentFromContext(context); // if ( name.type === 'JSXIdentifier' - && name.name === 'Fragment' + && name.name === fragmentPragma ) { return true; } - // <*.Fragment> + // if ( name.type === 'JSXMemberExpression' + && name.object.type === 'JSXIdentifier' + && name.object.name === reactPragma && name.property.type === 'JSXIdentifier' - && name.property.name === 'Fragment' + && name.property.name === fragmentPragma ) { return true; } @@ -84,7 +90,7 @@ module.exports = { return { JSXElement(node) { - if (isFragment(node)) { + if (isFragment(node, context)) { checkChildrenLength(node); } }, diff --git a/tests/lib/rules/jsx-no-useless-fragment.js b/tests/lib/rules/jsx-no-useless-fragment.js index 895b630d18..eb53b73a15 100644 --- a/tests/lib/rules/jsx-no-useless-fragment.js +++ b/tests/lib/rules/jsx-no-useless-fragment.js @@ -46,7 +46,8 @@ ruleTester.run('jsx-no-uselses-fragment', rule, { parser: parsers.BABEL_ESLINT }, '', - '' + '', + '' ], invalid: [ { @@ -78,10 +79,16 @@ ruleTester.run('jsx-no-uselses-fragment', rule, { }, { code: ` - + {foo} - + `, + settings: { + react: { + pragma: 'SomeReact', + fragment: 'SomeFragment' + } + }, errors: [{messageId: 'NeedsMoreChidren'}] }, {