Eslint fixes
The Claude-native foundation you build your whole app on. React frontend handled, your backend builds on top. Strict tooling, pre-commit gates, code-review audit before every merge.
npx -y skills add gaia-react/gaia --skill eslint-fixesAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 20 stars20 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Resolve specific ESLint errors and warnings that appear in this project. Use when fixing lint failures, ESLint reported issues, or autofix conflicts (e.g. no-void, canonical/export-specifier-newline vs prettier, no-shadow trailing underscores, sonarjs/deprecation, you-dont-need-lodash-underscore, testing-library/prefer-screen-queries, testing-library/await-async-events, jest-dom/prefer-*).
SKILL.md
2.9 KB, as published. Nobody here has run it
ESLint Fix Patterns
How to resolve specific ESLint errors in this project.
no-void
Don't use the void operator in event listener functions. Instead, make the function async and await the promise.
// BAD
const handleClickNavigate = () => {
void navigate('/path');
};
// GOOD
const handleClickNavigate = async () => {
await navigate('/path');
};
canonical/export-specifier-newline vs prettier conflict
Use inline export const declarations instead of a grouped export { ... } statement to avoid circular fix warnings between these two rules.
// BAD, causes circular fix between prettier and canonical
export {DAYS, DURATIONS, FITNESS_GOALS};
// GOOD, declare with export directly
export const DAYS = ['mon', 'tue'] as const;
export const DURATIONS = [15, 30, 45] as const;
export const FITNESS_GOALS = ['weight_loss'] as const;
no-shadow trailing underscores
ESLint's no-shadow autofixes by appending _. Once shadowing is resolved, remove the trailing _.
sonarjs/deprecation
Never suppress with eslint-disable. Always fix the underlying deprecation.
Common case: Zod v4 deprecated z.string().email() in favor of z.email().
// BAD, suppressing the warning
// eslint-disable-next-line sonarjs/deprecation
email: z.string().email(),
// GOOD, use the non-deprecated API
email: z.email(),
you-dont-need-lodash-underscore/*
Use native JavaScript instead of lodash/underscore equivalents.
// BAD
import _ from 'lodash';
const first = _.find(items, (item) => item.active);
const names = _.map(items, (item) => item.name);
// GOOD
const first = items.find((item) => item.active);
const names = items.map((item) => item.name);
testing-library/prefer-screen-queries
Use screen queries instead of destructuring from render().
// BAD
const {getByText, getByRole} = render(<MyComponent />);
// GOOD
render(<MyComponent />);
screen.getByText('...');
screen.getByRole('button');
testing-library/await-async-events
userEvent methods are async, always await them.
// BAD
userEvent.click(button);
// GOOD
await userEvent.click(button);
jest-dom/prefer-*
Use jest-dom matchers instead of raw DOM property checks.
// BAD
expect(input.value).toBe('hello');
expect(checkbox.checked).toBe(true);
expect(el.textContent).toBe('Hello');
// GOOD
expect(input).toHaveValue('hello');
expect(checkbox).toBeChecked();
expect(el).toHaveTextContent('Hello');