From d2a131a26e71f3ac84d9a99209432a94d0e257f7 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Mon, 29 Jun 2020 12:47:25 -0700 Subject: [PATCH] [Fix] `jsx-no-useless-fragment`: avoid a crash when autofixing a self-closing React.Fragment Fixes #2680. --- lib/rules/jsx-no-useless-fragment.js | 3 ++- tests/lib/rules/jsx-no-useless-fragment.js | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) 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'}] } ] });