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