725 Commits

Author SHA1 Message Date
Aiden Bai 547e1e4ecd fix: reduce placeholder secret false positives (#732) v2.1.0 2026-06-07 23:19:31 -07:00
Aiden Bai 772385fea4 Fix generated image a11y false positives (#733) 2026-06-07 22:56:36 -07:00
Nisarg Patel 829655c404 chore(ci): compress comments in generated workflow template (#739)
* chore(ci): compress comments in generated workflow template

Collapses the multi-line YAML comments in the generated
`.github/workflows/react-doctor.yml` to a single sentence per block
(triggers, permissions, concurrency), so a new user sees what each block
does without scrolling past five-line explanations.

No behavior change: same triggers, same permissions (`contents: read`,
`pull-requests: write`, `issues: write`, `statuses: write`), same
`millionco/react-doctor@v2` ref, same concurrency group, same
configuration-knobs reference under the `with:` block.

Co-authored-by: Cursor <cursoragent@cursor.com>

* chore(ci): drop redundant permissions comment in template

Per PR review (#739) — the four `permissions:` keys (`contents: read`,
`pull-requests: write`, `issues: write`, `statuses: write`) are
self-explanatory, so the leading sentence was just noise. Removes the
comment from the generated workflow and tightens the matching
buildWorkflowContent docstring.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 22:30:34 -07:00
Aiden Bai af98f83614 Remove jsx-no-target-blank rule (#735)
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Aiden Bai <aidenybai@users.noreply.github.com>
2026-06-07 21:20:48 -07:00
Aiden Bai 25cc69bd8f refactor(skill): fold doctor-explain into react-doctor references/explain.md (#729) 2026-06-07 20:39:56 -07:00
Aiden Bai 155cde2849 fix 2026-06-07 19:29:32 -07:00
Aiden Bai 6bfc03a60c fix 2026-06-07 19:29:20 -07:00
Aiden Bai 0db5979060 fix 2026-06-07 19:28:14 -07:00
Aiden Bai 42c339f8b5 feat(cli): terminal-width-aware rendering and CI-first onboarding (#728) 2026-06-07 19:27:44 -07:00
Aiden Bai 5abc03941e Update package.json 2026-06-07 19:27:15 -07:00
Aiden Bai 6d0c35404a Update package.json 2026-06-07 19:27:01 -07:00
Aiden Bai 7cf52d8985 fix license attribution 2026-06-07 19:26:22 -07:00
devin-ai-integration[bot] 727894ace2 fix: skip state-effect rules for async intermediate functions (#726)
Skip the mount-effect state rules (no-initialize-state, no-derived-state,
no-chain-state-updates, no-adjust-state-on-prop-change) when a setter is
reached only indirectly through an async intermediate function — the call
site is synchronous but the setter isn't hoistable to a useState initializer.

Adds resolveToFunction()/resolvesToAsyncFunction() helpers and a shared
isSyncStateSetterCall() predicate, plus regression fixtures for all four rules.

Fixes #722
2026-06-07 04:30:28 -07:00
devin-ai-integration[bot] b4b79addce fix: disable inline-renderItem rules for React Compiler projects (#725)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-07 04:05:50 -07:00
github-actions[bot] b461b2d78e chore: version packages (#724)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
oxlint-plugin-react-doctor@0.4.2 react-doctor@0.4.2 eslint-plugin-react-doctor@0.4.2
2026-06-07 03:30:44 -07:00
Aiden Bai e181ac1a8d chore(release): align package versions and lockstep them via changesets
Bump @react-doctor/core, @react-doctor/api, and @react-doctor/language-server
to 0.4.1 so all six release-managed packages share one version line, and add
them to the changesets `fixed` group so every future release bumps them
together. Keeps versions from drifting apart again (next release -> 0.4.2 across
the board).
2026-06-07 03:28:43 -07:00
Aiden Bai d17dc87865 feat(config): add defineConfig helper and read react-doctor.config.json fallback (#721) 2026-06-07 03:09:29 -07:00
github-actions[bot] 7d4b9960d2 chore: version packages (#703) react-doctor@0.4.1 oxlint-plugin-react-doctor@0.4.1 eslint-plugin-react-doctor@0.4.1 2026-06-07 02:40:55 -07:00
devin-ai-integration[bot] c793cb1904 chore: remove minor changeset for prefer-explicit-variants (#720)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-07 02:28:46 -07:00
devin-ai-integration[bot] f61adc4b66 chore: bump deslop-js from ^0.0.20 to ^0.0.21 (#719)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-07 00:24:42 -07:00
Aiden Bai ca5ea4c61e fix 2026-06-06 23:33:47 -07:00
Aiden Bai a11faa2999 fix 2026-06-06 23:25:44 -07:00
Aiden Bai b1a22efdf7 refactor(oxlint): extract shared isBooleanPrefixedPropName util (#704) 2026-06-06 20:29:38 -07:00
devin-ai-integration[bot] fe5f3de330 fix: disable server-fetch-without-revalidate for Next.js 15+ (#715)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-06 20:25:01 -07:00
devin-ai-integration[bot] ee9ab336d3 fix(nextjs): scope useSearchParams/Suspense rule to page files only (#695) (#714)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-06 20:22:27 -07:00
devin-ai-integration[bot] 65bab646e1 fix: close stdin on oxlint child processes to prevent WSL hang (#716)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-06 20:10:58 -07:00
devin-ai-integration[bot] ee980d98e0 chore: bump deslop-js from ^0.0.19 to ^0.0.20 (#717)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-06 19:46:04 -07:00
devin-ai-integration[bot] 36ecd053cf fix: search untracked files in require-reduced-motion check (#696) (#711)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-06 19:33:53 -07:00
devin-ai-integration[bot] 64667dae16 fix(no-unknown-property): skip tw attribute in Next.js OG image files (#710)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-06 19:33:10 -07:00
devin-ai-integration[bot] 73dcb2040d fix(nextjs-no-img-element): skip Next.js metadata image routes (#709)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-06 19:32:55 -07:00
devin-ai-integration[bot] dc35070a50 fix(only-export-components): treat Expo Router _layout files as entry points (#713)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-06 17:46:26 -07:00
Ray Arayilakath 15bd9d8617 feat(ci): surface React Doctor results on main + offer v1→v2 action upgrade (#706)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-06 04:16:24 -04:00
devin-ai-integration[bot] 6216430f93 feat(correctness): add no-jsx-element-type rule (#689)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-05 22:49:58 -07:00
devin-ai-integration[bot] 831cf3fbfd feat(tanstack-query): add query-destructure-result rule (#688)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-05 22:49:25 -07:00
devin-ai-integration[bot] 5448962028 fix: resolve .cmd wrappers on Windows so agent handoff launches correctly (#686)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-04 21:32:45 -07:00
devin-ai-integration[bot] a5c6993064 feat(nextjs): add 7 new Next.js best-practice rules from vercel-labs skill (#680)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-04 21:26:17 -07:00
github-actions[bot] f75ec7a1e7 chore: version packages (#682) react-doctor@0.4.0 oxlint-plugin-react-doctor@0.4.0 eslint-plugin-react-doctor@0.4.0 2026-06-04 21:21:42 -04:00
Ray Arayilakath 75932719d1 feat(action): add scope input to opt into full-project scans on PRs (#656)
* feat(action): add scope input to opt into full-project scans on PRs

On pull_request events the action scopes the scan to the PR's changed files
(baseline/diff mode), with no way to scan the whole project. A PR that only
adds config/workflow files therefore reports 0 issues even when the project
has obvious problems in untouched files.

Add a 'scope' input: 'changed' (default, unchanged baseline/diff behavior) or
'full'. When full, skip the pr-files and base steps and pass '--diff false' —
the documented full-scan escape hatch, which disables baseline/diff and
overrides any diff value in the project config. The scope value is lowercased
before the bash test so it matches the case-insensitive comparison the GHA
'inputs.scope != full' expressions use.

Co-authored-by: Ray Arayilakath <me@rayhanadev.com>

* style(action): simplify the --diff false comment to plain language

Co-authored-by: Ray Arayilakath <me@rayhanadev.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
v2.0.1
2026-06-04 18:10:02 -04:00
Ray Arayilakath 9a8ad6e40d feat(ci): blocking gate, PR-introduced-issues baseline, inline review comments + CLI flag cleanup (#663)
Co-authored-by: Cursor <cursoragent@cursor.com>
v2.0.0
2026-06-04 17:56:22 -04:00
Ray Arayilakath 915745ef7b feat(language-server): editor language server behind react-doctor experimental-lsp (#681)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 17:43:53 -04:00
github-actions[bot] 6130583376 chore: version packages (#646) eslint-plugin-react-doctor@0.3.0 react-doctor@0.3.0 oxlint-plugin-react-doctor@0.3.0 2026-06-04 04:21:10 -07:00
Aiden Bai cbdff6203d feat(cli): "Add to CI" handoff option + default CI setup in install (#658)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
Co-authored-by: Nisarg Patel <awesomenisarg@gmail.com>
2026-06-04 04:15:05 -07:00
devin-ai-integration[bot] 67be206087 chore: bump deslop-js to ^0.0.19 (#679)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-04 03:49:32 -07:00
devin-ai-integration[bot] d4cc99b2a8 fix: require useState binding proof for setter-pattern rules (#678)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-04 03:39:59 -07:00
Aiden Bai eba20ae9a7 feat(rules): demote 19 low-signal rules to opt-in (#644) 2026-06-04 02:50:01 -07:00
devin-ai-integration[bot] abbb04202e Retire rn-animate-layout-property rule (#677) 2026-06-04 01:00:26 -07:00
devin-ai-integration[bot] 08e1d55da4 fix(cli): allow combining --yes and --full (#676)
Co-authored-by: Aiden Bai <aiden.bai05@gmail.com>
2026-06-04 00:40:44 -07:00
Aiden Bai 6851a786e5 chore: bump deslop-js to 0.0.17 (#674) 2026-06-03 17:13:50 -07:00
Aiden Bai 5d7b36bc31 Fix Reanimated layout animation false positive (#666) 2026-06-03 17:12:43 -07:00
Aiden Bai 68a0befa1a fix(rules): stop no-wide-letter-spacing flagging uppercase wrapper-prop labels (#673) 2026-06-03 16:33:53 -07:00