no-restricted-syntax
禁止指定的語法
JavaScript 有很多語言功能,並非每個人都喜歡所有這些功能。因此,某些專案會選擇完全禁止使用某些語言功能。例如,您可能會決定禁止使用 try-catch
或 class
,或者您可能會決定禁止使用 in
運算符。
與其為您要關閉的每個語言功能建立單獨的規則,不如讓此規則允許您設定要限制使用的語法元素。對於 JavaScript 語言,這些元素由它們的 ESTree 節點類型表示。例如,函式宣告由 FunctionDeclaration
表示,with
語句由 WithStatement
表示。您可以使用 程式碼瀏覽器 來判斷表示您的程式碼的節點。
您還可以指定 AST 選擇器來限制,從而可以更精確地控制語法模式。
注意:此規則可以用於您使用 ESLint 檢查的任何語言。若要查看其他語言中的程式碼由哪種節點類型組成,您可以使用
- 如果您使用 ESLint 與
typescript-eslint
,請使用 typescript-eslint 遊樂場。 - 如果您使用 ESLint 來檢查 JavaScript、JSON 或 Markdown,請使用 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']"] */
var 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 中引入。