版本

no-restricted-syntax

禁止指定语法

JavaScript 拥有许多语言特性,并非每个人都喜欢所有这些特性。因此,一些项目选择完全禁止使用某些语言特性。例如,您可能决定禁止使用try-catchclass,或者您可能决定禁止使用in运算符。

此规则允许您配置要限制使用的语法元素,而不是为要关闭的每个语言特性创建单独的规则。对于 JavaScript 语言,这些元素由其ESTree节点类型表示。例如,函数声明由FunctionDeclaration表示,with语句由WithStatement表示。您可以使用代码浏览器来确定表示代码的节点。

您还可以指定AST 选择器来进行限制,从而对语法模式进行更精确的控制。

注意:此规则可用于使用 ESLint 检查的任何语言。要查看其他语言代码由什么类型的节点组成,您可以使用

规则详细信息

此规则禁止指定的(即用户定义的)语法。

选项

此规则接受字符串列表,其中每个字符串都是一个 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();
}

var 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 特性或语法,则不应使用此规则。

版本

此规则在 ESLint v1.4.0 中引入。

资源

更改语言