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']"] */
const doSomething = ;
;
Примеры правильного кода для этого правила с параметрами "FunctionExpression", "WithStatement", BinaryExpression[operator='in']:
/* eslint no-restricted-syntax: ["error", "FunctionExpression", "WithStatement", "BinaryExpression[operator='in']"] */
me.dontMess();
function doSomething() {};
foo instanceof bar;
Когда не следует использовать это правило
Если вы не хотите ограничивать использование возможностей или синтаксиса JavaScript в своём коде, не используйте это правило.
Связанные правила
Версия
Это правило появилось в ESLint v1.4.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-restricted-syntax