使用 ESLint 或 Prettier 为 JS 开关案例实施花括号

Posted

技术标签:

【中文标题】使用 ESLint 或 Prettier 为 JS 开关案例实施花括号【英文标题】:Enforce curly braces for JS switch-cases with ESLint or Prettier 【发布时间】:2021-10-22 15:16:35 【问题描述】:

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

我尝试将 ESLint 规则 curly 设置为 "all",但它并没有考虑到我的无卷曲开关盒。

有一个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;
  

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

以下 eslint 自定义规则 repo 中的 switch-braces 规则似乎是您正在寻找的规则: https://github.com/justinanastos/eslint-plugin-justinanastos/blob/master/docs/rules/switch-braces.md

你可以试一试。

【讨论】:

【参考方案3】:

你可以试试'no-restricted-syntax' rule 这样的selector。

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

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

如果您的解析器支持:has,您可以尝试这个,但它可能会出现误报:由于:has 目前似乎不允许子(相对)选择器,后代非块@987654326 @nodes 可能会抛出。

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

【讨论】:

以上是关于使用 ESLint 或 Prettier 为 JS 开关案例实施花括号的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 typescript 同步 eslint 或设置类似的 tslint 和 prettier?

vue + eslint + prettier 代码检测(自动修复)

vue-cli4 ESLint + prettier 修改插件规则实例

有没有办法列出 Angular 项目中所有活动的 ESLint / Prettier 规则?

JS代码风格自动规整工具Prettier

ESLint 和 Prettier 冲突,无法为代码块禁用 Prettier