Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion agent/claude-code/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
16 changes: 8 additions & 8 deletions bench/results/latest.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
"tools": {
"tailwindcss": {
"name": "oxlint-tailwindcss",
"version": "1.15.1",
"version": "1.16.0",
"config": "otw-all"
},
"shadcn": {
Expand Down Expand Up @@ -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",
Expand All @@ -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": {
Expand All @@ -1610,7 +1610,7 @@
"shadcn/no-inline-styles": 33,
"shadcn/require-static-classes": 3
},
"warmMs": 1071
"warmMs": 1042
}
},
"better-tailwindcss": {
Expand All @@ -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",
Expand All @@ -1643,7 +1643,7 @@
"better-tailwindcss/no-deprecated-classes": 11,
"better-tailwindcss/no-concatenated-classes": 1
},
"warmMs": 24379
"warmMs": 25765
}
}
},
Expand Down
12 changes: 6 additions & 6 deletions packages/docs/benchmark.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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 |

<!-- /generated:bench-speed -->

Expand Down
4 changes: 2 additions & 2 deletions packages/docs/comparison.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ below are the [benchmark](/benchmark)'s, generated from the same results file.

<!-- generated:comparison-summary -->

| 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 |

Expand Down
12 changes: 6 additions & 6 deletions packages/docs/es/benchmark.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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 |

<!-- /generated:bench-speed -->

Expand Down
4 changes: 2 additions & 2 deletions packages/docs/es/comparison.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ resultados.

<!-- generated:comparison-summary -->

| 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 |

Expand Down
30 changes: 20 additions & 10 deletions packages/oxlint-tailwindcss/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
2 changes: 1 addition & 1 deletion packages/oxlint-tailwindcss/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
Loading