chore(lint): enable rules-of-hooks, set-state-in-effect, no-leaked-conditional-rendering#313
Conversation
…nditional-rendering Enable three React safety rules and remove the duplicate react-hooks/rules-of-hooks entry. - Refactor useFilterState to use useRef instead of useState+useEffect for the one-time initialization flag - Add inline disables for legitimate set-state-in-effect patterns (prop sync, URL→state sync, default initialization) - Add inline disable for Playwright fixture's use() in e2e Ref: securesign#307 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #313 +/- ##
==========================================
- Coverage 76.51% 76.48% -0.04%
==========================================
Files 105 105
Lines 1554 1552 -2
Branches 466 465 -1
==========================================
- Hits 1189 1187 -2
Misses 325 325
Partials 40 40
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Full review (53 lines)PR #313 Review: chore(lint): enable rules-of-hooks, set-state-in-effect, no-leaked-conditional-renderingSummary of IntentThis PR re-enables three previously-disabled ESLint rules ( CriticalNone. HighNone. Medium
Low
Overall AssessmentThis is a small, low-risk, mechanical lint-hardening PR. The one substantive logic change — the Recommendation: approve, no blocking issues, contingent on confirming CI's full-repo lint run is green (particularly for |
Summary
Enable three React safety rules and remove one duplicate (9 violations fixed):
@eslint-react/rules-of-hooks— 1 false positive in e2e (Playwright fixtureuse(), not React). Inline-disabled.@eslint-react/set-state-in-effect— 8 warnings across 4 files. RefactoreduseFilterState.tsto useuseRefinstead ofuseState+useEffectfor a one-time flag. The remaining 7 are legitimate patterns (prop sync, URL→state sync, default init) with inline disables.@eslint-react/no-leaked-conditional-rendering— 0 violations, clean.react-hooks/rules-of-hooks— removed entirely (duplicate of@eslint-react/rules-of-hooks).Files changed:
eslint.config.mjs— removed 4 rule entriesuseFilterState.ts— refactoreduseState+useEffect→useRefSearchFilterControl.tsx— inline disable for prop syncExplorer.tsx— inline disable for URL→state synccontext.tsx(Rekor) — inline disable for default initializatione2e/tests/fixtures/coverage.ts— inline disable for Playwright fixtureTest plan
npm run lintpasses with zero warnings/errorsnpm run test— all 41 test files pass (422 tests)npm run build— production build succeeds