batch-lint-cleanup
ESLint Auto-Fix Tool
Analyze ESLint violations or fix a specific rule in isolation.
Usage
Report Mode (No Arguments)
/lint-fix
Shows top ESLint violations by count with recommendations.
Fix Mode (With Rule Name)
/lint-fix <rule-name>
Examples:
/lint-fix unicorn/no-zero-fractions/lint-fix unicorn/prefer-number-properties/lint-fix unicorn/no-array-for-each
Instructions for AI Agent
When Invoked WITHOUT Arguments (Report Mode)
-
Run ESLint and analyze violations:
nx run-many -t lint:eslint 2>&1 | tee /tmp/eslint-output.txt -
Count violations by rule:
grep -oE 'unicorn/[a-z-]+|@typescript-eslint/[a-z-]+|no-[a-z-]+|sonarjs/[a-z-]+' /tmp/eslint-output.txt | sort | uniq -c | sort -rn | head -20 -
Generate a formatted report showing:
- Top 10-15 violations ranked by type (error > warning) then by count
- Which rules are auto-fixable (✅) vs manual (❌)
- Recommended next rule to fix (highest count auto-fixable)
- Brief description of what each rule fixes
- Total warning/error count
-
Format output as a table:
## ESLint Violations Report | Rank | Rule | Count | Auto-Fix | Description | | ---- | -------------------------------- | ----- | -------- | -------------------------------------- | | 1 | unicorn/prefer-number-properties | 170 | ✅ | Use `Number.*` APIs instead of globals | | 2 | unicorn/no-array-for-each | 166 | ✅ | Prefer for...of over .forEach() | | 3 | no-negated-condition | 37 | ❌ | Prefer positive conditions | ... -
Provide actionable recommendation:
### 🎯 Recommended Next Fix **`unicorn/prefer-number-properties`** - 170 violations - Auto-fixable: ✅ Yes - Changes: `isNaN()` → `Number.isNaN()`, `parseInt()` → `Number.parseInt()` - Impact: Better global scope hygiene - Risk: Low - semantically equivalent **To fix:** `/lint-fix unicorn/prefer-number-properties`
When Invoked WITH Arguments (Fix Mode)
Input: Rule name (e.g., unicorn/no-zero-fractions)
CRITICAL: Isolated Fixing Strategy
Each rule MUST be fixed in complete isolation to prevent merge conflicts and allow precise review:
- Start fresh - ensure clean working directory
- Fix ONLY the specified rule - no opportunistic fixes
- Single commit per rule - never batch multiple rules
- Verify before committing - ensure fix doesn't break anything
Step-by-Step Fix Process
1. Verify Clean Working Directory
git status
If there are uncommitted changes:
- STOP and warn user
- Suggest they stash or commit existing changes first
- Only proceed if user explicitly confirms
2. Attempt Auto-Fix
nx run-many -t lint:eslint -- --rule "<rule-name>: error" --fix 2>&1 | tee /tmp/lint-fix.txt
Check results:
# Count remaining violations
grep -c "<rule-name>" /tmp/lint-fix.txt || echo "0"
3. If Auto-Fix Successful
# Format all changes
yarn nx format --sort-root-tsconfig-paths=false
# Run full lint to ensure no new issues
yarn nx lint <affected-packages>
# Run type-check
yarn nx build:types <affected-packages>
If all pass:
git add -A
git commit -m "fix(lint): auto-fix <rule-name> violations"
4. If Manual Fix Required
For non-auto-fixable rules or remaining violations after auto-fix:
-
List all remaining violations:
nx run-many -t lint:eslint -- --rule "<rule-name>: error" 2>&1 | grep "<rule-name>" -
Group by file/pattern for efficient fixing
-
Fix each file systematically:
- Open file
- Apply fix pattern consistently
- Move to next file
-
After each batch of fixes:
# Verify the fix works nx run-many -t lint:eslint -- --rule "<rule-name>: error" -
When complete:
yarn nx format --sort-root-tsconfig-paths=false yarn nx lint <affected-packages> yarn nx build:types <affected-packages> git add -A git commit -m "fix(lint): manually fix <rule-name> violations"
Common Auto-Fixable Rules Reference
| Rule | Auto-Fix | Typical Change |
|---|---|---|
unicorn/prefer-number-properties |
✅ | isNaN() → Number.isNaN() |
unicorn/no-array-for-each |
✅ | .forEach() → for...of |
unicorn/no-zero-fractions |
✅ | 1.0 → 1 |
unicorn/prefer-string-slice |
✅ | .substr() → .slice() |
@typescript-eslint/no-unused-vars |
❌ | Remove or use variable |
no-negated-condition |
❌ | Invert condition logic |
sonarjs/cognitive-complexity |
❌ | Refactor complex function |
Safety Checks
Before ANY commit:
- ✅
yarn nx format --sort-root-tsconfig-paths=falsepasses - ✅
yarn nx lint <affected-packages>passes - ✅
yarn nx build:types <affected-packages>passes - ✅ Only files related to the rule are changed
- ✅ No unrelated "opportunistic" fixes included
If any check fails: STOP and report to user
More from ag-grid/ag-charts
estimate-jira
Estimate complexity, effort, and risks for JIRA tickets, features, or projects. Generates structured reports with time estimates, dependencies, risk analysis, and known unknowns. Use when user asks to "estimate", "size", or "analyze complexity" of work items.
43pr-split
Split a branch into a logical sequence of stacked PRs for easier review
27recall
Load branch context and browse project memory for session resumption
22plunker
Create and manage Plunker (plnkr.co) code examples for AG Charts and AG Grid. Use this skill whenever the user mentions plunker, plnkr, or plunk, wants to create a shareable code demo or bug reproduction, needs to fork or modify an existing plunk, or asks for a live code example they can share via URL. This includes creating repros for JIRA tickets, building demos for stakeholders, downloading plunks to inspect them, or making any interactive code example hosted on plnkr.co. Also trigger when users ask for "a shareable example", "a repro", "a demo I can send", or "a live example" — even without explicitly saying "plunker".
22sync-ag-shared
Sync ag-shared subrepo changes across ag-charts, ag-grid, and ag-studio repos
22plan-implementation-review
Review plan execution completeness and identify delivery gaps
22