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: `