diff --git a/agent/claude-code/.claude-plugin/plugin.json b/agent/claude-code/.claude-plugin/plugin.json index 2e4a6d0..709b1bb 100644 --- a/agent/claude-code/.claude-plugin/plugin.json +++ b/agent/claude-code/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "oxlint-tailwindcss", "displayName": "oxlint-tailwindcss", - "version": "1.15.1", + "version": "1.16.0", "description": "Tailwind CSS v4 lint rules for oxlint, in Claude Code: diagnostics as Claude edits, a check of the files it edited before it finishes, and a skill for setting the plugin up.", "author": { "name": "Sergio Azocar", "url": "https://github.com/sergioazoc" }, "homepage": "https://oxlint-tailwindcss.pages.dev/ai-agents", diff --git a/bench/results/latest.json b/bench/results/latest.json index 7f6f7a1..d2a7d8f 100644 --- a/bench/results/latest.json +++ b/bench/results/latest.json @@ -15,7 +15,7 @@ "tools": { "tailwindcss": { "name": "oxlint-tailwindcss", - "version": "1.15.1", + "version": "1.16.0", "config": "otw-all" }, "shadcn": { @@ -1570,8 +1570,8 @@ "tailwindcss/no-borrowed-component-styles": 1, "tailwindcss/no-dark-without-light": 1 }, - "warmMs": 1301, - "coldMs": 9927 + "warmMs": 1460, + "coldMs": 9062 }, "recommended": { "config": "otw-recommended", @@ -1592,8 +1592,8 @@ "tailwindcss/enforce-negative-arbitrary-values": 1, "tailwindcss/no-dark-without-light": 1 }, - "warmMs": 1175, - "coldMs": 9919 + "warmMs": 1148, + "coldMs": 9256 } }, "shadcn": { @@ -1610,7 +1610,7 @@ "shadcn/no-inline-styles": 33, "shadcn/require-static-classes": 3 }, - "warmMs": 1071 + "warmMs": 1042 } }, "better-tailwindcss": { @@ -1630,7 +1630,7 @@ "better-tailwindcss/enforce-consistent-variable-syntax": 4, "better-tailwindcss/no-concatenated-classes": 1 }, - "warmMs": 28213 + "warmMs": 26827 }, "recommended": { "config": "btw-recommended", @@ -1643,7 +1643,7 @@ "better-tailwindcss/no-deprecated-classes": 11, "better-tailwindcss/no-concatenated-classes": 1 }, - "warmMs": 24379 + "warmMs": 25765 } } }, diff --git a/packages/docs/benchmark.md b/packages/docs/benchmark.md index b33396e..9705641 100644 --- a/packages/docs/benchmark.md +++ b/packages/docs/benchmark.md @@ -17,7 +17,7 @@ writes; a weekly job checks that a fresh run still agrees with it. - **Corpus**: [shadcn-ui/ui `apps/v4`](https://github.com/shadcn-ui/ui/tree/98a1fe67b439324ddc857f47fbdce056600a4329/apps/v4) @ `98a1fe67`, 880 files -- **Versions**: oxlint-tailwindcss 1.15.1, @shadcn/lint 0.2.0, eslint-plugin-better-tailwindcss +- **Versions**: oxlint-tailwindcss 1.16.0, @shadcn/lint 0.2.0, eslint-plugin-better-tailwindcss 4.9.0; oxlint 1.87.0, tailwindcss 4.3.3 - **Machine**: Apple M4 Pro, 12 cores, darwin 25.5.0, Node 24.19.0; median of 5 runs @@ -35,11 +35,11 @@ them, like the other two. | Tool | Rules | Warm run | Cold run | Diagnostics | | -------------------------------- | ----------- | -------- | -------- | ----------- | -| oxlint-tailwindcss | all | 1.3 s | 9.9 s | 3,264 | -| oxlint-tailwindcss | recommended | 1.2 s | 9.9 s | 352 | -| @shadcn/lint | all | 1.1 s | — | 2,578 | -| eslint-plugin-better-tailwindcss | all | 28.2 s | — | 6,284 | -| eslint-plugin-better-tailwindcss | recommended | 24.4 s | — | 705 | +| oxlint-tailwindcss | all | 1.5 s | 9.1 s | 3,264 | +| oxlint-tailwindcss | recommended | 1.1 s | 9.3 s | 352 | +| @shadcn/lint | all | 1.0 s | — | 2,578 | +| eslint-plugin-better-tailwindcss | all | 26.8 s | — | 6,284 | +| eslint-plugin-better-tailwindcss | recommended | 25.8 s | — | 705 | diff --git a/packages/docs/comparison.md b/packages/docs/comparison.md index 7143ef0..f148dbf 100644 --- a/packages/docs/comparison.md +++ b/packages/docs/comparison.md @@ -16,11 +16,11 @@ below are the [benchmark](/benchmark)'s, generated from the same results file. -| Summary | oxlint-tailwindcss 1.15.1 | @shadcn/lint 0.2.0 | eslint-plugin-better-tailwindcss 4.9.0 | +| Summary | oxlint-tailwindcss 1.16.0 | @shadcn/lint 0.2.0 | eslint-plugin-better-tailwindcss 4.9.0 | | --------------------------------------- | ------------------------- | ------------------ | -------------------------------------- | | Seeded mistakes caught | 50/56 | 34/56 | 20/56 | | False alarms on clean lines | 0/6 | 0/6 | 0/6 | -| Warm run, all rules | 1.3 s | 1.1 s | 28.2 s | +| Warm run, all rules | 1.5 s | 1.0 s | 26.8 s | | Unknown-class reports Tailwind compiles | 0/77 | 0/34 | 0/97 | | `--fix`: strings whose style changed | 0/1,028 | no autofix | 1/2,865 | diff --git a/packages/docs/es/benchmark.md b/packages/docs/es/benchmark.md index 783490b..e09cbdb 100644 --- a/packages/docs/es/benchmark.md +++ b/packages/docs/es/benchmark.md @@ -18,7 +18,7 @@ job semanal comprueba que una corrida nueva siga de acuerdo con él. - **Corpus**: [shadcn-ui/ui `apps/v4`](https://github.com/shadcn-ui/ui/tree/98a1fe67b439324ddc857f47fbdce056600a4329/apps/v4) @ `98a1fe67`, 880 archivos -- **Versiones**: oxlint-tailwindcss 1.15.1, @shadcn/lint 0.2.0, eslint-plugin-better-tailwindcss +- **Versiones**: oxlint-tailwindcss 1.16.0, @shadcn/lint 0.2.0, eslint-plugin-better-tailwindcss 4.9.0; oxlint 1.87.0, tailwindcss 4.3.3 - **Máquina**: Apple M4 Pro, 12 cores, darwin 25.5.0, Node 24.19.0; mediana de 5 corridas @@ -37,11 +37,11 @@ las otras dos. | Herramienta | Reglas | En caliente | En frío | Diagnósticos | | -------------------------------- | ------------ | ----------- | ------- | ------------ | -| oxlint-tailwindcss | todas | 1,3 s | 9,9 s | 3264 | -| oxlint-tailwindcss | recomendadas | 1,2 s | 9,9 s | 352 | -| @shadcn/lint | todas | 1,1 s | — | 2578 | -| eslint-plugin-better-tailwindcss | todas | 28,2 s | — | 6284 | -| eslint-plugin-better-tailwindcss | recomendadas | 24,4 s | — | 705 | +| oxlint-tailwindcss | todas | 1,5 s | 9,1 s | 3264 | +| oxlint-tailwindcss | recomendadas | 1,1 s | 9,3 s | 352 | +| @shadcn/lint | todas | 1,0 s | — | 2578 | +| eslint-plugin-better-tailwindcss | todas | 26,8 s | — | 6284 | +| eslint-plugin-better-tailwindcss | recomendadas | 25,8 s | — | 705 | diff --git a/packages/docs/es/comparison.md b/packages/docs/es/comparison.md index 4c6d411..43a8598 100644 --- a/packages/docs/es/comparison.md +++ b/packages/docs/es/comparison.md @@ -17,11 +17,11 @@ resultados. -| Resumen | oxlint-tailwindcss 1.15.1 | @shadcn/lint 0.2.0 | eslint-plugin-better-tailwindcss 4.9.0 | +| Resumen | oxlint-tailwindcss 1.16.0 | @shadcn/lint 0.2.0 | eslint-plugin-better-tailwindcss 4.9.0 | | ---------------------------------------- | ------------------------- | ------------------ | -------------------------------------- | | Errores sembrados atrapados | 50/56 | 34/56 | 20/56 | | Falsas alarmas en líneas limpias | 0/6 | 0/6 | 0/6 | -| En caliente, todas las reglas | 1,3 s | 1,1 s | 28,2 s | +| En caliente, todas las reglas | 1,5 s | 1,0 s | 26,8 s | | Clases desconocidas que Tailwind compila | 0/77 | 0/34 | 0/97 | | `--fix`: strings cuyo estilo cambió | 0/1028 | sin autofix | 1/2865 | diff --git a/packages/oxlint-tailwindcss/CHANGELOG.md b/packages/oxlint-tailwindcss/CHANGELOG.md index c8fa5cf..8a45672 100644 --- a/packages/oxlint-tailwindcss/CHANGELOG.md +++ b/packages/oxlint-tailwindcss/CHANGELOG.md @@ -1,15 +1,25 @@ # Changelog -## Unreleased - -- **`enforce-consistent-line-wrapping` wraps JS strings too, with `wrapStrings: "all"` (#216).** A - class string that has to wrap in `cn("…")`, `className={"…"}`, an array, a `cva` / `tv` value, a - ternary or `&&` branch, or a variable's value becomes a template literal with the block layout, as - eslint-plugin-better-tailwindcss does, and a JSX attribute's own string is still wrapped in place. - An object key, a `+` operand, and a string holding an escape sequence, a backtick or `${` keep - reporting without a fix. It's opt-in because the string's value gains the newlines and the - indentation; `"jsx"` and the default `"never"` are unchanged. -- **Docs: migrating from eslint-plugin-tailwindcss.** A guide like the better-tailwindcss one: +## 1.16.0 + +`enforce-consistent-line-wrapping` can now wrap every class string the way +eslint-plugin-better-tailwindcss does, JS strings included. The docs also gain a migration guide for +eslint-plugin-tailwindcss, the most-used Tailwind lint plugin. Nothing changes with the same config. + +### Features + +- **`enforce-consistent-line-wrapping` wraps JS strings too, with `wrapStrings: "all"` (#216, + #232).** A class string that has to wrap in `cn("…")`, `className={"…"}`, an array, a `cva` / `tv` + value, a ternary or `&&` branch, or a variable's value becomes a template literal with the block + layout, as eslint-plugin-better-tailwindcss does, and a JSX attribute's own string is still + wrapped in place. An object key, a `+` operand, and a string holding an escape sequence, a + backtick or `${` keep reporting without a fix. It's opt-in because the string's value gains the + newlines and the indentation; `"jsx"` and the default `"never"` are unchanged. If oxfmt sorts your + classes, set its `preserveWhitespace: true`, or it puts the template back on one line. + +### Documentation + +- **Migrating from eslint-plugin-tailwindcss (#233).** A guide like the better-tailwindcss one: eslint-plugin-tailwindcss 4.4.0's 9 rules and its settings mapped to this plugin's, what differs, and the switch from an ESLint config to `.oxlintrc.json`. Every row's example is checked every week, against the pinned version and the latest one. diff --git a/packages/oxlint-tailwindcss/package.json b/packages/oxlint-tailwindcss/package.json index e8c1b02..91e2182 100644 --- a/packages/oxlint-tailwindcss/package.json +++ b/packages/oxlint-tailwindcss/package.json @@ -1,6 +1,6 @@ { "name": "oxlint-tailwindcss", - "version": "1.15.1", + "version": "1.16.0", "description": "Tailwind CSS v4 lint rules for oxlint that read your design system: unknown, conflicting and deprecated classes, theme colors, class order — with autofixes.", "keywords": [ "classnames",