Skip to content

Commit 01eb97e

Browse files
committed
refactor: move function isFragment to utils/jsx.js
1 parent cfbea9d commit 01eb97e

File tree

2 files changed

+32
-31
lines changed

2 files changed

+32
-31
lines changed

lib/rules/jsx-no-useless-fragment.js

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
'use strict';
66
const pragmaUtil = require('../util/pragma');
7+
const jsxUtil = require('../util/jsx');
78
const docsUrl = require('../util/docsUrl');
89

910

@@ -27,36 +28,6 @@ module.exports = {
2728
const reactPragma = pragmaUtil.getFromContext(context);
2829
const fragmentPragma = pragmaUtil.getFragmentFromContext(context);
2930

30-
/**
31-
* Test whether a JSXElement is a fragment
32-
* @param {JSXElement} node
33-
* @returns {boolean}
34-
*/
35-
function isFragment(node) {
36-
const name = node.openingElement.name;
37-
38-
// <Fragment>
39-
if (
40-
name.type === 'JSXIdentifier'
41-
&& name.name === fragmentPragma
42-
) {
43-
return true;
44-
}
45-
46-
// <React.Fragment>
47-
if (
48-
name.type === 'JSXMemberExpression'
49-
&& name.object.type === 'JSXIdentifier'
50-
&& name.object.name === reactPragma
51-
&& name.property.type === 'JSXIdentifier'
52-
&& name.property.name === fragmentPragma
53-
) {
54-
return true;
55-
}
56-
57-
return false;
58-
}
59-
6031
/**
6132
* Test whether a node is an padding spaces trimmed by react runtime.
6233
* @param {ASTNode} node
@@ -157,7 +128,7 @@ module.exports = {
157128

158129
return {
159130
JSXElement(node) {
160-
if (isFragment(node)) {
131+
if (jsxUtil.isFragment(node, reactPragma, fragmentPragma)) {
161132
checkNode(node);
162133
}
163134
},

lib/util/jsx.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,35 @@ function isDOMComponent(node) {
2525
return COMPAT_TAG_REGEX.test(name);
2626
}
2727

28+
/**
29+
* Test whether a JSXElement is a fragment
30+
* @param {JSXElement} node
31+
* @param {string} reactPragma
32+
* @param {string} fragmentPragma
33+
* @returns {boolean}
34+
*/
35+
function isFragment(node, reactPragma, fragmentPragma) {
36+
const name = node.openingElement.name;
37+
38+
// <Fragment>
39+
if (name.type === 'JSXIdentifier' && name.name === fragmentPragma) {
40+
return true;
41+
}
42+
43+
// <React.Fragment>
44+
if (
45+
name.type === 'JSXMemberExpression'
46+
&& name.object.type === 'JSXIdentifier'
47+
&& name.object.name === reactPragma
48+
&& name.property.type === 'JSXIdentifier'
49+
&& name.property.name === fragmentPragma
50+
) {
51+
return true;
52+
}
53+
54+
return false;
55+
}
56+
2857
/**
2958
* Checks if a node represents a JSX element or fragment.
3059
* @param {object} node - node to check.
@@ -36,5 +65,6 @@ function isJSX(node) {
3665

3766
module.exports = {
3867
isDOMComponent: isDOMComponent,
68+
isFragment,
3969
isJSX: isJSX
4070
};

0 commit comments

Comments
 (0)