| name | code-review |
| description | Review code for quality, security, performance, and best practices. Use when reviewing changes before commit, auditing code for issues, or suggesting improvements. |
Code Review Skill
When to Use
- Reviewing code changes before commit
- Auditing existing code for issues
- Identifying security vulnerabilities
- Suggesting performance improvements
- Ensuring coding standards
Review Checklist
1. Correctness
2. Security
3. Performance
4. Code Quality
5. TypeScript/JavaScript Specific
Security Patterns
Input Validation
async function createUser(data: any) {
await prisma.user.create({ data });
}
import { z } from 'zod';
const userSchema = z.object({
email: z.string().email(),
name: z.string().min(2).max(100),
});
async function createUser(data: unknown) {
const validated = userSchema.parse(data);
await prisma.user.create({ data: validated });
}
SQL Injection Prevention
const query = `SELECT * FROM users WHERE id = '${userId}'`;
const user = await prisma.user.findUnique({ where: { id: userId } });
const users = await prisma.$queryRaw`SELECT * FROM users WHERE id = ${userId}`;
XSS Prevention
<div dangerouslySetInnerHTML={{ __html: userInput }} />
<div>{userInput}</div>
import DOMPurify from 'dompurify';
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(userInput) }} />
Performance Patterns
N+1 Query Problem
const users = await prisma.user.findMany();
for (const user of users) {
const posts = await prisma.post.findMany({ where: { authorId: user.id } });
}
const users = await prisma.user.findMany({
include: { posts: true },
});
Unnecessary Re-renders (React)
function Component() {
return <Child style={{ color: 'red' }} items={[1, 2, 3]} />;
}
const style = { color: 'red' };
const items = [1, 2, 3];
function Component() {
return <Child style={style} items={items} />;
}
function Component({ data }) {
const processed = useMemo(() => expensiveProcess(data), [data]);
return <Child data={processed} />;
}
Database Indexing
// schema.prisma - Add indexes for frequently queried fields
model Post {
id String @id @default(cuid())
title String
authorId String
createdAt DateTime @default(now())
@@index([authorId])
@@index([createdAt])
}
Code Quality Patterns
Single Responsibility
async function handleUserSubmit(formData: FormData) {
}
async function handleUserSubmit(formData: FormData) {
const data = validateUserData(formData);
const user = await createUser(data);
await sendWelcomeEmail(user);
trackUserSignup(user);
}
Meaningful Names
const d = new Date();
const u = users.filter(x => x.a);
const currentDate = new Date();
const activeUsers = users.filter(user => user.isActive);
Review Response Template
## Code Review: [Feature/File Name]
### Summary
Brief overview of changes and overall assessment.
### Issues Found
1. **[Severity: High/Medium/Low]** Description
- Location: `file.ts:line`
- Suggestion: How to fix
### Suggestions
- Performance: ...
- Code quality: ...
- Security: ...
### Approved: Yes/No (with conditions)