Skip to content

Commit 4f30022

Browse files
committed
refactor: move function isFragment to utils/jsx.js
1 parent c3df913 commit 4f30022

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
@@ -5,6 +5,7 @@
55
'use strict';
66

77
const pragmaUtil = require('../util/pragma');
8+
const jsxUtil = require('../util/jsx');
89
const docsUrl = require('../util/docsUrl');
910

1011

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

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

159130
return {
160131
JSXElement(node) {
161-
if (isFragment(node)) {
132+
if (jsxUtil.isFragment(node, reactPragma, fragmentPragma)) {
162133
checkNode(node);
163134
}
164135
},

lib/util/jsx.js

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

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

3867
module.exports = {
3968
isDOMComponent,
69+
isFragment,
4070
isJSX
4171
};

0 commit comments

Comments
 (0)