Skip to content

Commit 35f09fc

Browse files
authored
Handle empty class attributes (#17)
* Handle empty class attributes * Add test cases
1 parent 0454a04 commit 35f09fc

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

src/index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ function sortClasses(
4141
classStr,
4242
{ env, ignoreFirst = false, ignoreLast = false }
4343
) {
44+
if (typeof classStr !== 'string' || classStr === '') {
45+
return classStr
46+
}
47+
4448
// Ignore class attributes containing `{{`, to match Prettier behaviour:
4549
// https://github.com/prettier/prettier/blob/main/src/language-html/embed.js#L83-L88
4650
if (classStr.includes('{{')) {
@@ -268,6 +272,9 @@ function sortTemplateLiteral(node, { env }) {
268272
function transformJavaScript(ast, { env }) {
269273
visit(ast, {
270274
JSXAttribute(node) {
275+
if (!node.value) {
276+
return
277+
}
271278
if (['class', 'className'].includes(node.name.name)) {
272279
if (isStringLiteral(node.value)) {
273280
sortStringLiteral(node.value, { env })

tests/test.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ let html = [
5050
t`<div class="${no} {{ 'p-0 sm:p-0 m-0' }}"></div>`,
5151
t`<div not-class="${no}"></div>`,
5252
['<div class=" sm:p-0 p-0 "></div>', '<div class="p-0 sm:p-0"></div>'],
53+
t`<div class></div>`,
54+
t`<div class=""></div>`,
5355
]
5456

5557
let css = [
@@ -72,6 +74,8 @@ let javascript = [
7274
t`;<div class={clsx('${yes}', ['${yes}'])} />`,
7375
t`;<div class={clsx({ '${yes}': '${yes}' })} />`,
7476
t`;<div class={{ '${yes}': '${yes}' }['${yes}']} />`,
77+
t`;<div class />`,
78+
t`;<div class="" />`,
7579
[
7680
`;<div class={\`sm:block inline flex\${someVar}\`} />`,
7781
`;<div class={\`inline sm:block flex\${someVar}\`} />`,
@@ -86,13 +90,15 @@ let javascript = [
8690
],
8791
]
8892
javascript = javascript.concat(
89-
javascript.map((test) => test.map((t) => t.replace(/class=/g, 'className=')))
93+
javascript.map((test) => test.map((t) => t.replace(/class/g, 'className')))
9094
)
9195

9296
let vue = [
9397
...html,
9498
t`<div :class="'${yes}'"></div>`,
9599
t`<!-- <div :class="'${no}'"></div> -->`,
100+
t`<div :class></div>`,
101+
t`<div :class=""></div>`,
96102
t`<div :class="'${yes}' + '${yes}'"></div>`,
97103
t`<div :class="['${yes}', '${yes}']"></div>`,
98104
t`<div :class="[cond ? '${yes}' : '${yes}']"></div>`,
@@ -139,6 +145,8 @@ let tests = {
139145
meriyah: javascript,
140146
svelte: [
141147
t`<div class="${yes}" />`,
148+
t`<div class />`,
149+
t`<div class="" />`,
142150
t`<div class="${yes} {someVar}" />`,
143151
t`<div class="{someVar} ${yes}" />`,
144152
t`<div class="${yes} {someVar} ${yes}" />`,

0 commit comments

Comments
 (0)