【问题标题】:ESLint rule to detect nested assignments检测嵌套赋值的 ESLint 规则
【发布时间】:2023-02-05 21:12:17
【问题描述】:

似乎没有 ESLint 规则来检测嵌套变量赋值。这是一个很常见的错误。

function assert (cond) {
   if (!cond) {
      throw new Error("Assertion failed.");
   }
}

function test () {
   let var1 = 1;
   assert(var1 = 2);         // mistake: assigns 2 to var1!
   console.log(var1);
}

我试图在 GitHub 上提出一个新规则,但这只有在有相关的新 ECMAScript 特性时才有可能。而且我找不到可以相应扩展的现有规则。 no-cond-assignno-return-assign 规则相似,但它们不适合这样的扩展。

【问题讨论】:

  • 由于这将始终返回 true(我假设)no-constant-condition 会抓住这个吗?我不是 100% 确定,因为这是在使用断言。
  • 我在 ESLint 配置文件中使用 "extends": "eslint:all" 进行了测试,但没有检测到此问题的现有规则(具有默认选项)。

标签: eslint


【解决方案1】:

DMartensmdjermanovicGitHub 上回答了我的问题。

可以使用 no-restricted-syntax 规则:

例如。:

"no-restricted-syntax": ["error", {
  selector:
    "AssignmentExpression:not(
       ExpressionStatement > AssignmentExpression,
       ForStatement > AssignmentExpression.update )",
  message: "Do not nest assignments"
  }],

或者

"no-restricted-syntax": ["error", {
  selector: ":not(ExpressionStatement, ForStatement) > AssignmentExpression",
  message: "Do not nest assignments"
  }],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2018-06-17
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多