From 2ed84e39c088a6cfbf19eb262bc0dd1740c48be2 Mon Sep 17 00:00:00 2001 From: Aleksei Androsov Date: Sat, 5 Oct 2019 15:42:19 +0300 Subject: [PATCH] [fix] `jsx-curly-brace-presence`: allow trailing spaces in literal `jsx-curly-brace-presence` with `never` reports invalid errors in following cases ``` {' space before or after '} ``` ``` {'space after '} link {' space before'} ``` --- lib/rules/jsx-curly-brace-presence.js | 9 ++++++++- tests/lib/rules/jsx-curly-brace-presence.js | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/rules/jsx-curly-brace-presence.js b/lib/rules/jsx-curly-brace-presence.js index c15e146ad7..3f54dcc63f 100755 --- a/lib/rules/jsx-curly-brace-presence.js +++ b/lib/rules/jsx-curly-brace-presence.js @@ -174,6 +174,10 @@ module.exports = { return node.type && node.type === 'Literal' && node.value && jsxUtil.isWhiteSpaces(node.value); } + function isLiteralWithTrailingWhiteSpaces(node) { + return node.type && node.type === 'Literal' && node.value && /^\s|\s$/.test(node.value); + } + // Bail out if there is any character that needs to be escaped in JSX // because escaping decreases readiblity and the original code may be more // readible anyway or intentional for other specific reasons @@ -184,7 +188,10 @@ module.exports = { if ( (expressionType === 'Literal' || expressionType === 'JSXText') && typeof expression.value === 'string' && - !isWhiteSpaceLiteral(expression) && + ( + (expression.parent.parent.type === 'JSXAttribute' && !isWhiteSpaceLiteral(expression)) || + !isLiteralWithTrailingWhiteSpaces(expression) + ) && !needToEscapeCharacterForJSX(expression.raw) && ( jsxUtil.isJSX(JSXExpressionNode.parent) || !containsQuoteCharacters(expression.value) diff --git a/tests/lib/rules/jsx-curly-brace-presence.js b/tests/lib/rules/jsx-curly-brace-presence.js index 0d5a274427..380d06f787 100755 --- a/tests/lib/rules/jsx-curly-brace-presence.js +++ b/tests/lib/rules/jsx-curly-brace-presence.js @@ -269,6 +269,14 @@ ruleTester.run('jsx-curly-brace-presence', rule, { code: '{"Hello \\n world"}', options: ['never'] }, + { + code: '{"space after "}', + options: ['never'] + }, + { + code: '{" space before"}', + options: ['never'] + }, { code: [''].join('/n'), options: ['never'] @@ -320,6 +328,17 @@ ruleTester.run('jsx-curly-brace-presence', rule, { parser: parsers.BABEL_ESLINT, options: [{children: 'never'}] }, + { + code: ` + + { 'space after ' } + foo + { ' space before' } + + `, + parser: parsers.BABEL_ESLINT, + options: [{children: 'never'}] + }, { code: `