使用 ESLint 或 Prettier 为 JS switch-cases 强制使用大括号

Enforce curly braces for JS switch-cases with ESLint or Prettier

我想在 JS 中为 switch-cases 强制使用花括号,可能使用 ESLint 或 Prettier。您知道任何相关的配置吗?如果不知道,还有其他的 linting 或格式化工具吗?

我尝试将 ESLint 规则 curly 设置为 "all",但它并没有抱怨我的 curly-less switch-cases。

有一个switch-case ESLint plugin,但是我没有在它的文档中找到这样的规则,在它的源代码中也没有。

例子

错误:

switch (foo) {
  case "bar":
    return 1;
  case "baz":
    return 2;
  default:
    return 0;
}

正确:

switch (foo) {
  case "bar": {
    return 1;
  }
  case "baz": {
    return 2;
  }
  default: {
    return 0;
  }
}

*这适用于没有插件的eslint。

curly 规则不适用于 switch case 中的块。不幸的是,没有好的规则可以满足您的需要。您可以在此处建议规则(或编辑卷曲规则)https://github.com/eslint/eslint/issues

以下 eslint 自定义规则存储库中的 switch-braces 规则似乎就是您要找的那个: https://github.com/justinanastos/eslint-plugin-justinanastos/blob/master/docs/rules/switch-braces.md

你可以试试看。

你可以试试'no-restricted-syntax' rule with such selector.

带有详细输出(一个案例的每个非块子项都被报告为错误):

    'no-restricted-syntax': ['error',
      {
        'selector': 'SwitchCase > *.consequent[type!="BlockStatement"]',
        'message': 'Switch cases without blocks are disallowed.'
      },
    ],

如果您的解析器支持 :has,您可以试试这个,但它可能会产生误报:因为子(相对)选择器目前在 :has 中似乎是不允许的,后代非块 .consequent 节点可能会抛出。

    'no-restricted-syntax': ['error',
      {
        'selector': 'SwitchCase:has(*.consequent[type!="BlockStatement"])',
        'message': 'Switch cases without blocks are disallowed.'
      },
    ],