diff --git a/.changeset/add-bippy-dependency.md b/.changeset/add-bippy-dependency.md deleted file mode 100644 index 9f0dbafe3e..0000000000 --- a/.changeset/add-bippy-dependency.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-doctor": patch ---- - -Add bippy as a runtime dependency. diff --git a/.changeset/bump-oxc-toolchain.md b/.changeset/bump-oxc-toolchain.md deleted file mode 100644 index 3969d689c2..0000000000 --- a/.changeset/bump-oxc-toolchain.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"react-doctor": patch -"oxlint-plugin-react-doctor": patch ---- - -Upgrade the Oxc parser and Oxlint runtime while preserving hard failures for broken JS plugins. diff --git a/.changeset/calm-compilers-rest.md b/.changeset/calm-compilers-rest.md deleted file mode 100644 index 15f1175238..0000000000 --- a/.changeset/calm-compilers-rest.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"eslint-plugin-react-doctor": patch -"oxlint-plugin-react-doctor": patch ---- - -Keep ESLint presets on React Doctor's curated low-noise rule behavior and honor configured capabilities when a rule declares `disabledWhen`, including suppressing manual-memoization diagnostics for React Compiler projects. diff --git a/.changeset/dependency-hygiene-1686.md b/.changeset/dependency-hygiene-1686.md deleted file mode 100644 index 67c8738e81..0000000000 --- a/.changeset/dependency-hygiene-1686.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-doctor": patch ---- - -Use pnpm's strict dependency layout and declare the runtime dependencies that the CLI imports directly. diff --git a/.changeset/few-berries-drum.md b/.changeset/few-berries-drum.md deleted file mode 100644 index a12a3058e0..0000000000 --- a/.changeset/few-berries-drum.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Keep the interactive score header intact in narrow split views and invalidate locally stale scan results when rule implementations change. - -Report standalone Three.js render loops that use `requestAnimationFrame` instead of the renderer-managed `setAnimationLoop` API. - -Include standalone Three.js, supported React framework, Remotion, and React Three Fiber ecosystem packages in automatic workspace project discovery. diff --git a/.changeset/fix-function-resolution-stack-overflow.md b/.changeset/fix-function-resolution-stack-overflow.md deleted file mode 100644 index 15b1d0b9b5..0000000000 --- a/.changeset/fix-function-resolution-stack-overflow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -Prevent stack overflows while resolving deeply nested local function references. React Doctor now stops following a reference chain after a bounded number of steps instead of aborting the lint scan. diff --git a/.changeset/fix-implicit-subproject-entries.md b/.changeset/fix-implicit-subproject-entries.md deleted file mode 100644 index aa8f0f1edf..0000000000 --- a/.changeset/fix-implicit-subproject-entries.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@react-doctor/core": patch ---- - -Use entry points from discovered implicit subprojects outside declared workspace globs, preventing legitimate files from being reported as unused. diff --git a/.changeset/fix-npm-cache-corruption-error.md b/.changeset/fix-npm-cache-corruption-error.md deleted file mode 100644 index faf98e08aa..0000000000 --- a/.changeset/fix-npm-cache-corruption-error.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-doctor": patch ---- - -Show an npm-native recovery command when an incomplete npx installation is missing Ajv meta-schema files. diff --git a/.changeset/fix-scope-changed-remote-base.md b/.changeset/fix-scope-changed-remote-base.md deleted file mode 100644 index 0365958202..0000000000 --- a/.changeset/fix-scope-changed-remote-base.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@react-doctor/core": patch ---- - -Compare automatic changed scopes against the remote default branch, so committed branch changes are not mistaken for working-tree changes or skipped when no local default branch exists. diff --git a/.changeset/fix-type-only-window.md b/.changeset/fix-type-only-window.md deleted file mode 100644 index bab0aa5321..0000000000 --- a/.changeset/fix-type-only-window.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -Ignore browser-global names in TypeScript-only positions so interface and type property keys are not reported as unsafe module-scope runtime access. diff --git a/.changeset/fruity-wombats-teach.md b/.changeset/fruity-wombats-teach.md deleted file mode 100644 index 020815c6f0..0000000000 --- a/.changeset/fruity-wombats-teach.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -Use the nearest workspace root when detecting Fast Refresh ownership so nested checkouts keep the correct rule coverage. diff --git a/.changeset/honest-flatmap-advice.md b/.changeset/honest-flatmap-advice.md deleted file mode 100644 index 9333724f79..0000000000 --- a/.changeset/honest-flatmap-advice.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -Stop recommending `flatMap` as a guaranteed performance improvement for `.map().filter(Boolean)`. The rule now suggests a single-pass `reduce` or `for...of` rewrite only for measured hot paths. diff --git a/.changeset/polite-monkeys-laugh.md b/.changeset/polite-monkeys-laugh.md deleted file mode 100644 index 1f33e36acb..0000000000 --- a/.changeset/polite-monkeys-laugh.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Improve repeated effect analysis and deeply nested JSX performance, preserve derived-state detection through transparent TypeScript wrappers, and upgrade Oxc parser and linter dependencies. diff --git a/.changeset/quiet-agent-stop-hooks.md b/.changeset/quiet-agent-stop-hooks.md deleted file mode 100644 index e92fd9f275..0000000000 --- a/.changeset/quiet-agent-stop-hooks.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-doctor": patch ---- - -Run installed Claude Code and Cursor hooks once at the end of an agent turn, include untracked files in the changed-file scan, and migrate existing per-tool React Doctor hooks automatically. diff --git a/.changeset/react-cleanup-engine.md b/.changeset/react-cleanup-engine.md deleted file mode 100644 index 2cd76906c6..0000000000 --- a/.changeset/react-cleanup-engine.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"react-doctor": patch -"oxlint-plugin-react-doctor": patch ---- - -Make React cleanup a first-class part of React Doctor with diagnostics for complex React functions and repeated JSX composition. Keep whole-project unused file, export, type, dependency, and import-cycle analysis as explicit opt-in rules while removing the separate Deslop packages, experimental language server, and IDE extensions. diff --git a/.changeset/runtime-traces-browse.md b/.changeset/runtime-traces-browse.md deleted file mode 100644 index d7da4143fe..0000000000 --- a/.changeset/runtime-traces-browse.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-doctor": patch ---- - -Add an interactive URL scan and `/performance` skill that record Chrome DevTools traces, flash live component render outlines, and return agent-readable React performance context. diff --git a/.changeset/shadcn-composition-rules.md b/.changeset/shadcn-composition-rules.md deleted file mode 100644 index 3965c75eaa..0000000000 --- a/.changeset/shadcn-composition-rules.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Add component-composition and correctness rules for shadcn, Radix UI, Base UI, React Aria, TanStack Table, and TanStack Virtual behind six new project capabilities (`shadcn` from `components.json`; the rest from their package dependencies). Dialog surfaces that render no title part and carry no accessible name are reported across all three libraries (shadcn DialogContent/SheetContent/AlertDialogContent/DrawerContent, Radix Dialog.Content and AlertDialog.Content, Base UI Dialog.Popup and AlertDialog.Popup). Icon-sized shadcn Buttons with no accessible name, shadcn FormItem fields wrapping a FormControl without a FormLabel, and Base UI Field.Root controls without a Field.Label are reported as unlabeled. Raw Input, Textarea, and Button controls placed directly inside shadcn InputGroup are reported in favor of its InputGroupInput, InputGroupTextarea, and InputGroupAddon parts, and presence-only `data-[selected]:` / `data-[disabled]:` Tailwind variants on command items are reported because cmdk renders both attributes as `"true"` or `"false"`. TanStack Form submit handlers that call the form's `handleSubmit` without `event.preventDefault()` are reported because the browser still performs a native full-page submission. Tabs triggers provably inside the root without the list part are reported for shadcn, Radix, and Base UI; the existing `shadcn-tabs-trigger-requires-list` rule is now enabled by default for shadcn projects through the capability gate and no longer risks false positives on extracted trigger subcomponents. React Aria Dialogs without a Heading or aria-label are reported as unnamed. TanStack Table `data`/`columns` options that provably get a new array identity every render (inline literals, render-scoped const arrays, fresh `?? []` fallbacks, inline `.filter()`/`.map()` transforms) are reported for rebuilding row and column models each render and looping auto-reset features, and elements measured by TanStack Virtual's `measureElement` without a `data-index` attribute are reported because the virtualizer drops the measurement. diff --git a/.changeset/vast-numbers-roll.md b/.changeset/vast-numbers-roll.md deleted file mode 100644 index dbd4db8728..0000000000 --- a/.changeset/vast-numbers-roll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@react-doctor/core": patch ---- - -Recover audit-mode source files after an interrupted process, without overwriting files that changed after the interruption. diff --git a/packages/api/CHANGELOG.md b/packages/api/CHANGELOG.md index 5d181d0bc3..3a3e5ffa79 100644 --- a/packages/api/CHANGELOG.md +++ b/packages/api/CHANGELOG.md @@ -1,5 +1,12 @@ # @react-doctor/api +## 0.9.13 + +### Patch Changes + +- Updated dependencies [[`77aec24`](https://github.com/millionco/react-doctor/commit/77aec24f42fa8a2c55504550df929ea3985b7748), [`79d8007`](https://github.com/millionco/react-doctor/commit/79d80072817eb86c74f3dd42ce91c8104f448810), [`a163de9`](https://github.com/millionco/react-doctor/commit/a163de9afa0c4a84c2d6e13ddd7ac55c910dacc3)]: + - @react-doctor/core@0.9.13 + ## 0.9.12 ### Patch Changes diff --git a/packages/api/package.json b/packages/api/package.json index 7ce7285ea1..8f0b7de895 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@react-doctor/api", - "version": "0.9.12", + "version": "0.9.13", "private": true, "description": "Programmatic API for React Doctor.", "license": "SEE LICENSE IN LICENSE", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 7c786e0dd1..f0500c4159 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,18 @@ # @react-doctor/core +## 0.9.13 + +### Patch Changes + +- [#1666](https://github.com/millionco/react-doctor/pull/1666) [`77aec24`](https://github.com/millionco/react-doctor/commit/77aec24f42fa8a2c55504550df929ea3985b7748) Thanks [@skoshx](https://github.com/skoshx)! - Use entry points from discovered implicit subprojects outside declared workspace globs, preventing legitimate files from being reported as unused. + +- [#1676](https://github.com/millionco/react-doctor/pull/1676) [`79d8007`](https://github.com/millionco/react-doctor/commit/79d80072817eb86c74f3dd42ce91c8104f448810) Thanks [@aidenybai](https://github.com/aidenybai)! - Compare automatic changed scopes against the remote default branch, so committed branch changes are not mistaken for working-tree changes or skipped when no local default branch exists. + +- [#1690](https://github.com/millionco/react-doctor/pull/1690) [`a163de9`](https://github.com/millionco/react-doctor/commit/a163de9afa0c4a84c2d6e13ddd7ac55c910dacc3) Thanks [@skoshx](https://github.com/skoshx)! - Recover audit-mode source files after an interrupted process, without overwriting files that changed after the interruption. + +- Updated dependencies [[`ffc2d14`](https://github.com/millionco/react-doctor/commit/ffc2d142545167107b11908f004d764ac4e31399), [`f7efb7d`](https://github.com/millionco/react-doctor/commit/f7efb7d1c4fc564fa647a0dc26c48867da9166c9), [`05ef989`](https://github.com/millionco/react-doctor/commit/05ef98926de787b01e817c8853101d6c31e2071a), [`905607f`](https://github.com/millionco/react-doctor/commit/905607f7fc2240304cbad5f41d3ad496eab06b17), [`5bc88ae`](https://github.com/millionco/react-doctor/commit/5bc88ae6a0cd7518ffa8c6348f9176868d00ea77), [`4bf7aff`](https://github.com/millionco/react-doctor/commit/4bf7aff4398383adb6b3dace48f72050dfd195a6), [`bd08406`](https://github.com/millionco/react-doctor/commit/bd08406381618785181aedf8bee956047ad107d3), [`2b0f06e`](https://github.com/millionco/react-doctor/commit/2b0f06ec70943f083d8893f8a1b989eba2ae40c6), [`8c2f03a`](https://github.com/millionco/react-doctor/commit/8c2f03aea9885f24da8f2002e85a32ac186bf5bf), [`6416370`](https://github.com/millionco/react-doctor/commit/6416370836deaa0a09189343a8579fb3f5d13494)]: + - oxlint-plugin-react-doctor@0.9.13 + ## 0.9.12 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index ec23ecd2d9..e08c62ca1d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@react-doctor/core", - "version": "0.9.12", + "version": "0.9.13", "private": true, "description": "Diagnostic engine for React Doctor.", "license": "SEE LICENSE IN LICENSE", diff --git a/packages/eslint-plugin-react-doctor/CHANGELOG.md b/packages/eslint-plugin-react-doctor/CHANGELOG.md index c159c332e4..6e0899657d 100644 --- a/packages/eslint-plugin-react-doctor/CHANGELOG.md +++ b/packages/eslint-plugin-react-doctor/CHANGELOG.md @@ -1,5 +1,16 @@ # eslint-plugin-react-doctor +## 0.9.13 + +### Patch Changes + +- [#1652](https://github.com/millionco/react-doctor/pull/1652) [`f7efb7d`](https://github.com/millionco/react-doctor/commit/f7efb7d1c4fc564fa647a0dc26c48867da9166c9) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep ESLint presets on React Doctor's curated low-noise rule behavior and honor configured capabilities when a rule declares `disabledWhen`, including suppressing manual-memoization diagnostics for React Compiler projects. + +- [#1654](https://github.com/millionco/react-doctor/pull/1654) [`6416370`](https://github.com/millionco/react-doctor/commit/6416370836deaa0a09189343a8579fb3f5d13494) Thanks [@aidenybai](https://github.com/aidenybai)! - Add component-composition and correctness rules for shadcn, Radix UI, Base UI, React Aria, TanStack Table, and TanStack Virtual behind six new project capabilities (`shadcn` from `components.json`; the rest from their package dependencies). Dialog surfaces that render no title part and carry no accessible name are reported across all three libraries (shadcn DialogContent/SheetContent/AlertDialogContent/DrawerContent, Radix Dialog.Content and AlertDialog.Content, Base UI Dialog.Popup and AlertDialog.Popup). Icon-sized shadcn Buttons with no accessible name, shadcn FormItem fields wrapping a FormControl without a FormLabel, and Base UI Field.Root controls without a Field.Label are reported as unlabeled. Raw Input, Textarea, and Button controls placed directly inside shadcn InputGroup are reported in favor of its InputGroupInput, InputGroupTextarea, and InputGroupAddon parts, and presence-only `data-[selected]:` / `data-[disabled]:` Tailwind variants on command items are reported because cmdk renders both attributes as `"true"` or `"false"`. TanStack Form submit handlers that call the form's `handleSubmit` without `event.preventDefault()` are reported because the browser still performs a native full-page submission. Tabs triggers provably inside the root without the list part are reported for shadcn, Radix, and Base UI; the existing `shadcn-tabs-trigger-requires-list` rule is now enabled by default for shadcn projects through the capability gate and no longer risks false positives on extracted trigger subcomponents. React Aria Dialogs without a Heading or aria-label are reported as unnamed. TanStack Table `data`/`columns` options that provably get a new array identity every render (inline literals, render-scoped const arrays, fresh `?? []` fallbacks, inline `.filter()`/`.map()` transforms) are reported for rebuilding row and column models each render and looping auto-reset features, and elements measured by TanStack Virtual's `measureElement` without a `data-index` attribute are reported because the virtualizer drops the measurement. + +- Updated dependencies [[`ffc2d14`](https://github.com/millionco/react-doctor/commit/ffc2d142545167107b11908f004d764ac4e31399), [`f7efb7d`](https://github.com/millionco/react-doctor/commit/f7efb7d1c4fc564fa647a0dc26c48867da9166c9), [`05ef989`](https://github.com/millionco/react-doctor/commit/05ef98926de787b01e817c8853101d6c31e2071a), [`905607f`](https://github.com/millionco/react-doctor/commit/905607f7fc2240304cbad5f41d3ad496eab06b17), [`5bc88ae`](https://github.com/millionco/react-doctor/commit/5bc88ae6a0cd7518ffa8c6348f9176868d00ea77), [`4bf7aff`](https://github.com/millionco/react-doctor/commit/4bf7aff4398383adb6b3dace48f72050dfd195a6), [`bd08406`](https://github.com/millionco/react-doctor/commit/bd08406381618785181aedf8bee956047ad107d3), [`2b0f06e`](https://github.com/millionco/react-doctor/commit/2b0f06ec70943f083d8893f8a1b989eba2ae40c6), [`8c2f03a`](https://github.com/millionco/react-doctor/commit/8c2f03aea9885f24da8f2002e85a32ac186bf5bf), [`6416370`](https://github.com/millionco/react-doctor/commit/6416370836deaa0a09189343a8579fb3f5d13494)]: + - oxlint-plugin-react-doctor@0.9.13 + ## 0.9.12 ### Patch Changes diff --git a/packages/eslint-plugin-react-doctor/package.json b/packages/eslint-plugin-react-doctor/package.json index 97b90aac95..b99fcffb10 100644 --- a/packages/eslint-plugin-react-doctor/package.json +++ b/packages/eslint-plugin-react-doctor/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-react-doctor", - "version": "0.9.12", + "version": "0.9.13", "description": "React Doctor rules for ESLint.", "keywords": [ "accessibility", diff --git a/packages/fuzz/CHANGELOG.md b/packages/fuzz/CHANGELOG.md index 10b1a9cf28..37d075ad4e 100644 --- a/packages/fuzz/CHANGELOG.md +++ b/packages/fuzz/CHANGELOG.md @@ -1,5 +1,12 @@ # @react-doctor/fuzz +## 0.0.31 + +### Patch Changes + +- Updated dependencies [[`ffc2d14`](https://github.com/millionco/react-doctor/commit/ffc2d142545167107b11908f004d764ac4e31399), [`f7efb7d`](https://github.com/millionco/react-doctor/commit/f7efb7d1c4fc564fa647a0dc26c48867da9166c9), [`05ef989`](https://github.com/millionco/react-doctor/commit/05ef98926de787b01e817c8853101d6c31e2071a), [`905607f`](https://github.com/millionco/react-doctor/commit/905607f7fc2240304cbad5f41d3ad496eab06b17), [`5bc88ae`](https://github.com/millionco/react-doctor/commit/5bc88ae6a0cd7518ffa8c6348f9176868d00ea77), [`4bf7aff`](https://github.com/millionco/react-doctor/commit/4bf7aff4398383adb6b3dace48f72050dfd195a6), [`bd08406`](https://github.com/millionco/react-doctor/commit/bd08406381618785181aedf8bee956047ad107d3), [`2b0f06e`](https://github.com/millionco/react-doctor/commit/2b0f06ec70943f083d8893f8a1b989eba2ae40c6), [`8c2f03a`](https://github.com/millionco/react-doctor/commit/8c2f03aea9885f24da8f2002e85a32ac186bf5bf), [`6416370`](https://github.com/millionco/react-doctor/commit/6416370836deaa0a09189343a8579fb3f5d13494)]: + - oxlint-plugin-react-doctor@0.9.13 + ## 0.0.30 ### Patch Changes diff --git a/packages/fuzz/package.json b/packages/fuzz/package.json index 5efba6aa1e..70285fa85e 100644 --- a/packages/fuzz/package.json +++ b/packages/fuzz/package.json @@ -1,6 +1,6 @@ { "name": "@react-doctor/fuzz", - "version": "0.0.30", + "version": "0.0.31", "private": true, "description": "Adversarial fuzzing harness for React Doctor rules.", "license": "SEE LICENSE IN LICENSE", diff --git a/packages/oxlint-plugin-react-doctor/CHANGELOG.md b/packages/oxlint-plugin-react-doctor/CHANGELOG.md index a4340b2626..37e04fd2fc 100644 --- a/packages/oxlint-plugin-react-doctor/CHANGELOG.md +++ b/packages/oxlint-plugin-react-doctor/CHANGELOG.md @@ -1,5 +1,33 @@ # oxlint-plugin-react-doctor +## 0.9.13 + +### Patch Changes + +- [#1651](https://github.com/millionco/react-doctor/pull/1651) [`ffc2d14`](https://github.com/millionco/react-doctor/commit/ffc2d142545167107b11908f004d764ac4e31399) Thanks [@aidenybai](https://github.com/aidenybai)! - Upgrade the Oxc parser and Oxlint runtime while preserving hard failures for broken JS plugins. + +- [#1652](https://github.com/millionco/react-doctor/pull/1652) [`f7efb7d`](https://github.com/millionco/react-doctor/commit/f7efb7d1c4fc564fa647a0dc26c48867da9166c9) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep ESLint presets on React Doctor's curated low-noise rule behavior and honor configured capabilities when a rule declares `disabledWhen`, including suppressing manual-memoization diagnostics for React Compiler projects. + +- [#1646](https://github.com/millionco/react-doctor/pull/1646) [`05ef989`](https://github.com/millionco/react-doctor/commit/05ef98926de787b01e817c8853101d6c31e2071a) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep the interactive score header intact in narrow split views and invalidate locally stale scan results when rule implementations change. + + Report standalone Three.js render loops that use `requestAnimationFrame` instead of the renderer-managed `setAnimationLoop` API. + + Include standalone Three.js, supported React framework, Remotion, and React Three Fiber ecosystem packages in automatic workspace project discovery. + +- [#1658](https://github.com/millionco/react-doctor/pull/1658) [`905607f`](https://github.com/millionco/react-doctor/commit/905607f7fc2240304cbad5f41d3ad496eab06b17) Thanks [@skoshx](https://github.com/skoshx)! - Prevent stack overflows while resolving deeply nested local function references. React Doctor now stops following a reference chain after a bounded number of steps instead of aborting the lint scan. + +- [#1668](https://github.com/millionco/react-doctor/pull/1668) [`5bc88ae`](https://github.com/millionco/react-doctor/commit/5bc88ae6a0cd7518ffa8c6348f9176868d00ea77) Thanks [@skoshx](https://github.com/skoshx)! - Ignore browser-global names in TypeScript-only positions so interface and type property keys are not reported as unsafe module-scope runtime access. + +- [#1673](https://github.com/millionco/react-doctor/pull/1673) [`4bf7aff`](https://github.com/millionco/react-doctor/commit/4bf7aff4398383adb6b3dace48f72050dfd195a6) Thanks [@aidenybai](https://github.com/aidenybai)! - Use the nearest workspace root when detecting Fast Refresh ownership so nested checkouts keep the correct rule coverage. + +- [#1671](https://github.com/millionco/react-doctor/pull/1671) [`bd08406`](https://github.com/millionco/react-doctor/commit/bd08406381618785181aedf8bee956047ad107d3) Thanks [@aidenybai](https://github.com/aidenybai)! - Stop recommending `flatMap` as a guaranteed performance improvement for `.map().filter(Boolean)`. The rule now suggests a single-pass `reduce` or `for...of` rewrite only for measured hot paths. + +- [#1663](https://github.com/millionco/react-doctor/pull/1663) [`2b0f06e`](https://github.com/millionco/react-doctor/commit/2b0f06ec70943f083d8893f8a1b989eba2ae40c6) Thanks [@aidenybai](https://github.com/aidenybai)! - Improve repeated effect analysis and deeply nested JSX performance, preserve derived-state detection through transparent TypeScript wrappers, and upgrade Oxc parser and linter dependencies. + +- [#1624](https://github.com/millionco/react-doctor/pull/1624) [`8c2f03a`](https://github.com/millionco/react-doctor/commit/8c2f03aea9885f24da8f2002e85a32ac186bf5bf) Thanks [@aidenybai](https://github.com/aidenybai)! - Make React cleanup a first-class part of React Doctor with diagnostics for complex React functions and repeated JSX composition. Keep whole-project unused file, export, type, dependency, and import-cycle analysis as explicit opt-in rules while removing the separate Deslop packages, experimental language server, and IDE extensions. + +- [#1654](https://github.com/millionco/react-doctor/pull/1654) [`6416370`](https://github.com/millionco/react-doctor/commit/6416370836deaa0a09189343a8579fb3f5d13494) Thanks [@aidenybai](https://github.com/aidenybai)! - Add component-composition and correctness rules for shadcn, Radix UI, Base UI, React Aria, TanStack Table, and TanStack Virtual behind six new project capabilities (`shadcn` from `components.json`; the rest from their package dependencies). Dialog surfaces that render no title part and carry no accessible name are reported across all three libraries (shadcn DialogContent/SheetContent/AlertDialogContent/DrawerContent, Radix Dialog.Content and AlertDialog.Content, Base UI Dialog.Popup and AlertDialog.Popup). Icon-sized shadcn Buttons with no accessible name, shadcn FormItem fields wrapping a FormControl without a FormLabel, and Base UI Field.Root controls without a Field.Label are reported as unlabeled. Raw Input, Textarea, and Button controls placed directly inside shadcn InputGroup are reported in favor of its InputGroupInput, InputGroupTextarea, and InputGroupAddon parts, and presence-only `data-[selected]:` / `data-[disabled]:` Tailwind variants on command items are reported because cmdk renders both attributes as `"true"` or `"false"`. TanStack Form submit handlers that call the form's `handleSubmit` without `event.preventDefault()` are reported because the browser still performs a native full-page submission. Tabs triggers provably inside the root without the list part are reported for shadcn, Radix, and Base UI; the existing `shadcn-tabs-trigger-requires-list` rule is now enabled by default for shadcn projects through the capability gate and no longer risks false positives on extracted trigger subcomponents. React Aria Dialogs without a Heading or aria-label are reported as unnamed. TanStack Table `data`/`columns` options that provably get a new array identity every render (inline literals, render-scoped const arrays, fresh `?? []` fallbacks, inline `.filter()`/`.map()` transforms) are reported for rebuilding row and column models each render and looping auto-reset features, and elements measured by TanStack Virtual's `measureElement` without a `data-index` attribute are reported because the virtualizer drops the measurement. + ## 0.9.12 ### Patch Changes diff --git a/packages/oxlint-plugin-react-doctor/package.json b/packages/oxlint-plugin-react-doctor/package.json index e10e883b7e..4350e8aa81 100644 --- a/packages/oxlint-plugin-react-doctor/package.json +++ b/packages/oxlint-plugin-react-doctor/package.json @@ -1,6 +1,6 @@ { "name": "oxlint-plugin-react-doctor", - "version": "0.9.12", + "version": "0.9.13", "description": "React Doctor rules for oxlint.", "keywords": [ "accessibility", diff --git a/packages/react-doctor/CHANGELOG.md b/packages/react-doctor/CHANGELOG.md index bf6e65269e..f5c18e6d66 100644 --- a/packages/react-doctor/CHANGELOG.md +++ b/packages/react-doctor/CHANGELOG.md @@ -1,5 +1,36 @@ # react-doctor +## 0.9.13 + +### Patch Changes + +- [`28a1a9f`](https://github.com/millionco/react-doctor/commit/28a1a9fd35d41b6871a6696ea8e04494aab907ba) Thanks [@aidenybai](https://github.com/aidenybai)! - Add bippy as a runtime dependency. + +- [#1651](https://github.com/millionco/react-doctor/pull/1651) [`ffc2d14`](https://github.com/millionco/react-doctor/commit/ffc2d142545167107b11908f004d764ac4e31399) Thanks [@aidenybai](https://github.com/aidenybai)! - Upgrade the Oxc parser and Oxlint runtime while preserving hard failures for broken JS plugins. + +- [#1689](https://github.com/millionco/react-doctor/pull/1689) [`1d3e4a6`](https://github.com/millionco/react-doctor/commit/1d3e4a606192ac949360371d98838abb1fb9e47d) Thanks [@skoshx](https://github.com/skoshx)! - Use pnpm's strict dependency layout and declare the runtime dependencies that the CLI imports directly. + +- [#1646](https://github.com/millionco/react-doctor/pull/1646) [`05ef989`](https://github.com/millionco/react-doctor/commit/05ef98926de787b01e817c8853101d6c31e2071a) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep the interactive score header intact in narrow split views and invalidate locally stale scan results when rule implementations change. + + Report standalone Three.js render loops that use `requestAnimationFrame` instead of the renderer-managed `setAnimationLoop` API. + + Include standalone Three.js, supported React framework, Remotion, and React Three Fiber ecosystem packages in automatic workspace project discovery. + +- [#1693](https://github.com/millionco/react-doctor/pull/1693) [`4e04921`](https://github.com/millionco/react-doctor/commit/4e049212052a5433e1995cc6353a0fcde3c8a2e1) Thanks [@skoshx](https://github.com/skoshx)! - Show an npm-native recovery command when an incomplete npx installation is missing Ajv meta-schema files. + +- [#1663](https://github.com/millionco/react-doctor/pull/1663) [`2b0f06e`](https://github.com/millionco/react-doctor/commit/2b0f06ec70943f083d8893f8a1b989eba2ae40c6) Thanks [@aidenybai](https://github.com/aidenybai)! - Improve repeated effect analysis and deeply nested JSX performance, preserve derived-state detection through transparent TypeScript wrappers, and upgrade Oxc parser and linter dependencies. + +- [#1650](https://github.com/millionco/react-doctor/pull/1650) [`0b670aa`](https://github.com/millionco/react-doctor/commit/0b670aa6f58c7458f69feca132db9ae33146b891) Thanks [@aidenybai](https://github.com/aidenybai)! - Run installed Claude Code and Cursor hooks once at the end of an agent turn, include untracked files in the changed-file scan, and migrate existing per-tool React Doctor hooks automatically. + +- [#1624](https://github.com/millionco/react-doctor/pull/1624) [`8c2f03a`](https://github.com/millionco/react-doctor/commit/8c2f03aea9885f24da8f2002e85a32ac186bf5bf) Thanks [@aidenybai](https://github.com/aidenybai)! - Make React cleanup a first-class part of React Doctor with diagnostics for complex React functions and repeated JSX composition. Keep whole-project unused file, export, type, dependency, and import-cycle analysis as explicit opt-in rules while removing the separate Deslop packages, experimental language server, and IDE extensions. + +- [#1653](https://github.com/millionco/react-doctor/pull/1653) [`1971506`](https://github.com/millionco/react-doctor/commit/1971506440b74715e8115e321286112b895ed0a5) Thanks [@aidenybai](https://github.com/aidenybai)! - Add an interactive URL scan and `/performance` skill that record Chrome DevTools traces, flash live component render outlines, and return agent-readable React performance context. + +- [#1654](https://github.com/millionco/react-doctor/pull/1654) [`6416370`](https://github.com/millionco/react-doctor/commit/6416370836deaa0a09189343a8579fb3f5d13494) Thanks [@aidenybai](https://github.com/aidenybai)! - Add component-composition and correctness rules for shadcn, Radix UI, Base UI, React Aria, TanStack Table, and TanStack Virtual behind six new project capabilities (`shadcn` from `components.json`; the rest from their package dependencies). Dialog surfaces that render no title part and carry no accessible name are reported across all three libraries (shadcn DialogContent/SheetContent/AlertDialogContent/DrawerContent, Radix Dialog.Content and AlertDialog.Content, Base UI Dialog.Popup and AlertDialog.Popup). Icon-sized shadcn Buttons with no accessible name, shadcn FormItem fields wrapping a FormControl without a FormLabel, and Base UI Field.Root controls without a Field.Label are reported as unlabeled. Raw Input, Textarea, and Button controls placed directly inside shadcn InputGroup are reported in favor of its InputGroupInput, InputGroupTextarea, and InputGroupAddon parts, and presence-only `data-[selected]:` / `data-[disabled]:` Tailwind variants on command items are reported because cmdk renders both attributes as `"true"` or `"false"`. TanStack Form submit handlers that call the form's `handleSubmit` without `event.preventDefault()` are reported because the browser still performs a native full-page submission. Tabs triggers provably inside the root without the list part are reported for shadcn, Radix, and Base UI; the existing `shadcn-tabs-trigger-requires-list` rule is now enabled by default for shadcn projects through the capability gate and no longer risks false positives on extracted trigger subcomponents. React Aria Dialogs without a Heading or aria-label are reported as unnamed. TanStack Table `data`/`columns` options that provably get a new array identity every render (inline literals, render-scoped const arrays, fresh `?? []` fallbacks, inline `.filter()`/`.map()` transforms) are reported for rebuilding row and column models each render and looping auto-reset features, and elements measured by TanStack Virtual's `measureElement` without a `data-index` attribute are reported because the virtualizer drops the measurement. + +- Updated dependencies [[`ffc2d14`](https://github.com/millionco/react-doctor/commit/ffc2d142545167107b11908f004d764ac4e31399), [`f7efb7d`](https://github.com/millionco/react-doctor/commit/f7efb7d1c4fc564fa647a0dc26c48867da9166c9), [`05ef989`](https://github.com/millionco/react-doctor/commit/05ef98926de787b01e817c8853101d6c31e2071a), [`905607f`](https://github.com/millionco/react-doctor/commit/905607f7fc2240304cbad5f41d3ad496eab06b17), [`5bc88ae`](https://github.com/millionco/react-doctor/commit/5bc88ae6a0cd7518ffa8c6348f9176868d00ea77), [`4bf7aff`](https://github.com/millionco/react-doctor/commit/4bf7aff4398383adb6b3dace48f72050dfd195a6), [`bd08406`](https://github.com/millionco/react-doctor/commit/bd08406381618785181aedf8bee956047ad107d3), [`2b0f06e`](https://github.com/millionco/react-doctor/commit/2b0f06ec70943f083d8893f8a1b989eba2ae40c6), [`8c2f03a`](https://github.com/millionco/react-doctor/commit/8c2f03aea9885f24da8f2002e85a32ac186bf5bf), [`6416370`](https://github.com/millionco/react-doctor/commit/6416370836deaa0a09189343a8579fb3f5d13494)]: + - oxlint-plugin-react-doctor@0.9.13 + ## 0.9.12 ### Patch Changes diff --git a/packages/react-doctor/package.json b/packages/react-doctor/package.json index 3f5750b8a4..6dd74bada4 100644 --- a/packages/react-doctor/package.json +++ b/packages/react-doctor/package.json @@ -1,6 +1,6 @@ { "name": "react-doctor", - "version": "0.9.12", + "version": "0.9.13", "description": "Your agent writes bad React. This catches it", "keywords": [ "accessibility",