fix-lint
Fix Lint Skill
This skill helps fix oxlint warnings in the OneKey app-monorepo codebase.
IMPORTANT: This project uses oxlint (not ESLint). The active linting configuration is in .oxlintrc.json.
Usage
Use this skill when:
- Running
yarn lintand encountering warnings - Cleaning up code before committing
- Fixing spellcheck, unused variable, or other ESLint warnings
Workflow
Step 1: Run Lint and Analyze Warnings
yarn lint:only 2>&1 | tail -100
Step 2: Categorize Warnings
Warnings typically fall into these categories:
| Category | Rule | Fix Strategy |
|---|---|---|
| Spellcheck | @cspell/spellchecker |
Add to skip list or fix typo |
| Unused vars | @typescript-eslint/no-unused-vars |
Remove import or prefix with _ |
| Non-null assertion | @typescript-eslint/no-non-null-assertion |
Add type guard or cast |
| Nested components | react/no-unstable-nested-components |
Extract component |
| Import order | import/order |
Fix import ordering |
Step 3: Fix Each Category
Spellcheck Warnings (@cspell/spellchecker)
-
Evaluate the word: Is it a legitimate technical term or a typo?
-
For legitimate technical terms, add to skip list:
# File: development/spellCheckerSkipWords.txt # Add the word on a new line at the end of the file newTechnicalTerm -
For known typos that can't be fixed (e.g., in translation keys), add with a comment above:
# Known typo - exsited -> existed (ETranslations.some_key) exsited -
Common legitimate terms to add:
- Build tools:
chunkhash,minimizer,rspack - Blockchain:
lovelace,Kusama,workchain,feebump - UI:
Virtualized,overscan,overscrolling - Crypto:
nacl,Bech32,secp256k1
- Build tools:
Unused Variable Warnings (@typescript-eslint/no-unused-vars)
-
Unused imports - Remove the import:
// Before import { Used, Unused } from 'package'; // After import { Used } from 'package'; -
Unused function parameters - Prefix with underscore:
// Before function foo(used: string, unused: number) { return used; } // After function foo(used: string, _unused: number) { return used; } -
Unused destructured variables - Prefix with underscore:
// Before const { used, unused } = obj; // After const { used, unused: _unused } = obj; -
Unused assigned variables - Prefix with underscore:
// Before const unused = getValue(); // After const _unused = getValue();
Non-null Assertion Warnings (@typescript-eslint/no-non-null-assertion)
Add type assertions or guards:
// Before
const value = obj.prop!.name;
// After
const value = (obj.prop as { name: string } | undefined)?.name;
Nested Component Warnings (react/no-unstable-nested-components)
Extract the component outside the parent:
// Before
function Parent() {
const NestedComponent = () => <div />;
return <NestedComponent />;
}
// After
const ExtractedComponent = () => <div />;
function Parent() {
return <ExtractedComponent />;
}
Step 4: Verify Fixes
yarn lint:only 2>&1 | tail -50
Common Patterns in This Codebase
Translation Key Typos
Translation enum keys (e.g., ETranslations.perp_invaild_tp_sl) cannot be easily renamed as they're managed externally. Add to skip list with a comment:
# Known typo in translation key - invaild -> invalid
invaild
Provider API Methods
Methods like openInMobileApp that throw NotImplemented() often have unused parameters:
public async openInMobileApp(
_request: IJsBridgeMessagePayload,
_params: ISignMessagePayload,
): Promise<void> {
throw new NotImplemented();
}
Destructuring from Hooks
When destructuring from hooks but not using all values:
const { used, unused: _unused } = usePromiseResult(...);
Tips
-
Run lint with increased memory for large codebases:
yarn lint:only -
Check if word is in skip list before adding:
grep -i "wordToCheck" development/spellCheckerSkipWords.txt -
For bulk fixes, use Task agents to parallelize work across multiple files
-
Verify no regressions after fixes:
yarn tsc:only
Files Modified During Lint Fixes
development/spellCheckerSkipWords.txt- Add technical terms and known typos (one word per line, use#for comments)- Various
.tsand.tsxfiles - Fix unused variables and imports