Synthèse automatique
Propose une démarche progressive pour corriger des erreurs ESLint courantes dans du code TypeScript et Vue sans modifier le comportement de l'application.
Points forts
- Commence par relever l'état initial du lint, du build et de Git avant toute modification.
- Décrit des correctifs sûrs pour les variables inutilisées, les déclarations dans les case, les props par défaut Vue, la syntaxe booléenne abrégée et les types objet vides.
- Invite à vérifier le build après chaque lot de corrections pour détecter rapidement les régressions.
- Fournit des commandes grep pour repérer les fichiers concernés par une règle ESLint donnée.
Limites
- Le SKILL.md fourni est tronqué à la section sur les types objet vides, donc ce correctif n'est pas documenté en entier.
- Se limite à quelques règles courantes et ne constitue pas une stratégie complète de nettoyage ESLint.
- Suppose que les scripts npm de lint et de build sont disponibles dans le projet.
À utiliser lorsqu'un projet TypeScript ou Vue présente un ensemble maîtrisable d'erreurs ESLint à corriger sans altérer la logique métier.
À éviter si le build échoue déjà ou si des modifications non commitées risquent de brouiller la distinction entre les corrections de lint et les problèmes préexistants.
Analyse de sécurité
SûrThe skill only provides guidance for fixing ESLint errors and running local verification commands (npm run lint/build, git status, grep). No network calls, no secret handling, no destructive commands, no obfuscated payloads, and no attempts to disable safety controls. The only minor consideration is editing ESLint config ignores, which is a normal refactoring action, not a security risk.
- •Runs npm/git commands and writes lint output to /tmp/lint-output.txt — legitimate local dev operations, no exfiltration
- •Advises modifying eslint.config.js ignores, which could silently suppress real lint errors if misapplied
Exemples
Run npm run lint, identify @typescript-eslint/no-unused-vars errors, and fix them by prefixing unused variables or parameters with `_` or removing unused imports. Verify `npm run build` after each batch.Find all no-case-declarations ESLint errors in this TypeScript project and wrap the relevant `case` blocks in braces. Run lint and build afterward to confirm nothing broke.Fix vue/require-default-prop errors in my Vue 3 `<script setup>` components using `withDefaults()` and factory functions for arrays and objects. Verify the build after the changes.name: Lint Cleanup
description: FIX ESLint errors safely without breaking code. Prefix unused variables with _, fix no-case-declarations, add default props, and verify builds after each batch. Use when lint cleanup is needed for easier refactoring & faster Claude Code editing.
Safe Lint Cleanup
Instructions
This skill provides safe patterns for fixing ESLint errors without breaking code.
Pre-Flight Checklist
BEFORE starting any lint cleanup:
# 1. Get baseline count
npm run lint 2>&1 | tail -5
# 2. Save full output for reference
npm run lint 2>&1 > /tmp/lint-output.txt
# 3. Verify build works
npm run build
# 4. Check git status (ensure clean state)
git status
Error Categories & Fixes
1. Unused Variables (@typescript-eslint/no-unused-vars)
Pattern 1: Prefix Unused Variables with _
This is the SAFEST fix - silences the error without changing logic:
// BEFORE (error)
const unusedVar = someValue
// AFTER (no error)
const _unusedVar = someValue
Pattern 2: Prefix Unused Function Parameters
// BEFORE
const handleClick = (event: MouseEvent) => {
// doesn't use event
}
// AFTER
const handleClick = (_event: MouseEvent) => {
// doesn't use event
}
Pattern 3: Destructuring with Rename
// BEFORE
const { unusedProp, usedProp } = options
// AFTER
const { unusedProp: _unusedProp, usedProp } = options
Pattern 4: Unused Type Imports
// BEFORE
import { SomeType, UsedType } from '@/types'
// AFTER
import type { SomeType as _SomeType, UsedType } from '@/types'
Pattern 5: Remove Completely Unused Imports
// BEFORE
import { ref, watch, computed } from 'vue' // watch never used
// AFTER
import { ref, computed } from 'vue'
2. Case Declarations (no-case-declarations)
Error: Unexpected lexical declaration in case block
Cause: Using const, let, or class directly in a case block without braces.
Fix: Wrap case block contents in {} to create block scope.
// BEFORE (error)
switch (type) {
case 'foo':
const value = computeValue() // ERROR!
doSomething(value)
break
case 'bar':
const other = computeOther() // ERROR!
doOther(other)
break
}
// AFTER (fixed)
switch (type) {
case 'foo': {
const value = computeValue()
doSomething(value)
break
}
case 'bar': {
const other = computeOther()
doOther(other)
break
}
}
Quick find pattern:
# Find files with case declarations errors
npm run lint 2>&1 | grep "no-case-declarations" -B1 | grep -E "^/" | sort -u
3. Vue Default Props (vue/require-default-prop)
Error: Prop 'X' requires default value to be set
Cause: Optional props without default values in Vue 3 <script setup>.
Fix: Use withDefaults() to provide default values.
<!-- BEFORE (error) -->
<script setup lang="ts">
interface Props {
title?: string
count?: number
items?: string[]
}
const props = defineProps<Props>()
</script>
<!-- AFTER (fixed) -->
<script setup lang="ts">
interface Props {
title?: string
count?: number
items?: string[]
}
const props = withDefaults(defineProps<Props>(), {
title: '',
count: 0,
items: () => [] // Use factory for arrays/objects
})
</script>
Default value rules:
- Primitives: Use direct value (
'',0,false,null) - Arrays: Use factory function
() => [] - Objects: Use factory function
() => ({})
4. Boolean Shorthand (vue/prefer-true-attribute-shorthand)
Error: Boolean attribute should be written in shorthand form
Cause: Using :prop="true" instead of just prop.
<!-- BEFORE (error) -->
<MyComponent :is-active="true" :show-header="true" />
<!-- AFTER (fixed) -->
<MyComponent is-active show-header />
5. Empty Object Types (@typescript-eslint/no-empty-object-type)
Error: The {} type is not recommended
Cause: Using {} as a type in TypeScript (especially in .d.ts files).
Fix: Use object or Record<string, never> instead, OR exclude .d.ts files:
// In eslint.config.js ignores:
ignores: ['**/*.d.ts']
6. ESLint Config Alignment
Problem: Files excluded from tsconfig.json but not from ESLint cause parsing errors.
Fix: Keep ESLint ignores aligned with tsconfig excludes:
// eslint.config.js
{
ignores: [
'node_modules/**',
'dist/**',
'**/*.d.ts',
// Match tsconfig.json exclude patterns:
'src/stories/**',
'src/composables/adapters/**',
'src/sync/**',
'src/utils/emojiDetection.ts',
'src/utils/logger.ts',
// etc.
]
}
ESLint Config for Underscore Pattern
CRITICAL: The underscore pattern must be configured for BOTH .ts AND .vue files:
// eslint.config.js
// For TypeScript files
{
files: ['**/*.ts', '**/*.tsx'],
rules: {
'@typescript-eslint/no-unused-vars': ['error', {
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_'
}]
}
}
// For Vue files - MUST BE SEPARATE!
{
files: ['**/*.vue'],
rules: {
'@typescript-eslint/no-unused-vars': ['error', {
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: '^_'
}]
}
}
Verification Process
After every batch of fixes:
# 1. Run build
npm run build 2>&1 | tail -10
# 2. Check new lint count
npm run lint 2>&1 | tail -5
# 3. Calculate progress
# (baseline - current) / baseline * 100 = % fixed
Files to Be Careful With
| File Type | Reason |
|-----------|--------|
| Vue components with templates | Variables might be used in template |
| Store files | Exported functions might appear unused |
| Composables | Returned values might appear unused |
| Test files | May have intentional unused vars |
| .d.ts files | Type declarations may use special patterns |
Error Priority Order
Fix errors in this order (highest impact first):
- Parsing errors - ESLint ignores alignment with tsconfig
- no-case-declarations - Structural fixes, wrap in
{} - require-default-prop - Add
withDefaults() - no-unused-vars - Prefix with
_or remove - prefer-true-attribute-shorthand - Simple template fixes
- no-explicit-any - Requires proper typing (lower priority)
Quick Reference Commands
# Get current lint count
npm run lint 2>&1 | tail -5
# Save full output
npm run lint 2>&1 > /tmp/lint-output.txt
# Find files with specific error
npm run lint 2>&1 | grep "ERROR_NAME" -B1 | grep -E "^/" | sort -u
# Count specific error type
grep "ERROR_NAME" /tmp/lint-output.txt | wc -l
# Check specific file errors
cat /tmp/lint-output.txt | grep -A20 "YourFile.vue$" | head -25
# Run --fix for auto-fixable errors (safe)
npm run lint -- --fix
# Find case declarations by file
awk '/^\/home.*\.(vue|ts)$/ { file=$0 } /no-case-declarations/ { print file }' /tmp/lint-output.txt | sort -u
Common Gotchas
- Multiple Matches: Add more surrounding context to make match unique
- Variable Used in Template: Check
<template>section before prefixing - Exported but Appears Unused: Don't prefix exports - used externally
- Store/Composable Return Values: Check if values are returned for consumers
- Case Block Fallthrough: Ensure
breakis inside the{}braces - Factory Functions for Props: Arrays/objects need
() => []not[]
See lint-cleanup-guide.md for complete documentation.
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/lint-cleanup-mryiqi6a/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/lint-cleanup-mryiqi6a' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/lint-cleanup-mryiqi6a/download' --output '.skill-downloads/lint-cleanup-mryiqi6a/SKILL.md.part' && mv '.skill-downloads/lint-cleanup-mryiqi6a/SKILL.md.part' '.skill-downloads/lint-cleanup-mryiqi6a/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Le fichier ne fournit pas un en-tête name/description exploitable pour cette procédure native. Le téléchargement reste disponible pour lecture ; utilisez le mode manuel ci-dessous.
Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/lint-cleanup-mryiqi6a/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.