Параметр parserOptions определяет, каким образом парсер
анализирует исходный код перед применением правил линтинга. Он управляет
уровнем поддержки синтаксиса ECMAScript, типом модулей, а также
дополнительными языковыми возможностями, которые должны быть доступны на
этапе разбора кода. Корректная настройка parserOptions
напрямую влияет на точность анализа и предотвращает ошибки разбора при
использовании современного JavaScript.
ecmaVersion задаёт версию ECMAScript, которую должен
поддерживать парсер. Это ключевой параметр, определяющий доступность
синтаксических конструкций.
Значение может быть числом (2015, 2016, 2017 …) или
latest
Определяет поддержку таких возможностей, как:
Пример конфигурации:
{
"parserOptions": {
"ecmaVersion": 2022
}
}
Использование устаревшего значения приводит к ошибкам при разборе современного синтаксиса, даже если сам код корректен.
sourceType определяет модульную систему, используемую в
проекте.
Основные значения:
"script" — классический режим выполнения без
модулей"module" — поддержка ES Modules (import /
export)При установке "module" включается строгий режим
интерпретации и разрешается использование модульного синтаксиса верхнего
уровня.
Пример:
{
"parserOptions": {
"sourceType": "module"
}
}
Неправильная настройка приводит к ошибкам вида
Parsing error: 'import' and 'export' may appear only with 'sourceType: module'.
ecmaFeatures управляет включением отдельных
экспериментальных или дополнительных возможностей синтаксиса, которые
могут быть не активированы через ecmaVersion.
Наиболее часто используемые флаги:
jsx — поддержка JSX-синтаксисаglobalReturn — разрешение return в
глобальной области видимостиimpliedStrict — автоматическое включение строгого
режимаПример:
{
"parserOptions": {
"ecmaFeatures": {
"jsx": true,
"impliedStrict": true
}
}
}
Флаг jsx необходим для проектов, использующих
React-подобный синтаксис. Без него конструкции вида:
const element = <div>Hello</div>;
будут вызывать ошибку парсинга.
impliedStrict включает строгий режим автоматически, без
необходимости добавлять "use strict" в каждом файле. Это
влияет на поведение переменных, запрещает неявные объявления и усиливает
проверки корректности кода.
Параметр allowReserved управляет использованием
зарезервированных слов ECMAScript в качестве идентификаторов.
Возможные значения:
true — разрешает использование зарезервированных слов
(в старых или специфических окружениях)false — запрещает использование зарезервированных слов
как переменных и функцийПример:
{
"parserOptions": {
"allowReserved": false
}
}
В современных проектах значение обычно не изменяется, так как строгие стандарты ECMAScript уже регулируют подобные случаи.
Комбинация sourceType и
ecmaFeatures.globalReturn определяет модель выполнения
кода:
return возможен только при явном
разрешенииЭти параметры критичны для корректной работы линтера в средах Node.js, браузерах и гибридных конфигурациях.
При переходе на новые версии языка основная роль
parserOptions заключается в синхронизации парсера с
фактическим синтаксисом проекта. Несовпадение версии приводит к ложным
ошибкам анализа, даже если код валиден.
Типичные случаи:
optional chaining при низком
ecmaVersionimport.meta без модульного режимаВ классической конфигурации .eslintrc
parserOptions задаются внутри объекта
parserOptions верхнего уровня. В flat-конфигурации
структура сохраняется, но может быть вложена в отдельные
конфигурационные блоки, связанные с конкретными файлами или глобальными
настройками проекта.
Различия проявляются в том, что flat-конфигурация позволяет более
гибко задавать разные parserOptions для различных частей
кодовой базы, например:
sourceType: modulesourceType: scriptjsx: trueНеправильная конфигурация parserOptions приводит к
предсказуемым проблемам:
ecmaVersion и используемого
синтаксисаimport/export при
sourceType: scriptjsx: true в React-проектахimpliedStrictТакие ошибки проявляются на этапе парсинга, до выполнения правил линтинга, что делает их блокирующими для анализа кода.
Некоторые плагины и альтернативные парсеры расширяют стандартные
возможности и могут требовать специфических значений
parserOptions. Например, парсеры для TypeScript или
экспериментальных синтаксических расширений используют дополнительные
поля, но сохраняют совместимость с базовыми параметрами:
ecmaVersion остаётся базовым ориентиром для
синтаксисаsourceType влияет на модульную интерпретациюecmaFeatures дополняется расширениями конкретного
парсера