diff --git a/lib/rules/jsx-no-useless-fragment.js b/lib/rules/jsx-no-useless-fragment.js index 641ba8239f..b1309e2347 100644 --- a/lib/rules/jsx-no-useless-fragment.js +++ b/lib/rules/jsx-no-useless-fragment.js @@ -172,7 +172,8 @@ module.exports = { return function fix(fixer) { const opener = node.type === 'JSXFragment' ? node.openingFragment : node.openingElement; const closer = node.type === 'JSXFragment' ? node.closingFragment : node.closingElement; - const childrenText = context.getSourceCode().getText().slice(opener.range[1], closer.range[0]); + + const childrenText = opener.selfClosing ? '' : context.getSourceCode().getText().slice(opener.range[1], closer.range[0]); return fixer.replaceText(node, trimLikeReact(childrenText)); }; diff --git a/tests/lib/rules/jsx-no-useless-fragment.js b/tests/lib/rules/jsx-no-useless-fragment.js index 9349fd2a6d..9d6337cd7f 100644 --- a/tests/lib/rules/jsx-no-useless-fragment.js +++ b/tests/lib/rules/jsx-no-useless-fragment.js @@ -27,7 +27,7 @@ const parserOptions = { const ruleTester = new RuleTester({parserOptions}); -ruleTester.run('jsx-no-uselses-fragment', rule, { +ruleTester.run('jsx-no-useless-fragment', rule, { valid: [ { code: '<>', @@ -201,6 +201,23 @@ ruleTester.run('jsx-no-uselses-fragment', rule, { output: '
a {""}{""} a
', errors: [{messageId: 'ChildOfHtmlElement'}], parser: parsers.BABEL_ESLINT + }, + { + code: ` + const Comp = () => ( + + + + ); + `, + output: ` + const Comp = () => ( + + ${/* the trailing whitespace here is intentional */ ''} + + ); + `, + errors: [{messageId: 'NeedsMoreChidren'}, {messageId: 'ChildOfHtmlElement'}] } ] });