Современный JavaScript (ES6+) включает значительное расширение языка: стрелочные функции, классы, модули, деструктуризацию, шаблонные строки и новые способы работы с переменными. Корректная статическая проверка такого кода требует точной настройки парсера и набора правил, ориентированных на новые конструкции.
ESLint анализирует код через парсер и набор правил, которые могут быть как синтаксически-нейтральными, так и завязанными на конкретные возможности ECMAScript.
Для корректного разбора ES6-кода требуется указание версии стандарта и типа модулей:
{
"parserOptions": {
"ecmaVersion": 2023,
"sourceType": "module",
"ecmaFeatures": {
"jsx": false
}
}
}
Параметр определяет версию ECMAScript:
Использование значения latest позволяет включать
актуальный стандарт без ручного обновления конфигурации.
script — классические скриптыmodule — ES-модули с import/exportМодули активируют дополнительные проверки области видимости и запрещают некоторые глобальные конструкции.
Одним из ключевых аспектов ES6 является введение блочной области видимости.
Запрещает использование var, стимулируя переход к
let и const.
{
"rules": {
"no-var": "error"
}
}
Определяет переменные, которые не переназначаются:
{
"rules": {
"prefer-const": "error"
}
}
Поведение:
constletПример:
let value = 10;
console.log(value);
После правила:
const value = 10;
console.log(value);
ES6 вводит стрелочные функции, которые фиксируют лексическое значение
this.
Требует использования стрелочных функций в callback-ах:
{
"rules": {
"prefer-arrow-callback": "error"
}
}
Пример трансформации:
setTimeout(function () {
console.log("test");
}, 1000);
Предпочтительный вариант:
setTimeout(() => {
console.log("test");
}, 1000);
Запрещает конструкции, где стрелочные функции могут быть неоднозначны:
{
"rules": {
"no-confusing-arrow": "error"
}
}
ES6 заменяет конкатенацию строк на template literals.
Правило заставляет использовать шаблонные строки вместо
+:
{
"rules": {
"prefer-template": "error"
}
}
Пример:
const message = "Hello " + name + "!";
После применения:
const message = `Hello ${name}!`;
Деструктуризация повышает читаемость кода и уменьшает повторения.
Правило требует использования деструктуризации:
{
"rules": {
"prefer-destructuring": "error"
}
}
Пример:
const user = { name: "Alex", age: 30 };
const name = user.name;
После применения:
const { name } = user;
Для массивов:
const arr = [1, 2];
const first = arr[0];
С деструктуризацией:
const [first] = arr;
ES6 вводит операторы ... для работы с массивами и
объектами.
ESLint не требует отдельных правил для базового синтаксиса, но включает проверки на избыточность и неправильное использование.
Хотя правило не специализировано под spread, часто используется в связке с проверками чистоты выражений.
ES6 модульная система требует строгого анализа импортов.
Запрещает повторный импорт одного и того же модуля:
{
"rules": {
"no-duplicate-imports": "error"
}
}
Пример:
import { map } from "lodash";
import { filter } from "lodash";
После анализа:
import { map, filter } from "lodash";
Классы вводят синтаксический сахар над прототипами, но ESLint применяет дополнительные правила корректности.
Запрещает пустые конструкторы:
{
"rules": {
"no-useless-constructor": "error"
}
}
Пример:
class User {
constructor() {}
}
Упрощение:
class User {}
Проверяет методы классов, которые не используют
this:
{
"rules": {
"class-methods-use-this": "error"
}
}
Пример:
class MathUtil {
sum(a, b) {
return a + b;
}
}
Если метод не использует состояние класса, предпочтительнее статическая функция:
class MathUtil {
static sum(a, b) {
return a + b;
}
}
ES6 вводит shorthand-свойства и методы.
Правило требует использовать сокращённый синтаксис:
{
"rules": {
"object-shorthand": "error"
}
}
Пример:
const name = "Alex";
const user = {
name: name
};
После применения:
const user = {
name
};
Также для методов:
const obj = {
method: function () {
return true;
}
};
Сокращение:
const obj = {
method() {
return true;
}
};
ES6 поддерживает значения по умолчанию в функциях.
ESLint проверяет избыточные проверки и упрощения.
Пример:
function log(message) {
message = message || "default";
}
Современный вариант:
function log(message = "default") {
}
Некоторые правила направлены на предотвращение ошибок при использовании новых возможностей языка:
Запрещает переназначение const:
{
"rules": {
"no-const-assign": "error"
}
}
Запрещает изменение классов:
{
"rules": {
"no-class-assign": "error"
}
}
Стандартная конфигурация ESLint включает набор правил, ориентированных на ES6:
{
"extends": "eslint:recommended"
}
Дополнительно часто подключаются наборы:
ESLint постепенно расширяет поддержку новых стандартов:
?.)??)Большинство этих возможностей не требуют специальных правил, но
зависят от версии ecmaVersion.
Типичная настройка для ES6+ проектов:
{
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module"
},
"rules": {
"no-var": "error",
"prefer-const": "error",
"prefer-arrow-callback": "error",
"prefer-template": "error",
"object-shorthand": "error",
"prefer-destructuring": "error",
"no-duplicate-imports": "error",
"class-methods-use-this": "error"
}
}
Такой набор формирует единый стиль, ориентированный на современный синтаксис ECMAScript и минимизацию устаревших конструкций.