diff --git a/lib/rules/jsx-wrap-multilines.js b/lib/rules/jsx-wrap-multilines.js index de85d89ac3..53434daf3f 100644 --- a/lib/rules/jsx-wrap-multilines.js +++ b/lib/rules/jsx-wrap-multilines.js @@ -162,7 +162,7 @@ module.exports = { node, MISSING_PARENS, fixer => fixer.replaceTextRange( - [tokenBefore.range[0], tokenAfter.range[0]], + [tokenBefore.range[0], tokenAfter ? tokenAfter.range[0] : node.range[1]], `${trimTokenBeforeNewline(node, tokenBefore)}(\n${sourceCode.getText(node)}\n)` ) ); diff --git a/tests/lib/rules/jsx-wrap-multilines.js b/tests/lib/rules/jsx-wrap-multilines.js index f0f6e0d9a6..04c4afca65 100644 --- a/tests/lib/rules/jsx-wrap-multilines.js +++ b/tests/lib/rules/jsx-wrap-multilines.js @@ -26,6 +26,16 @@ const parserOptions = { const MISSING_PARENS = 'Missing parentheses around multilines JSX'; const PARENS_NEW_LINES = 'Parentheses around JSX should be on separate lines'; +const OPTIONS_ALL_NEW_LINES = { + declaration: 'parens-new-line', + assignment: 'parens-new-line', + return: 'parens-new-line', + arrow: 'parens-new-line', + condition: 'parens-new-line', + logical: 'parens-new-line', + prop: 'parens-new-line', +}; + const RETURN_SINGLE_LINE = ` var Hello = createReactClass({ render: function() { @@ -550,6 +560,19 @@ const ATTR_PAREN_NEW_LINE_AUTOFIX_FRAGMENT = ` `; +const SFC_NO_PARENS_NO_NEWLINE = ` +export default () => +
+ with newline without parentheses eslint crashes +
`; + +const SFC_NO_PARENS_AUTOFIX = ` +export default () => ( +
+ with newline without parentheses eslint crashes +
+)`; + function addNewLineSymbols(code) { return code.replace(/\(\)/g, '>\n)'); } @@ -1157,5 +1180,11 @@ ruleTester.run('jsx-wrap-multilines', rule, { output: ATTR_PAREN_NEW_LINE_AUTOFIX_FRAGMENT, options: [{prop: 'parens-new-line'}], errors: [{message: MISSING_PARENS}] + }, + { + code: SFC_NO_PARENS_NO_NEWLINE, + output: SFC_NO_PARENS_AUTOFIX, + options: [OPTIONS_ALL_NEW_LINES], + errors: [{message: MISSING_PARENS}] }] });