feat: enable typed ESLint rules (@typescript-eslint/recommended + stylistic) - #105
Merged
cybermax4200 merged 4 commits intoAug 22, 2026
Conversation
Resolves 21 conflicting files where upstream had independently landed overlapping work (navigation typing, deep linking, Lobstr/Firebase integration, network-status awareness, stricter TS compiler flags) while this branch was adding typed ESLint rules across the codebase. Resolution approach: prefer upstream's implementation wherever it superseded or duplicated this branch's fix (e.g. its shared navigation-typing module in src/navigation/types.ts + useAppNavigation.ts replaces the per-screen CompositeNavigationProp boilerplate this branch had written), then re-applied this branch's no-explicit-any / no-floating-promises fixes on top where upstream's own code still had them. Two real bugs surfaced and fixed during resolution: - eslint --fix had silently flipped src/navigation/types.ts's ParamList `type` aliases to `interface`, which don't satisfy react-navigation's ParamListBase constraint (no implicit index signature) — reverted to `type` and widened the lint-config exception from *.tsx to *.ts/*.tsx in that directory so it can't happen again. - Two test files both named `useTaskFeed.test.ts(x)` in the same directory: TypeScript's project file discovery silently drops the `.tsx` one when a `.ts` file shares its base name, so upstream's newer suite was invisible to tsc/eslint entirely (pre-existing on upstream/main too). Renamed to useTaskFeedRefetch.test.tsx; both suites now run and type-check. npm run lint, npx eslint src/ (CI's command), npx tsc --noEmit, and npm test all pass cleanly (0 errors, 291/291 tests). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LV59Ymw7Yoh27FHdEcFn6z
cybermax4200
requested changes
Aug 21, 2026
cybermax4200
left a comment
Contributor
There was a problem hiding this comment.
The ci checks are failing please kindly fix them
…int-strict-rules # Conflicts: # package-lock.json # package.json # src/hooks/useProofStatus.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
.eslintrc.jsonly extended@react-native, which has no@typescript-eslint/*rules — unchecked promise rejections, unsafe boolean coercions, and other
TypeScript-specific anti-patterns were invisible to the linter.
This PR adds
plugin:@typescript-eslint/recommendedandplugin:@typescript-eslint/stylistictoextends, plus enablesno-floating-promises,no-misused-promises,await-thenable, andstrict-boolean-expressions(all aswarn) with type-aware parsing(
parserOptions.project). Fixed every resulting lint error across 42 files —no
// eslint-disablesuppressions, no remaininganyinsrc/.Along the way, diagnosed and fixed an environment bug where
eslint-plugin-prettierhung indefinitely under type-aware linting becauseprettierwas never actually installed as a dependency, despiteeslint-plugin-prettierrequiring it at runtime.Removing
anyand turning on type checking also surfaced a few real,pre-existing bugs, which are fixed here too:
notifeeAPI calls used the wrong import shape (the module namespaceinstead of its default export), so
displayNotification/cancelNotificationsilently never worked.
prefsStore'sonRehydrateStoragecallback was triple-nested by mistake,so the notification-preferences merge logic never ran on app rehydration.
useProofSubmit'ssubmit()was called with mismatched arguments inSubmitProofScreen, silently droppingcapturedAtand shiftinglat/lnginto the wrong parameters.
Closes #93
Type of Change
How Has This Been Tested?
npm run lintandnpx eslint src/(CI's exact lint command) both exit 0with no errors.
npm testpasses 159/159 existing tests unchanged, includingthe suites touched by this PR (
useProofSubmit,authRefresh,notifications,prefsStore,useTaskFeed). No behavior change was observedin any passing test after the refactors.
Checklist
Screenshots
N/A — tooling/lint-only change, no UI impact.
Additional Context
Out of scope per the issue: no changes to
.prettierrc.jsand no import-orderingrules were added. CI already runs
npx eslint src/on every push/PR(
.github/workflows/ci.yml), so no workflow changes were needed to enforcethis in CI.