Agent Skill
2/7/2026code-quality
Provides general code quality and best practices guidance applicable across languages and frameworks. Focuses on linting, testing, and type safety.
A
allenlin90
1GitHub Stars
1Views
npx skills add allenlin90/eridu-services
SKILL.md
| Name | code-quality |
| Description | Provides general code quality and best practices guidance applicable across languages and frameworks. Focuses on linting, testing, and type safety. |
name: code-quality description: Provides general code quality and best practices guidance applicable across languages and frameworks. Focuses on linting, testing, and type safety. Use when auditing code for quality issues, configuring linters, or enforcing type safety standards.
Code Quality Skill
Provides general code quality and best practices guidance applicable across languages and frameworks. Focuses on Linting, Testing, and Type Safety.
For architecture-specific patterns (N+1 queries, Soft Deletes, etc.), refer to:
Pre-Submission Checklist
Before marking any task as complete:
-
pnpm --filter <app> lintpasses (no ESLint rule disables). -
pnpm --filter <app> typecheckpasses. -
pnpm --filter <app> buildsucceeds — mandatory, stricter than typecheck alone. -
pnpm --filter <app> testpasses (new features have tests). - Avoid
any/unknowntypes (maintain strict type safety). - Remove
console.logstatements (use a dedicated logger). - Ensure error messages are clear and actionable.
Linting
We use ESLint with strict rules.
- Command:
pnpm lint(orpnpm lint -- --fix) - Rule: NEVER disable rules with
eslint-disable. Fix the underlying issue.
Common Fixes:
@typescript-eslint/no-explicit-any: Define a proper interface/DTO.no-unused-vars: Remove the variable or prefix with_.no-console: Inject aLoggerservice.
Testing
All new features require tests.
- Unit Tests: Test individual classes (Services, Utils) with mocked dependencies.
- Integration Tests: Test interactions (Repositories) with real database/services.
Example (Unit Test):
describe('UserService', () => {
it('should return user when found', async () => {
// 1. Arrange (Mock dependencies)
const mockRepo = { findByUid: vi.fn().mockResolvedValue(user) }; // Vitest — not jest.fn()
const service = new UserService(mockRepo as any);
// 2. Act
const result = await service.getUser('u_1');
// 3. Assert
expect(result).toEqual(user);
expect(mockRepo.findByUid).toHaveBeenCalledWith('u_1');
});
});
TypeScript Type Safety
Strict mode is enforced.
-
❌ Avoid
any/unknown:// BAD const data: any = req.body; // GOOD const data: CreateUserDto = req.body; -
✅ Use DTOs and Interfaces: Always define shapes for inputs and outputs.
-
✅ Trust the Compiler: If it compiles, it should likely run (if types are accurate).
Common Anti-Patterns (General)
- Ignoring Lint Errors: Address them immediately.
- Logic in Controllers: Controllers should only handle HTTP req/res. Move logic to Services.
- Hardcoded Strings/Magic Numbers: Use constants or enums.
- Complex Conditionals: Break down complex
if/elseblocks into helper methods. - Catch-All Error Handling: Avoid just using
console.error. Handle specific errors or let global filters handle them.
Related Skills
- Database Patterns: N+1 queries, Soft Deletes, Bulk Operations.
- Service Pattern NestJS: Business logic errors, Transactions.
- Repository Pattern NestJS: Data access rules.
- Backend Controller Pattern NestJS: NestJS-specific controller rules.
- Frontend Code Quality: React/Frontend specific patterns.
Skills Info
Original Name:code-qualityAuthor:allenlin90
Download