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 -100Step 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
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 -50Common 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
invaildProvider 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