Spec-Zone.ru › ESLint

no-restricted-syntax

Запрет указанного синтаксиса

В JavaScript много возможностей языка, и не всем они нравятся. Поэтому некоторые проекты решают полностью запретить использование определённых возможностей языка. Например, можно запретить использование try-catch или class либо запретить использование оператора in.

Вместо создания отдельных правил для каждой возможности языка, которую вы хотите отключить, это правило позволяет настроить синтаксические элементы, использование которых следует ограничить. Для языка JavaScript эти элементы представлены типами узлов ESTree. Например, объявление функции представлено узлом FunctionDeclaration, а оператор with — узлом WithStatement. Чтобы определить узлы, представляющие ваш код, можно воспользоваться обозревателем кода.

Вы также можете указать селекторы AST, чтобы ограничить синтаксис и получить гораздо более точный контроль над синтаксическими шаблонами.

Примечание. Это правило можно использовать с любым языком, код которого проверяется с помощью ESLint. Чтобы узнать, из каких типов узлов состоит код на другом языке, воспользуйтесь одним из инструментов:

  • песочница typescript-eslint, если вы используете ESLint с typescript-eslint.
  • обозреватель кода ESLint, если вы используете ESLint для проверки JavaScript, JSON, Markdown или CSS.

Подробности правила

Это правило запрещает указанный (то есть заданный пользователем) синтаксис.

Параметры

Это правило принимает список строк, каждая из которых является селектором AST:

{
    "rules": {
        "no-restricted-syntax": ["error", "FunctionExpression", "WithStatement", "BinaryExpression[operator='in']"]
    }
}

Кроме того, правило принимает объекты, в которых указываются селектор и необязательное пользовательское сообщение:

{
    "rules": {
        "no-restricted-syntax": [
            "error",
            {
                "selector": "FunctionExpression",
                "message": "Function expressions are not allowed."
            },
            {
                "selector": "CallExpression[callee.name='setTimeout'][arguments.length!=2]",
                "message": "setTimeout must always be invoked with two arguments."
            }
        ]
    }
}

Если с помощью свойства message задано пользовательское сообщение, ESLint будет использовать его при обнаружении синтаксиса, указанного в свойстве selector.

При необходимости в конфигурации можно свободно смешивать строки и объекты.

Примеры неправильного кода для этого правила с параметрами "FunctionExpression", "WithStatement", BinaryExpression[operator='in']:

Открыть в песочнице
/* eslint no-restricted-syntax: ["error", "FunctionExpression", "WithStatement", "BinaryExpression[operator='in']"] */

with(me){dontMess();}

const doSomething = function () {};

foo in bar;

Примеры правильного кода для этого правила с параметрами "FunctionExpression", "WithStatement", BinaryExpression[operator='in']:

Открыть в песочнице
/* eslint no-restricted-syntax: ["error", "FunctionExpression", "WithStatement", "BinaryExpression[operator='in']"] */

me.dontMess();

function doSomething() {};

foo instanceof bar;

Когда не следует использовать это правило

Если вы не хотите ограничивать использование возможностей или синтаксиса JavaScript в своём коде, не используйте это правило.

Связанные правила

  • no-alert
  • no-console
  • no-debugger
  • no-restricted-properties

Версия

Это правило появилось в ESLint v1.4.0.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-restricted-syntax

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API