Skip to content

Commit ffe843a

Browse files
committed
Fix angular expression parsing with concat statements
1 parent 9d58143 commit ffe843a

File tree

3 files changed

+15
-19
lines changed

3 files changed

+15
-19
lines changed

src/index.ts

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -109,30 +109,23 @@ function transformDynamicAngularAttribute(attr: any, env: TransformerEnv) {
109109
StringLiteral(node, path) {
110110
if (!node.value) return
111111

112-
let concat = path.find((entry) => {
113-
return entry.parent && entry.parent.type === 'BinaryExpression' && entry.parent.operator === '+'
114-
})
112+
let collapseWhitespace = canCollapseWhitespaceIn(path)
115113

116114
changes.push({
117115
start: node.start + 1,
118116
end: node.end - 1,
119117
before: node.value,
120118
after: sortClasses(node.value, {
121119
env,
122-
collapseWhitespace: {
123-
start: concat?.key !== 'right',
124-
end: concat?.key !== 'left',
125-
},
120+
collapseWhitespace,
126121
}),
127122
})
128123
},
129124

130125
TemplateLiteral(node, path) {
131126
if (!node.quasis.length) return
132127

133-
let concat = path.find((entry) => {
134-
return entry.parent && entry.parent.type === 'BinaryExpression' && entry.parent.operator === '+'
135-
})
128+
let collapseWhitespace = canCollapseWhitespaceIn(path)
136129

137130
for (let i = 0; i < node.quasis.length; i++) {
138131
let quasi = node.quasis[i]
@@ -720,16 +713,11 @@ function transformJavaScript(ast: import('@babel/types').Node, { env }: Transfor
720713
return
721714
}
722715

723-
let concat = path.find((entry) => {
724-
return entry.parent && entry.parent.type === 'BinaryExpression' && entry.parent.operator === '+'
725-
})
716+
let collapseWhitespace = canCollapseWhitespaceIn(path)
726717

727718
sortTemplateLiteral(node.quasi, {
728719
env,
729-
collapseWhitespace: {
730-
start: concat?.key !== 'right',
731-
end: concat?.key !== 'left',
732-
},
720+
collapseWhitespace,
733721
})
734722
},
735723
})

tests/format.test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ describe('whitespace', () => {
6666
expect(result).toEqual(";<div className={a + ' p-4 ' + b}></div>")
6767
})
6868

69+
test('whitespace is not trimmed inside concat expressions (angular)', async ({ expect }) => {
70+
let result = await format(`<ul [class]="'pagination' + (size ? ' pagination-' + size : '')"></ul>`, {
71+
parser: 'angular',
72+
})
73+
74+
expect(result).toEqual(`<ul [class]="'pagination' + (size ? ' pagination-' + size : '')"></ul>`)
75+
})
76+
6977
test('whitespace is not trimmed inside adjacent-before/after template expressions', async ({ expect }) => {
7078
let result = await format(";<div className={`header${isExtendable ? ' header-extendable' : ''}`} />", {
7179
parser: 'babel',

tests/tests.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ export let tests: Record<string, TestEntry[]> = {
208208

209209
[
210210
`<div [ngClass]="' flex ' + ' underline ' + ' block '"></div>`,
211-
`<div [ngClass]="'flex ' + ' underline' + ' block'"></div>`,
211+
`<div [ngClass]="'flex ' + ' underline ' + ' block'"></div>`,
212212
],
213213

214214
// TODO: Enable this test — it causes console noise but not a failure
@@ -238,7 +238,7 @@ export let tests: Record<string, TestEntry[]> = {
238238
...css,
239239
t`@apply ${yes} !important;`,
240240
t`@apply ~"${yes}";`,
241-
t`@apply ~'${yes}';`
241+
t`@apply ~'${yes}';`,
242242
],
243243
babel: javascript,
244244
typescript: javascript,

0 commit comments

Comments
 (0)