From 241269272d09123008e2d035f863f9d6d236da52 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 9 Oct 2026 18:28:14 +0000 Subject: [PATCH] chore: version packages --- .changeset/action-clean-comment-telemetry.md | 5 - .changeset/admin-provider-unsubscribe.md | 7 - .changeset/angular-helper-ownership.md | 7 - .../callback-only-effect-dependencies.md | 7 - .../cheap-primitive-state-initializers.md | 7 - .changeset/clear-keyboard-paths.md | 7 - .changeset/conditional-listener-capture.md | 9 -- .changeset/count-built-placeholder-arrays.md | 7 - .changeset/count-loop-key-alias.md | 7 - .changeset/effect-owned-browser-helpers.md | 7 - .changeset/empty-notification-payload.md | 7 - .changeset/eslint-adapter-requires-gate.md | 6 - .../fix-async-defer-await-parameter-guards.md | 5 - .changeset/fix-ci-workflow-git-root.md | 5 - .../fix-cloudflare-directory-exclusion.md | 6 - ...ffect-needs-cleanup-promise-timer-reset.md | 8 - .../fix-jsx-matcher-component-exports.md | 5 - .changeset/fix-observer-cleanup-patterns.md | 5 - .../fix-only-export-components-matcher.md | 5 - .changeset/fix-staged-git-dir-worktree.md | 5 - .changeset/fp104-boolean-render-guard.md | 7 - .changeset/fp104-data-router-boundary.md | 7 - .changeset/fp104-legacy-class-this.md | 7 - .changeset/fp104-legacy-link-anchor.md | 7 - .changeset/fp104-local-updater-parameter.md | 7 - .changeset/fp104-native-module-versions.md | 7 - .changeset/fp104-native-safe-area-view.md | 7 - .changeset/fp104-next-pages-app-path.md | 7 - .changeset/fp104-optional-fetch-status.md | 7 - .changeset/fp104-promise-find-api.md | 7 - .changeset/fp104-static-import-assertion.md | 7 - .changeset/fp104-suspense-state-reads.md | 7 - .changeset/fp104-timer-cleanup-pairing.md | 7 - .changeset/fp104-tooltip-accessible-name.md | 7 - .changeset/fp104-unoptimized-image-sizes.md | 7 - .../fpfix-control-has-associated-label.md | 5 - .changeset/fpfix-display-name.md | 5 - .changeset/fpfix-jsx-data-factories.md | 5 - .changeset/fpfix-no-array-index-as-key.md | 5 - .changeset/fpfix-no-hover-only-reveal.md | 5 - ...o-side-effect-in-state-updater-function.md | 5 - .../fpfix-no-symmetric-text-button-padding.md | 5 - .changeset/fpfix-only-export-components.md | 5 - .changeset/fresh-clone-keys.md | 7 - .changeset/fresh-conditional-sets.md | 7 - .changeset/guarded-dependency-fallback.md | 7 - .changeset/helper-property-dependencies.md | 7 - .changeset/identical-placeholder-keys.md | 7 - .changeset/imported-listener-identity.md | 7 - .changeset/initialized-subscription-arrays.md | 7 - .changeset/layer-lifecycle-callbacks.md | 7 - .changeset/lazy-ref-local-alias.md | 7 - .../local-loaders-parent-notification.md | 7 - .changeset/named-react-render-callbacks.md | 7 - .changeset/object-url-allocation-guard.md | 7 - .changeset/omitted-effect-dependencies.md | 7 - .changeset/owned-observer-helper.md | 7 - .changeset/owned-request-map-reset.md | 7 - .changeset/plain-context-registration.md | 7 - .changeset/plain-imported-data-getters.md | 7 - .changeset/plain-string-token-keys.md | 7 - .changeset/portal-mount-state.md | 7 - .changeset/position-only-map-keys.md | 7 - .changeset/post-await-cancellation-aliases.md | 7 - .changeset/primitive-accumulator-labels.md | 7 - .changeset/property-placeholder-counts.md | 7 - .changeset/quiet-inputs-remount.md | 7 - .changeset/quiet-request-predicates.md | 7 - .changeset/quiet-solid-hooks.md | 7 - .changeset/quiet-warning-exit-code.md | 5 - .changeset/ref-owned-object-urls.md | 7 - .changeset/released-object-url-state.md | 7 - .changeset/retained-disposer-helpers.md | 7 - .changeset/returned-component-factories.md | 7 - .changeset/shadowed-timer-bindings.md | 7 - .changeset/stable-xstate-service-send.md | 7 - packages/api/CHANGELOG.md | 7 + packages/api/package.json | 2 +- packages/core/CHANGELOG.md | 9 ++ packages/core/package.json | 2 +- .../eslint-plugin-react-doctor/CHANGELOG.md | 125 +++++++++++++++ .../eslint-plugin-react-doctor/package.json | 2 +- packages/fuzz/CHANGELOG.md | 7 + packages/fuzz/package.json | 2 +- .../oxlint-plugin-react-doctor/CHANGELOG.md | 150 ++++++++++++++++++ .../oxlint-plugin-react-doctor/package.json | 2 +- packages/react-doctor/CHANGELOG.md | 137 ++++++++++++++++ packages/react-doctor/package.json | 2 +- 88 files changed, 441 insertions(+), 507 deletions(-) delete mode 100644 .changeset/action-clean-comment-telemetry.md delete mode 100644 .changeset/admin-provider-unsubscribe.md delete mode 100644 .changeset/angular-helper-ownership.md delete mode 100644 .changeset/callback-only-effect-dependencies.md delete mode 100644 .changeset/cheap-primitive-state-initializers.md delete mode 100644 .changeset/clear-keyboard-paths.md delete mode 100644 .changeset/conditional-listener-capture.md delete mode 100644 .changeset/count-built-placeholder-arrays.md delete mode 100644 .changeset/count-loop-key-alias.md delete mode 100644 .changeset/effect-owned-browser-helpers.md delete mode 100644 .changeset/empty-notification-payload.md delete mode 100644 .changeset/eslint-adapter-requires-gate.md delete mode 100644 .changeset/fix-async-defer-await-parameter-guards.md delete mode 100644 .changeset/fix-ci-workflow-git-root.md delete mode 100644 .changeset/fix-cloudflare-directory-exclusion.md delete mode 100644 .changeset/fix-effect-needs-cleanup-promise-timer-reset.md delete mode 100644 .changeset/fix-jsx-matcher-component-exports.md delete mode 100644 .changeset/fix-observer-cleanup-patterns.md delete mode 100644 .changeset/fix-only-export-components-matcher.md delete mode 100644 .changeset/fix-staged-git-dir-worktree.md delete mode 100644 .changeset/fp104-boolean-render-guard.md delete mode 100644 .changeset/fp104-data-router-boundary.md delete mode 100644 .changeset/fp104-legacy-class-this.md delete mode 100644 .changeset/fp104-legacy-link-anchor.md delete mode 100644 .changeset/fp104-local-updater-parameter.md delete mode 100644 .changeset/fp104-native-module-versions.md delete mode 100644 .changeset/fp104-native-safe-area-view.md delete mode 100644 .changeset/fp104-next-pages-app-path.md delete mode 100644 .changeset/fp104-optional-fetch-status.md delete mode 100644 .changeset/fp104-promise-find-api.md delete mode 100644 .changeset/fp104-static-import-assertion.md delete mode 100644 .changeset/fp104-suspense-state-reads.md delete mode 100644 .changeset/fp104-timer-cleanup-pairing.md delete mode 100644 .changeset/fp104-tooltip-accessible-name.md delete mode 100644 .changeset/fp104-unoptimized-image-sizes.md delete mode 100644 .changeset/fpfix-control-has-associated-label.md delete mode 100644 .changeset/fpfix-display-name.md delete mode 100644 .changeset/fpfix-jsx-data-factories.md delete mode 100644 .changeset/fpfix-no-array-index-as-key.md delete mode 100644 .changeset/fpfix-no-hover-only-reveal.md delete mode 100644 .changeset/fpfix-no-side-effect-in-state-updater-function.md delete mode 100644 .changeset/fpfix-no-symmetric-text-button-padding.md delete mode 100644 .changeset/fpfix-only-export-components.md delete mode 100644 .changeset/fresh-clone-keys.md delete mode 100644 .changeset/fresh-conditional-sets.md delete mode 100644 .changeset/guarded-dependency-fallback.md delete mode 100644 .changeset/helper-property-dependencies.md delete mode 100644 .changeset/identical-placeholder-keys.md delete mode 100644 .changeset/imported-listener-identity.md delete mode 100644 .changeset/initialized-subscription-arrays.md delete mode 100644 .changeset/layer-lifecycle-callbacks.md delete mode 100644 .changeset/lazy-ref-local-alias.md delete mode 100644 .changeset/local-loaders-parent-notification.md delete mode 100644 .changeset/named-react-render-callbacks.md delete mode 100644 .changeset/object-url-allocation-guard.md delete mode 100644 .changeset/omitted-effect-dependencies.md delete mode 100644 .changeset/owned-observer-helper.md delete mode 100644 .changeset/owned-request-map-reset.md delete mode 100644 .changeset/plain-context-registration.md delete mode 100644 .changeset/plain-imported-data-getters.md delete mode 100644 .changeset/plain-string-token-keys.md delete mode 100644 .changeset/portal-mount-state.md delete mode 100644 .changeset/position-only-map-keys.md delete mode 100644 .changeset/post-await-cancellation-aliases.md delete mode 100644 .changeset/primitive-accumulator-labels.md delete mode 100644 .changeset/property-placeholder-counts.md delete mode 100644 .changeset/quiet-inputs-remount.md delete mode 100644 .changeset/quiet-request-predicates.md delete mode 100644 .changeset/quiet-solid-hooks.md delete mode 100644 .changeset/quiet-warning-exit-code.md delete mode 100644 .changeset/ref-owned-object-urls.md delete mode 100644 .changeset/released-object-url-state.md delete mode 100644 .changeset/retained-disposer-helpers.md delete mode 100644 .changeset/returned-component-factories.md delete mode 100644 .changeset/shadowed-timer-bindings.md delete mode 100644 .changeset/stable-xstate-service-send.md diff --git a/.changeset/action-clean-comment-telemetry.md b/.changeset/action-clean-comment-telemetry.md deleted file mode 100644 index d0409ff255..0000000000 --- a/.changeset/action-clean-comment-telemetry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-doctor": patch ---- - -Record the GitHub Action clean-comment preference in anonymized scan telemetry and document the workflow input. diff --git a/.changeset/admin-provider-unsubscribe.md b/.changeset/admin-provider-unsubscribe.md deleted file mode 100644 index b7a28a337d..0000000000 --- a/.changeset/admin-provider-unsubscribe.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Match API Platform subscription IDs to the provider's resource-and-IDs unsubscribe contract. diff --git a/.changeset/angular-helper-ownership.md b/.changeset/angular-helper-ownership.md deleted file mode 100644 index d96843e1ef..0000000000 --- a/.changeset/angular-helper-ownership.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Do not infer React hooks from relative helper imports in Angular component classes. Continue to check React and React ecosystem imports. diff --git a/.changeset/callback-only-effect-dependencies.md b/.changeset/callback-only-effect-dependencies.md deleted file mode 100644 index a653852f16..0000000000 --- a/.changeset/callback-only-effect-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Do not classify a local state transition as a prop-driven adjustment when its only prop dependencies are called notifications. Keep checks for prop values used in guards, results, or reset dependencies. diff --git a/.changeset/cheap-primitive-state-initializers.md b/.changeset/cheap-primitive-state-initializers.md deleted file mode 100644 index df6c0024eb..0000000000 --- a/.changeset/cheap-primitive-state-initializers.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Do not recommend lazy state initialization for cheap primitive toString calls, including numeric React Native Dimensions values. Keep warnings for unproven receivers and nested expensive calls. diff --git a/.changeset/clear-keyboard-paths.md b/.changeset/clear-keyboard-paths.md deleted file mode 100644 index 10254fbc85..0000000000 --- a/.changeset/clear-keyboard-paths.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Report inaccessible parent click actions when descendant handlers stop keyboard-generated clicks from reaching them. diff --git a/.changeset/conditional-listener-capture.md b/.changeset/conditional-listener-capture.md deleted file mode 100644 index dee6ff925f..0000000000 --- a/.changeset/conditional-listener-capture.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Match listener cleanup when both branches of conditional options have the same capture value. Keep warnings for differing capture values, changed options, and missing cleanup. - -Recognize exhaustive listener-removal loops extracted into a synchronous helper when the cleanup only invokes that helper. diff --git a/.changeset/count-built-placeholder-arrays.md b/.changeset/count-built-placeholder-arrays.md deleted file mode 100644 index 2f88413a28..0000000000 --- a/.changeset/count-built-placeholder-arrays.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Preserve count-based placeholder identity through a local array before mapping wrappers. diff --git a/.changeset/count-loop-key-alias.md b/.changeset/count-loop-key-alias.md deleted file mode 100644 index 3eddc9c543..0000000000 --- a/.changeset/count-loop-key-alias.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Preserve numeric placeholder-loop identity through local key aliases, including constant-prefix keys. Continue reporting index aliases for loops over array data. diff --git a/.changeset/effect-owned-browser-helpers.md b/.changeset/effect-owned-browser-helpers.md deleted file mode 100644 index 875b2fc2c3..0000000000 --- a/.changeset/effect-owned-browser-helpers.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Keep browser reads in helpers defined inside React effects out of server-render diagnostics. Preserve warnings for render callbacks and shadowed effect functions. diff --git a/.changeset/empty-notification-payload.md b/.changeset/empty-notification-payload.md deleted file mode 100644 index 06899fe129..0000000000 --- a/.changeset/empty-notification-payload.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Do not classify zero-argument effect notifications as state payloads sent to a parent. Continue to report callbacks that pass local state. diff --git a/.changeset/eslint-adapter-requires-gate.md b/.changeset/eslint-adapter-requires-gate.md deleted file mode 100644 index 296f6ddf50..0000000000 --- a/.changeset/eslint-adapter-requires-gate.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"eslint-plugin-react-doctor": patch -"oxlint-plugin-react-doctor": patch ---- - -ESLint adapter now respects rule `requires` gates. Rules that require capabilities the project doesn't have (like `ssr` or `react-router:8`) are now correctly skipped when capabilities are declared, matching the CLI behavior. Fixes false errors on dependency bumps when using the ESLint adapter with explicit capabilities. diff --git a/.changeset/fix-async-defer-await-parameter-guards.md b/.changeset/fix-async-defer-await-parameter-guards.md deleted file mode 100644 index 429c982b54..0000000000 --- a/.changeset/fix-async-defer-await-parameter-guards.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -Fix `async-defer-await` warnings on compound guards that compare function parameters with mutable state after an await. Keep these checks after the await so they can detect stale responses. Fixes #1895. diff --git a/.changeset/fix-ci-workflow-git-root.md b/.changeset/fix-ci-workflow-git-root.md deleted file mode 100644 index eb18a98227..0000000000 --- a/.changeset/fix-ci-workflow-git-root.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-doctor": patch ---- - -Install and manage GitHub Actions workflows at the repository root when invoked from a nested package or linked worktree. diff --git a/.changeset/fix-cloudflare-directory-exclusion.md b/.changeset/fix-cloudflare-directory-exclusion.md deleted file mode 100644 index 6804087dab..0000000000 --- a/.changeset/fix-cloudflare-directory-exclusion.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@react-doctor/core": patch -"react-doctor": patch ---- - -Exclude `.cloudflare` build output directory from source file discovery. Cloudflare's `cf` CLI stores compiled Worker bundles and cache state there, mirroring the existing `.wrangler` exclusion. diff --git a/.changeset/fix-effect-needs-cleanup-promise-timer-reset.md b/.changeset/fix-effect-needs-cleanup-promise-timer-reset.md deleted file mode 100644 index 259a32981e..0000000000 --- a/.changeset/fix-effect-needs-cleanup-promise-timer-reset.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"react-doctor": patch ---- - -fix(effect-needs-cleanup): accept Promise timer that resets its own handle in callback - -Fixes #1882. The rule no longer flags a timer created in a Promise callback when the timer's own callback resets the handle to `null` or `undefined`. This is safe because the timer has already fired when the reset happens, so no live handle is lost. diff --git a/.changeset/fix-jsx-matcher-component-exports.md b/.changeset/fix-jsx-matcher-component-exports.md deleted file mode 100644 index 63251e2da8..0000000000 --- a/.changeset/fix-jsx-matcher-component-exports.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -Recognize stable functions rendered as JSX components in the same file, including components that return imported exhaustive matchers. Preserve warnings for mixed utility exports, shadowed JSX names, and reassigned bindings. diff --git a/.changeset/fix-observer-cleanup-patterns.md b/.changeset/fix-observer-cleanup-patterns.md deleted file mode 100644 index ed332aa3d1..0000000000 --- a/.changeset/fix-observer-cleanup-patterns.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -Accept observer cleanup after tuple loops and a single animation-frame retry chain when cleanup disconnects the observer and cancels the pending frame. Require observer cleanup on every path and keep target-specific `unobserve()` checks. diff --git a/.changeset/fix-only-export-components-matcher.md b/.changeset/fix-only-export-components-matcher.md deleted file mode 100644 index 8e66435dcb..0000000000 --- a/.changeset/fix-only-export-components-matcher.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -Recognize JSX handlers passed to stable local dispatchers with an explicit React return type. Keep reporting callback registries with unknown or non-rendering return types. diff --git a/.changeset/fix-staged-git-dir-worktree.md b/.changeset/fix-staged-git-dir-worktree.md deleted file mode 100644 index ea2008731c..0000000000 --- a/.changeset/fix-staged-git-dir-worktree.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-doctor": patch ---- - -Fix `--staged` refusing to scan in linked git worktrees when `GIT_DIR` is set. Clear the inherited `GIT_DIR` environment variable in the staged divergence check so git status resolves paths correctly, matching the fix for scoped scans in #1516. diff --git a/.changeset/fp104-boolean-render-guard.md b/.changeset/fp104-boolean-render-guard.md deleted file mode 100644 index 0a301bd870..0000000000 --- a/.changeset/fp104-boolean-render-guard.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Use constant Boolean initializers before treating numeric-looking JSX guard names as numbers. Preserve warnings for mutable bindings, destructuring defaults, and numeric values. diff --git a/.changeset/fp104-data-router-boundary.md b/.changeset/fp104-data-router-boundary.md deleted file mode 100644 index 689627d665..0000000000 --- a/.changeset/fp104-data-router-boundary.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Require root route error boundaries only for data routers, since declarative useRoutes configurations do not use data-router error handling. diff --git a/.changeset/fp104-legacy-class-this.md b/.changeset/fp104-legacy-class-this.md deleted file mode 100644 index 5046911ef9..0000000000 --- a/.changeset/fp104-legacy-class-this.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize legacy React.createClass components so render callbacks retain their instance this instead of being treated as function components. diff --git a/.changeset/fp104-legacy-link-anchor.md b/.changeset/fp104-legacy-link-anchor.md deleted file mode 100644 index 8d329908d9..0000000000 --- a/.changeset/fp104-legacy-link-anchor.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Accept direct anchor children owned by an imported Next Link component, including the legacy Link child API. diff --git a/.changeset/fp104-local-updater-parameter.md b/.changeset/fp104-local-updater-parameter.md deleted file mode 100644 index a9651aee89..0000000000 --- a/.changeset/fp104-local-updater-parameter.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Allow state updater callbacks to reassign their local parameter while still reporting writes to prior-state properties and captured values. diff --git a/.changeset/fp104-native-module-versions.md b/.changeset/fp104-native-module-versions.md deleted file mode 100644 index 5ecb10b3ff..0000000000 --- a/.changeset/fp104-native-module-versions.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Respect the installed or declared React Native version before reporting removed AsyncStorage and WebView exports. Reuse package-version resolution and track manifests for diagnostic cache invalidation. diff --git a/.changeset/fp104-native-safe-area-view.md b/.changeset/fp104-native-safe-area-view.md deleted file mode 100644 index 589f654221..0000000000 --- a/.changeset/fp104-native-safe-area-view.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Stop reporting the core SafeAreaView export as removed. It remains implemented even where it is deprecated. diff --git a/.changeset/fp104-next-pages-app-path.md b/.changeset/fp104-next-pages-app-path.md deleted file mode 100644 index 27a0cbf435..0000000000 --- a/.changeset/fp104-next-pages-app-path.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"react-doctor": patch -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch ---- - -Restrict App Router path checks to the project app or src/app directory so nested Pages Router paths do not trigger App Router rules. diff --git a/.changeset/fp104-optional-fetch-status.md b/.changeset/fp104-optional-fetch-status.md deleted file mode 100644 index 0ac0da7f23..0000000000 --- a/.changeset/fp104-optional-fetch-status.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize optional-chain and TypeScript-wrapped response status guards before fetch body reads. diff --git a/.changeset/fp104-promise-find-api.md b/.changeset/fp104-promise-find-api.md deleted file mode 100644 index 4bc69313a8..0000000000 --- a/.changeset/fp104-promise-find-api.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"react-doctor": patch -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch ---- - -Avoid treating promise-returning query APIs as array find calls. Keep reports for known arrays and known predicates. diff --git a/.changeset/fp104-static-import-assertion.md b/.changeset/fp104-static-import-assertion.md deleted file mode 100644 index 9f6a16ac8b..0000000000 --- a/.changeset/fp104-static-import-assertion.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize static import and require paths wrapped in TypeScript assertions, while retaining warnings for dynamic paths inside those wrappers. diff --git a/.changeset/fp104-suspense-state-reads.md b/.changeset/fp104-suspense-state-reads.md deleted file mode 100644 index 1efce9996e..0000000000 --- a/.changeset/fp104-suspense-state-reads.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Preserve state used by a render-phase throw, including Suspense promises and errors, instead of recommending a ref. diff --git a/.changeset/fp104-timer-cleanup-pairing.md b/.changeset/fp104-timer-cleanup-pairing.md deleted file mode 100644 index a1efaf62bd..0000000000 --- a/.changeset/fp104-timer-cleanup-pairing.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize either global timer-clear API as releasing a matching timeout or interval handle, including exhaustive retained timer collections. diff --git a/.changeset/fp104-tooltip-accessible-name.md b/.changeset/fp104-tooltip-accessible-name.md deleted file mode 100644 index 5843e572ec..0000000000 --- a/.changeset/fp104-tooltip-accessible-name.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Allow author-provided accessible names on the tooltip role. Preserve naming restrictions on roles that prohibit them and warnings for unsupported tooltip states. diff --git a/.changeset/fp104-unoptimized-image-sizes.md b/.changeset/fp104-unoptimized-image-sizes.md deleted file mode 100644 index 146b5815e3..0000000000 --- a/.changeset/fp104-unoptimized-image-sizes.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Skip missing image sizes advice when next/image explicitly disables optimization, since that path does not generate responsive source candidates. diff --git a/.changeset/fpfix-control-has-associated-label.md b/.changeset/fpfix-control-has-associated-label.md deleted file mode 100644 index cd2ee29f7b..0000000000 --- a/.changeset/fpfix-control-has-associated-label.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -A native wrapping or associated label can give a control its accessible name through its title. Recognize that name while keeping warnings for empty labels, unrelated labels, and custom wrappers. diff --git a/.changeset/fpfix-display-name.md b/.changeset/fpfix-display-name.md deleted file mode 100644 index 9d223d3fb1..0000000000 --- a/.changeset/fpfix-display-name.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -A returned scalar formatter can use JSX only when its scalar input is null. React component props do not follow that path. Exclude these formatters while keeping warnings when JSX is reachable for normal props, a reassigned parameter, or another return path. diff --git a/.changeset/fpfix-jsx-data-factories.md b/.changeset/fpfix-jsx-data-factories.md deleted file mode 100644 index 3b5517c55f..0000000000 --- a/.changeset/fpfix-jsx-data-factories.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -Avoid missing-key warnings for JSX arrays returned as data by module-level object factories with no local use. Keep warnings for component and render methods, local factory uses, and arrays rendered directly as children. diff --git a/.changeset/fpfix-no-array-index-as-key.md b/.changeset/fpfix-no-array-index-as-key.md deleted file mode 100644 index 19fd50404f..0000000000 --- a/.changeset/fpfix-no-array-index-as-key.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -A class render helper can receive indices from a numeric Array.from placeholder list. Accept these keys only when every visible use proves that placeholder source and the helper does not escape. Keep warnings for mutable data lists and unknown callers. diff --git a/.changeset/fpfix-no-hover-only-reveal.md b/.changeset/fpfix-no-hover-only-reveal.md deleted file mode 100644 index e14bfcf74b..0000000000 --- a/.changeset/fpfix-no-hover-only-reveal.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -A focusable action revealed by group hover also becomes visible when it receives keyboard focus. Accept its own focus or focus-visible opacity reveal when that reveal covers the hover scope. Keep warnings for hidden, invisible, non-focusable, and mismatched-scope controls. diff --git a/.changeset/fpfix-no-side-effect-in-state-updater-function.md b/.changeset/fpfix-no-side-effect-in-state-updater-function.md deleted file mode 100644 index 306bbe9deb..0000000000 --- a/.changeset/fpfix-no-side-effect-in-state-updater-function.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -An updater may copy each state element before a local helper changes those fresh copies. Track that ownership through helper parameters and for-of loops. Keep warnings for shared objects, nested shared fields, replaced elements, and aliases that add shared values. diff --git a/.changeset/fpfix-no-symmetric-text-button-padding.md b/.changeset/fpfix-no-symmetric-text-button-padding.md deleted file mode 100644 index d05d88a750..0000000000 --- a/.changeset/fpfix-no-symmetric-text-button-padding.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -An icon button with a screen-reader-only label is not a text button for visual padding. Ignore hidden label text, but keep visible text and not-sr-only overrides in the check. diff --git a/.changeset/fpfix-only-export-components.md b/.changeset/fpfix-only-export-components.md deleted file mode 100644 index 7f3f34f58b..0000000000 --- a/.changeset/fpfix-only-export-components.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch ---- - -A stable local factory that returns a component or forwardRef component is a valid component export. Inspect the factory return paths and keep warnings for mixed returns, reassigned factories, and unknown factory outputs. diff --git a/.changeset/fresh-clone-keys.md b/.changeset/fresh-clone-keys.md deleted file mode 100644 index 4f7f10ecbc..0000000000 --- a/.changeset/fresh-clone-keys.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Report array-index keys passed as React cloneElement overrides, including imported aliases and static computed keys. diff --git a/.changeset/fresh-conditional-sets.md b/.changeset/fresh-conditional-sets.md deleted file mode 100644 index 483b52ffec..0000000000 --- a/.changeset/fresh-conditional-sets.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Allow updater callbacks to mutate a local container when both branches of its conditional initializer create a fresh container. Continue reporting mutations of prior state and shared collections. diff --git a/.changeset/guarded-dependency-fallback.md b/.changeset/guarded-dependency-fallback.md deleted file mode 100644 index 6ab619d1e8..0000000000 --- a/.changeset/guarded-dependency-fallback.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Ignore unreachable fresh fallbacks inside a controlled-state selection when the value type excludes null. diff --git a/.changeset/helper-property-dependencies.md b/.changeset/helper-property-dependencies.md deleted file mode 100644 index e19a3183d7..0000000000 --- a/.changeset/helper-property-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Use the properties read by a resolved local helper when checking object argument dependencies. diff --git a/.changeset/identical-placeholder-keys.md b/.changeset/identical-placeholder-keys.md deleted file mode 100644 index 01468ea21d..0000000000 --- a/.changeset/identical-placeholder-keys.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Accept positional keys for immutable arrays of identical literal placeholders. Keep checks for distinct values, records, spreads, and mutated arrays. diff --git a/.changeset/imported-listener-identity.md b/.changeset/imported-listener-identity.md deleted file mode 100644 index 301973a7aa..0000000000 --- a/.changeset/imported-listener-identity.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Detect fresh cleanup callbacks through local imported wrappers of DOM event listener APIs. diff --git a/.changeset/initialized-subscription-arrays.md b/.changeset/initialized-subscription-arrays.md deleted file mode 100644 index e9a2a159de..0000000000 --- a/.changeset/initialized-subscription-arrays.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Track subscriptions pushed into arrays that already contain other owned handles. diff --git a/.changeset/layer-lifecycle-callbacks.md b/.changeset/layer-lifecycle-callbacks.md deleted file mode 100644 index a4da39cb1a..0000000000 --- a/.changeset/layer-lifecycle-callbacks.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Do not classify paired Layer.extend lifecycle methods as React event handlers. diff --git a/.changeset/lazy-ref-local-alias.md b/.changeset/lazy-ref-local-alias.md deleted file mode 100644 index ced9b836e3..0000000000 --- a/.changeset/lazy-ref-local-alias.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize deterministic lazy ref initialization through an immediately preceding local assignment. Check the resolved value for non-deterministic initialization hidden by aliases. diff --git a/.changeset/local-loaders-parent-notification.md b/.changeset/local-loaders-parent-notification.md deleted file mode 100644 index 8d67e617f2..0000000000 --- a/.changeset/local-loaders-parent-notification.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Avoid parent-notification warnings when a local memoized loader only reads props and updates local state. Keep warnings for actual parent callback calls, including asynchronous and direct callback wrappers. diff --git a/.changeset/named-react-render-callbacks.md b/.changeset/named-react-render-callbacks.md deleted file mode 100644 index c1d5b28bbf..0000000000 --- a/.changeset/named-react-render-callbacks.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize named functions passed to React memo and forwardRef as render scopes in rules-of-hooks, including nonstandard internal names. Keep conditional and nested hook checks active. diff --git a/.changeset/object-url-allocation-guard.md b/.changeset/object-url-allocation-guard.md deleted file mode 100644 index 2edd3b8ec2..0000000000 --- a/.changeset/object-url-allocation-guard.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize object URL cleanup returned on every path after URL creation, including effects that return early before they allocate a URL. diff --git a/.changeset/omitted-effect-dependencies.md b/.changeset/omitted-effect-dependencies.md deleted file mode 100644 index d790daad99..0000000000 --- a/.changeset/omitted-effect-dependencies.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Prevent boolean-toggle cleanup analysis from crashing when an effect omits its dependency array. Preserve the existing toggle diagnostic and functional-update exemption. diff --git a/.changeset/owned-observer-helper.md b/.changeset/owned-observer-helper.md deleted file mode 100644 index 9658eff2b8..0000000000 --- a/.changeset/owned-observer-helper.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Follow guarded observer setup helpers invoked by effect-owned listeners. diff --git a/.changeset/owned-request-map-reset.md b/.changeset/owned-request-map-reset.md deleted file mode 100644 index 51db5fb757..0000000000 --- a/.changeset/owned-request-map-reset.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize loading-set resets paired with cancellation of owned request-map entries. diff --git a/.changeset/plain-context-registration.md b/.changeset/plain-context-registration.md deleted file mode 100644 index cd7df7db63..0000000000 --- a/.changeset/plain-context-registration.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize react_ujs useContext and useContexts as component registration methods rather than React hooks. Support stable CommonJS and ES module bindings. diff --git a/.changeset/plain-imported-data-getters.md b/.changeset/plain-imported-data-getters.md deleted file mode 100644 index 5a62b5f9a3..0000000000 --- a/.changeset/plain-imported-data-getters.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Do not classify an imported use-prefixed function as a React hook when its resolved implementation only returns static data. diff --git a/.changeset/plain-string-token-keys.md b/.changeset/plain-string-token-keys.md deleted file mode 100644 index 4264df7779..0000000000 --- a/.changeset/plain-string-token-keys.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Accept positional keys for plain text rows from string splitting and Boolean filtering. Keep checks for stateful children, unknown split methods, and changed token arrays. diff --git a/.changeset/portal-mount-state.md b/.changeset/portal-mount-state.md deleted file mode 100644 index cbb9788207..0000000000 --- a/.changeset/portal-mount-state.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize portal readiness state after DOM container discovery. diff --git a/.changeset/position-only-map-keys.md b/.changeset/position-only-map-keys.md deleted file mode 100644 index 188094a35e..0000000000 --- a/.changeset/position-only-map-keys.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Accept index keys for identical map slots that ignore the item and collection values and use the index only as a key. Keep warnings when output depends on an item or an indexed record. diff --git a/.changeset/post-await-cancellation-aliases.md b/.changeset/post-await-cancellation-aliases.md deleted file mode 100644 index e1a39013e6..0000000000 --- a/.changeset/post-await-cancellation-aliases.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize fresh const aliases of effect cancellation guards after await. Keep warnings when a snapshot was captured before suspension or another await can make it stale. diff --git a/.changeset/primitive-accumulator-labels.md b/.changeset/primitive-accumulator-labels.md deleted file mode 100644 index 879a37f739..0000000000 --- a/.changeset/primitive-accumulator-labels.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize primitive cumulative labels in stateless index-keyed rows. diff --git a/.changeset/property-placeholder-counts.md b/.changeset/property-placeholder-counts.md deleted file mode 100644 index b1fbc44173..0000000000 --- a/.changeset/property-placeholder-counts.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Accept positional keys for Array.from slots whose count comes from a property or expression. Keep checks when the index reads external records or the source has record entries. diff --git a/.changeset/quiet-inputs-remount.md b/.changeset/quiet-inputs-remount.md deleted file mode 100644 index 47d17e3999..0000000000 --- a/.changeset/quiet-inputs-remount.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Detect unstable nested components created inside React forwardRef and memo render callbacks, including import aliases and TypeScript wrappers. diff --git a/.changeset/quiet-request-predicates.md b/.changeset/quiet-request-predicates.md deleted file mode 100644 index 3f111a8bc3..0000000000 --- a/.changeset/quiet-request-predicates.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize request ownership predicates and loading resets on proven view, close, and unmount paths. Keep warnings when an invalidated request can leave the loading flag set. diff --git a/.changeset/quiet-solid-hooks.md b/.changeset/quiet-solid-hooks.md deleted file mode 100644 index 5067bb5684..0000000000 --- a/.changeset/quiet-solid-hooks.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Keep React hook ordering checks out of files that use a proven non-React JSX runtime. Mixed React files retain the checks. diff --git a/.changeset/quiet-warning-exit-code.md b/.changeset/quiet-warning-exit-code.md deleted file mode 100644 index 5ea73c1f78..0000000000 --- a/.changeset/quiet-warning-exit-code.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-doctor": patch ---- - -Add `--warning-exit-code ` for non-blocking warnings, including GitLab CI jobs that use `allow_failure.exit_codes`. Accept integers from 2 to 255. Preserve existing blocking rules, CI surface filters, and default exit codes across text, JSON, and interactive reports. diff --git a/.changeset/ref-owned-object-urls.md b/.changeset/ref-owned-object-urls.md deleted file mode 100644 index 066783c32d..0000000000 --- a/.changeset/ref-owned-object-urls.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize object URLs retained in React refs when replacement and unmount both revoke the owned value. diff --git a/.changeset/released-object-url-state.md b/.changeset/released-object-url-state.md deleted file mode 100644 index 53bc26cb38..0000000000 --- a/.changeset/released-object-url-state.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize clearing the state handle of an object URL after revocation. diff --git a/.changeset/retained-disposer-helpers.md b/.changeset/retained-disposer-helpers.md deleted file mode 100644 index 9e0e4f7a1b..0000000000 --- a/.changeset/retained-disposer-helpers.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Follow synchronous cleanup helpers that invoke a retained listener disposer on unmount. diff --git a/.changeset/returned-component-factories.md b/.changeset/returned-component-factories.md deleted file mode 100644 index ee015340c0..0000000000 --- a/.changeset/returned-component-factories.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Do not treat directly returned component functions as JSX rendered by their factory. Keep detecting direct component calls and executed render callbacks. diff --git a/.changeset/shadowed-timer-bindings.md b/.changeset/shadowed-timer-bindings.md deleted file mode 100644 index 97f26a822f..0000000000 --- a/.changeset/shadowed-timer-bindings.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Avoid cleanup warnings for local functions and state setters named setInterval or setTimeout. Require a global timer or a matching Node timers import before classifying these calls as timer allocations. diff --git a/.changeset/stable-xstate-service-send.md b/.changeset/stable-xstate-service-send.md deleted file mode 100644 index e6023184f9..0000000000 --- a/.changeset/stable-xstate-service-send.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"oxlint-plugin-react-doctor": patch -"eslint-plugin-react-doctor": patch -"react-doctor": patch ---- - -Recognize the stable send result of XState React v1 useService when its interpreter is a module singleton. diff --git a/packages/api/CHANGELOG.md b/packages/api/CHANGELOG.md index 9663dfc3bd..af56c65d08 100644 --- a/packages/api/CHANGELOG.md +++ b/packages/api/CHANGELOG.md @@ -1,5 +1,12 @@ # @react-doctor/api +## 0.9.18 + +### Patch Changes + +- Updated dependencies [[`d53c820`](https://github.com/millionco/react-doctor/commit/d53c820dc65d7d2d4ab931a921507d81163540ec)]: + - @react-doctor/core@0.9.18 + ## 0.9.17 ### Patch Changes diff --git a/packages/api/package.json b/packages/api/package.json index 583ada90a5..1c8bfcacf8 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@react-doctor/api", - "version": "0.9.17", + "version": "0.9.18", "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 c6316551ff..33f4ead858 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,14 @@ # @react-doctor/core +## 0.9.18 + +### Patch Changes + +- [#1852](https://github.com/millionco/react-doctor/pull/1852) [`d53c820`](https://github.com/millionco/react-doctor/commit/d53c820dc65d7d2d4ab931a921507d81163540ec) Thanks [@skoshx](https://github.com/skoshx)! - Exclude `.cloudflare` build output directory from source file discovery. Cloudflare's `cf` CLI stores compiled Worker bundles and cache state there, mirroring the existing `.wrangler` exclusion. + +- Updated dependencies [[`6932e7d`](https://github.com/millionco/react-doctor/commit/6932e7de483214c12b04341d1cfbc59e10ceeaca), [`0298eb8`](https://github.com/millionco/react-doctor/commit/0298eb876f8511a703b1eb7d6693f0ee0f612b0a), [`012e208`](https://github.com/millionco/react-doctor/commit/012e208ae71d9f60df476043adf01f332df040ed), [`bb00a27`](https://github.com/millionco/react-doctor/commit/bb00a277d9a321116ad6e715b27f06f4ad1ec648), [`1f6b98a`](https://github.com/millionco/react-doctor/commit/1f6b98aeb7469caa700a9e8b7bc88d8c6342426e), [`a68f193`](https://github.com/millionco/react-doctor/commit/a68f1933e218671a60ae422ee70d56c8612c6031), [`72fab66`](https://github.com/millionco/react-doctor/commit/72fab6670c3419bb193751fe35eae99bd500d107), [`e2b047b`](https://github.com/millionco/react-doctor/commit/e2b047bcdcb7d8e6f13ea1f6c3ef027fbd0fc79e), [`a1cff2e`](https://github.com/millionco/react-doctor/commit/a1cff2e7d1939a23776316950eb040bf4d5b6402), [`89c6701`](https://github.com/millionco/react-doctor/commit/89c67017c1634cd22457a616545da05c2ceba0da), [`e18d7da`](https://github.com/millionco/react-doctor/commit/e18d7daaa0c6bb2203de7546c2a870d4d0c02fef), [`f3f167e`](https://github.com/millionco/react-doctor/commit/f3f167e742f0a84aa5e01d3b31a748f552eba9e9), [`909b8e5`](https://github.com/millionco/react-doctor/commit/909b8e5f1bbbdfbd58f5f6b3bf0b031d1afd0c0b), [`281fdc9`](https://github.com/millionco/react-doctor/commit/281fdc965635f0c7e3ad7d80d2c98bdf3d92ae52), [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486), [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486), [`7bebcfc`](https://github.com/millionco/react-doctor/commit/7bebcfc1e01445f8fde181e8b8cf1619f836955d), [`6790398`](https://github.com/millionco/react-doctor/commit/67903983c48c59129f08142734e63c9f005bd1ee), [`ad8bca6`](https://github.com/millionco/react-doctor/commit/ad8bca6335a66f1aeb432b8bc3dd86f895f8f02c), [`c92fec1`](https://github.com/millionco/react-doctor/commit/c92fec1c3ea96cf21ab761118d24358df2476eea), [`2825dfd`](https://github.com/millionco/react-doctor/commit/2825dfd67e0049f3247cf033ea7769e4fc3ec90c), [`cc78fa3`](https://github.com/millionco/react-doctor/commit/cc78fa3bb38594bbeea7040fe1e144d19b0eaaf5), [`4f8866c`](https://github.com/millionco/react-doctor/commit/4f8866ce3122b5155c0bd37756e030b952e9cddd), [`96bf20f`](https://github.com/millionco/react-doctor/commit/96bf20fb5fe084d2ca436c1206fb34696226f15e), [`4899bc4`](https://github.com/millionco/react-doctor/commit/4899bc4914bdf956c119ad360958ed83c40c537d), [`45f9769`](https://github.com/millionco/react-doctor/commit/45f97697cb966e6a0bf7214b95087ab09f483900), [`dfb598a`](https://github.com/millionco/react-doctor/commit/dfb598a46bcc4865b639c1a347dbc681b673f819), [`a293fac`](https://github.com/millionco/react-doctor/commit/a293facac53cfd06840a75e57e18b263a629ef50), [`1b149ba`](https://github.com/millionco/react-doctor/commit/1b149bae5f6ecf350b689148b751f0e69afbdb3a), [`888dc2a`](https://github.com/millionco/react-doctor/commit/888dc2a199a1cc6d6d75c30dbba1975936a2026f), [`7e24c41`](https://github.com/millionco/react-doctor/commit/7e24c411ddc8a0cb4b99c70652fdc2fa26e5c891), [`e50ba27`](https://github.com/millionco/react-doctor/commit/e50ba271d99c9c27a132852c4d60f6484371cddd), [`91b6991`](https://github.com/millionco/react-doctor/commit/91b6991584d6e5676bbf4c83022b58afe51d933d), [`d8c0517`](https://github.com/millionco/react-doctor/commit/d8c0517cbf594fd3b88486c116beb58ffcedb7c8), [`0d99110`](https://github.com/millionco/react-doctor/commit/0d991100a78f74ecb834af1c0367d1d2046f32d3), [`712a08a`](https://github.com/millionco/react-doctor/commit/712a08a5f0f389424278ca3b3a1621437cee350e), [`e6457e3`](https://github.com/millionco/react-doctor/commit/e6457e3572d872a157bb335b32f63cfdae31ee52), [`d1cd769`](https://github.com/millionco/react-doctor/commit/d1cd7699164dbcd3b1f19ebd978a7aaefb0cb723), [`0a8982b`](https://github.com/millionco/react-doctor/commit/0a8982be0bc2ba54975d10377daccbcff57eabf5), [`c1181f0`](https://github.com/millionco/react-doctor/commit/c1181f06681aa7ad41c70b04fac66374a5b46495), [`9e9680b`](https://github.com/millionco/react-doctor/commit/9e9680b743153e5674b70b96177d8f49309afd91), [`a47c7e0`](https://github.com/millionco/react-doctor/commit/a47c7e07bf7a9f87153b98b7d239029fb5143e32), [`2c5d1a1`](https://github.com/millionco/react-doctor/commit/2c5d1a1cc1f057c02d644e00d4222aea7d085e08), [`ab83f31`](https://github.com/millionco/react-doctor/commit/ab83f31399c05801e10d6d0c2e52611e3a26b1bf), [`a410280`](https://github.com/millionco/react-doctor/commit/a410280ed979dc00ef2826f81e2f873a48bc5da4), [`7ad2c9b`](https://github.com/millionco/react-doctor/commit/7ad2c9b9ad1d6819996c4c38afaf0557e704887e), [`03b21c8`](https://github.com/millionco/react-doctor/commit/03b21c8b367ff16057c91e77178a3c7ec60cb597), [`55c2235`](https://github.com/millionco/react-doctor/commit/55c22359ea964386e0c2fdc087abeed8d5a5e86f), [`683d0c2`](https://github.com/millionco/react-doctor/commit/683d0c2a93c0698b67c19e115733785687f22fbc), [`45f5620`](https://github.com/millionco/react-doctor/commit/45f5620c63551e3fbb0f9c3befd4a4c3cc4b34e5), [`738b340`](https://github.com/millionco/react-doctor/commit/738b340ffc476d373a789b8a7d95667d5edfc618), [`130fc45`](https://github.com/millionco/react-doctor/commit/130fc45da44e2e1b6d989fd51f6c801bfa7c3801), [`6ee5988`](https://github.com/millionco/react-doctor/commit/6ee5988e679d3366b940f59c2e0374548cc97cbc), [`5b301c9`](https://github.com/millionco/react-doctor/commit/5b301c9f5103e257cb6d88985b846bcc725ea7b3), [`b6b2d68`](https://github.com/millionco/react-doctor/commit/b6b2d6842f3ff5d5b0976dae9750d48865166846), [`f986f15`](https://github.com/millionco/react-doctor/commit/f986f15faf94b37e084f58d8cf92e421c0299e38), [`1451cdb`](https://github.com/millionco/react-doctor/commit/1451cdb65b25f9a61deaf7774fe84a56847b067c), [`67531cc`](https://github.com/millionco/react-doctor/commit/67531cc656ef74fc126f7b8df2cc0e912ddaac6a), [`9e305df`](https://github.com/millionco/react-doctor/commit/9e305dff22273ae9b39c5bb03482c37da457178e), [`83bf9ad`](https://github.com/millionco/react-doctor/commit/83bf9ad82c9ccca753bbaf744b2aa14cc84ddd6f), [`8bfb598`](https://github.com/millionco/react-doctor/commit/8bfb5983478efa72021d17e8dfc6c8919248ebcc), [`4fd3e87`](https://github.com/millionco/react-doctor/commit/4fd3e87bbaf437efa72f296d19bfa071f98c23dc), [`295becb`](https://github.com/millionco/react-doctor/commit/295becbdf0d3f68b3d222df6855098492bd524ea), [`8fdead9`](https://github.com/millionco/react-doctor/commit/8fdead90749f5eb2282b028c81ccbab4b0c1a1f0), [`6331b39`](https://github.com/millionco/react-doctor/commit/6331b393c0556a18a08ccacc0aa7c001fb3ca4ce), [`0179427`](https://github.com/millionco/react-doctor/commit/01794275bcc8f6ecc7bae843600b6c2d0a433f7b), [`6bed9f6`](https://github.com/millionco/react-doctor/commit/6bed9f6e63e75d012717703e01100e39fd7206a9), [`a26bc44`](https://github.com/millionco/react-doctor/commit/a26bc446384717f175189f954f6663489767c3da), [`4bcbcd9`](https://github.com/millionco/react-doctor/commit/4bcbcd932b04e3d6c4b8bea1b98c8c1cb1d22678), [`943ca32`](https://github.com/millionco/react-doctor/commit/943ca324c3182f9506ed1a6e9384d20d351b4eb3), [`b880403`](https://github.com/millionco/react-doctor/commit/b88040353a46500eb839d6d46e685d4ea60132d0)]: + - oxlint-plugin-react-doctor@0.9.18 + ## 0.9.17 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index 2ddc9845fd..227279da27 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@react-doctor/core", - "version": "0.9.17", + "version": "0.9.18", "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 fa73835a4c..8ca48b394d 100644 --- a/packages/eslint-plugin-react-doctor/CHANGELOG.md +++ b/packages/eslint-plugin-react-doctor/CHANGELOG.md @@ -1,5 +1,130 @@ # eslint-plugin-react-doctor +## 0.9.18 + +### Patch Changes + +- [#1943](https://github.com/millionco/react-doctor/pull/1943) [`6932e7d`](https://github.com/millionco/react-doctor/commit/6932e7de483214c12b04341d1cfbc59e10ceeaca) Thanks [@aidenybai](https://github.com/aidenybai)! - Match API Platform subscription IDs to the provider's resource-and-IDs unsubscribe contract. + +- [#1920](https://github.com/millionco/react-doctor/pull/1920) [`0298eb8`](https://github.com/millionco/react-doctor/commit/0298eb876f8511a703b1eb7d6693f0ee0f612b0a) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not infer React hooks from relative helper imports in Angular component classes. Continue to check React and React ecosystem imports. + +- [#1926](https://github.com/millionco/react-doctor/pull/1926) [`012e208`](https://github.com/millionco/react-doctor/commit/012e208ae71d9f60df476043adf01f332df040ed) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify a local state transition as a prop-driven adjustment when its only prop dependencies are called notifications. Keep checks for prop values used in guards, results, or reset dependencies. + +- [#1911](https://github.com/millionco/react-doctor/pull/1911) [`bb00a27`](https://github.com/millionco/react-doctor/commit/bb00a277d9a321116ad6e715b27f06f4ad1ec648) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not recommend lazy state initialization for cheap primitive toString calls, including numeric React Native Dimensions values. Keep warnings for unproven receivers and nested expensive calls. + +- [#1919](https://github.com/millionco/react-doctor/pull/1919) [`1f6b98a`](https://github.com/millionco/react-doctor/commit/1f6b98aeb7469caa700a9e8b7bc88d8c6342426e) Thanks [@aidenybai](https://github.com/aidenybai)! - Report inaccessible parent click actions when descendant handlers stop keyboard-generated clicks from reaching them. + +- [#1928](https://github.com/millionco/react-doctor/pull/1928) [`a68f193`](https://github.com/millionco/react-doctor/commit/a68f1933e218671a60ae422ee70d56c8612c6031) Thanks [@aidenybai](https://github.com/aidenybai)! - Match listener cleanup when both branches of conditional options have the same capture value. Keep warnings for differing capture values, changed options, and missing cleanup. + + Recognize exhaustive listener-removal loops extracted into a synchronous helper when the cleanup only invokes that helper. + +- [#1933](https://github.com/millionco/react-doctor/pull/1933) [`72fab66`](https://github.com/millionco/react-doctor/commit/72fab6670c3419bb193751fe35eae99bd500d107) Thanks [@aidenybai](https://github.com/aidenybai)! - Preserve count-based placeholder identity through a local array before mapping wrappers. + +- [#1907](https://github.com/millionco/react-doctor/pull/1907) [`e2b047b`](https://github.com/millionco/react-doctor/commit/e2b047bcdcb7d8e6f13ea1f6c3ef027fbd0fc79e) Thanks [@aidenybai](https://github.com/aidenybai)! - Preserve numeric placeholder-loop identity through local key aliases, including constant-prefix keys. Continue reporting index aliases for loops over array data. + +- [#1905](https://github.com/millionco/react-doctor/pull/1905) [`a1cff2e`](https://github.com/millionco/react-doctor/commit/a1cff2e7d1939a23776316950eb040bf4d5b6402) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep browser reads in helpers defined inside React effects out of server-render diagnostics. Preserve warnings for render callbacks and shadowed effect functions. + +- [#1924](https://github.com/millionco/react-doctor/pull/1924) [`89c6701`](https://github.com/millionco/react-doctor/commit/89c67017c1634cd22457a616545da05c2ceba0da) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify zero-argument effect notifications as state payloads sent to a parent. Continue to report callbacks that pass local state. + +- [#1863](https://github.com/millionco/react-doctor/pull/1863) [`e18d7da`](https://github.com/millionco/react-doctor/commit/e18d7daaa0c6bb2203de7546c2a870d4d0c02fef) Thanks [@skoshx](https://github.com/skoshx)! - ESLint adapter now respects rule `requires` gates. Rules that require capabilities the project doesn't have (like `ssr` or `react-router:8`) are now correctly skipped when capabilities are declared, matching the CLI behavior. Fixes false errors on dependency bumps when using the ESLint adapter with explicit capabilities. + +- [#1869](https://github.com/millionco/react-doctor/pull/1869) [`7bebcfc`](https://github.com/millionco/react-doctor/commit/7bebcfc1e01445f8fde181e8b8cf1619f836955d) Thanks [@aidenybai](https://github.com/aidenybai)! - Use constant Boolean initializers before treating numeric-looking JSX guard names as numbers. Preserve warnings for mutable bindings, destructuring defaults, and numeric values. + +- [#1873](https://github.com/millionco/react-doctor/pull/1873) [`6790398`](https://github.com/millionco/react-doctor/commit/67903983c48c59129f08142734e63c9f005bd1ee) Thanks [@aidenybai](https://github.com/aidenybai)! - Require root route error boundaries only for data routers, since declarative useRoutes configurations do not use data-router error handling. + +- [#1875](https://github.com/millionco/react-doctor/pull/1875) [`ad8bca6`](https://github.com/millionco/react-doctor/commit/ad8bca6335a66f1aeb432b8bc3dd86f895f8f02c) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize legacy React.createClass components so render callbacks retain their instance this instead of being treated as function components. + +- [#1874](https://github.com/millionco/react-doctor/pull/1874) [`c92fec1`](https://github.com/millionco/react-doctor/commit/c92fec1c3ea96cf21ab761118d24358df2476eea) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept direct anchor children owned by an imported Next Link component, including the legacy Link child API. + +- [#1872](https://github.com/millionco/react-doctor/pull/1872) [`2825dfd`](https://github.com/millionco/react-doctor/commit/2825dfd67e0049f3247cf033ea7769e4fc3ec90c) Thanks [@aidenybai](https://github.com/aidenybai)! - Allow state updater callbacks to reassign their local parameter while still reporting writes to prior-state properties and captured values. + +- [#1878](https://github.com/millionco/react-doctor/pull/1878) [`cc78fa3`](https://github.com/millionco/react-doctor/commit/cc78fa3bb38594bbeea7040fe1e144d19b0eaaf5) Thanks [@aidenybai](https://github.com/aidenybai)! - Respect the installed or declared React Native version before reporting removed AsyncStorage and WebView exports. Reuse package-version resolution and track manifests for diagnostic cache invalidation. + +- [#1871](https://github.com/millionco/react-doctor/pull/1871) [`4f8866c`](https://github.com/millionco/react-doctor/commit/4f8866ce3122b5155c0bd37756e030b952e9cddd) Thanks [@aidenybai](https://github.com/aidenybai)! - Stop reporting the core SafeAreaView export as removed. It remains implemented even where it is deprecated. + +- [#1880](https://github.com/millionco/react-doctor/pull/1880) [`96bf20f`](https://github.com/millionco/react-doctor/commit/96bf20fb5fe084d2ca436c1206fb34696226f15e) Thanks [@aidenybai](https://github.com/aidenybai)! - Restrict App Router path checks to the project app or src/app directory so nested Pages Router paths do not trigger App Router rules. + +- [#1877](https://github.com/millionco/react-doctor/pull/1877) [`4899bc4`](https://github.com/millionco/react-doctor/commit/4899bc4914bdf956c119ad360958ed83c40c537d) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize optional-chain and TypeScript-wrapped response status guards before fetch body reads. + +- [#1879](https://github.com/millionco/react-doctor/pull/1879) [`45f9769`](https://github.com/millionco/react-doctor/commit/45f97697cb966e6a0bf7214b95087ab09f483900) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid treating promise-returning query APIs as array find calls. Keep reports for known arrays and known predicates. + +- [#1866](https://github.com/millionco/react-doctor/pull/1866) [`dfb598a`](https://github.com/millionco/react-doctor/commit/dfb598a46bcc4865b639c1a347dbc681b673f819) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize static import and require paths wrapped in TypeScript assertions, while retaining warnings for dynamic paths inside those wrappers. + +- [#1870](https://github.com/millionco/react-doctor/pull/1870) [`a293fac`](https://github.com/millionco/react-doctor/commit/a293facac53cfd06840a75e57e18b263a629ef50) Thanks [@aidenybai](https://github.com/aidenybai)! - Preserve state used by a render-phase throw, including Suspense promises and errors, instead of recommending a ref. + +- [#1876](https://github.com/millionco/react-doctor/pull/1876) [`1b149ba`](https://github.com/millionco/react-doctor/commit/1b149bae5f6ecf350b689148b751f0e69afbdb3a) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize either global timer-clear API as releasing a matching timeout or interval handle, including exhaustive retained timer collections. + +- [#1867](https://github.com/millionco/react-doctor/pull/1867) [`888dc2a`](https://github.com/millionco/react-doctor/commit/888dc2a199a1cc6d6d75c30dbba1975936a2026f) Thanks [@aidenybai](https://github.com/aidenybai)! - Allow author-provided accessible names on the tooltip role. Preserve naming restrictions on roles that prohibit them and warnings for unsupported tooltip states. + +- [#1868](https://github.com/millionco/react-doctor/pull/1868) [`7e24c41`](https://github.com/millionco/react-doctor/commit/7e24c411ddc8a0cb4b99c70652fdc2fa26e5c891) Thanks [@aidenybai](https://github.com/aidenybai)! - Skip missing image sizes advice when next/image explicitly disables optimization, since that path does not generate responsive source candidates. + +- [#1915](https://github.com/millionco/react-doctor/pull/1915) [`c1181f0`](https://github.com/millionco/react-doctor/commit/c1181f06681aa7ad41c70b04fac66374a5b46495) Thanks [@aidenybai](https://github.com/aidenybai)! - Report array-index keys passed as React cloneElement overrides, including imported aliases and static computed keys. + +- [#1902](https://github.com/millionco/react-doctor/pull/1902) [`9e9680b`](https://github.com/millionco/react-doctor/commit/9e9680b743153e5674b70b96177d8f49309afd91) Thanks [@aidenybai](https://github.com/aidenybai)! - Allow updater callbacks to mutate a local container when both branches of its conditional initializer create a fresh container. Continue reporting mutations of prior state and shared collections. + +- [#1940](https://github.com/millionco/react-doctor/pull/1940) [`a47c7e0`](https://github.com/millionco/react-doctor/commit/a47c7e07bf7a9f87153b98b7d239029fb5143e32) Thanks [@aidenybai](https://github.com/aidenybai)! - Ignore unreachable fresh fallbacks inside a controlled-state selection when the value type excludes null. + +- [#1937](https://github.com/millionco/react-doctor/pull/1937) [`2c5d1a1`](https://github.com/millionco/react-doctor/commit/2c5d1a1cc1f057c02d644e00d4222aea7d085e08) Thanks [@aidenybai](https://github.com/aidenybai)! - Use the properties read by a resolved local helper when checking object argument dependencies. + +- [#1923](https://github.com/millionco/react-doctor/pull/1923) [`ab83f31`](https://github.com/millionco/react-doctor/commit/ab83f31399c05801e10d6d0c2e52611e3a26b1bf) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept positional keys for immutable arrays of identical literal placeholders. Keep checks for distinct values, records, spreads, and mutated arrays. + +- [#1942](https://github.com/millionco/react-doctor/pull/1942) [`a410280`](https://github.com/millionco/react-doctor/commit/a410280ed979dc00ef2826f81e2f873a48bc5da4) Thanks [@aidenybai](https://github.com/aidenybai)! - Detect fresh cleanup callbacks through local imported wrappers of DOM event listener APIs. + +- [#1934](https://github.com/millionco/react-doctor/pull/1934) [`7ad2c9b`](https://github.com/millionco/react-doctor/commit/7ad2c9b9ad1d6819996c4c38afaf0557e704887e) Thanks [@aidenybai](https://github.com/aidenybai)! - Track subscriptions pushed into arrays that already contain other owned handles. + +- [#1936](https://github.com/millionco/react-doctor/pull/1936) [`03b21c8`](https://github.com/millionco/react-doctor/commit/03b21c8b367ff16057c91e77178a3c7ec60cb597) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify paired Layer.extend lifecycle methods as React event handlers. + +- [#1904](https://github.com/millionco/react-doctor/pull/1904) [`55c2235`](https://github.com/millionco/react-doctor/commit/55c22359ea964386e0c2fdc087abeed8d5a5e86f) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize deterministic lazy ref initialization through an immediately preceding local assignment. Check the resolved value for non-deterministic initialization hidden by aliases. + +- [#1912](https://github.com/millionco/react-doctor/pull/1912) [`683d0c2`](https://github.com/millionco/react-doctor/commit/683d0c2a93c0698b67c19e115733785687f22fbc) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid parent-notification warnings when a local memoized loader only reads props and updates local state. Keep warnings for actual parent callback calls, including asynchronous and direct callback wrappers. + +- [#1909](https://github.com/millionco/react-doctor/pull/1909) [`45f5620`](https://github.com/millionco/react-doctor/commit/45f5620c63551e3fbb0f9c3befd4a4c3cc4b34e5) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize named functions passed to React memo and forwardRef as render scopes in rules-of-hooks, including nonstandard internal names. Keep conditional and nested hook checks active. + +- [#1908](https://github.com/millionco/react-doctor/pull/1908) [`738b340`](https://github.com/millionco/react-doctor/commit/738b340ffc476d373a789b8a7d95667d5edfc618) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize object URL cleanup returned on every path after URL creation, including effects that return early before they allocate a URL. + +- [#1906](https://github.com/millionco/react-doctor/pull/1906) [`130fc45`](https://github.com/millionco/react-doctor/commit/130fc45da44e2e1b6d989fd51f6c801bfa7c3801) Thanks [@aidenybai](https://github.com/aidenybai)! - Prevent boolean-toggle cleanup analysis from crashing when an effect omits its dependency array. Preserve the existing toggle diagnostic and functional-update exemption. + +- [#1931](https://github.com/millionco/react-doctor/pull/1931) [`6ee5988`](https://github.com/millionco/react-doctor/commit/6ee5988e679d3366b940f59c2e0374548cc97cbc) Thanks [@aidenybai](https://github.com/aidenybai)! - Follow guarded observer setup helpers invoked by effect-owned listeners. + +- [#1935](https://github.com/millionco/react-doctor/pull/1935) [`5b301c9`](https://github.com/millionco/react-doctor/commit/5b301c9f5103e257cb6d88985b846bcc725ea7b3) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize loading-set resets paired with cancellation of owned request-map entries. + +- [#1918](https://github.com/millionco/react-doctor/pull/1918) [`b6b2d68`](https://github.com/millionco/react-doctor/commit/b6b2d6842f3ff5d5b0976dae9750d48865166846) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize react_ujs useContext and useContexts as component registration methods rather than React hooks. Support stable CommonJS and ES module bindings. + +- [#1921](https://github.com/millionco/react-doctor/pull/1921) [`f986f15`](https://github.com/millionco/react-doctor/commit/f986f15faf94b37e084f58d8cf92e421c0299e38) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify an imported use-prefixed function as a React hook when its resolved implementation only returns static data. + +- [#1925](https://github.com/millionco/react-doctor/pull/1925) [`1451cdb`](https://github.com/millionco/react-doctor/commit/1451cdb65b25f9a61deaf7774fe84a56847b067c) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept positional keys for plain text rows from string splitting and Boolean filtering. Keep checks for stateful children, unknown split methods, and changed token arrays. + +- [#1929](https://github.com/millionco/react-doctor/pull/1929) [`67531cc`](https://github.com/millionco/react-doctor/commit/67531cc656ef74fc126f7b8df2cc0e912ddaac6a) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize portal readiness state after DOM container discovery. + +- [#1927](https://github.com/millionco/react-doctor/pull/1927) [`9e305df`](https://github.com/millionco/react-doctor/commit/9e305dff22273ae9b39c5bb03482c37da457178e) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept index keys for identical map slots that ignore the item and collection values and use the index only as a key. Keep warnings when output depends on an item or an indexed record. + +- [#1913](https://github.com/millionco/react-doctor/pull/1913) [`83bf9ad`](https://github.com/millionco/react-doctor/commit/83bf9ad82c9ccca753bbaf744b2aa14cc84ddd6f) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize fresh const aliases of effect cancellation guards after await. Keep warnings when a snapshot was captured before suspension or another await can make it stale. + +- [#1930](https://github.com/millionco/react-doctor/pull/1930) [`8bfb598`](https://github.com/millionco/react-doctor/commit/8bfb5983478efa72021d17e8dfc6c8919248ebcc) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize primitive cumulative labels in stateless index-keyed rows. + +- [#1922](https://github.com/millionco/react-doctor/pull/1922) [`4fd3e87`](https://github.com/millionco/react-doctor/commit/4fd3e87bbaf437efa72f296d19bfa071f98c23dc) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept positional keys for Array.from slots whose count comes from a property or expression. Keep checks when the index reads external records or the source has record entries. + +- [#1901](https://github.com/millionco/react-doctor/pull/1901) [`295becb`](https://github.com/millionco/react-doctor/commit/295becbdf0d3f68b3d222df6855098492bd524ea) Thanks [@aidenybai](https://github.com/aidenybai)! - Detect unstable nested components created inside React forwardRef and memo render callbacks, including import aliases and TypeScript wrappers. + +- [#1916](https://github.com/millionco/react-doctor/pull/1916) [`8fdead9`](https://github.com/millionco/react-doctor/commit/8fdead90749f5eb2282b028c81ccbab4b0c1a1f0) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize request ownership predicates and loading resets on proven view, close, and unmount paths. Keep warnings when an invalidated request can leave the loading flag set. + +- [#1917](https://github.com/millionco/react-doctor/pull/1917) [`6331b39`](https://github.com/millionco/react-doctor/commit/6331b393c0556a18a08ccacc0aa7c001fb3ca4ce) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep React hook ordering checks out of files that use a proven non-React JSX runtime. Mixed React files retain the checks. + +- [#1939](https://github.com/millionco/react-doctor/pull/1939) [`0179427`](https://github.com/millionco/react-doctor/commit/01794275bcc8f6ecc7bae843600b6c2d0a433f7b) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize object URLs retained in React refs when replacement and unmount both revoke the owned value. + +- [#1932](https://github.com/millionco/react-doctor/pull/1932) [`6bed9f6`](https://github.com/millionco/react-doctor/commit/6bed9f6e63e75d012717703e01100e39fd7206a9) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize clearing the state handle of an object URL after revocation. + +- [#1938](https://github.com/millionco/react-doctor/pull/1938) [`a26bc44`](https://github.com/millionco/react-doctor/commit/a26bc446384717f175189f954f6663489767c3da) Thanks [@aidenybai](https://github.com/aidenybai)! - Follow synchronous cleanup helpers that invoke a retained listener disposer on unmount. + +- [#1903](https://github.com/millionco/react-doctor/pull/1903) [`4bcbcd9`](https://github.com/millionco/react-doctor/commit/4bcbcd932b04e3d6c4b8bea1b98c8c1cb1d22678) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not treat directly returned component functions as JSX rendered by their factory. Keep detecting direct component calls and executed render callbacks. + +- [#1910](https://github.com/millionco/react-doctor/pull/1910) [`943ca32`](https://github.com/millionco/react-doctor/commit/943ca324c3182f9506ed1a6e9384d20d351b4eb3) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid cleanup warnings for local functions and state setters named setInterval or setTimeout. Require a global timer or a matching Node timers import before classifying these calls as timer allocations. + +- [#1941](https://github.com/millionco/react-doctor/pull/1941) [`b880403`](https://github.com/millionco/react-doctor/commit/b88040353a46500eb839d6d46e685d4ea60132d0) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize the stable send result of XState React v1 useService when its interpreter is a module singleton. + +- Updated dependencies [[`6932e7d`](https://github.com/millionco/react-doctor/commit/6932e7de483214c12b04341d1cfbc59e10ceeaca), [`0298eb8`](https://github.com/millionco/react-doctor/commit/0298eb876f8511a703b1eb7d6693f0ee0f612b0a), [`012e208`](https://github.com/millionco/react-doctor/commit/012e208ae71d9f60df476043adf01f332df040ed), [`bb00a27`](https://github.com/millionco/react-doctor/commit/bb00a277d9a321116ad6e715b27f06f4ad1ec648), [`1f6b98a`](https://github.com/millionco/react-doctor/commit/1f6b98aeb7469caa700a9e8b7bc88d8c6342426e), [`a68f193`](https://github.com/millionco/react-doctor/commit/a68f1933e218671a60ae422ee70d56c8612c6031), [`72fab66`](https://github.com/millionco/react-doctor/commit/72fab6670c3419bb193751fe35eae99bd500d107), [`e2b047b`](https://github.com/millionco/react-doctor/commit/e2b047bcdcb7d8e6f13ea1f6c3ef027fbd0fc79e), [`a1cff2e`](https://github.com/millionco/react-doctor/commit/a1cff2e7d1939a23776316950eb040bf4d5b6402), [`89c6701`](https://github.com/millionco/react-doctor/commit/89c67017c1634cd22457a616545da05c2ceba0da), [`e18d7da`](https://github.com/millionco/react-doctor/commit/e18d7daaa0c6bb2203de7546c2a870d4d0c02fef), [`f3f167e`](https://github.com/millionco/react-doctor/commit/f3f167e742f0a84aa5e01d3b31a748f552eba9e9), [`909b8e5`](https://github.com/millionco/react-doctor/commit/909b8e5f1bbbdfbd58f5f6b3bf0b031d1afd0c0b), [`281fdc9`](https://github.com/millionco/react-doctor/commit/281fdc965635f0c7e3ad7d80d2c98bdf3d92ae52), [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486), [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486), [`7bebcfc`](https://github.com/millionco/react-doctor/commit/7bebcfc1e01445f8fde181e8b8cf1619f836955d), [`6790398`](https://github.com/millionco/react-doctor/commit/67903983c48c59129f08142734e63c9f005bd1ee), [`ad8bca6`](https://github.com/millionco/react-doctor/commit/ad8bca6335a66f1aeb432b8bc3dd86f895f8f02c), [`c92fec1`](https://github.com/millionco/react-doctor/commit/c92fec1c3ea96cf21ab761118d24358df2476eea), [`2825dfd`](https://github.com/millionco/react-doctor/commit/2825dfd67e0049f3247cf033ea7769e4fc3ec90c), [`cc78fa3`](https://github.com/millionco/react-doctor/commit/cc78fa3bb38594bbeea7040fe1e144d19b0eaaf5), [`4f8866c`](https://github.com/millionco/react-doctor/commit/4f8866ce3122b5155c0bd37756e030b952e9cddd), [`96bf20f`](https://github.com/millionco/react-doctor/commit/96bf20fb5fe084d2ca436c1206fb34696226f15e), [`4899bc4`](https://github.com/millionco/react-doctor/commit/4899bc4914bdf956c119ad360958ed83c40c537d), [`45f9769`](https://github.com/millionco/react-doctor/commit/45f97697cb966e6a0bf7214b95087ab09f483900), [`dfb598a`](https://github.com/millionco/react-doctor/commit/dfb598a46bcc4865b639c1a347dbc681b673f819), [`a293fac`](https://github.com/millionco/react-doctor/commit/a293facac53cfd06840a75e57e18b263a629ef50), [`1b149ba`](https://github.com/millionco/react-doctor/commit/1b149bae5f6ecf350b689148b751f0e69afbdb3a), [`888dc2a`](https://github.com/millionco/react-doctor/commit/888dc2a199a1cc6d6d75c30dbba1975936a2026f), [`7e24c41`](https://github.com/millionco/react-doctor/commit/7e24c411ddc8a0cb4b99c70652fdc2fa26e5c891), [`e50ba27`](https://github.com/millionco/react-doctor/commit/e50ba271d99c9c27a132852c4d60f6484371cddd), [`91b6991`](https://github.com/millionco/react-doctor/commit/91b6991584d6e5676bbf4c83022b58afe51d933d), [`d8c0517`](https://github.com/millionco/react-doctor/commit/d8c0517cbf594fd3b88486c116beb58ffcedb7c8), [`0d99110`](https://github.com/millionco/react-doctor/commit/0d991100a78f74ecb834af1c0367d1d2046f32d3), [`712a08a`](https://github.com/millionco/react-doctor/commit/712a08a5f0f389424278ca3b3a1621437cee350e), [`e6457e3`](https://github.com/millionco/react-doctor/commit/e6457e3572d872a157bb335b32f63cfdae31ee52), [`d1cd769`](https://github.com/millionco/react-doctor/commit/d1cd7699164dbcd3b1f19ebd978a7aaefb0cb723), [`0a8982b`](https://github.com/millionco/react-doctor/commit/0a8982be0bc2ba54975d10377daccbcff57eabf5), [`c1181f0`](https://github.com/millionco/react-doctor/commit/c1181f06681aa7ad41c70b04fac66374a5b46495), [`9e9680b`](https://github.com/millionco/react-doctor/commit/9e9680b743153e5674b70b96177d8f49309afd91), [`a47c7e0`](https://github.com/millionco/react-doctor/commit/a47c7e07bf7a9f87153b98b7d239029fb5143e32), [`2c5d1a1`](https://github.com/millionco/react-doctor/commit/2c5d1a1cc1f057c02d644e00d4222aea7d085e08), [`ab83f31`](https://github.com/millionco/react-doctor/commit/ab83f31399c05801e10d6d0c2e52611e3a26b1bf), [`a410280`](https://github.com/millionco/react-doctor/commit/a410280ed979dc00ef2826f81e2f873a48bc5da4), [`7ad2c9b`](https://github.com/millionco/react-doctor/commit/7ad2c9b9ad1d6819996c4c38afaf0557e704887e), [`03b21c8`](https://github.com/millionco/react-doctor/commit/03b21c8b367ff16057c91e77178a3c7ec60cb597), [`55c2235`](https://github.com/millionco/react-doctor/commit/55c22359ea964386e0c2fdc087abeed8d5a5e86f), [`683d0c2`](https://github.com/millionco/react-doctor/commit/683d0c2a93c0698b67c19e115733785687f22fbc), [`45f5620`](https://github.com/millionco/react-doctor/commit/45f5620c63551e3fbb0f9c3befd4a4c3cc4b34e5), [`738b340`](https://github.com/millionco/react-doctor/commit/738b340ffc476d373a789b8a7d95667d5edfc618), [`130fc45`](https://github.com/millionco/react-doctor/commit/130fc45da44e2e1b6d989fd51f6c801bfa7c3801), [`6ee5988`](https://github.com/millionco/react-doctor/commit/6ee5988e679d3366b940f59c2e0374548cc97cbc), [`5b301c9`](https://github.com/millionco/react-doctor/commit/5b301c9f5103e257cb6d88985b846bcc725ea7b3), [`b6b2d68`](https://github.com/millionco/react-doctor/commit/b6b2d6842f3ff5d5b0976dae9750d48865166846), [`f986f15`](https://github.com/millionco/react-doctor/commit/f986f15faf94b37e084f58d8cf92e421c0299e38), [`1451cdb`](https://github.com/millionco/react-doctor/commit/1451cdb65b25f9a61deaf7774fe84a56847b067c), [`67531cc`](https://github.com/millionco/react-doctor/commit/67531cc656ef74fc126f7b8df2cc0e912ddaac6a), [`9e305df`](https://github.com/millionco/react-doctor/commit/9e305dff22273ae9b39c5bb03482c37da457178e), [`83bf9ad`](https://github.com/millionco/react-doctor/commit/83bf9ad82c9ccca753bbaf744b2aa14cc84ddd6f), [`8bfb598`](https://github.com/millionco/react-doctor/commit/8bfb5983478efa72021d17e8dfc6c8919248ebcc), [`4fd3e87`](https://github.com/millionco/react-doctor/commit/4fd3e87bbaf437efa72f296d19bfa071f98c23dc), [`295becb`](https://github.com/millionco/react-doctor/commit/295becbdf0d3f68b3d222df6855098492bd524ea), [`8fdead9`](https://github.com/millionco/react-doctor/commit/8fdead90749f5eb2282b028c81ccbab4b0c1a1f0), [`6331b39`](https://github.com/millionco/react-doctor/commit/6331b393c0556a18a08ccacc0aa7c001fb3ca4ce), [`0179427`](https://github.com/millionco/react-doctor/commit/01794275bcc8f6ecc7bae843600b6c2d0a433f7b), [`6bed9f6`](https://github.com/millionco/react-doctor/commit/6bed9f6e63e75d012717703e01100e39fd7206a9), [`a26bc44`](https://github.com/millionco/react-doctor/commit/a26bc446384717f175189f954f6663489767c3da), [`4bcbcd9`](https://github.com/millionco/react-doctor/commit/4bcbcd932b04e3d6c4b8bea1b98c8c1cb1d22678), [`943ca32`](https://github.com/millionco/react-doctor/commit/943ca324c3182f9506ed1a6e9384d20d351b4eb3), [`b880403`](https://github.com/millionco/react-doctor/commit/b88040353a46500eb839d6d46e685d4ea60132d0)]: + - oxlint-plugin-react-doctor@0.9.18 + ## 0.9.17 ### Patch Changes diff --git a/packages/eslint-plugin-react-doctor/package.json b/packages/eslint-plugin-react-doctor/package.json index 620fb791d4..9abbde113d 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.17", + "version": "0.9.18", "description": "React Doctor rules for ESLint.", "keywords": [ "accessibility", diff --git a/packages/fuzz/CHANGELOG.md b/packages/fuzz/CHANGELOG.md index 4f68d081bf..0b004b1b89 100644 --- a/packages/fuzz/CHANGELOG.md +++ b/packages/fuzz/CHANGELOG.md @@ -1,5 +1,12 @@ # @react-doctor/fuzz +## 0.0.36 + +### Patch Changes + +- Updated dependencies [[`6932e7d`](https://github.com/millionco/react-doctor/commit/6932e7de483214c12b04341d1cfbc59e10ceeaca), [`0298eb8`](https://github.com/millionco/react-doctor/commit/0298eb876f8511a703b1eb7d6693f0ee0f612b0a), [`012e208`](https://github.com/millionco/react-doctor/commit/012e208ae71d9f60df476043adf01f332df040ed), [`bb00a27`](https://github.com/millionco/react-doctor/commit/bb00a277d9a321116ad6e715b27f06f4ad1ec648), [`1f6b98a`](https://github.com/millionco/react-doctor/commit/1f6b98aeb7469caa700a9e8b7bc88d8c6342426e), [`a68f193`](https://github.com/millionco/react-doctor/commit/a68f1933e218671a60ae422ee70d56c8612c6031), [`72fab66`](https://github.com/millionco/react-doctor/commit/72fab6670c3419bb193751fe35eae99bd500d107), [`e2b047b`](https://github.com/millionco/react-doctor/commit/e2b047bcdcb7d8e6f13ea1f6c3ef027fbd0fc79e), [`a1cff2e`](https://github.com/millionco/react-doctor/commit/a1cff2e7d1939a23776316950eb040bf4d5b6402), [`89c6701`](https://github.com/millionco/react-doctor/commit/89c67017c1634cd22457a616545da05c2ceba0da), [`e18d7da`](https://github.com/millionco/react-doctor/commit/e18d7daaa0c6bb2203de7546c2a870d4d0c02fef), [`f3f167e`](https://github.com/millionco/react-doctor/commit/f3f167e742f0a84aa5e01d3b31a748f552eba9e9), [`909b8e5`](https://github.com/millionco/react-doctor/commit/909b8e5f1bbbdfbd58f5f6b3bf0b031d1afd0c0b), [`281fdc9`](https://github.com/millionco/react-doctor/commit/281fdc965635f0c7e3ad7d80d2c98bdf3d92ae52), [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486), [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486), [`7bebcfc`](https://github.com/millionco/react-doctor/commit/7bebcfc1e01445f8fde181e8b8cf1619f836955d), [`6790398`](https://github.com/millionco/react-doctor/commit/67903983c48c59129f08142734e63c9f005bd1ee), [`ad8bca6`](https://github.com/millionco/react-doctor/commit/ad8bca6335a66f1aeb432b8bc3dd86f895f8f02c), [`c92fec1`](https://github.com/millionco/react-doctor/commit/c92fec1c3ea96cf21ab761118d24358df2476eea), [`2825dfd`](https://github.com/millionco/react-doctor/commit/2825dfd67e0049f3247cf033ea7769e4fc3ec90c), [`cc78fa3`](https://github.com/millionco/react-doctor/commit/cc78fa3bb38594bbeea7040fe1e144d19b0eaaf5), [`4f8866c`](https://github.com/millionco/react-doctor/commit/4f8866ce3122b5155c0bd37756e030b952e9cddd), [`96bf20f`](https://github.com/millionco/react-doctor/commit/96bf20fb5fe084d2ca436c1206fb34696226f15e), [`4899bc4`](https://github.com/millionco/react-doctor/commit/4899bc4914bdf956c119ad360958ed83c40c537d), [`45f9769`](https://github.com/millionco/react-doctor/commit/45f97697cb966e6a0bf7214b95087ab09f483900), [`dfb598a`](https://github.com/millionco/react-doctor/commit/dfb598a46bcc4865b639c1a347dbc681b673f819), [`a293fac`](https://github.com/millionco/react-doctor/commit/a293facac53cfd06840a75e57e18b263a629ef50), [`1b149ba`](https://github.com/millionco/react-doctor/commit/1b149bae5f6ecf350b689148b751f0e69afbdb3a), [`888dc2a`](https://github.com/millionco/react-doctor/commit/888dc2a199a1cc6d6d75c30dbba1975936a2026f), [`7e24c41`](https://github.com/millionco/react-doctor/commit/7e24c411ddc8a0cb4b99c70652fdc2fa26e5c891), [`e50ba27`](https://github.com/millionco/react-doctor/commit/e50ba271d99c9c27a132852c4d60f6484371cddd), [`91b6991`](https://github.com/millionco/react-doctor/commit/91b6991584d6e5676bbf4c83022b58afe51d933d), [`d8c0517`](https://github.com/millionco/react-doctor/commit/d8c0517cbf594fd3b88486c116beb58ffcedb7c8), [`0d99110`](https://github.com/millionco/react-doctor/commit/0d991100a78f74ecb834af1c0367d1d2046f32d3), [`712a08a`](https://github.com/millionco/react-doctor/commit/712a08a5f0f389424278ca3b3a1621437cee350e), [`e6457e3`](https://github.com/millionco/react-doctor/commit/e6457e3572d872a157bb335b32f63cfdae31ee52), [`d1cd769`](https://github.com/millionco/react-doctor/commit/d1cd7699164dbcd3b1f19ebd978a7aaefb0cb723), [`0a8982b`](https://github.com/millionco/react-doctor/commit/0a8982be0bc2ba54975d10377daccbcff57eabf5), [`c1181f0`](https://github.com/millionco/react-doctor/commit/c1181f06681aa7ad41c70b04fac66374a5b46495), [`9e9680b`](https://github.com/millionco/react-doctor/commit/9e9680b743153e5674b70b96177d8f49309afd91), [`a47c7e0`](https://github.com/millionco/react-doctor/commit/a47c7e07bf7a9f87153b98b7d239029fb5143e32), [`2c5d1a1`](https://github.com/millionco/react-doctor/commit/2c5d1a1cc1f057c02d644e00d4222aea7d085e08), [`ab83f31`](https://github.com/millionco/react-doctor/commit/ab83f31399c05801e10d6d0c2e52611e3a26b1bf), [`a410280`](https://github.com/millionco/react-doctor/commit/a410280ed979dc00ef2826f81e2f873a48bc5da4), [`7ad2c9b`](https://github.com/millionco/react-doctor/commit/7ad2c9b9ad1d6819996c4c38afaf0557e704887e), [`03b21c8`](https://github.com/millionco/react-doctor/commit/03b21c8b367ff16057c91e77178a3c7ec60cb597), [`55c2235`](https://github.com/millionco/react-doctor/commit/55c22359ea964386e0c2fdc087abeed8d5a5e86f), [`683d0c2`](https://github.com/millionco/react-doctor/commit/683d0c2a93c0698b67c19e115733785687f22fbc), [`45f5620`](https://github.com/millionco/react-doctor/commit/45f5620c63551e3fbb0f9c3befd4a4c3cc4b34e5), [`738b340`](https://github.com/millionco/react-doctor/commit/738b340ffc476d373a789b8a7d95667d5edfc618), [`130fc45`](https://github.com/millionco/react-doctor/commit/130fc45da44e2e1b6d989fd51f6c801bfa7c3801), [`6ee5988`](https://github.com/millionco/react-doctor/commit/6ee5988e679d3366b940f59c2e0374548cc97cbc), [`5b301c9`](https://github.com/millionco/react-doctor/commit/5b301c9f5103e257cb6d88985b846bcc725ea7b3), [`b6b2d68`](https://github.com/millionco/react-doctor/commit/b6b2d6842f3ff5d5b0976dae9750d48865166846), [`f986f15`](https://github.com/millionco/react-doctor/commit/f986f15faf94b37e084f58d8cf92e421c0299e38), [`1451cdb`](https://github.com/millionco/react-doctor/commit/1451cdb65b25f9a61deaf7774fe84a56847b067c), [`67531cc`](https://github.com/millionco/react-doctor/commit/67531cc656ef74fc126f7b8df2cc0e912ddaac6a), [`9e305df`](https://github.com/millionco/react-doctor/commit/9e305dff22273ae9b39c5bb03482c37da457178e), [`83bf9ad`](https://github.com/millionco/react-doctor/commit/83bf9ad82c9ccca753bbaf744b2aa14cc84ddd6f), [`8bfb598`](https://github.com/millionco/react-doctor/commit/8bfb5983478efa72021d17e8dfc6c8919248ebcc), [`4fd3e87`](https://github.com/millionco/react-doctor/commit/4fd3e87bbaf437efa72f296d19bfa071f98c23dc), [`295becb`](https://github.com/millionco/react-doctor/commit/295becbdf0d3f68b3d222df6855098492bd524ea), [`8fdead9`](https://github.com/millionco/react-doctor/commit/8fdead90749f5eb2282b028c81ccbab4b0c1a1f0), [`6331b39`](https://github.com/millionco/react-doctor/commit/6331b393c0556a18a08ccacc0aa7c001fb3ca4ce), [`0179427`](https://github.com/millionco/react-doctor/commit/01794275bcc8f6ecc7bae843600b6c2d0a433f7b), [`6bed9f6`](https://github.com/millionco/react-doctor/commit/6bed9f6e63e75d012717703e01100e39fd7206a9), [`a26bc44`](https://github.com/millionco/react-doctor/commit/a26bc446384717f175189f954f6663489767c3da), [`4bcbcd9`](https://github.com/millionco/react-doctor/commit/4bcbcd932b04e3d6c4b8bea1b98c8c1cb1d22678), [`943ca32`](https://github.com/millionco/react-doctor/commit/943ca324c3182f9506ed1a6e9384d20d351b4eb3), [`b880403`](https://github.com/millionco/react-doctor/commit/b88040353a46500eb839d6d46e685d4ea60132d0)]: + - oxlint-plugin-react-doctor@0.9.18 + ## 0.0.35 ### Patch Changes diff --git a/packages/fuzz/package.json b/packages/fuzz/package.json index e376783256..2945e5ec4a 100644 --- a/packages/fuzz/package.json +++ b/packages/fuzz/package.json @@ -1,6 +1,6 @@ { "name": "@react-doctor/fuzz", - "version": "0.0.35", + "version": "0.0.36", "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 598ee2264a..b64f16c02c 100644 --- a/packages/oxlint-plugin-react-doctor/CHANGELOG.md +++ b/packages/oxlint-plugin-react-doctor/CHANGELOG.md @@ -1,5 +1,155 @@ # oxlint-plugin-react-doctor +## 0.9.18 + +### Patch Changes + +- [#1943](https://github.com/millionco/react-doctor/pull/1943) [`6932e7d`](https://github.com/millionco/react-doctor/commit/6932e7de483214c12b04341d1cfbc59e10ceeaca) Thanks [@aidenybai](https://github.com/aidenybai)! - Match API Platform subscription IDs to the provider's resource-and-IDs unsubscribe contract. + +- [#1920](https://github.com/millionco/react-doctor/pull/1920) [`0298eb8`](https://github.com/millionco/react-doctor/commit/0298eb876f8511a703b1eb7d6693f0ee0f612b0a) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not infer React hooks from relative helper imports in Angular component classes. Continue to check React and React ecosystem imports. + +- [#1926](https://github.com/millionco/react-doctor/pull/1926) [`012e208`](https://github.com/millionco/react-doctor/commit/012e208ae71d9f60df476043adf01f332df040ed) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify a local state transition as a prop-driven adjustment when its only prop dependencies are called notifications. Keep checks for prop values used in guards, results, or reset dependencies. + +- [#1911](https://github.com/millionco/react-doctor/pull/1911) [`bb00a27`](https://github.com/millionco/react-doctor/commit/bb00a277d9a321116ad6e715b27f06f4ad1ec648) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not recommend lazy state initialization for cheap primitive toString calls, including numeric React Native Dimensions values. Keep warnings for unproven receivers and nested expensive calls. + +- [#1919](https://github.com/millionco/react-doctor/pull/1919) [`1f6b98a`](https://github.com/millionco/react-doctor/commit/1f6b98aeb7469caa700a9e8b7bc88d8c6342426e) Thanks [@aidenybai](https://github.com/aidenybai)! - Report inaccessible parent click actions when descendant handlers stop keyboard-generated clicks from reaching them. + +- [#1928](https://github.com/millionco/react-doctor/pull/1928) [`a68f193`](https://github.com/millionco/react-doctor/commit/a68f1933e218671a60ae422ee70d56c8612c6031) Thanks [@aidenybai](https://github.com/aidenybai)! - Match listener cleanup when both branches of conditional options have the same capture value. Keep warnings for differing capture values, changed options, and missing cleanup. + + Recognize exhaustive listener-removal loops extracted into a synchronous helper when the cleanup only invokes that helper. + +- [#1933](https://github.com/millionco/react-doctor/pull/1933) [`72fab66`](https://github.com/millionco/react-doctor/commit/72fab6670c3419bb193751fe35eae99bd500d107) Thanks [@aidenybai](https://github.com/aidenybai)! - Preserve count-based placeholder identity through a local array before mapping wrappers. + +- [#1907](https://github.com/millionco/react-doctor/pull/1907) [`e2b047b`](https://github.com/millionco/react-doctor/commit/e2b047bcdcb7d8e6f13ea1f6c3ef027fbd0fc79e) Thanks [@aidenybai](https://github.com/aidenybai)! - Preserve numeric placeholder-loop identity through local key aliases, including constant-prefix keys. Continue reporting index aliases for loops over array data. + +- [#1905](https://github.com/millionco/react-doctor/pull/1905) [`a1cff2e`](https://github.com/millionco/react-doctor/commit/a1cff2e7d1939a23776316950eb040bf4d5b6402) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep browser reads in helpers defined inside React effects out of server-render diagnostics. Preserve warnings for render callbacks and shadowed effect functions. + +- [#1924](https://github.com/millionco/react-doctor/pull/1924) [`89c6701`](https://github.com/millionco/react-doctor/commit/89c67017c1634cd22457a616545da05c2ceba0da) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify zero-argument effect notifications as state payloads sent to a parent. Continue to report callbacks that pass local state. + +- [#1863](https://github.com/millionco/react-doctor/pull/1863) [`e18d7da`](https://github.com/millionco/react-doctor/commit/e18d7daaa0c6bb2203de7546c2a870d4d0c02fef) Thanks [@skoshx](https://github.com/skoshx)! - ESLint adapter now respects rule `requires` gates. Rules that require capabilities the project doesn't have (like `ssr` or `react-router:8`) are now correctly skipped when capabilities are declared, matching the CLI behavior. Fixes false errors on dependency bumps when using the ESLint adapter with explicit capabilities. + +- [#1896](https://github.com/millionco/react-doctor/pull/1896) [`f3f167e`](https://github.com/millionco/react-doctor/commit/f3f167e742f0a84aa5e01d3b31a748f552eba9e9) Thanks [@skoshx](https://github.com/skoshx)! - Fix `async-defer-await` warnings on compound guards that compare function parameters with mutable state after an await. Keep these checks after the await so they can detect stale responses. Fixes [#1895](https://github.com/millionco/react-doctor/issues/1895). + +- [#1883](https://github.com/millionco/react-doctor/pull/1883) [`909b8e5`](https://github.com/millionco/react-doctor/commit/909b8e5f1bbbdfbd58f5f6b3bf0b031d1afd0c0b) Thanks [@skoshx](https://github.com/skoshx)! - fix(effect-needs-cleanup): accept Promise timer that resets its own handle in callback + + Fixes [#1882](https://github.com/millionco/react-doctor/issues/1882). The rule no longer flags a timer created in a Promise callback when the timer's own callback resets the handle to `null` or `undefined`. This is safe because the timer has already fired when the reset happens, so no live handle is lost. + +- [#1859](https://github.com/millionco/react-doctor/pull/1859) [`281fdc9`](https://github.com/millionco/react-doctor/commit/281fdc965635f0c7e3ad7d80d2c98bdf3d92ae52) Thanks [@skoshx](https://github.com/skoshx)! - Recognize stable functions rendered as JSX components in the same file, including components that return imported exhaustive matchers. Preserve warnings for mixed utility exports, shadowed JSX names, and reassigned bindings. + +- [#1898](https://github.com/millionco/react-doctor/pull/1898) [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept observer cleanup after tuple loops and a single animation-frame retry chain when cleanup disconnects the observer and cancels the pending frame. Require observer cleanup on every path and keep target-specific `unobserve()` checks. + +- [#1898](https://github.com/millionco/react-doctor/pull/1898) [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize JSX handlers passed to stable local dispatchers with an explicit React return type. Keep reporting callback registries with unknown or non-rendering return types. + +- [#1869](https://github.com/millionco/react-doctor/pull/1869) [`7bebcfc`](https://github.com/millionco/react-doctor/commit/7bebcfc1e01445f8fde181e8b8cf1619f836955d) Thanks [@aidenybai](https://github.com/aidenybai)! - Use constant Boolean initializers before treating numeric-looking JSX guard names as numbers. Preserve warnings for mutable bindings, destructuring defaults, and numeric values. + +- [#1873](https://github.com/millionco/react-doctor/pull/1873) [`6790398`](https://github.com/millionco/react-doctor/commit/67903983c48c59129f08142734e63c9f005bd1ee) Thanks [@aidenybai](https://github.com/aidenybai)! - Require root route error boundaries only for data routers, since declarative useRoutes configurations do not use data-router error handling. + +- [#1875](https://github.com/millionco/react-doctor/pull/1875) [`ad8bca6`](https://github.com/millionco/react-doctor/commit/ad8bca6335a66f1aeb432b8bc3dd86f895f8f02c) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize legacy React.createClass components so render callbacks retain their instance this instead of being treated as function components. + +- [#1874](https://github.com/millionco/react-doctor/pull/1874) [`c92fec1`](https://github.com/millionco/react-doctor/commit/c92fec1c3ea96cf21ab761118d24358df2476eea) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept direct anchor children owned by an imported Next Link component, including the legacy Link child API. + +- [#1872](https://github.com/millionco/react-doctor/pull/1872) [`2825dfd`](https://github.com/millionco/react-doctor/commit/2825dfd67e0049f3247cf033ea7769e4fc3ec90c) Thanks [@aidenybai](https://github.com/aidenybai)! - Allow state updater callbacks to reassign their local parameter while still reporting writes to prior-state properties and captured values. + +- [#1878](https://github.com/millionco/react-doctor/pull/1878) [`cc78fa3`](https://github.com/millionco/react-doctor/commit/cc78fa3bb38594bbeea7040fe1e144d19b0eaaf5) Thanks [@aidenybai](https://github.com/aidenybai)! - Respect the installed or declared React Native version before reporting removed AsyncStorage and WebView exports. Reuse package-version resolution and track manifests for diagnostic cache invalidation. + +- [#1871](https://github.com/millionco/react-doctor/pull/1871) [`4f8866c`](https://github.com/millionco/react-doctor/commit/4f8866ce3122b5155c0bd37756e030b952e9cddd) Thanks [@aidenybai](https://github.com/aidenybai)! - Stop reporting the core SafeAreaView export as removed. It remains implemented even where it is deprecated. + +- [#1880](https://github.com/millionco/react-doctor/pull/1880) [`96bf20f`](https://github.com/millionco/react-doctor/commit/96bf20fb5fe084d2ca436c1206fb34696226f15e) Thanks [@aidenybai](https://github.com/aidenybai)! - Restrict App Router path checks to the project app or src/app directory so nested Pages Router paths do not trigger App Router rules. + +- [#1877](https://github.com/millionco/react-doctor/pull/1877) [`4899bc4`](https://github.com/millionco/react-doctor/commit/4899bc4914bdf956c119ad360958ed83c40c537d) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize optional-chain and TypeScript-wrapped response status guards before fetch body reads. + +- [#1879](https://github.com/millionco/react-doctor/pull/1879) [`45f9769`](https://github.com/millionco/react-doctor/commit/45f97697cb966e6a0bf7214b95087ab09f483900) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid treating promise-returning query APIs as array find calls. Keep reports for known arrays and known predicates. + +- [#1866](https://github.com/millionco/react-doctor/pull/1866) [`dfb598a`](https://github.com/millionco/react-doctor/commit/dfb598a46bcc4865b639c1a347dbc681b673f819) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize static import and require paths wrapped in TypeScript assertions, while retaining warnings for dynamic paths inside those wrappers. + +- [#1870](https://github.com/millionco/react-doctor/pull/1870) [`a293fac`](https://github.com/millionco/react-doctor/commit/a293facac53cfd06840a75e57e18b263a629ef50) Thanks [@aidenybai](https://github.com/aidenybai)! - Preserve state used by a render-phase throw, including Suspense promises and errors, instead of recommending a ref. + +- [#1876](https://github.com/millionco/react-doctor/pull/1876) [`1b149ba`](https://github.com/millionco/react-doctor/commit/1b149bae5f6ecf350b689148b751f0e69afbdb3a) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize either global timer-clear API as releasing a matching timeout or interval handle, including exhaustive retained timer collections. + +- [#1867](https://github.com/millionco/react-doctor/pull/1867) [`888dc2a`](https://github.com/millionco/react-doctor/commit/888dc2a199a1cc6d6d75c30dbba1975936a2026f) Thanks [@aidenybai](https://github.com/aidenybai)! - Allow author-provided accessible names on the tooltip role. Preserve naming restrictions on roles that prohibit them and warnings for unsupported tooltip states. + +- [#1868](https://github.com/millionco/react-doctor/pull/1868) [`7e24c41`](https://github.com/millionco/react-doctor/commit/7e24c411ddc8a0cb4b99c70652fdc2fa26e5c891) Thanks [@aidenybai](https://github.com/aidenybai)! - Skip missing image sizes advice when next/image explicitly disables optimization, since that path does not generate responsive source candidates. + +- [#1888](https://github.com/millionco/react-doctor/pull/1888) [`e50ba27`](https://github.com/millionco/react-doctor/commit/e50ba271d99c9c27a132852c4d60f6484371cddd) Thanks [@aidenybai](https://github.com/aidenybai)! - A native wrapping or associated label can give a control its accessible name through its title. Recognize that name while keeping warnings for empty labels, unrelated labels, and custom wrappers. + +- [#1893](https://github.com/millionco/react-doctor/pull/1893) [`91b6991`](https://github.com/millionco/react-doctor/commit/91b6991584d6e5676bbf4c83022b58afe51d933d) Thanks [@aidenybai](https://github.com/aidenybai)! - A returned scalar formatter can use JSX only when its scalar input is null. React component props do not follow that path. Exclude these formatters while keeping warnings when JSX is reachable for normal props, a reassigned parameter, or another return path. + +- [#1894](https://github.com/millionco/react-doctor/pull/1894) [`d8c0517`](https://github.com/millionco/react-doctor/commit/d8c0517cbf594fd3b88486c116beb58ffcedb7c8) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid missing-key warnings for JSX arrays returned as data by module-level object factories with no local use. Keep warnings for component and render methods, local factory uses, and arrays rendered directly as children. + +- [#1891](https://github.com/millionco/react-doctor/pull/1891) [`0d99110`](https://github.com/millionco/react-doctor/commit/0d991100a78f74ecb834af1c0367d1d2046f32d3) Thanks [@aidenybai](https://github.com/aidenybai)! - A class render helper can receive indices from a numeric Array.from placeholder list. Accept these keys only when every visible use proves that placeholder source and the helper does not escape. Keep warnings for mutable data lists and unknown callers. + +- [#1887](https://github.com/millionco/react-doctor/pull/1887) [`712a08a`](https://github.com/millionco/react-doctor/commit/712a08a5f0f389424278ca3b3a1621437cee350e) Thanks [@aidenybai](https://github.com/aidenybai)! - A focusable action revealed by group hover also becomes visible when it receives keyboard focus. Accept its own focus or focus-visible opacity reveal when that reveal covers the hover scope. Keep warnings for hidden, invisible, non-focusable, and mismatched-scope controls. + +- [#1892](https://github.com/millionco/react-doctor/pull/1892) [`e6457e3`](https://github.com/millionco/react-doctor/commit/e6457e3572d872a157bb335b32f63cfdae31ee52) Thanks [@aidenybai](https://github.com/aidenybai)! - An updater may copy each state element before a local helper changes those fresh copies. Track that ownership through helper parameters and for-of loops. Keep warnings for shared objects, nested shared fields, replaced elements, and aliases that add shared values. + +- [#1889](https://github.com/millionco/react-doctor/pull/1889) [`d1cd769`](https://github.com/millionco/react-doctor/commit/d1cd7699164dbcd3b1f19ebd978a7aaefb0cb723) Thanks [@aidenybai](https://github.com/aidenybai)! - An icon button with a screen-reader-only label is not a text button for visual padding. Ignore hidden label text, but keep visible text and not-sr-only overrides in the check. + +- [#1890](https://github.com/millionco/react-doctor/pull/1890) [`0a8982b`](https://github.com/millionco/react-doctor/commit/0a8982be0bc2ba54975d10377daccbcff57eabf5) Thanks [@aidenybai](https://github.com/aidenybai)! - A stable local factory that returns a component or forwardRef component is a valid component export. Inspect the factory return paths and keep warnings for mixed returns, reassigned factories, and unknown factory outputs. + +- [#1915](https://github.com/millionco/react-doctor/pull/1915) [`c1181f0`](https://github.com/millionco/react-doctor/commit/c1181f06681aa7ad41c70b04fac66374a5b46495) Thanks [@aidenybai](https://github.com/aidenybai)! - Report array-index keys passed as React cloneElement overrides, including imported aliases and static computed keys. + +- [#1902](https://github.com/millionco/react-doctor/pull/1902) [`9e9680b`](https://github.com/millionco/react-doctor/commit/9e9680b743153e5674b70b96177d8f49309afd91) Thanks [@aidenybai](https://github.com/aidenybai)! - Allow updater callbacks to mutate a local container when both branches of its conditional initializer create a fresh container. Continue reporting mutations of prior state and shared collections. + +- [#1940](https://github.com/millionco/react-doctor/pull/1940) [`a47c7e0`](https://github.com/millionco/react-doctor/commit/a47c7e07bf7a9f87153b98b7d239029fb5143e32) Thanks [@aidenybai](https://github.com/aidenybai)! - Ignore unreachable fresh fallbacks inside a controlled-state selection when the value type excludes null. + +- [#1937](https://github.com/millionco/react-doctor/pull/1937) [`2c5d1a1`](https://github.com/millionco/react-doctor/commit/2c5d1a1cc1f057c02d644e00d4222aea7d085e08) Thanks [@aidenybai](https://github.com/aidenybai)! - Use the properties read by a resolved local helper when checking object argument dependencies. + +- [#1923](https://github.com/millionco/react-doctor/pull/1923) [`ab83f31`](https://github.com/millionco/react-doctor/commit/ab83f31399c05801e10d6d0c2e52611e3a26b1bf) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept positional keys for immutable arrays of identical literal placeholders. Keep checks for distinct values, records, spreads, and mutated arrays. + +- [#1942](https://github.com/millionco/react-doctor/pull/1942) [`a410280`](https://github.com/millionco/react-doctor/commit/a410280ed979dc00ef2826f81e2f873a48bc5da4) Thanks [@aidenybai](https://github.com/aidenybai)! - Detect fresh cleanup callbacks through local imported wrappers of DOM event listener APIs. + +- [#1934](https://github.com/millionco/react-doctor/pull/1934) [`7ad2c9b`](https://github.com/millionco/react-doctor/commit/7ad2c9b9ad1d6819996c4c38afaf0557e704887e) Thanks [@aidenybai](https://github.com/aidenybai)! - Track subscriptions pushed into arrays that already contain other owned handles. + +- [#1936](https://github.com/millionco/react-doctor/pull/1936) [`03b21c8`](https://github.com/millionco/react-doctor/commit/03b21c8b367ff16057c91e77178a3c7ec60cb597) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify paired Layer.extend lifecycle methods as React event handlers. + +- [#1904](https://github.com/millionco/react-doctor/pull/1904) [`55c2235`](https://github.com/millionco/react-doctor/commit/55c22359ea964386e0c2fdc087abeed8d5a5e86f) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize deterministic lazy ref initialization through an immediately preceding local assignment. Check the resolved value for non-deterministic initialization hidden by aliases. + +- [#1912](https://github.com/millionco/react-doctor/pull/1912) [`683d0c2`](https://github.com/millionco/react-doctor/commit/683d0c2a93c0698b67c19e115733785687f22fbc) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid parent-notification warnings when a local memoized loader only reads props and updates local state. Keep warnings for actual parent callback calls, including asynchronous and direct callback wrappers. + +- [#1909](https://github.com/millionco/react-doctor/pull/1909) [`45f5620`](https://github.com/millionco/react-doctor/commit/45f5620c63551e3fbb0f9c3befd4a4c3cc4b34e5) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize named functions passed to React memo and forwardRef as render scopes in rules-of-hooks, including nonstandard internal names. Keep conditional and nested hook checks active. + +- [#1908](https://github.com/millionco/react-doctor/pull/1908) [`738b340`](https://github.com/millionco/react-doctor/commit/738b340ffc476d373a789b8a7d95667d5edfc618) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize object URL cleanup returned on every path after URL creation, including effects that return early before they allocate a URL. + +- [#1906](https://github.com/millionco/react-doctor/pull/1906) [`130fc45`](https://github.com/millionco/react-doctor/commit/130fc45da44e2e1b6d989fd51f6c801bfa7c3801) Thanks [@aidenybai](https://github.com/aidenybai)! - Prevent boolean-toggle cleanup analysis from crashing when an effect omits its dependency array. Preserve the existing toggle diagnostic and functional-update exemption. + +- [#1931](https://github.com/millionco/react-doctor/pull/1931) [`6ee5988`](https://github.com/millionco/react-doctor/commit/6ee5988e679d3366b940f59c2e0374548cc97cbc) Thanks [@aidenybai](https://github.com/aidenybai)! - Follow guarded observer setup helpers invoked by effect-owned listeners. + +- [#1935](https://github.com/millionco/react-doctor/pull/1935) [`5b301c9`](https://github.com/millionco/react-doctor/commit/5b301c9f5103e257cb6d88985b846bcc725ea7b3) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize loading-set resets paired with cancellation of owned request-map entries. + +- [#1918](https://github.com/millionco/react-doctor/pull/1918) [`b6b2d68`](https://github.com/millionco/react-doctor/commit/b6b2d6842f3ff5d5b0976dae9750d48865166846) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize react_ujs useContext and useContexts as component registration methods rather than React hooks. Support stable CommonJS and ES module bindings. + +- [#1921](https://github.com/millionco/react-doctor/pull/1921) [`f986f15`](https://github.com/millionco/react-doctor/commit/f986f15faf94b37e084f58d8cf92e421c0299e38) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify an imported use-prefixed function as a React hook when its resolved implementation only returns static data. + +- [#1925](https://github.com/millionco/react-doctor/pull/1925) [`1451cdb`](https://github.com/millionco/react-doctor/commit/1451cdb65b25f9a61deaf7774fe84a56847b067c) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept positional keys for plain text rows from string splitting and Boolean filtering. Keep checks for stateful children, unknown split methods, and changed token arrays. + +- [#1929](https://github.com/millionco/react-doctor/pull/1929) [`67531cc`](https://github.com/millionco/react-doctor/commit/67531cc656ef74fc126f7b8df2cc0e912ddaac6a) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize portal readiness state after DOM container discovery. + +- [#1927](https://github.com/millionco/react-doctor/pull/1927) [`9e305df`](https://github.com/millionco/react-doctor/commit/9e305dff22273ae9b39c5bb03482c37da457178e) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept index keys for identical map slots that ignore the item and collection values and use the index only as a key. Keep warnings when output depends on an item or an indexed record. + +- [#1913](https://github.com/millionco/react-doctor/pull/1913) [`83bf9ad`](https://github.com/millionco/react-doctor/commit/83bf9ad82c9ccca753bbaf744b2aa14cc84ddd6f) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize fresh const aliases of effect cancellation guards after await. Keep warnings when a snapshot was captured before suspension or another await can make it stale. + +- [#1930](https://github.com/millionco/react-doctor/pull/1930) [`8bfb598`](https://github.com/millionco/react-doctor/commit/8bfb5983478efa72021d17e8dfc6c8919248ebcc) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize primitive cumulative labels in stateless index-keyed rows. + +- [#1922](https://github.com/millionco/react-doctor/pull/1922) [`4fd3e87`](https://github.com/millionco/react-doctor/commit/4fd3e87bbaf437efa72f296d19bfa071f98c23dc) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept positional keys for Array.from slots whose count comes from a property or expression. Keep checks when the index reads external records or the source has record entries. + +- [#1901](https://github.com/millionco/react-doctor/pull/1901) [`295becb`](https://github.com/millionco/react-doctor/commit/295becbdf0d3f68b3d222df6855098492bd524ea) Thanks [@aidenybai](https://github.com/aidenybai)! - Detect unstable nested components created inside React forwardRef and memo render callbacks, including import aliases and TypeScript wrappers. + +- [#1916](https://github.com/millionco/react-doctor/pull/1916) [`8fdead9`](https://github.com/millionco/react-doctor/commit/8fdead90749f5eb2282b028c81ccbab4b0c1a1f0) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize request ownership predicates and loading resets on proven view, close, and unmount paths. Keep warnings when an invalidated request can leave the loading flag set. + +- [#1917](https://github.com/millionco/react-doctor/pull/1917) [`6331b39`](https://github.com/millionco/react-doctor/commit/6331b393c0556a18a08ccacc0aa7c001fb3ca4ce) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep React hook ordering checks out of files that use a proven non-React JSX runtime. Mixed React files retain the checks. + +- [#1939](https://github.com/millionco/react-doctor/pull/1939) [`0179427`](https://github.com/millionco/react-doctor/commit/01794275bcc8f6ecc7bae843600b6c2d0a433f7b) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize object URLs retained in React refs when replacement and unmount both revoke the owned value. + +- [#1932](https://github.com/millionco/react-doctor/pull/1932) [`6bed9f6`](https://github.com/millionco/react-doctor/commit/6bed9f6e63e75d012717703e01100e39fd7206a9) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize clearing the state handle of an object URL after revocation. + +- [#1938](https://github.com/millionco/react-doctor/pull/1938) [`a26bc44`](https://github.com/millionco/react-doctor/commit/a26bc446384717f175189f954f6663489767c3da) Thanks [@aidenybai](https://github.com/aidenybai)! - Follow synchronous cleanup helpers that invoke a retained listener disposer on unmount. + +- [#1903](https://github.com/millionco/react-doctor/pull/1903) [`4bcbcd9`](https://github.com/millionco/react-doctor/commit/4bcbcd932b04e3d6c4b8bea1b98c8c1cb1d22678) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not treat directly returned component functions as JSX rendered by their factory. Keep detecting direct component calls and executed render callbacks. + +- [#1910](https://github.com/millionco/react-doctor/pull/1910) [`943ca32`](https://github.com/millionco/react-doctor/commit/943ca324c3182f9506ed1a6e9384d20d351b4eb3) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid cleanup warnings for local functions and state setters named setInterval or setTimeout. Require a global timer or a matching Node timers import before classifying these calls as timer allocations. + +- [#1941](https://github.com/millionco/react-doctor/pull/1941) [`b880403`](https://github.com/millionco/react-doctor/commit/b88040353a46500eb839d6d46e685d4ea60132d0) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize the stable send result of XState React v1 useService when its interpreter is a module singleton. + ## 0.9.17 ## 0.9.16 diff --git a/packages/oxlint-plugin-react-doctor/package.json b/packages/oxlint-plugin-react-doctor/package.json index bc00b25b89..199ce9c03d 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.17", + "version": "0.9.18", "description": "React Doctor rules for oxlint.", "keywords": [ "accessibility", diff --git a/packages/react-doctor/CHANGELOG.md b/packages/react-doctor/CHANGELOG.md index a35b807f1a..d9039da1d5 100644 --- a/packages/react-doctor/CHANGELOG.md +++ b/packages/react-doctor/CHANGELOG.md @@ -1,5 +1,142 @@ # react-doctor +## 0.9.18 + +### Patch Changes + +- [#1386](https://github.com/millionco/react-doctor/pull/1386) [`041d1ab`](https://github.com/millionco/react-doctor/commit/041d1ab1cd36e6cbf5fab2c044509132d648c1f1) Thanks [@skoshx](https://github.com/skoshx)! - Record the GitHub Action clean-comment preference in anonymized scan telemetry and document the workflow input. + +- [#1943](https://github.com/millionco/react-doctor/pull/1943) [`6932e7d`](https://github.com/millionco/react-doctor/commit/6932e7de483214c12b04341d1cfbc59e10ceeaca) Thanks [@aidenybai](https://github.com/aidenybai)! - Match API Platform subscription IDs to the provider's resource-and-IDs unsubscribe contract. + +- [#1920](https://github.com/millionco/react-doctor/pull/1920) [`0298eb8`](https://github.com/millionco/react-doctor/commit/0298eb876f8511a703b1eb7d6693f0ee0f612b0a) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not infer React hooks from relative helper imports in Angular component classes. Continue to check React and React ecosystem imports. + +- [#1926](https://github.com/millionco/react-doctor/pull/1926) [`012e208`](https://github.com/millionco/react-doctor/commit/012e208ae71d9f60df476043adf01f332df040ed) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify a local state transition as a prop-driven adjustment when its only prop dependencies are called notifications. Keep checks for prop values used in guards, results, or reset dependencies. + +- [#1911](https://github.com/millionco/react-doctor/pull/1911) [`bb00a27`](https://github.com/millionco/react-doctor/commit/bb00a277d9a321116ad6e715b27f06f4ad1ec648) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not recommend lazy state initialization for cheap primitive toString calls, including numeric React Native Dimensions values. Keep warnings for unproven receivers and nested expensive calls. + +- [#1919](https://github.com/millionco/react-doctor/pull/1919) [`1f6b98a`](https://github.com/millionco/react-doctor/commit/1f6b98aeb7469caa700a9e8b7bc88d8c6342426e) Thanks [@aidenybai](https://github.com/aidenybai)! - Report inaccessible parent click actions when descendant handlers stop keyboard-generated clicks from reaching them. + +- [#1928](https://github.com/millionco/react-doctor/pull/1928) [`a68f193`](https://github.com/millionco/react-doctor/commit/a68f1933e218671a60ae422ee70d56c8612c6031) Thanks [@aidenybai](https://github.com/aidenybai)! - Match listener cleanup when both branches of conditional options have the same capture value. Keep warnings for differing capture values, changed options, and missing cleanup. + + Recognize exhaustive listener-removal loops extracted into a synchronous helper when the cleanup only invokes that helper. + +- [#1933](https://github.com/millionco/react-doctor/pull/1933) [`72fab66`](https://github.com/millionco/react-doctor/commit/72fab6670c3419bb193751fe35eae99bd500d107) Thanks [@aidenybai](https://github.com/aidenybai)! - Preserve count-based placeholder identity through a local array before mapping wrappers. + +- [#1907](https://github.com/millionco/react-doctor/pull/1907) [`e2b047b`](https://github.com/millionco/react-doctor/commit/e2b047bcdcb7d8e6f13ea1f6c3ef027fbd0fc79e) Thanks [@aidenybai](https://github.com/aidenybai)! - Preserve numeric placeholder-loop identity through local key aliases, including constant-prefix keys. Continue reporting index aliases for loops over array data. + +- [#1905](https://github.com/millionco/react-doctor/pull/1905) [`a1cff2e`](https://github.com/millionco/react-doctor/commit/a1cff2e7d1939a23776316950eb040bf4d5b6402) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep browser reads in helpers defined inside React effects out of server-render diagnostics. Preserve warnings for render callbacks and shadowed effect functions. + +- [#1924](https://github.com/millionco/react-doctor/pull/1924) [`89c6701`](https://github.com/millionco/react-doctor/commit/89c67017c1634cd22457a616545da05c2ceba0da) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify zero-argument effect notifications as state payloads sent to a parent. Continue to report callbacks that pass local state. + +- [#1850](https://github.com/millionco/react-doctor/pull/1850) [`ab39ac4`](https://github.com/millionco/react-doctor/commit/ab39ac4a853aad38720904aa459fff56fe91859c) Thanks [@skoshx](https://github.com/skoshx)! - Install and manage GitHub Actions workflows at the repository root when invoked from a nested package or linked worktree. + +- [#1852](https://github.com/millionco/react-doctor/pull/1852) [`d53c820`](https://github.com/millionco/react-doctor/commit/d53c820dc65d7d2d4ab931a921507d81163540ec) Thanks [@skoshx](https://github.com/skoshx)! - Exclude `.cloudflare` build output directory from source file discovery. Cloudflare's `cf` CLI stores compiled Worker bundles and cache state there, mirroring the existing `.wrangler` exclusion. + +- [#1883](https://github.com/millionco/react-doctor/pull/1883) [`909b8e5`](https://github.com/millionco/react-doctor/commit/909b8e5f1bbbdfbd58f5f6b3bf0b031d1afd0c0b) Thanks [@skoshx](https://github.com/skoshx)! - fix(effect-needs-cleanup): accept Promise timer that resets its own handle in callback + + Fixes [#1882](https://github.com/millionco/react-doctor/issues/1882). The rule no longer flags a timer created in a Promise callback when the timer's own callback resets the handle to `null` or `undefined`. This is safe because the timer has already fired when the reset happens, so no live handle is lost. + +- [#1631](https://github.com/millionco/react-doctor/pull/1631) [`f8e6ea4`](https://github.com/millionco/react-doctor/commit/f8e6ea4fa335405d19299a88e1590d783ced4538) Thanks [@skoshx](https://github.com/skoshx)! - Fix `--staged` refusing to scan in linked git worktrees when `GIT_DIR` is set. Clear the inherited `GIT_DIR` environment variable in the staged divergence check so git status resolves paths correctly, matching the fix for scoped scans in [#1516](https://github.com/millionco/react-doctor/issues/1516). + +- [#1869](https://github.com/millionco/react-doctor/pull/1869) [`7bebcfc`](https://github.com/millionco/react-doctor/commit/7bebcfc1e01445f8fde181e8b8cf1619f836955d) Thanks [@aidenybai](https://github.com/aidenybai)! - Use constant Boolean initializers before treating numeric-looking JSX guard names as numbers. Preserve warnings for mutable bindings, destructuring defaults, and numeric values. + +- [#1873](https://github.com/millionco/react-doctor/pull/1873) [`6790398`](https://github.com/millionco/react-doctor/commit/67903983c48c59129f08142734e63c9f005bd1ee) Thanks [@aidenybai](https://github.com/aidenybai)! - Require root route error boundaries only for data routers, since declarative useRoutes configurations do not use data-router error handling. + +- [#1875](https://github.com/millionco/react-doctor/pull/1875) [`ad8bca6`](https://github.com/millionco/react-doctor/commit/ad8bca6335a66f1aeb432b8bc3dd86f895f8f02c) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize legacy React.createClass components so render callbacks retain their instance this instead of being treated as function components. + +- [#1874](https://github.com/millionco/react-doctor/pull/1874) [`c92fec1`](https://github.com/millionco/react-doctor/commit/c92fec1c3ea96cf21ab761118d24358df2476eea) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept direct anchor children owned by an imported Next Link component, including the legacy Link child API. + +- [#1872](https://github.com/millionco/react-doctor/pull/1872) [`2825dfd`](https://github.com/millionco/react-doctor/commit/2825dfd67e0049f3247cf033ea7769e4fc3ec90c) Thanks [@aidenybai](https://github.com/aidenybai)! - Allow state updater callbacks to reassign their local parameter while still reporting writes to prior-state properties and captured values. + +- [#1878](https://github.com/millionco/react-doctor/pull/1878) [`cc78fa3`](https://github.com/millionco/react-doctor/commit/cc78fa3bb38594bbeea7040fe1e144d19b0eaaf5) Thanks [@aidenybai](https://github.com/aidenybai)! - Respect the installed or declared React Native version before reporting removed AsyncStorage and WebView exports. Reuse package-version resolution and track manifests for diagnostic cache invalidation. + +- [#1871](https://github.com/millionco/react-doctor/pull/1871) [`4f8866c`](https://github.com/millionco/react-doctor/commit/4f8866ce3122b5155c0bd37756e030b952e9cddd) Thanks [@aidenybai](https://github.com/aidenybai)! - Stop reporting the core SafeAreaView export as removed. It remains implemented even where it is deprecated. + +- [#1880](https://github.com/millionco/react-doctor/pull/1880) [`96bf20f`](https://github.com/millionco/react-doctor/commit/96bf20fb5fe084d2ca436c1206fb34696226f15e) Thanks [@aidenybai](https://github.com/aidenybai)! - Restrict App Router path checks to the project app or src/app directory so nested Pages Router paths do not trigger App Router rules. + +- [#1877](https://github.com/millionco/react-doctor/pull/1877) [`4899bc4`](https://github.com/millionco/react-doctor/commit/4899bc4914bdf956c119ad360958ed83c40c537d) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize optional-chain and TypeScript-wrapped response status guards before fetch body reads. + +- [#1879](https://github.com/millionco/react-doctor/pull/1879) [`45f9769`](https://github.com/millionco/react-doctor/commit/45f97697cb966e6a0bf7214b95087ab09f483900) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid treating promise-returning query APIs as array find calls. Keep reports for known arrays and known predicates. + +- [#1866](https://github.com/millionco/react-doctor/pull/1866) [`dfb598a`](https://github.com/millionco/react-doctor/commit/dfb598a46bcc4865b639c1a347dbc681b673f819) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize static import and require paths wrapped in TypeScript assertions, while retaining warnings for dynamic paths inside those wrappers. + +- [#1870](https://github.com/millionco/react-doctor/pull/1870) [`a293fac`](https://github.com/millionco/react-doctor/commit/a293facac53cfd06840a75e57e18b263a629ef50) Thanks [@aidenybai](https://github.com/aidenybai)! - Preserve state used by a render-phase throw, including Suspense promises and errors, instead of recommending a ref. + +- [#1876](https://github.com/millionco/react-doctor/pull/1876) [`1b149ba`](https://github.com/millionco/react-doctor/commit/1b149bae5f6ecf350b689148b751f0e69afbdb3a) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize either global timer-clear API as releasing a matching timeout or interval handle, including exhaustive retained timer collections. + +- [#1867](https://github.com/millionco/react-doctor/pull/1867) [`888dc2a`](https://github.com/millionco/react-doctor/commit/888dc2a199a1cc6d6d75c30dbba1975936a2026f) Thanks [@aidenybai](https://github.com/aidenybai)! - Allow author-provided accessible names on the tooltip role. Preserve naming restrictions on roles that prohibit them and warnings for unsupported tooltip states. + +- [#1868](https://github.com/millionco/react-doctor/pull/1868) [`7e24c41`](https://github.com/millionco/react-doctor/commit/7e24c411ddc8a0cb4b99c70652fdc2fa26e5c891) Thanks [@aidenybai](https://github.com/aidenybai)! - Skip missing image sizes advice when next/image explicitly disables optimization, since that path does not generate responsive source candidates. + +- [#1915](https://github.com/millionco/react-doctor/pull/1915) [`c1181f0`](https://github.com/millionco/react-doctor/commit/c1181f06681aa7ad41c70b04fac66374a5b46495) Thanks [@aidenybai](https://github.com/aidenybai)! - Report array-index keys passed as React cloneElement overrides, including imported aliases and static computed keys. + +- [#1902](https://github.com/millionco/react-doctor/pull/1902) [`9e9680b`](https://github.com/millionco/react-doctor/commit/9e9680b743153e5674b70b96177d8f49309afd91) Thanks [@aidenybai](https://github.com/aidenybai)! - Allow updater callbacks to mutate a local container when both branches of its conditional initializer create a fresh container. Continue reporting mutations of prior state and shared collections. + +- [#1940](https://github.com/millionco/react-doctor/pull/1940) [`a47c7e0`](https://github.com/millionco/react-doctor/commit/a47c7e07bf7a9f87153b98b7d239029fb5143e32) Thanks [@aidenybai](https://github.com/aidenybai)! - Ignore unreachable fresh fallbacks inside a controlled-state selection when the value type excludes null. + +- [#1937](https://github.com/millionco/react-doctor/pull/1937) [`2c5d1a1`](https://github.com/millionco/react-doctor/commit/2c5d1a1cc1f057c02d644e00d4222aea7d085e08) Thanks [@aidenybai](https://github.com/aidenybai)! - Use the properties read by a resolved local helper when checking object argument dependencies. + +- [#1923](https://github.com/millionco/react-doctor/pull/1923) [`ab83f31`](https://github.com/millionco/react-doctor/commit/ab83f31399c05801e10d6d0c2e52611e3a26b1bf) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept positional keys for immutable arrays of identical literal placeholders. Keep checks for distinct values, records, spreads, and mutated arrays. + +- [#1942](https://github.com/millionco/react-doctor/pull/1942) [`a410280`](https://github.com/millionco/react-doctor/commit/a410280ed979dc00ef2826f81e2f873a48bc5da4) Thanks [@aidenybai](https://github.com/aidenybai)! - Detect fresh cleanup callbacks through local imported wrappers of DOM event listener APIs. + +- [#1934](https://github.com/millionco/react-doctor/pull/1934) [`7ad2c9b`](https://github.com/millionco/react-doctor/commit/7ad2c9b9ad1d6819996c4c38afaf0557e704887e) Thanks [@aidenybai](https://github.com/aidenybai)! - Track subscriptions pushed into arrays that already contain other owned handles. + +- [#1936](https://github.com/millionco/react-doctor/pull/1936) [`03b21c8`](https://github.com/millionco/react-doctor/commit/03b21c8b367ff16057c91e77178a3c7ec60cb597) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify paired Layer.extend lifecycle methods as React event handlers. + +- [#1904](https://github.com/millionco/react-doctor/pull/1904) [`55c2235`](https://github.com/millionco/react-doctor/commit/55c22359ea964386e0c2fdc087abeed8d5a5e86f) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize deterministic lazy ref initialization through an immediately preceding local assignment. Check the resolved value for non-deterministic initialization hidden by aliases. + +- [#1912](https://github.com/millionco/react-doctor/pull/1912) [`683d0c2`](https://github.com/millionco/react-doctor/commit/683d0c2a93c0698b67c19e115733785687f22fbc) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid parent-notification warnings when a local memoized loader only reads props and updates local state. Keep warnings for actual parent callback calls, including asynchronous and direct callback wrappers. + +- [#1909](https://github.com/millionco/react-doctor/pull/1909) [`45f5620`](https://github.com/millionco/react-doctor/commit/45f5620c63551e3fbb0f9c3befd4a4c3cc4b34e5) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize named functions passed to React memo and forwardRef as render scopes in rules-of-hooks, including nonstandard internal names. Keep conditional and nested hook checks active. + +- [#1908](https://github.com/millionco/react-doctor/pull/1908) [`738b340`](https://github.com/millionco/react-doctor/commit/738b340ffc476d373a789b8a7d95667d5edfc618) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize object URL cleanup returned on every path after URL creation, including effects that return early before they allocate a URL. + +- [#1906](https://github.com/millionco/react-doctor/pull/1906) [`130fc45`](https://github.com/millionco/react-doctor/commit/130fc45da44e2e1b6d989fd51f6c801bfa7c3801) Thanks [@aidenybai](https://github.com/aidenybai)! - Prevent boolean-toggle cleanup analysis from crashing when an effect omits its dependency array. Preserve the existing toggle diagnostic and functional-update exemption. + +- [#1931](https://github.com/millionco/react-doctor/pull/1931) [`6ee5988`](https://github.com/millionco/react-doctor/commit/6ee5988e679d3366b940f59c2e0374548cc97cbc) Thanks [@aidenybai](https://github.com/aidenybai)! - Follow guarded observer setup helpers invoked by effect-owned listeners. + +- [#1935](https://github.com/millionco/react-doctor/pull/1935) [`5b301c9`](https://github.com/millionco/react-doctor/commit/5b301c9f5103e257cb6d88985b846bcc725ea7b3) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize loading-set resets paired with cancellation of owned request-map entries. + +- [#1918](https://github.com/millionco/react-doctor/pull/1918) [`b6b2d68`](https://github.com/millionco/react-doctor/commit/b6b2d6842f3ff5d5b0976dae9750d48865166846) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize react_ujs useContext and useContexts as component registration methods rather than React hooks. Support stable CommonJS and ES module bindings. + +- [#1921](https://github.com/millionco/react-doctor/pull/1921) [`f986f15`](https://github.com/millionco/react-doctor/commit/f986f15faf94b37e084f58d8cf92e421c0299e38) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not classify an imported use-prefixed function as a React hook when its resolved implementation only returns static data. + +- [#1925](https://github.com/millionco/react-doctor/pull/1925) [`1451cdb`](https://github.com/millionco/react-doctor/commit/1451cdb65b25f9a61deaf7774fe84a56847b067c) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept positional keys for plain text rows from string splitting and Boolean filtering. Keep checks for stateful children, unknown split methods, and changed token arrays. + +- [#1929](https://github.com/millionco/react-doctor/pull/1929) [`67531cc`](https://github.com/millionco/react-doctor/commit/67531cc656ef74fc126f7b8df2cc0e912ddaac6a) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize portal readiness state after DOM container discovery. + +- [#1927](https://github.com/millionco/react-doctor/pull/1927) [`9e305df`](https://github.com/millionco/react-doctor/commit/9e305dff22273ae9b39c5bb03482c37da457178e) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept index keys for identical map slots that ignore the item and collection values and use the index only as a key. Keep warnings when output depends on an item or an indexed record. + +- [#1913](https://github.com/millionco/react-doctor/pull/1913) [`83bf9ad`](https://github.com/millionco/react-doctor/commit/83bf9ad82c9ccca753bbaf744b2aa14cc84ddd6f) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize fresh const aliases of effect cancellation guards after await. Keep warnings when a snapshot was captured before suspension or another await can make it stale. + +- [#1930](https://github.com/millionco/react-doctor/pull/1930) [`8bfb598`](https://github.com/millionco/react-doctor/commit/8bfb5983478efa72021d17e8dfc6c8919248ebcc) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize primitive cumulative labels in stateless index-keyed rows. + +- [#1922](https://github.com/millionco/react-doctor/pull/1922) [`4fd3e87`](https://github.com/millionco/react-doctor/commit/4fd3e87bbaf437efa72f296d19bfa071f98c23dc) Thanks [@aidenybai](https://github.com/aidenybai)! - Accept positional keys for Array.from slots whose count comes from a property or expression. Keep checks when the index reads external records or the source has record entries. + +- [#1901](https://github.com/millionco/react-doctor/pull/1901) [`295becb`](https://github.com/millionco/react-doctor/commit/295becbdf0d3f68b3d222df6855098492bd524ea) Thanks [@aidenybai](https://github.com/aidenybai)! - Detect unstable nested components created inside React forwardRef and memo render callbacks, including import aliases and TypeScript wrappers. + +- [#1916](https://github.com/millionco/react-doctor/pull/1916) [`8fdead9`](https://github.com/millionco/react-doctor/commit/8fdead90749f5eb2282b028c81ccbab4b0c1a1f0) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize request ownership predicates and loading resets on proven view, close, and unmount paths. Keep warnings when an invalidated request can leave the loading flag set. + +- [#1917](https://github.com/millionco/react-doctor/pull/1917) [`6331b39`](https://github.com/millionco/react-doctor/commit/6331b393c0556a18a08ccacc0aa7c001fb3ca4ce) Thanks [@aidenybai](https://github.com/aidenybai)! - Keep React hook ordering checks out of files that use a proven non-React JSX runtime. Mixed React files retain the checks. + +- [#1900](https://github.com/millionco/react-doctor/pull/1900) [`6ff6710`](https://github.com/millionco/react-doctor/commit/6ff671033ec1c2a39ead71a596d12977b6b6311c) Thanks [@aidenybai](https://github.com/aidenybai)! - Add `--warning-exit-code ` for non-blocking warnings, including GitLab CI jobs that use `allow_failure.exit_codes`. Accept integers from 2 to 255. Preserve existing blocking rules, CI surface filters, and default exit codes across text, JSON, and interactive reports. + +- [#1939](https://github.com/millionco/react-doctor/pull/1939) [`0179427`](https://github.com/millionco/react-doctor/commit/01794275bcc8f6ecc7bae843600b6c2d0a433f7b) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize object URLs retained in React refs when replacement and unmount both revoke the owned value. + +- [#1932](https://github.com/millionco/react-doctor/pull/1932) [`6bed9f6`](https://github.com/millionco/react-doctor/commit/6bed9f6e63e75d012717703e01100e39fd7206a9) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize clearing the state handle of an object URL after revocation. + +- [#1938](https://github.com/millionco/react-doctor/pull/1938) [`a26bc44`](https://github.com/millionco/react-doctor/commit/a26bc446384717f175189f954f6663489767c3da) Thanks [@aidenybai](https://github.com/aidenybai)! - Follow synchronous cleanup helpers that invoke a retained listener disposer on unmount. + +- [#1903](https://github.com/millionco/react-doctor/pull/1903) [`4bcbcd9`](https://github.com/millionco/react-doctor/commit/4bcbcd932b04e3d6c4b8bea1b98c8c1cb1d22678) Thanks [@aidenybai](https://github.com/aidenybai)! - Do not treat directly returned component functions as JSX rendered by their factory. Keep detecting direct component calls and executed render callbacks. + +- [#1910](https://github.com/millionco/react-doctor/pull/1910) [`943ca32`](https://github.com/millionco/react-doctor/commit/943ca324c3182f9506ed1a6e9384d20d351b4eb3) Thanks [@aidenybai](https://github.com/aidenybai)! - Avoid cleanup warnings for local functions and state setters named setInterval or setTimeout. Require a global timer or a matching Node timers import before classifying these calls as timer allocations. + +- [#1941](https://github.com/millionco/react-doctor/pull/1941) [`b880403`](https://github.com/millionco/react-doctor/commit/b88040353a46500eb839d6d46e685d4ea60132d0) Thanks [@aidenybai](https://github.com/aidenybai)! - Recognize the stable send result of XState React v1 useService when its interpreter is a module singleton. + +- Updated dependencies [[`6932e7d`](https://github.com/millionco/react-doctor/commit/6932e7de483214c12b04341d1cfbc59e10ceeaca), [`0298eb8`](https://github.com/millionco/react-doctor/commit/0298eb876f8511a703b1eb7d6693f0ee0f612b0a), [`012e208`](https://github.com/millionco/react-doctor/commit/012e208ae71d9f60df476043adf01f332df040ed), [`bb00a27`](https://github.com/millionco/react-doctor/commit/bb00a277d9a321116ad6e715b27f06f4ad1ec648), [`1f6b98a`](https://github.com/millionco/react-doctor/commit/1f6b98aeb7469caa700a9e8b7bc88d8c6342426e), [`a68f193`](https://github.com/millionco/react-doctor/commit/a68f1933e218671a60ae422ee70d56c8612c6031), [`72fab66`](https://github.com/millionco/react-doctor/commit/72fab6670c3419bb193751fe35eae99bd500d107), [`e2b047b`](https://github.com/millionco/react-doctor/commit/e2b047bcdcb7d8e6f13ea1f6c3ef027fbd0fc79e), [`a1cff2e`](https://github.com/millionco/react-doctor/commit/a1cff2e7d1939a23776316950eb040bf4d5b6402), [`89c6701`](https://github.com/millionco/react-doctor/commit/89c67017c1634cd22457a616545da05c2ceba0da), [`e18d7da`](https://github.com/millionco/react-doctor/commit/e18d7daaa0c6bb2203de7546c2a870d4d0c02fef), [`f3f167e`](https://github.com/millionco/react-doctor/commit/f3f167e742f0a84aa5e01d3b31a748f552eba9e9), [`909b8e5`](https://github.com/millionco/react-doctor/commit/909b8e5f1bbbdfbd58f5f6b3bf0b031d1afd0c0b), [`281fdc9`](https://github.com/millionco/react-doctor/commit/281fdc965635f0c7e3ad7d80d2c98bdf3d92ae52), [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486), [`a3cbae0`](https://github.com/millionco/react-doctor/commit/a3cbae0151f12172d4e178450e9ffd961b430486), [`7bebcfc`](https://github.com/millionco/react-doctor/commit/7bebcfc1e01445f8fde181e8b8cf1619f836955d), [`6790398`](https://github.com/millionco/react-doctor/commit/67903983c48c59129f08142734e63c9f005bd1ee), [`ad8bca6`](https://github.com/millionco/react-doctor/commit/ad8bca6335a66f1aeb432b8bc3dd86f895f8f02c), [`c92fec1`](https://github.com/millionco/react-doctor/commit/c92fec1c3ea96cf21ab761118d24358df2476eea), [`2825dfd`](https://github.com/millionco/react-doctor/commit/2825dfd67e0049f3247cf033ea7769e4fc3ec90c), [`cc78fa3`](https://github.com/millionco/react-doctor/commit/cc78fa3bb38594bbeea7040fe1e144d19b0eaaf5), [`4f8866c`](https://github.com/millionco/react-doctor/commit/4f8866ce3122b5155c0bd37756e030b952e9cddd), [`96bf20f`](https://github.com/millionco/react-doctor/commit/96bf20fb5fe084d2ca436c1206fb34696226f15e), [`4899bc4`](https://github.com/millionco/react-doctor/commit/4899bc4914bdf956c119ad360958ed83c40c537d), [`45f9769`](https://github.com/millionco/react-doctor/commit/45f97697cb966e6a0bf7214b95087ab09f483900), [`dfb598a`](https://github.com/millionco/react-doctor/commit/dfb598a46bcc4865b639c1a347dbc681b673f819), [`a293fac`](https://github.com/millionco/react-doctor/commit/a293facac53cfd06840a75e57e18b263a629ef50), [`1b149ba`](https://github.com/millionco/react-doctor/commit/1b149bae5f6ecf350b689148b751f0e69afbdb3a), [`888dc2a`](https://github.com/millionco/react-doctor/commit/888dc2a199a1cc6d6d75c30dbba1975936a2026f), [`7e24c41`](https://github.com/millionco/react-doctor/commit/7e24c411ddc8a0cb4b99c70652fdc2fa26e5c891), [`e50ba27`](https://github.com/millionco/react-doctor/commit/e50ba271d99c9c27a132852c4d60f6484371cddd), [`91b6991`](https://github.com/millionco/react-doctor/commit/91b6991584d6e5676bbf4c83022b58afe51d933d), [`d8c0517`](https://github.com/millionco/react-doctor/commit/d8c0517cbf594fd3b88486c116beb58ffcedb7c8), [`0d99110`](https://github.com/millionco/react-doctor/commit/0d991100a78f74ecb834af1c0367d1d2046f32d3), [`712a08a`](https://github.com/millionco/react-doctor/commit/712a08a5f0f389424278ca3b3a1621437cee350e), [`e6457e3`](https://github.com/millionco/react-doctor/commit/e6457e3572d872a157bb335b32f63cfdae31ee52), [`d1cd769`](https://github.com/millionco/react-doctor/commit/d1cd7699164dbcd3b1f19ebd978a7aaefb0cb723), [`0a8982b`](https://github.com/millionco/react-doctor/commit/0a8982be0bc2ba54975d10377daccbcff57eabf5), [`c1181f0`](https://github.com/millionco/react-doctor/commit/c1181f06681aa7ad41c70b04fac66374a5b46495), [`9e9680b`](https://github.com/millionco/react-doctor/commit/9e9680b743153e5674b70b96177d8f49309afd91), [`a47c7e0`](https://github.com/millionco/react-doctor/commit/a47c7e07bf7a9f87153b98b7d239029fb5143e32), [`2c5d1a1`](https://github.com/millionco/react-doctor/commit/2c5d1a1cc1f057c02d644e00d4222aea7d085e08), [`ab83f31`](https://github.com/millionco/react-doctor/commit/ab83f31399c05801e10d6d0c2e52611e3a26b1bf), [`a410280`](https://github.com/millionco/react-doctor/commit/a410280ed979dc00ef2826f81e2f873a48bc5da4), [`7ad2c9b`](https://github.com/millionco/react-doctor/commit/7ad2c9b9ad1d6819996c4c38afaf0557e704887e), [`03b21c8`](https://github.com/millionco/react-doctor/commit/03b21c8b367ff16057c91e77178a3c7ec60cb597), [`55c2235`](https://github.com/millionco/react-doctor/commit/55c22359ea964386e0c2fdc087abeed8d5a5e86f), [`683d0c2`](https://github.com/millionco/react-doctor/commit/683d0c2a93c0698b67c19e115733785687f22fbc), [`45f5620`](https://github.com/millionco/react-doctor/commit/45f5620c63551e3fbb0f9c3befd4a4c3cc4b34e5), [`738b340`](https://github.com/millionco/react-doctor/commit/738b340ffc476d373a789b8a7d95667d5edfc618), [`130fc45`](https://github.com/millionco/react-doctor/commit/130fc45da44e2e1b6d989fd51f6c801bfa7c3801), [`6ee5988`](https://github.com/millionco/react-doctor/commit/6ee5988e679d3366b940f59c2e0374548cc97cbc), [`5b301c9`](https://github.com/millionco/react-doctor/commit/5b301c9f5103e257cb6d88985b846bcc725ea7b3), [`b6b2d68`](https://github.com/millionco/react-doctor/commit/b6b2d6842f3ff5d5b0976dae9750d48865166846), [`f986f15`](https://github.com/millionco/react-doctor/commit/f986f15faf94b37e084f58d8cf92e421c0299e38), [`1451cdb`](https://github.com/millionco/react-doctor/commit/1451cdb65b25f9a61deaf7774fe84a56847b067c), [`67531cc`](https://github.com/millionco/react-doctor/commit/67531cc656ef74fc126f7b8df2cc0e912ddaac6a), [`9e305df`](https://github.com/millionco/react-doctor/commit/9e305dff22273ae9b39c5bb03482c37da457178e), [`83bf9ad`](https://github.com/millionco/react-doctor/commit/83bf9ad82c9ccca753bbaf744b2aa14cc84ddd6f), [`8bfb598`](https://github.com/millionco/react-doctor/commit/8bfb5983478efa72021d17e8dfc6c8919248ebcc), [`4fd3e87`](https://github.com/millionco/react-doctor/commit/4fd3e87bbaf437efa72f296d19bfa071f98c23dc), [`295becb`](https://github.com/millionco/react-doctor/commit/295becbdf0d3f68b3d222df6855098492bd524ea), [`8fdead9`](https://github.com/millionco/react-doctor/commit/8fdead90749f5eb2282b028c81ccbab4b0c1a1f0), [`6331b39`](https://github.com/millionco/react-doctor/commit/6331b393c0556a18a08ccacc0aa7c001fb3ca4ce), [`0179427`](https://github.com/millionco/react-doctor/commit/01794275bcc8f6ecc7bae843600b6c2d0a433f7b), [`6bed9f6`](https://github.com/millionco/react-doctor/commit/6bed9f6e63e75d012717703e01100e39fd7206a9), [`a26bc44`](https://github.com/millionco/react-doctor/commit/a26bc446384717f175189f954f6663489767c3da), [`4bcbcd9`](https://github.com/millionco/react-doctor/commit/4bcbcd932b04e3d6c4b8bea1b98c8c1cb1d22678), [`943ca32`](https://github.com/millionco/react-doctor/commit/943ca324c3182f9506ed1a6e9384d20d351b4eb3), [`b880403`](https://github.com/millionco/react-doctor/commit/b88040353a46500eb839d6d46e685d4ea60132d0)]: + - oxlint-plugin-react-doctor@0.9.18 + ## 0.9.17 ### Patch Changes diff --git a/packages/react-doctor/package.json b/packages/react-doctor/package.json index 0ca801a60a..8ad54dd7ce 100644 --- a/packages/react-doctor/package.json +++ b/packages/react-doctor/package.json @@ -1,6 +1,6 @@ { "name": "react-doctor", - "version": "0.9.17", + "version": "0.9.18", "description": "Your agent writes bad React. This catches it", "keywords": [ "accessibility",