版本

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 中引入。

資源

變更語言