Параметры парсера: parserOptions

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


ecmaVersion

ecmaVersion задаёт версию ECMAScript, которую должен поддерживать парсер. Это ключевой параметр, определяющий доступность синтаксических конструкций.

  • Значение может быть числом (2015, 2016, 2017 …) или latest

  • Определяет поддержку таких возможностей, как:

    • стрелочные функции
    • async/await
    • optional chaining
    • nullish coalescing
    • классы и приватные поля

Пример конфигурации:

{
  "parserOptions": {
    "ecmaVersion": 2022
  }
}

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


sourceType

sourceType определяет модульную систему, используемую в проекте.

Основные значения:

  • "script" — классический режим выполнения без модулей
  • "module" — поддержка ES Modules (import / export)

При установке "module" включается строгий режим интерпретации и разрешается использование модульного синтаксиса верхнего уровня.

Пример:

{
  "parserOptions": {
    "sourceType": "module"
  }
}

Неправильная настройка приводит к ошибкам вида Parsing error: 'import' and 'export' may appear only with 'sourceType: module'.


ecmaFeatures

ecmaFeatures управляет включением отдельных экспериментальных или дополнительных возможностей синтаксиса, которые могут быть не активированы через ecmaVersion.

Наиболее часто используемые флаги:

  • jsx — поддержка JSX-синтаксиса
  • globalReturn — разрешение return в глобальной области видимости
  • impliedStrict — автоматическое включение строгого режима

Пример:

{
  "parserOptions": {
    "ecmaFeatures": {
      "jsx": true,
      "impliedStrict": true
    }
  }
}

JSX

Флаг jsx необходим для проектов, использующих React-подобный синтаксис. Без него конструкции вида:

const element = <div>Hello</div>;

будут вызывать ошибку парсинга.

impliedStrict

impliedStrict включает строгий режим автоматически, без необходимости добавлять "use strict" в каждом файле. Это влияет на поведение переменных, запрещает неявные объявления и усиливает проверки корректности кода.


allowReserved

Параметр allowReserved управляет использованием зарезервированных слов ECMAScript в качестве идентификаторов.

Возможные значения:

  • true — разрешает использование зарезервированных слов (в старых или специфических окружениях)
  • false — запрещает использование зарезервированных слов как переменных и функций

Пример:

{
  "parserOptions": {
    "allowReserved": false
  }
}

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


Управление контекстом модуля и глобальной области

Комбинация sourceType и ecmaFeatures.globalReturn определяет модель выполнения кода:

  • скриптовый режим допускает глобальный контекст без модулей
  • модульный режим изолирует области видимости
  • глобальный return возможен только при явном разрешении

Эти параметры критичны для корректной работы линтера в средах Node.js, браузерах и гибридных конфигурациях.


Взаимодействие с современными версиями ECMAScript

При переходе на новые версии языка основная роль parserOptions заключается в синхронизации парсера с фактическим синтаксисом проекта. Несовпадение версии приводит к ложным ошибкам анализа, даже если код валиден.

Типичные случаи:

  • использование optional chaining при низком ecmaVersion
  • применение import.meta без модульного режима
  • использование приватных полей классов без поддержки соответствующей версии ECMAScript

Конфигурационные особенности в разных режимах ESLint

В классической конфигурации .eslintrc parserOptions задаются внутри объекта parserOptions верхнего уровня. В flat-конфигурации структура сохраняется, но может быть вложена в отдельные конфигурационные блоки, связанные с конкретными файлами или глобальными настройками проекта.

Различия проявляются в том, что flat-конфигурация позволяет более гибко задавать разные parserOptions для различных частей кодовой базы, например:

  • backend-код на Node.js с sourceType: module
  • legacy-скрипты с sourceType: script
  • фронтенд с jsx: true

Типичные ошибки настройки

Неправильная конфигурация parserOptions приводит к предсказуемым проблемам:

  • несовпадение ecmaVersion и используемого синтаксиса
  • попытка использовать import/export при sourceType: script
  • отсутствие jsx: true в React-проектах
  • конфликт строгого режима при некорректном impliedStrict

Такие ошибки проявляются на этапе парсинга, до выполнения правил линтинга, что делает их блокирующими для анализа кода.


Совместимость с плагинами и кастомными парсерами

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

  • ecmaVersion остаётся базовым ориентиром для синтаксиса
  • sourceType влияет на модульную интерпретацию
  • ecmaFeatures дополняется расширениями конкретного парсера