Skip to content
Merged
Show file tree
Hide file tree
Changes from 250 commits
Commits
Show all changes
341 commits
Select commit Hold shift + click to select a range
beb2525
style: use dprint for imports and exports sorting
Rel1cx Aug 17, 2025
abbaa90
chore: minor fixes
Rel1cx Aug 17, 2025
df52cd5
chore(website): enable '@eslint-react/no-unused-props' rule
Rel1cx Aug 17, 2025
f08fdf8
chore(website): minor fixes
Rel1cx Aug 17, 2025
e53fec2
release: 2.0.0-beta.33
Rel1cx Aug 18, 2025
68a8775
Merge branch 'main' into 2.0.0-beta
Rel1cx Aug 18, 2025
2dddf88
chore: update lucide-react to version 0.540.0
Rel1cx Aug 18, 2025
717fe4c
feat: add `no-unused-props` rule to `recommended-type-checked` preset…
Rel1cx Aug 18, 2025
09cca7b
release: 2.0.0-beta.34
Rel1cx Aug 18, 2025
4c0f56d
docs: improve examples in `react-x/no-unused-props` (#1179)
Rel1cx Aug 18, 2025
f6f0f89
chore: remove ununsed files
Rel1cx Aug 18, 2025
5c2ef9b
chore: update deps
Rel1cx Aug 18, 2025
831529e
chore: update deps
Rel1cx Aug 19, 2025
65a33e3
chore: remove ununsed code
Rel1cx Aug 19, 2025
c038699
chore: update contributing docs
Rel1cx Aug 19, 2025
0780100
feat: add vitest mock env detection, closes #1181 (#1182)
Rel1cx Aug 19, 2025
29eff3f
release: 2.0.0-beta.35
Rel1cx Aug 19, 2025
79256e1
chore: update deps
Rel1cx Aug 20, 2025
4cff122
refactor: move context detection utilities to `kit` package (#1183)
Rel1cx Aug 20, 2025
6a816cf
release: 2.0.0-beta.36
Rel1cx Aug 20, 2025
d2284e4
ci: update branches in publish workflow
Rel1cx Aug 20, 2025
b5f5f69
release: 2.0.0-beta.37
Rel1cx Aug 20, 2025
6a67592
release: 2.0.0-next.137
Rel1cx Aug 20, 2025
aac93d0
fix: improve hook detection logic and vi.mock utilities (#1184)
Rel1cx Aug 20, 2025
6369062
release: 2.0.0-next.138
Rel1cx Aug 20, 2025
9bd6a60
release: 2.0.0-beta.38
Rel1cx Aug 20, 2025
cd5befe
chore: update dprint plugins
Rel1cx Aug 20, 2025
e352f62
feat(naming-convention/filename): enhance default excepts patterns an…
Rel1cx Aug 20, 2025
bd874c0
release: 2.0.0-beta.39
Rel1cx Aug 20, 2025
57cf17a
release: 2.0.0-next.139
Rel1cx Aug 20, 2025
27a6663
docs: standardize implementation section titles (#1186)
Rel1cx Aug 20, 2025
063f504
ci: update actions/checkout to v5 in workflow files
Rel1cx Aug 21, 2025
cbd2154
release: 2.0.0-next.140
Rel1cx Aug 21, 2025
cc6b877
release: 2.0.0-beta.40
Rel1cx Aug 21, 2025
75cd295
refactor(website): improve theme
Rel1cx Aug 21, 2025
83c2edc
Merge branch 'main' into 2.0.0
Rel1cx Aug 21, 2025
40647eb
chore: remove ununsed deps
Rel1cx Aug 21, 2025
93a66f4
feat: add @effect/language-service dependency and update related scripts
Rel1cx Aug 22, 2025
8d4f03a
chore: update deps (#1189)
Rel1cx Aug 22, 2025
bd23a63
release: 2.0.0-next.141
Rel1cx Aug 22, 2025
7d06bfd
release: 2.0.0-beta.41
Rel1cx Aug 22, 2025
ac31323
refactor(scripts): migrate scripts to `effect` and `effect-platform` …
Rel1cx Aug 22, 2025
a0e5b1f
refactor(scripts): minor improvements
Rel1cx Aug 22, 2025
a7b5ba3
chore: remove unused code
Rel1cx Aug 23, 2025
a260662
release: 2.0.0-next.142
Rel1cx Aug 23, 2025
5ccd5d4
release: 2.0.0-beta.42
Rel1cx Aug 23, 2025
3ed0860
chore: reformat mdx
Rel1cx Aug 23, 2025
3ecda4d
fix: update documentation glob pattern to include .mdx files
Rel1cx Aug 23, 2025
0d949b5
chore: add --concurrency=auto to eslint
Rel1cx Aug 24, 2025
574721a
chore(examples): add --concurrency=auto to eslint
Rel1cx Aug 24, 2025
3717079
fix: disable-conflict-eslint-plugin-react config (#1191)
Dremora Aug 24, 2025
5080f64
release: 2.0.0-next.143
Rel1cx Aug 24, 2025
a4c9f55
release: 2.0.0-beta.43
Rel1cx Aug 24, 2025
a3e5280
chore: update zod to version 4.1.1 and fix package descriptions
Rel1cx Aug 24, 2025
330cc4c
feat: update rule metadata generation and add missing rules to docume…
Rel1cx Aug 24, 2025
7ae4c1a
chore: minor fixes
Rel1cx Aug 24, 2025
78d1666
chore: update dprint markup_fmt plugin to version 0.23.2
Rel1cx Aug 24, 2025
52e39c2
fix: update README links to use correct paths and enhance update script
Rel1cx Aug 24, 2025
b857d9c
release: 2.0.0-next.144
Rel1cx Aug 24, 2025
c0e5215
release: 2.0.0-beta.44
Rel1cx Aug 24, 2025
30132ad
chore: rename examples (#1192)
Rel1cx Aug 25, 2025
6b8c7e2
release: 2.0.0-next.145
Rel1cx Aug 25, 2025
43e23c0
release: 2.0.0-next.146
Rel1cx Aug 25, 2025
5ea7424
feat(scripts): reset nx cache when lockfile is outdated
Rel1cx Aug 25, 2025
bf96c43
feat(tooling): migrate to tsdown for bundling (#1193)
Rel1cx Aug 25, 2025
781a7f8
release: 2.0.0-next.147
Rel1cx Aug 25, 2025
d9c5856
release: 2.0.0-beta.47
Rel1cx Aug 25, 2025
844d690
release: 2.0.0-next.148
Rel1cx Aug 26, 2025
a33f268
fix: rule name and message id key mismatch in `no-nested-lazy-compone…
Rel1cx Aug 26, 2025
9dab0d1
release: 2.0.0-beta.48
Rel1cx Aug 26, 2025
e967d43
feat: add `react-x/no-unnecessary-key`, closes #950 (#1196)
Rel1cx Aug 26, 2025
856e017
release: 2.0.0-next.149
Rel1cx Aug 26, 2025
9b58d31
release: 2.0.0-beta.49
Rel1cx Aug 26, 2025
4681a80
docs: minor improvements
Rel1cx Aug 26, 2025
a479f05
release: 2.0.0-next.150
Rel1cx Aug 26, 2025
3fe5aae
refactor(core): restructure component detection APIs (#1197)
Rel1cx Aug 26, 2025
0c2f8e9
release: 2.0.0-next.151
Rel1cx Aug 26, 2025
d6d922a
build: remove nx (#1198)
Rel1cx Aug 27, 2025
230aa52
release: 2.0.0-next.152
Rel1cx Aug 27, 2025
9b5c3d6
release: 2.0.0-beta.52
Rel1cx Aug 27, 2025
40bf325
chore: update fumadocs
Rel1cx Aug 27, 2025
29798df
refactor: reorganize AST and utilities structure (#1199)
Rel1cx Aug 27, 2025
78e70b8
release: 2.0.0-next.153
Rel1cx Aug 27, 2025
e2217ea
release: 2.0.0-beta.53
Rel1cx Aug 27, 2025
1476353
fix: add ESLint compatibility types and update plugins exports, close…
Rel1cx Aug 28, 2025
7c38c6e
release: 2.0.0-next.154
Rel1cx Aug 28, 2025
552a2e5
release: 2.0.0-beta.54
Rel1cx Aug 28, 2025
51d0f7c
docs: update changelog
Rel1cx Aug 28, 2025
b9a39a1
chore: remove ununsed code
Rel1cx Aug 28, 2025
446e29b
refactor: minor improvements
Rel1cx Aug 28, 2025
e65e3da
refactor: update `dom/no-unknown-property` rule implementation (#1202)
Rel1cx Aug 28, 2025
21cffbc
fix: ensure single default export in unified plugin entry
Rel1cx Aug 29, 2025
b79c1fe
release: 2.0.0-next.155
Rel1cx Aug 29, 2025
155afaf
release: 2.0.0-beta.55
Rel1cx Aug 29, 2025
a2b83d6
docs: update changelog
Rel1cx Aug 29, 2025
3935d6f
refactor: code optimization (#1205)
Rel1cx Aug 29, 2025
551c5a2
release: 2.0.0-next.156
Rel1cx Aug 29, 2025
c2e30ac
refactor: minor improvements
Rel1cx Aug 29, 2025
a9c5a81
chore: remove ununsed deps
Rel1cx Aug 29, 2025
31a6aa9
docs: remove lynx example directory and update dependencies (#1206)
Rel1cx Aug 29, 2025
cb506c8
chore: update CONTRIBUTING.md
Rel1cx Aug 29, 2025
2f43cc3
fix: issue introduced in version 1.52.7 where the react-hooks-extra r…
Rel1cx Aug 30, 2025
cec28db
release: 2.0.0-next.157
Rel1cx Aug 30, 2025
0c9fc65
release: 2.0.0-beta.57
Rel1cx Aug 30, 2025
211c610
docs: update changelog
Rel1cx Aug 30, 2025
a878b8f
refactor: refine plugin configuration types (#1209)
Rel1cx Aug 30, 2025
9e2fdf6
release: 2.0.0-next.158
Rel1cx Aug 30, 2025
8817775
release: 2.0.0-beta.58
Rel1cx Aug 30, 2025
8a86b93
docs: minor improvements
Rel1cx Aug 31, 2025
a0bbbd8
refactor: improve compatible types (#1210)
Rel1cx Aug 31, 2025
f867766
release: 2.0.0-next.159
Rel1cx Aug 31, 2025
ddf5e8d
release: 2.0.0-beta.59
Rel1cx Aug 31, 2025
d6af21c
chore: update fumadocs
Rel1cx Aug 31, 2025
7512014
refactor: replace custom config functions with getConfigAdapters util…
Rel1cx Sep 1, 2025
7219018
release: 2.0.0-next.160
Rel1cx Sep 1, 2025
8ec76d3
release: 2.0.0-beta.60
Rel1cx Sep 1, 2025
20f6088
release: 2.0.0-next.61
Rel1cx Sep 1, 2025
32d4ae1
refactor: minor improvements
Rel1cx Sep 1, 2025
59051b8
release: 2.0.0-next.162
Rel1cx Sep 1, 2025
1597761
release: 2.0.0-next.163
Rel1cx Sep 2, 2025
07ab70f
release: 2.0.0-beta.63
Rel1cx Sep 2, 2025
8a541e0
docs: replace `tseslint.config` with `defineConfig` (#1214)
Rel1cx Sep 2, 2025
f9e0bcf
release: 2.0.0-next.164
Rel1cx Sep 2, 2025
8c1dc50
release: 2.0.0-beta.64
Rel1cx Sep 2, 2025
403a7c9
docs: minor improvements
Rel1cx Sep 2, 2025
945b6e8
docs: minor improvements (#1215)
Rel1cx Sep 2, 2025
7baa84e
docs: fix hooks extra rules missing in rules index
Rel1cx Sep 2, 2025
7bf86c1
chore: update effect
Rel1cx Sep 2, 2025
0db1a8f
chore: add editor config for Zed
Rel1cx Sep 3, 2025
8f434be
docs: minor fixes
Rel1cx Sep 3, 2025
4c25203
chore: update deps
Rel1cx Sep 3, 2025
cb187cb
fix(naming-convention/filename): update regex patterns in default opt…
Rel1cx Sep 3, 2025
a2c3c77
release: 2.0.0-next.165
Rel1cx Sep 3, 2025
4ce979b
release: 2.0.0-beta.65
Rel1cx Sep 3, 2025
cc9c9fb
docs: update changelog
Rel1cx Sep 3, 2025
c513dfc
refactor: rename error message IDs to be more consistent
Rel1cx Sep 3, 2025
b5e7573
release: 2.0.0-next.166
Rel1cx Sep 3, 2025
b87db74
chore: update deps
Rel1cx Sep 4, 2025
b0c37b3
release: 2.0.0-beta.66
Rel1cx Sep 4, 2025
684595b
chore: minor fixes
Rel1cx Sep 4, 2025
d531e77
chore(local/configs): replace `tseslint.config` with `defineConfig`
Rel1cx Sep 5, 2025
fd2c981
feat: enhance `dom/no-string-style-prop` rule to support custom compo…
Rel1cx Sep 5, 2025
8d72b67
release: 2.0.0-next.167
Rel1cx Sep 5, 2025
5b8a8c1
release: 2.0.0-beta.67
Rel1cx Sep 5, 2025
1dfb283
chore: update deps
Rel1cx Sep 5, 2025
181d794
release: 2.0.0-next.168
Rel1cx Sep 5, 2025
48b7c6d
chore: remove ununsed imports
Rel1cx Sep 6, 2025
ccd69e1
feat: new jsx element and attribute resolution for dom rules (#1219)
Rel1cx Sep 6, 2025
b721efd
release: 2.0.0-next.169
Rel1cx Sep 6, 2025
ecc68d5
refactor: replace `toStaticValue` with `getStaticValue` (#1220)
Rel1cx Sep 6, 2025
b048f6e
release: 2.0.0-next.170
Rel1cx Sep 6, 2025
ad0354e
release: 2.0.0-beta.170
Rel1cx Sep 6, 2025
77e387e
refactor(var): rename utility files and improve code organization (#1…
Rel1cx Sep 6, 2025
ed11ae6
release: 2.0.0-next.171
Rel1cx Sep 6, 2025
a17ccac
release: 2.0.0-beta.171
Rel1cx Sep 6, 2025
5abf842
fix: allow string style prop on non-host elements in `dom/no-string-s…
Rel1cx Sep 6, 2025
8af8343
release: 2.0.0-next.172
Rel1cx Sep 6, 2025
e06367d
release: 2.0.0-beta.172
Rel1cx Sep 6, 2025
23f7880
chore: update deps
Rel1cx Sep 6, 2025
76d577e
docs: enhance feature and rule request issue templates (#1223)
Rel1cx Sep 7, 2025
bf9472c
chore: minor improvements
Rel1cx Sep 7, 2025
4135f2f
refactor: rework hooks rules (#1225)
Rel1cx Sep 8, 2025
ceaf0bd
release: 2.0.0-next.173
Rel1cx Sep 8, 2025
c2c0369
release: 2.0.0-beta.173
Rel1cx Sep 8, 2025
2648e36
release: 2.0.0-next.174
Rel1cx Sep 8, 2025
38757a2
release: 2.0.0-beta.174
Rel1cx Sep 8, 2025
791eacd
docs: minor fixes
Rel1cx Sep 8, 2025
7811324
docs: update roadmap
Rel1cx Sep 8, 2025
2317a46
fix: fix scope check in `no-unnecessary-key` rule (#1226)
Rel1cx Sep 8, 2025
1dc952b
release: 2.0.0-next.175
Rel1cx Sep 8, 2025
1f18377
release: 2.0.0-beta.175
Rel1cx Sep 8, 2025
2a950fd
release: 2.0.0-next.176
Rel1cx Sep 9, 2025
e283122
release: 2.0.0-beta.176
Rel1cx Sep 9, 2025
30851a5
docs: minor fixes
Rel1cx Sep 9, 2025
9403832
release: 2.0.0-next.177
Rel1cx Sep 10, 2025
432beb0
release: 2.0.0-beta.177
Rel1cx Sep 10, 2025
cf8b5e6
chore: remove cspell and its deps
Rel1cx Sep 10, 2025
e81483a
fix: fix useEffect setup function check in web-api/no-leaked-event-li…
Rel1cx Sep 10, 2025
33ebb92
release: 2.0.0-next.178
Rel1cx Sep 10, 2025
cefd50a
release: 2.0.0-beta.178
Rel1cx Sep 10, 2025
831b6d1
docs: update contributing guide for clarity and consistency
Rel1cx Sep 11, 2025
fbeba5d
chore: improve local config types
Rel1cx Sep 11, 2025
b60ff88
feat: Remove Language Preference from codebase (#1230)
Rel1cx Sep 11, 2025
af83bb1
refactor: cleanup utilities (#1231)
Rel1cx Sep 11, 2025
0a105c5
release: 2.0.0-next.179
Rel1cx Sep 11, 2025
03b1a1b
release: 2.0.0-beta.179
Rel1cx Sep 11, 2025
3ae92b8
chore: fix npm scripts
Rel1cx Sep 11, 2025
c93e826
release: 2.0.0-next.180
Rel1cx Sep 12, 2025
35aa8f4
release: 2.0.0-beta.180
Rel1cx Sep 12, 2025
db805b7
chore: enable pnpm stream log output (#1232)
Rel1cx Sep 12, 2025
3be4456
refactor: minor improvements
Rel1cx Sep 12, 2025
8782844
chore: update deps
Rel1cx Sep 13, 2025
6ca26b3
chore: minor improvements
Rel1cx Sep 13, 2025
5e56cfa
release: 2.0.0-next.181
Rel1cx Sep 13, 2025
5e1493d
chore: update deps
Rel1cx Sep 15, 2025
86ab332
release: 2.0.0-next.182
Rel1cx Sep 15, 2025
3269e3f
ci: add check-provenance workflow
Rel1cx Sep 16, 2025
54cec72
release: 2.0.0-next.183
Rel1cx Sep 16, 2025
29d841a
release: 2.0.0-beta.183
Rel1cx Sep 16, 2025
f214a0c
release: 2.0.0-next.184
Rel1cx Sep 16, 2025
a5d87bf
release: 2.0.0-beta.184
Rel1cx Sep 16, 2025
d1657d2
release: 2.0.0-next.185
Rel1cx Sep 17, 2025
11348e9
release: 2.0.0-beta.185
Rel1cx Sep 17, 2025
34e2c72
chore: remove ununsed deps
Rel1cx Sep 17, 2025
850bbf9
chore: remove ununsed deps
Rel1cx Sep 17, 2025
83a4fe6
release: 2.0.0-next.186
Rel1cx Sep 18, 2025
d6c6902
chore: remove git hooks
Rel1cx Sep 18, 2025
26769f3
release: 2.0.0-next.187
Rel1cx Sep 18, 2025
112ead1
release: 2.0.0-beta.187
Rel1cx Sep 18, 2025
575d46f
fix: make quotes consistent (#1234)
karlhorky Sep 19, 2025
615d374
fix: fix package structure for ast and kit packages (#1235)
Rel1cx Sep 19, 2025
6dfaa70
release: 2.0.0-next.188
Rel1cx Sep 19, 2025
c7f6dcc
release: 2.0.0-next.188
Rel1cx Sep 19, 2025
ceca649
release: 2.0.0-beta.188
Rel1cx Sep 19, 2025
3c61bc9
chore: pin package versions to git SHAs in GitHub Actions
Rel1cx Sep 20, 2025
ac7a85d
release: 2.0.0-next.189
Rel1cx Sep 21, 2025
a781f07
release: 2.0.0-beta.189
Rel1cx Sep 21, 2025
1cbfbfb
feat(website): remove IBM Plex Mono font usage
Rel1cx Sep 21, 2025
a6c3610
docs: update changelog
Rel1cx Sep 21, 2025
e7219e0
docs: update changelog
Rel1cx Sep 21, 2025
229dd01
chore: update TypeScript peer dependency and requirements
Rel1cx Sep 21, 2025
821e5f3
docs: update changelog
Rel1cx Sep 21, 2025
b55417d
docs: update changelog
Rel1cx Sep 22, 2025
876082e
release: 2.0.0-next.190
Rel1cx Sep 22, 2025
4615d4c
feat: remove eslint legacy config support (#1236)
Rel1cx Sep 22, 2025
0248fa1
docs: update presets docs
Rel1cx Sep 22, 2025
f9fb456
docs: update changelog
Rel1cx Sep 22, 2025
d8776a1
release: 2.0.0-beta.190
Rel1cx Sep 22, 2025
706ce35
chore: update eslint-plugin-react-refresh and @eslint/markdown versions
Rel1cx Sep 22, 2025
b524f4d
release: 2.0.0-next.191
Rel1cx Sep 23, 2025
e2db345
release: 2.0.0-beta.191
Rel1cx Sep 23, 2025
77a5428
chore: update dependencies to latest versions
Rel1cx Sep 24, 2025
95f1f1c
chore: fix typo
Rel1cx Sep 24, 2025
b0ee801
docs: update changelog
Rel1cx Sep 24, 2025
7d137b6
docs: update changelog
Rel1cx Sep 24, 2025
1d5da0a
release: 2.0.0-next.192
Rel1cx Sep 24, 2025
c83c188
release: 2.0.0-beta.192
Rel1cx Sep 24, 2025
071c13a
docs: update roadmap
Rel1cx Sep 24, 2025
8926cf2
docs: update changelog and roadmap
Rel1cx Sep 24, 2025
0c5126e
docs: update changelog
Rel1cx Sep 24, 2025
bc58369
docs: update roadmap
Rel1cx Sep 24, 2025
9e6d1f6
chore: update deps
Rel1cx Sep 25, 2025
42c73c4
docs: update changelog and add removed rules documentation
Rel1cx Sep 25, 2025
4088052
release: 2.0.0-next.193
Rel1cx Sep 25, 2025
21c7670
release: 2.0.0-beta.193
Rel1cx Sep 25, 2025
8e8160c
release: 2.0.0-beta.193
Rel1cx Sep 25, 2025
64823ca
chore: cleanup
Rel1cx Sep 25, 2025
5a8c513
Update packages/plugins/eslint-plugin-react-hooks-extra/package.json
Rel1cx Sep 25, 2025
865444e
release: 2.0.0-next.194
Rel1cx Sep 25, 2025
52152a2
release: 2.0.0-beta.194
Rel1cx Sep 25, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 1 addition & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ coverage/
.eslintcache

# misc
/log
.DS_Store
*.pem

Expand All @@ -38,11 +39,9 @@ yarn-error.log*

# vercel
.vercel

stats.html
*.config-*.mjs
/eslint-config.json
*.bundled_*.mjs
*.tgz
eslint-results.sarif
.tsup
6 changes: 3 additions & 3 deletions .pkgs/configs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@
"@stylistic/eslint-plugin": "^5.4.0",
"eslint-plugin-de-morgan": "^1.3.1",
"eslint-plugin-function": "^0.0.30",
"eslint-plugin-jsdoc": "^60.0.0",
"eslint-plugin-jsdoc": "^60.3.1",
"eslint-plugin-perfectionist": "^4.15.0",
"eslint-plugin-regexp": "^2.10.0",
"eslint-plugin-unicorn": "^61.0.2",
"typescript-eslint": "^8.44.0"
"typescript-eslint": "^8.44.1"
},
"peerDependencies": {
"eslint": "^9.36.0",
"typescript": "^4.9.5 || ^5.4.5"
"typescript": "^5.9.2"
}
}
14 changes: 7 additions & 7 deletions .pkgs/eslint-plugin-local/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,12 @@
"@eslint-react/var": "workspace:*",
"@eslint/js": "^9.36.0",
"@stylistic/eslint-plugin": "^5.4.0",
"@typescript-eslint/scope-manager": "^8.44.0",
"@typescript-eslint/type-utils": "^8.44.0",
"@typescript-eslint/types": "^8.44.0",
"@typescript-eslint/utils": "^8.44.0",
"@typescript-eslint/scope-manager": "^8.44.1",
"@typescript-eslint/type-utils": "^8.44.1",
"@typescript-eslint/types": "^8.44.1",
"@typescript-eslint/utils": "^8.44.1",
"eslint-plugin-de-morgan": "^1.3.1",
"eslint-plugin-jsdoc": "^60.0.0",
"eslint-plugin-jsdoc": "^60.3.1",
"eslint-plugin-perfectionist": "^4.15.0",
"eslint-plugin-regexp": "^2.10.0",
"eslint-plugin-unicorn": "^61.0.2",
Expand All @@ -44,11 +44,11 @@
"@local/configs": "workspace:*",
"@types/react": "^19.1.13",
"@types/react-dom": "^19.1.9",
"tsdown": "^0.15.3"
"tsdown": "^0.15.4"
},
"peerDependencies": {
"eslint": "^9.36.0",
"typescript": "^4.9.5 || ^5.4.5"
"typescript": "^5.9.2"
},
"engines": {
"node": ">=20.19.0"
Expand Down
115 changes: 115 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,118 @@
## v2.0.0 (TBD)

### 💥 Breaking Changes

**Target Environment Updates: Now ESM and ESLint Flat Config Only**

- Drop support for CommonJS (CJS) module format, packages are now distributed only as ECMAScript Modules (ESM)
- Drop support for ESLint legacy config system, packages now support only ESLint Flat Config (`eslint.config.js`)
- Drop support for Node.js 16 and 18, minimum required version is now Node.js 20
- Drop support for ESLint 8, minimum required version is now ESLint 9.3.6
- Drop support for TypeScript 4, minimum required version is now TypeScript 5.9.2

**Removed Rules**

| Rule | Replaced by | Reason |
| :--------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------- | :----------- |
| react-x/avoid-shorthand-boolean | [`react-x/jsx-shorthand-boolean`](/docs/rules/jsx-shorthand-boolean) | consolidated |
| react-x/avoid-shorthand-fragment | [`react-x/jsx-shorthand-fragment`](/docs/rules/jsx-shorthand-fragment) | consolidated |
| react-x/ensure-forward-ref-using-ref | [`react-x/no-useless-forward-ref`](/docs/rules/no-useless-forward-ref) | renamed |
| react-x/jsx-no-duplicate-props | [`react-x/jsx-no-duplicate-props`](/docs/rules/jsx-no-duplicate-props) | renamed |
| react-x/no-comment-textnodes | [`react-x/jsx-no-comment-textnodes`](/docs/rules/jsx-no-comment-textnodes) | renamed |
| react-x/no-complicated-conditional-rendering | | discontinued |
| react-x/no-nested-components | [`react-x/no-nested-component-definitions`](/docs/rules/no-nested-component-definitions) | renamed |
| react-x/prefer-react-namespace-import | [`react-x/prefer-namespace-import`](/docs/rules/prefer-namespace-import) | renamed |
| react-x/prefer-shorthand-boolean | [`react-x/jsx-shorthand-boolean`](/docs/rules/jsx-shorthand-boolean) | consolidated |
| react-x/prefer-shorthand-fragment | [`react-x/jsx-shorthand-fragment`](/docs/rules/jsx-shorthand-fragment) | consolidated |
| react-x/use-jsx-vars | [`react-x/jsx-uses-vars`](/docs/rules/jsx-uses-vars) | renamed |
| react-dom/no-children-in-void-dom-elements | [`react-dom/no-void-elements-with-children`](/docs/rules/dom-no-void-elements-with-children) | renamed |
| react-hooks-extra/no-direct-set-state-in-use-layout-effect | [`react-hooks-extra/no-direct-set-state-in-use-effect`](/docs/rules/hooks-extra-no-direct-set-state-in-use-effect) | consolidated |
| react-hooks-extra/no-unnecessary-use-callback | [`react-x/no-unnecessary-use-callback`](/docs/rules/no-unnecessary-use-callback) | relocated |
| react-hooks-extra/no-unnecessary-use-memo | [`react-x/no-unnecessary-use-memo`](/docs/rules/no-unnecessary-use-memo) | relocated |
| react-hooks-extra/no-unnecessary-use-prefix | [`react-x/no-unnecessary-use-prefix`](/docs/rules/no-unnecessary-use-prefix) | relocated |
| react-hooks-extra/prefer-use-state-lazy-initialization | [`react-x/prefer-use-state-lazy-initialization`](/docs/rules/prefer-use-state-lazy-initialization) | relocated |

**Removed Presets**

| Preset | Replaced by | Reason |
| :-------------------------------- | :------------ | :----------- |
| `core` | `x` | renamed |
| `core-legacy` | | discontinued |
| `off-dom` | `disable-dom` | renamed |
| `off-dom-legacy` | | discontinued |
| `x-legacy` | | discontinued |
| `dom-legacy` | | discontinued |
| `web-api-legacy` | | discontinued |
| `recommended-legacy` | | discontinued |
| `recommended-typescript-legacy` | | discontinued |
| `recommended-type-checked-legacy` | | discontinued |

**Removed Settings**

| Setting | Replaced by | Reason |
| :--------------------- | :---------- | :----------- |
| `additionalComponents` | | discontinued |
| `additionalHooks` | | discontinued |
| `skipImportCheck` | | discontinued |

The rule implementations have been refactored to improve performance and maintainability.

### ✨ New

**Added the following new rules:**

- `react-x/jsx-shorthand-boolean`: Enforces a consistent style for boolean attributes
- `react-x/jsx-shorthand-fragment`: Enforces a consistent style for React Fragments
- `react-x/no-forbidden-props`: Disallows specific props on components
- `react-x/no-unnecessary-key`: Reports unnecessary `key` props on elements
- `react-x/no-unused-props`: Reports unused props in components
- `react-dom/no-string-style-prop`: Disallows string values for the `style` prop
- `react-dom/prefer-namespace-import`: Enforces using a namespace import for `react-dom`

**Added the following new rule to the `recommended-type-checked` preset:**

- `react-x/no-unused-props`: Reports unused props in components

**The following rules now support Codemod features:**

- `react-x/no-component-did-update`
- `react-x/no-component-will-receive-props`
- `react-x/no-component-will-update`
- `react-x/no-context-provider`
- `react-x/no-forward-ref`
- `react-x/no-string-refs`

**The following rules now support auto-fix:**

- `react-x/prefer-namespace-import`
- `react-dom/prefer-namespace-import`

**The following rules now support suggestion fixes:**

- `react-dom/no-missing-button-type`
- `react-dom/no-missing-iframe-sandbox`
- `react-dom/no-unsafe-target-blank`

**New configuration preset added:**

- `disable-conflict-eslint-plugin-react`: Disable rules in `eslint-plugin-react` that conflict with rules in our plugins

### 🐞 Fixes

- fix(react-x/no-unnecessary-use-prefix): fix false positive of React Hooks defined within the callback function of `vi.mock(...)` in Vitest test files
- fix(react-web-api/no-leaked-event-listener): fix `useEffect` setup function check to handle `React.useEffect()` calls correctly
- fix(react-naming-convention/filename): fix false positive on well-known filenames like `404.tsx`, `_app.tsx`, `[slug].tsx`

### 🪄 Improvements

- refactor: simplify React APIs detection logic
- refactor: cleanup utilities and simplify rule implementations
- docs: add comparison table between `eslint-plugin-react` and `eslint-react` rules
- docs: replace `tseslint.config` with `defineConfig` in all examples
- build: migrate build system from `tsup` to `tsdown` for better performance

**Full Changelog**: https://github.com/Rel1cx/eslint-react/compare/v1.53.1...v2.0.0

## v1.53.1 (2025-09-11)

### 🐞 Fixes
Expand Down
79 changes: 43 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,18 @@
- [TypeScript Specialized](#typescript-specialized)
- [Other](#other)
- [Rules](#rules)
- [Benchmark](#benchmark)
- [FAQ](#faq)
- [Roadmap](#roadmap)
- [Contributing](#contributing)
- [License](#license)

## Features

- **Modern**: First-class support for TypeScript, React 19, and more.
- **Flexible**: Fully customizable rule severity levels, allowing you to enforce or relax rules as needed.
- **Performant**: Built with performance in mind, optimized for large codebases, **4-7x faster** than other ESLint plugins.
- **Context-aware Linting**: Rules that understand the context of your code and project configuration to provide more accurate linting.
- **Modern**: First-class support for **TypeScript**, **React 19**, and more.
- **Flexible**: Fully customizable rule severity levels, allowing you to **enforce** or **relax** rules as needed.
- **Performant**: Built with performance in mind, optimized for large codebases, [**4-7x faster**](https://github.com/Rel1cx/eslint-react-benchmark) than other ESLint plugins.
- **Context-aware Linting**: Rules that understand the context of your code and [project configuration](https://eslint-react.xyz/docs/configuration/configure-project-config) to provide more **accurate** linting.

## Public Packages

Expand All @@ -53,8 +54,8 @@
> [!NOTE]\
> ESLint React requires the following minimum versions:
>
> - Node.js: 18.18.0
> - ESLint: 8.57.0
> - Node.js: 20.19.0
> - ESLint: 9.24.0
> - TypeScript: 4.9.5

### Install
Expand All @@ -68,46 +69,46 @@ npm install --save-dev typescript-eslint @eslint-react/eslint-plugin
```js
// eslint.config.js

// @ts-check
import eslintReact from "@eslint-react/eslint-plugin";
import eslintJs from "@eslint/js";
import { defineConfig } from "eslint/config";
import tseslint from "typescript-eslint";

export default tseslint.config({
files: ["**/*.ts", "**/*.tsx"],

// Extend recommended rule sets from:
// 1. ESLint JS's recommended rules
// 2. TypeScript ESLint recommended rules
// 3. ESLint React's recommended-typescript rules
extends: [
eslintJs.configs.recommended,
tseslint.configs.recommended,
eslintReact.configs["recommended-typescript"],
],

// Configure language/parsing options
languageOptions: {
// Use TypeScript ESLint parser for TypeScript files
parser: tseslint.parser,
parserOptions: {
// Enable project service for better TypeScript integration
projectService: true,
tsconfigRootDir: import.meta.dirname,
export default defineConfig([
{
files: ["**/*.ts", "**/*.tsx"],

// Extend recommended rule sets from:
// 1. ESLint JS's recommended rules
// 2. TypeScript ESLint recommended rules
// 3. ESLint React's recommended-typescript rules
extends: [
eslintJs.configs.recommended,
tseslint.configs.recommended,
eslintReact.configs["recommended-typescript"],
],

// Configure language/parsing options
languageOptions: {
// Use TypeScript ESLint parser for TypeScript files
parser: tseslint.parser,
parserOptions: {
// Enable project service for better TypeScript integration
projectService: true,
tsconfigRootDir: import.meta.dirname,
},
},
},

// Custom rule overrides (modify rule levels or disable rules)
rules: {
"@eslint-react/no-missing-key": "warn",
// Custom rule overrides (modify rule levels or disable rules)
rules: {
"@eslint-react/no-missing-key": "warn",
},
},
});
]);
```

[Full Installation Guide ↗](https://eslint-react.xyz/docs/getting-started/typescript)

</details>

## Presets

### Bare Bones
Expand Down Expand Up @@ -141,6 +142,8 @@ export default tseslint.config({
Disable rules in the `web-api` preset.
- `disable-type-checked`\
Disable rules that require type information.
- `disable-conflict-eslint-plugin-react`\
Disable rules in `eslint-plugin-react` that conflict with rules in our plugins.
- `off`\
Disable all rules in this plugin except for debug rules.

Expand All @@ -150,6 +153,10 @@ export default tseslint.config({

[Rules Overview ↗](https://eslint-react.xyz/docs/rules/overview)

## Benchmark

[Benchmark Results ↗](https://github.com/Rel1cx/eslint-react-benchmark)

## FAQ

[Frequently Asked Questions ↗](https://eslint-react.xyz/docs/faq)
Expand All @@ -162,7 +169,7 @@ export default tseslint.config({

Contributions are welcome!

Please follow our [contributing guidelines](./.github/CONTRIBUTING.md).
Please follow our [contributing guidelines](.github/CONTRIBUTING.md).

## License

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.53.2-beta.1
2.0.0-beta.193
2 changes: 1 addition & 1 deletion apps/website/app/base.css → apps/website/app/app.css
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@import "tailwindcss";
@import "tailwindcss-animated";
@import "./theme.css";
@import "./theme/theme.css";
@import "fumadocs-ui/css/preset.css";
@import "fumadocs-twoslash/twoslash.css";

Expand Down
File renamed without changes.
22 changes: 0 additions & 22 deletions apps/website/app/docs/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,25 +15,3 @@ export default function Layout({ children }: { children: ReactNode }) {
</DocsLayout>
);
}

// Notebook layout
// import type { ReactNode } from "react";
// import { baseOptions } from "#/app/layout.config";
// import { source } from "#/lib/source";
// import { DocsLayout } from "fumadocs-ui/layouts/notebook";

// export default function Layout({ children }: { children: ReactNode }) {
// return (
// <DocsLayout
// {...baseOptions}
// links={baseOptions.links?.slice(1, -1) ?? []}
// // the position of navbar
// nav={{ ...baseOptions.nav, mode: "top" }}
// // the position of Sidebar Tabs
// tabMode="navbar"
// tree={source.pageTree}
// >
// {children}
// </DocsLayout>
// );
// }
4 changes: 2 additions & 2 deletions apps/website/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import type { ReactNode } from "react";

import { ViewTransitions } from "next-view-transitions";

import "./base.css";
import "./overrides.css";
import "#/app/app.css";
import "#/app/app.override.css";

const themeOptions = {
enabled: true,
Expand Down
Loading
Loading