Skip to content

Commit

Permalink
Refactor: move codes
Browse files Browse the repository at this point in the history
  • Loading branch information
golopot committed May 16, 2019
1 parent 4bdeb5c commit 17cc2c7
Showing 1 changed file with 49 additions and 46 deletions.
95 changes: 49 additions & 46 deletions lib/rules/jsx-no-useless-fragment.js
Expand Up @@ -6,51 +6,6 @@
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, context) {
const name = node.openingElement.name;
const reactPragma = pragmaUtil.getFromContext(context);
const fragmentPragma = pragmaUtil.getFragmentFromContext(context);

// <Fragment>
if (
name.type === 'JSXIdentifier'
&& name.name === fragmentPragma
) {
return true;
}

// <React.Fragment>
if (
name.type === 'JSXMemberExpression'
&& name.object.type === 'JSXIdentifier'
&& name.object.name === reactPragma
&& name.property.type === 'JSXIdentifier'
&& name.property.name === fragmentPragma
) {
return true;
}

return false;
}


/**
* Test whether a node is an padding spaces trimmed by react runtime.
* @param {ASTNode} node
* @returns {boolean}
*/
function isPaddingSpaces(node) {
return (node.type === 'JSXText' || node.type === 'Literal')
&& /^\s*$/.test(node.raw)
&& node.raw.includes('\n');
}


module.exports = {
meta: {
Expand All @@ -68,6 +23,54 @@ module.exports = {
},

create(context) {
const reactPragma = pragmaUtil.getFromContext(context);
const fragmentPragma = pragmaUtil.getFragmentFromContext(context);

/**
* Test whether a JSXElement is a fragment
* @param {JSXElement} node
* @returns {boolean}
*/
function isFragment(node) {
const name = node.openingElement.name;

// <Fragment>
if (
name.type === 'JSXIdentifier'
&& name.name === fragmentPragma
) {
return true;
}

// <React.Fragment>
if (
name.type === 'JSXMemberExpression'
&& name.object.type === 'JSXIdentifier'
&& name.object.name === reactPragma
&& name.property.type === 'JSXIdentifier'
&& name.property.name === fragmentPragma
) {
return true;
}

return false;
}

/**
* Test whether a node is an padding spaces trimmed by react runtime.
* @param {ASTNode} node
* @returns {boolean}
*/
function isPaddingSpaces(node) {
return (node.type === 'JSXText' || node.type === 'Literal')
&& /^\s*$/.test(node.raw)
&& node.raw.includes('\n');
}

/**
* Test whether a JSXElement has less than two children, excluding paddings spaces.
* @param {JSXElement|JSXFragment} node
*/
function hasLessThanTwoChildren(node) {
if (node.children.length < 2) {
return true;
Expand Down Expand Up @@ -108,7 +111,7 @@ module.exports = {

return {
JSXElement(node) {
if (isFragment(node, context)) {
if (isFragment(node)) {
checkNode(node);
}
},
Expand Down

0 comments on commit 17cc2c7

Please sign in to comment.