diff --git a/CHANGELOG.md b/CHANGELOG.md index d8b95aa600..ba18b5def3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ This change log adheres to standards from [Keep a CHANGELOG](https://keepachange ### Fixed * [`require-default-props`]: fix config schema ([#3605][] @controversial) +* [`jsx-curly-brace-presence`]: Revert [#3538][] due to issues with intended string type casting usage ([#3611][] @taozhou-glean) +[#3611]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3611 [#3605]: https://github.com/jsx-eslint/eslint-plugin-react/pull/3605 ## [7.33.0] - 2023.07.19 diff --git a/lib/rules/jsx-curly-brace-presence.js b/lib/rules/jsx-curly-brace-presence.js index 28b72e86eb..c7b3e55d2e 100755 --- a/lib/rules/jsx-curly-brace-presence.js +++ b/lib/rules/jsx-curly-brace-presence.js @@ -131,10 +131,6 @@ module.exports = { return containsLineTerminators(text) && text.trim() === ''; } - function isSingleExpressionTemplateLiteral(child) { - return child.type === 'TemplateLiteral' && child.expressions.length === 1 && child.quasis.map((quasis) => quasis.value.raw).join('') === ''; - } - function wrapNonHTMLEntities(text) { const HTML_ENTITY = ''; const withCurlyBraces = text.split(HTML_ENTITY_REGEX()).map((word) => ( @@ -181,9 +177,6 @@ module.exports = { if (jsxUtil.isJSX(expression)) { const sourceCode = context.getSourceCode(); textToReplace = sourceCode.getText(expression); - } else if (isSingleExpressionTemplateLiteral(expression)) { - const sourceCode = context.getSourceCode(); - textToReplace = `{${sourceCode.getText(expression.expressions[0])}}`; } else { const expressionType = expression && expression.type; const parentType = JSXExpressionNode.parent.type; @@ -286,9 +279,6 @@ module.exports = { && !containsQuoteCharacters(expression.quasis[0].value.cooked) ) { reportUnnecessaryCurly(JSXExpressionNode); - } else if ( - isSingleExpressionTemplateLiteral(expression)) { - reportUnnecessaryCurly(JSXExpressionNode); } else if (jsxUtil.isJSX(expression)) { reportUnnecessaryCurly(JSXExpressionNode); } diff --git a/tests/lib/rules/jsx-curly-brace-presence.js b/tests/lib/rules/jsx-curly-brace-presence.js index 284d008bfd..a41b3ffb53 100755 --- a/tests/lib/rules/jsx-curly-brace-presence.js +++ b/tests/lib/rules/jsx-curly-brace-presence.js @@ -469,13 +469,14 @@ ruleTester.run('jsx-curly-brace-presence', rule, { features: ['no-ts'], options: ['never'], }, + // legit as this single template literal might be used for stringifying { - code: '', - options: [{ props: 'never' }], + code: '', + options: ['never'], }, { - code: '{`${label}${suffix}`}', - options: [{ children: 'never' }], + code: '{`${label}`}', + options: ['never'], } )), @@ -786,14 +787,14 @@ ruleTester.run('jsx-curly-brace-presence', rule, { }, { code: ` - a - b c - d + b c + d `, errors: [ @@ -801,8 +802,8 @@ ruleTester.run('jsx-curly-brace-presence', rule, { ], options: ['always'], output: ` - @@ -814,14 +815,14 @@ ruleTester.run('jsx-curly-brace-presence', rule, { }, { code: ` - a - b c - d + b c + d `, errors: [ @@ -829,8 +830,8 @@ ruleTester.run('jsx-curly-brace-presence', rule, { ], options: ['always'], output: ` - @@ -939,18 +940,6 @@ ruleTester.run('jsx-curly-brace-presence', rule, { errors: [{ messageId: 'unnecessaryCurly' }], options: [{ props: 'never', children: 'never', propElementValues: 'never' }], features: ['no-ts'], - }, - { - code: '', - output: '', - errors: [{ messageId: 'unnecessaryCurly' }], - options: [{ props: 'never', children: 'never', propElementValues: 'never' }], - }, - { - code: '{`${label}`}', - output: '{label}', - errors: [{ messageId: 'unnecessaryCurly' }], - options: [{ props: 'never', children: 'never', propElementValues: 'never' }], } )), });