Skip to content

Commit a5506a9

Browse files
Only re-apply string escaping when necessary (#295)
* Simplify test * Only apply escaping when necessary
1 parent ec92b76 commit a5506a9

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

src/index.ts

+21-2
Original file line numberDiff line numberDiff line change
@@ -467,18 +467,37 @@ function sortStringLiteral(
467467
})
468468
let didChange = result !== node.value
469469
node.value = result
470+
471+
// A string literal was escaped if:
472+
// - There are backslashes in the raw value; AND
473+
// - The raw value is not the same as the value (excluding the surrounding quotes)
474+
let wasEscaped = false
475+
476+
if (node.extra) {
477+
// JavaScript (StringLiteral)
478+
wasEscaped =
479+
node.extra?.rawValue.includes('\\') &&
480+
node.extra?.raw.slice(1, -1) !== node.value
481+
} else {
482+
// TypeScript (Literal)
483+
wasEscaped =
484+
node.value.includes('\\') && node.raw.slice(1, -1) !== node.value
485+
}
486+
487+
let escaped = wasEscaped ? result.replace(/\\/g, '\\\\') : result
488+
470489
if (node.extra) {
471490
// JavaScript (StringLiteral)
472491
let raw = node.extra.raw
473492
node.extra = {
474493
...node.extra,
475494
rawValue: result,
476-
raw: raw[0] + result.replace(/\\/g, '\\\\') + raw.slice(-1),
495+
raw: raw[0] + escaped + raw.slice(-1),
477496
}
478497
} else {
479498
// TypeScript (Literal)
480499
let raw = node.raw
481-
node.raw = raw[0] + result.replace(/\\/g, '\\\\') + raw.slice(-1)
500+
node.raw = raw[0] + escaped + raw.slice(-1)
482501
}
483502
return didChange
484503
}

tests/format.test.js

+3-8
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,10 @@ let javascript = [
9494
';<div class={`flex ` + ` ` + `text-red-500`} />',
9595
';<div class={`flex ` + ` ` + `text-red-500`} />',
9696
],
97-
[
98-
`;<div class={"before:content-['\\\\2248']"} />`,
99-
`;<div class={"before:content-['\\\\2248']"} />`,
100-
],
10197

102-
[
103-
`;<div class={\`before:content-['\\\\2248']\`} />`,
104-
`;<div class={\`before:content-['\\\\2248']\`} />`,
105-
],
98+
t`;<div class={"before:content-['\\\\2248']"} />`,
99+
t`;<div class={\`before:content-['\\\\2248']\`} />`,
100+
t`;<div class="before:content-['\\\\2248']" />`,
106101

107102
[
108103
`;<div class={'object-cover' + (standalone ? ' aspect-square w-full' : ' min-h-0 grow basis-0')}></div>`,

0 commit comments

Comments
 (0)