版本

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();
}

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 功能或語法,則不應使用此規則。

版本

此規則在 ESLint v1.4.0 中引入。

資源

變更語言