Skip to content

Commit 990daca

Browse files
committed
Fix an edge case
1 parent d3df38b commit 990daca

File tree

2 files changed

+42
-8
lines changed

2 files changed

+42
-8
lines changed

lib/rules/jsx-curly-brace-presence.js

+8-8
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ module.exports = {
8383

8484
let textToReplace;
8585
if (parentType === 'JSXAttribute') {
86-
textToReplace = expressionType === 'TemplateLiteral' ?
87-
`"${expression.quasis[0].value.raw}"` :
88-
`"${escapeDoubleQuotes(
86+
textToReplace = `"${escapeDoubleQuotes(
87+
expressionType === 'TemplateLiteral' ?
88+
expression.quasis[0].value.raw :
8989
expression.raw.substring(1, expression.raw.length - 1)
90-
)}"`;
90+
)}"`;
9191
} else {
9292
textToReplace = expressionType === 'TemplateLiteral' ?
9393
expression.quasis[0].value.cooked : expression.value;
@@ -122,15 +122,15 @@ module.exports = {
122122
if (
123123
expressionType === 'Literal' &&
124124
typeof expression.value === 'string' && (
125-
!containsBackslashForEscaping(expression.raw) ||
126-
parentType === 'JSXAttribute')
125+
parentType === 'JSXAttribute' ||
126+
!containsBackslashForEscaping(expression.raw))
127127
) {
128128
reportUnnecessaryCurly(JSXExpressionNode);
129129
} else if (
130130
expressionType === 'TemplateLiteral' &&
131131
expression.expressions.length === 0 && (
132-
!containsBackslashForEscaping(expression.quasis[0].value.raw) ||
133-
parentType === 'JSXAttribute')
132+
parentType === 'JSXAttribute' ||
133+
!containsBackslashForEscaping(expression.quasis[0].value.raw))
134134
) {
135135
reportUnnecessaryCurly(JSXExpressionNode);
136136
}

tests/lib/rules/jsx-curly-brace-presence.js

+34
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
9898
code: '<MyComponent>{<App/>}{"123"}</MyComponent>',
9999
options: [{children: 'never'}]
100100
},
101+
{
102+
code: '<App>{\"foo \'bar\' \\\"foo\\\" bar\"}</App>',
103+
options: [{children: 'never'}]
104+
},
101105
{
102106
code: '<MyComponent prop={\'bar\'}>foo</MyComponent>',
103107
options: [{props: 'always'}]
@@ -205,6 +209,12 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
205209
options: [{props: 'never'}],
206210
errors: [{message: unnecessaryCurlyMessage}]
207211
},
212+
{
213+
code: '<App prop={`foo "foo" bar`}>foo</App>',
214+
output: '<App prop="foo \\\"foo\\\" bar">foo</App>',
215+
options: [{props: 'never'}],
216+
errors: [{message: unnecessaryCurlyMessage}]
217+
},
208218
{
209219
code: '<App prop={`foo`}>foo</App>',
210220
output: '<App prop="foo">foo</App>',
@@ -217,6 +227,12 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
217227
options: [{children: 'never'}],
218228
errors: [{message: unnecessaryCurlyMessage}]
219229
},
230+
{
231+
code: '<App>{`foo "foo" bar`}</App>',
232+
output: '<App>foo "foo" bar</App>',
233+
options: [{children: 'never'}],
234+
errors: [{message: unnecessaryCurlyMessage}]
235+
},
220236
{
221237
code: '<MyComponent>{\'foo\'}</MyComponent>',
222238
output: '<MyComponent>foo</MyComponent>',
@@ -257,6 +273,24 @@ ruleTester.run('jsx-curly-brace-presence', rule, {
257273
options: [{props: 'always'}],
258274
errors: [{message: missingCurlyMessage}]
259275
},
276+
{
277+
code: '<MyComponent prop=\"foo \'bar\'\">foo</MyComponent>',
278+
output: '<MyComponent prop={\"foo \'bar\'\"}>foo</MyComponent>',
279+
options: [{props: 'always'}],
280+
errors: [{message: missingCurlyMessage}]
281+
},
282+
{
283+
code: '<MyComponent prop=\'foo "bar"\'>foo</MyComponent>',
284+
output: '<MyComponent prop={\"foo \\\"bar\\\"\"}>foo</MyComponent>',
285+
options: [{props: 'always'}],
286+
errors: [{message: missingCurlyMessage}]
287+
},
288+
{
289+
code: '<MyComponent prop=\"foo \'bar\'\">foo</MyComponent>',
290+
output: '<MyComponent prop={\"foo \'bar\'\"}>foo</MyComponent>',
291+
options: [{props: 'always'}],
292+
errors: [{message: missingCurlyMessage}]
293+
},
260294
{
261295
code: '<MyComponent>foo bar </MyComponent>',
262296
output: '<MyComponent>{\"foo bar \"}</MyComponent>',

0 commit comments

Comments
 (0)