Главная Категории Контакты Поиск

Инструменты статического анализа кода

Как устранить большинство ошибок при помощи нескольких простых инструментов.

Tools ·09.11.2020·читать 3 мин 🤓·Автор: Alex Myzgin

Как можно использовать несколько простых инструментов статического анализа кода, чтобы избежать распространенных ошибок программирования.

Ты наверняка слышал о ESLint, Prettier и TypeScript. Это инструменты статического анализа кода, которые очень популярны в экосистеме JavaScript. Давай рассмотрим каждый:

ESLint

ESLint - это подключаемая утилита линтинга для JavaScript. Линтинг - это процесс анализа кода на предмет потенциальных ошибок без фактического запуска кода. Рассмотрим код:

if (!"serviceWorker" in navigator) {
  // the user's using an old browser :-(
}

Заметил проблему? Отлично! Но, хорошо ведь было бы не тратить своё ценное время для поиска и исправления таких мелких ошибок? Дай возможность компьютеру выполнять за тебя большую часть работы 😉

Подробнее о ESLint здесь

Prettier

Prettier - это средство форматирования кода JavaScript. Prettier возьмет твой код, как бы ты его ни писал, и переформатирует так, чтобы каждый раз он был последовательным и разборчивым. Prettier иногда называют средством тестирования, посмотри:

const a = false;
const b = false;
const c = true;
const d = a && b || c;

Какое здесь значение имеет d? Если знаешь наизусть порядок действий этих операторов - круто! Но, уверен ли ты, что все инженеры в твоей команде знают их достаточно хорошо, чтобы не допускать ошибок при рефакторинге?

Запусти этот код через Prettier, и получишь:

const a = false;
const b = false;
const c = true;
const d = (a && b) || c;

Даже если ты знаешь порядок операций, то дополнительные круглые скобки, которые Prettier автоматически добавляет при сохранении файла, весьма полезны. В том случае, если ты поймешь, что это не то, что ты хотел - можешь сам добавить круглые скобки, и Prettier оставит всё следующим образом (const d = a && (b || c)).

Это лишь один из примеров того, как Prettier делает код более очевидным - освобождая твой мозг для сосредоточения на более сложных проблемах.

TypeScript

TypeScript - это средство проверки статического типа для JavaScript. Средство проверки статического типа добавляет в JavaScript синтаксис, позволяющий указать тип данных переменной. Он может следить за этой переменной через код, чтобы убедиться, что она используется правильно.

Ты можешь найти ошибку в этом коде?

function getFullName(user) {
  const {
    name: { first, last },
  } = user;

  return [first, last].filter(Boolean).join(" ");
}
getFullName({ first: "Alex", last: "Myzgin" });

Может, получится, а может и нет. В любом случае, ведь было бы здорово, если б у нас было какое-то программное обеспечение, которое могло бы определить проблему для нас? Давай перепишем эту функцию на TypeScript:

type User = {
  name: {
    first: string,
    last: string,
  },
};

function getFullName(user: User): string {
  const {
    name: { first, last },
  } = user;

  return [first, last].filter(Boolean).join(" ");
}

Теперь, если мы вызовем функцию как раньше, вот что получим:

Argument of type '{ first: string; last: string; }' is not assignable to parameter of type 'User'.
  Object literal may only specify known properties, and 'first' does not exist in type 'User'.(2345)

Мне нравится рассматривать определения типов в TypeScript как форму встроенных автоматических тестов. Я настоятельно рекомендую тебе их попробовать, если ты еще этого не сделал. С этими инструментами возможно постепенное внедрение (особенно если ты уже используешь babel, можешь просто начать использовать babel-preset-typescript).

Подробнее о TypeScript здесь

Вывод

Статический анализ кода - отличный способ добиться значительного повышения уверенности: быстро, легко и с меньшими усилиями, чем при написании модульных тестов для всей кодовой базы. Если ты ещё не используешь данные инструменты, начни прямо сейчас!

Website, name & logo
Copyright © 2019. Alex Myzgin