← Назад к вопросам

Как понять что код не готов для отправки на Code Review?

1.3 Junior🔥 122 комментариев
#JavaScript Core

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Признаки неготового кода к Code Review

Перед отправкой кода на проверку необходимо убедиться, что он соответствует стандартам качества. Есть чёткие критерии, по которым можно определить, что код не готов к review.

Технические недостатки

Самые очевидные проблемы - это нарушения синтаксиса и стиля:

// НЕПРАВИЛЬНО - console.log остался
function fetchData() {
  console.log('DEBUG:', userData); // Должен быть удален!
  return api.get('/users');
}

// НЕПРАВИЛЬНО - commented code
function processData(data) {
  // let oldValue = data.id;
  // console.log(oldValue);
  return data.map(item => item.name);
}

// НЕПРАВИЛЬНО - временные переменные и магические числа
const checkAge = (age) => age > 18 ? true : false;
const TIMEOUT = 30000; // Что это значит? 30 секунд? 30 000 миллисекунд?

// ПРАВИЛЬНО - чистый код без отладки
function fetchData() {
  return api.get('/users');
}

function checkAge(age) {
  return age >= 18;
}

const REQUEST_TIMEOUT_MS = 30000; // Ясное имя с единицей измерения

Неправильная типизация и отсутствие тестов

В TypeScript-проекте код должен быть полностью типизирован:

// НЕПРАВИЛЬНО - любые типы
function processUser(user: any) {
  return user.name.toUpperCase();
}

// НЕПРАВИЛЬНО - нет типов
const getData = (id) => {
  return api.get(`/users/${id}`);
};

// ПРАВИЛЬНО - явная типизация
interface User {
  id: string;
  name: string;
  email: string;
}

function processUser(user: User): string {
  return user.name.toUpperCase();
}

async function getData(id: string): Promise<User> {
  return api.get(`/users/${id}`);
}

Отсутствие тестов

Код без тестов - это код без гарантий:

// НЕПРАВИЛЬНО - нет тестов
export function calculateDiscount(price: number, percent: number): number {
  return price * (100 - percent) / 100;
}

// ПРАВИЛЬНО - есть тесты
describe('calculateDiscount', () => {
  it('should apply discount correctly', () => {
    expect(calculateDiscount(100, 20)).toBe(80);
    expect(calculateDiscount(50, 10)).toBe(45);
  });
  
  it('should handle edge cases', () => {
    expect(calculateDiscount(0, 50)).toBe(0);
    expect(calculateDiscount(100, 0)).toBe(100);
  });
});

export function calculateDiscount(price: number, percent: number): number {
  if (price < 0 || percent < 0) {
    throw new Error('Price and percent must be non-negative');
  }
  return price * (100 - percent) / 100;
}

Нарушение структуры проекта

Код должен быть в правильном месте:

// НЕПРАВИЛЬНО - дефолт экспорт
// utils.ts
export default function formatDate(date) { ... }

// ПРАВИЛЬНО - именованный экспорт
// utils.ts
export function formatDate(date: Date): string { ... }

// НЕПРАВИЛЬНО - логика в компоненте
function UserProfile() {
  const [user, setUser] = useState(null);
  const [loading, setLoading] = useState(false);
  
  // Много логики в компоненте
  useEffect(() => {
    api.get('/user').then(data => {
      // Обработка, трансформация, валидация...
      setUser(data);
    });
  }, []);
  
  return <div>{user?.name}</div>;
}

// ПРАВИЛЬНО - логика в хуке
function useUser(id: string) {
  const [user, setUser] = useState<User | null>(null);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState<Error | null>(null);
  
  useEffect(() => {
    fetchUser(id)
      .then(setUser)
      .catch(setError)
      .finally(() => setLoading(false));
  }, [id]);
  
  return { user, loading, error };
}

function UserProfile({ id }: { id: string }) {
  const { user, loading, error } = useUser(id);
  
  if (loading) return <Skeleton />;
  if (error) return <Error message={error.message} />;
  
  return <div>{user?.name}</div>;
}

Отсутствие обработки ошибок

Код должен обрабатывать исключения:

// НЕПРАВИЛЬНО - нет обработки ошибок
async function saveUser(user: User) {
  const response = await api.post('/users', user);
  return response.data;
}

// ПРАВИЛЬНО - полная обработка
async function saveUser(user: User): Promise<User> {
  try {
    const response = await api.post('/users', user);
    
    if (!response.ok) {
      throw new Error(`Failed to save user: ${response.status}`);
    }
    
    return response.data;
  } catch (error) {
    console.error('Error saving user:', error);
    throw error;
  }
}

Лишние зависимости и большой бандл

// НЕПРАВИЛЬНО - много ненужных импортов
import { groupBy, unique, sum, map, filter } from 'lodash';
import moment from 'moment';
import axios from 'axios';
import fetch from 'node-fetch';

// ПРАВИЛЬНО - только необходимое
import { groupBy } from 'lodash';
import { api } from '@/lib/api';

Контрольный список готовности к Code Review

  • Нет console.log, debugger, TODO без объяснения
  • Все переменные имеют понятные имена (не a, b, temp)
  • Код полностью типизирован (no any)
  • Есть тесты с coverage >= 80%
  • Нет дублированного кода (DRY принцип)
  • Обработка всех возможных ошибок
  • Нет закомментированного кода
  • Соответствие стилю проекта
  • Нет неиспользуемых импортов
  • npm run lint проходит без ошибок
  • npm run build успешен
  • npm run test все зелёные
  • Commit messages понятные и информативные

Если хотя бы один пункт не выполнен, код необходимо доработать перед отправкой на review. Качественный code review требует качественного кода на входе.

Как понять что код не готов для отправки на Code Review? | PrepBro