Skip to content

Commit 37b7bee

Browse files
committed
feat: add prettier-plugin-classnames plugin
1 parent c001f44 commit 37b7bee

9 files changed

Lines changed: 136 additions & 34 deletions

File tree

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,15 @@
7070
"@ianvs/prettier-plugin-sort-imports": "^4.1.1",
7171
"@prettier/plugin-php": "^0.22.1",
7272
"@prettier/plugin-xml": "^3.2.2",
73+
"@prettier/sync": "^0.3.0",
7374
"@shufo/prettier-plugin-blade": "^1.13.4",
7475
"deepmerge": "^4.3.1",
7576
"local-pkg": "^0.4.3",
7677
"prettier-plugin-astro": "^0.12.3",
78+
"prettier-plugin-classnames": "^0.3.2",
7779
"prettier-plugin-ini": "^1.1.0",
7880
"prettier-plugin-jsdoc": "^1.3.0",
81+
"prettier-plugin-merge": "^0.5.1",
7982
"prettier-plugin-nginx": "^1.0.3",
8083
"prettier-plugin-packagejson": "^2.4.9",
8184
"prettier-plugin-prisma": "^5.0.0",
@@ -89,6 +92,7 @@
8992
"@total-typescript/ts-reset": "^0.5.1",
9093
"@tsconfig/node18": "^18.2.2",
9194
"@types/node": "^20.11.0",
95+
"@types/react": "^18.2.47",
9296
"@u3u/eslint-config": "^2.15.0",
9397
"@u3u/prettier-config": "link:",
9498
"dedent": "^1.5.1",

pnpm-lock.yaml

Lines changed: 64 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/index.ts

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,20 @@ export default defineConfig({
3434
],
3535

3636
plugins: [
37-
require.resolve('@ianvs/prettier-plugin-sort-imports'),
38-
require.resolve('prettier-plugin-sort-json'),
39-
require.resolve('prettier-plugin-packagejson'),
40-
require.resolve('prettier-plugin-jsdoc'),
41-
require.resolve('prettier-plugin-nginx'),
42-
require.resolve('prettier-plugin-ini'),
43-
require.resolve('prettier-plugin-sh'),
44-
require.resolve('prettier-plugin-sql'),
45-
require.resolve('@prettier/plugin-xml'),
46-
require.resolve('@prettier/plugin-php'),
47-
require.resolve('@shufo/prettier-plugin-blade'),
48-
require.resolve('prettier-plugin-prisma'),
49-
require.resolve('prettier-plugin-astro'),
50-
],
37+
'@ianvs/prettier-plugin-sort-imports',
38+
'prettier-plugin-sort-json',
39+
'prettier-plugin-packagejson',
40+
'prettier-plugin-jsdoc',
41+
'prettier-plugin-nginx',
42+
'prettier-plugin-ini',
43+
'prettier-plugin-sh',
44+
'prettier-plugin-sql',
45+
'@prettier/plugin-xml',
46+
'@prettier/plugin-php',
47+
'@shufo/prettier-plugin-blade',
48+
'prettier-plugin-prisma',
49+
'prettier-plugin-astro',
50+
].map((item) => require.resolve(item)),
5151

5252
// https://github.com/shufo/prettier-plugin-blade/tree/main?tab=readme-ov-file#options
5353
sortHtmlAttributes: 'alphabetical',

src/tw.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
import { extendConfig } from './utils';
22

3+
const tailwindAttributes = [
4+
//
5+
'class:list',
6+
'class',
7+
'tw',
8+
];
9+
310
const tailwindFunctions = [
411
//
512
'classed',
@@ -16,9 +23,16 @@ const tailwindFunctions = [
1623
];
1724

1825
export default extendConfig({
19-
plugins: [require.resolve('prettier-plugin-tailwindcss')],
26+
customAttributes: tailwindAttributes,
27+
customFunctions: tailwindFunctions,
2028

21-
tailwindAttributes: ['tw', 'class:list'],
29+
plugins: [
30+
//
31+
'prettier-plugin-tailwindcss',
32+
'prettier-plugin-classnames',
33+
'prettier-plugin-merge',
34+
].map((item) => require.resolve(item)),
2235

36+
tailwindAttributes,
2337
tailwindFunctions,
2438
});

test/__fixtures__/tw.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

test/__fixtures__/tw.tsx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const tw = String.raw
2+
const clsx = (...args: any) => args
3+
const twMerge = clsx
4+
const twJoin = clsx
5+
6+
export const classes = clsx(
7+
'px-4 py-2 text-base text-white rounded bg-blue-500',
8+
{
9+
'text-gray-100 bg-blue-700': true,
10+
},
11+
)
12+
13+
export const styles = {
14+
root: tw`dark:text-white text-md text-black`,
15+
base: twMerge(['z-[1] relative', twJoin('inset-0 absolute flex items-center')]),
16+
}
17+
18+
export function Callout({ children }: React.PropsWithChildren) {
19+
return (
20+
<label className="[view-transition-name:upload] mx-auto max-w-md cursor-pointer flex flex-col items-center justify-center gap-2 rounded-lg bg-white p-8 shadow-panel transition active:scale-95 border-2 border-dashed border-transparent can-hover:hover:border-primary hover:-translate-y-1">
21+
{children}
22+
</label>
23+
);
24+
}

test/__snapshots__/index.test.ts.snap

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,18 @@ export const styles = {
185185
root: tw\`text-md text-black dark:text-white\`,
186186
base: twMerge(['relative z-[1]', twJoin('absolute inset-0 flex items-center')]),
187187
};
188+
189+
export function Callout({ children }: React.PropsWithChildren) {
190+
return (
191+
<label
192+
className="shadow-panel can-hover:hover:border-primary mx-auto flex max-w-md cursor-pointer flex-col items-center justify-center
193+
gap-2 rounded-lg border-2 border-dashed border-transparent bg-white p-8 transition [view-transition-name:upload]
194+
hover:-translate-y-1 active:scale-95"
195+
>
196+
{children}
197+
</label>
198+
);
199+
}
188200
"
189201
`;
190202

test/index.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import path from 'node:path';
22
import { expect, it } from 'vitest';
33
import { format } from './format';
44

5-
const sortTailwindClassesFiles = ['tw.ts', 'test.astro', 'test.blade.php'];
5+
const sortTailwindClassesFiles = ['tw.tsx', 'test.astro', 'test.blade.php'];
66

77
it('should match snapshots', async () => {
88
const { globby } = await import('globby');

tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"compilerOptions": {
33
"allowJs": true,
4+
"jsx": "preserve",
45
"noEmit": true,
56
"resolveJsonModule": true
67
},

0 commit comments

Comments
 (0)