ESLint 已移除规则space-return-throw-casereturn、throw、case关键字后的空格检查与keyword-spacing迁移指南【免费下载链接】eslintFind and fix problems in your JavaScript code.项目地址: https://gitcode.com/GitHub_Trending/es/eslintspace-return-throw-case是 ESLint 早期版本0.x/1.x中的一条布局类layout规则专门用来要求return、throw、case三个关键字之后必须有空格。本指南以其官方规则文档为核心完整讲解该规则的检查行为、正反示例与--fix自动修复能力并结合本仓库源码说明它为何在 ESLint v2.0.0 被移除、如何被 keyword-spacing 全面取代以及升级配置时的完整迁移路径帮助读者理解关键字空格风格检查在 ESLint 中的演进脉络。规则速览它在检查什么space-return-throw-case的要求只有一句话return、throw、case关键字之后必须有空格Requires spaces afterreturn,throw, andcasekeywords。它属于 ESLint 的布局layout类规则作用于以下三种语法结构return语句如return value;要求return与返回值表达式之间至少有一个空格throw语句如throw err;要求throw与抛出的表达式之间至少有一个空格switch语句中的case子句如case a:要求case与匹配的表达式之间至少有一个空格。从仓库元数据可以看出它的演进轨迹docs/src/_data/rule_versions.json记录该规则最早出现于0.1.4版本并在2.0.0-beta.3被移除CHANGELOG.md中还保留了它的历史来源——“split GH-332 rule into space-unary-word-ops and space-return-throw-case”即该规则是从早期一个更宽泛的空格规则中拆分出来的专项规则。规则分类依据仓库中的 rule-type-list.json 将现有核心规则按类型归类keyword-spacing作为该规则的继任者同样被列入布局类。ESLint 文档体系rules.json中每条规则都带有类型标注布局类规则专门负责代码排版与可读性相关的空白检查。错误代码示例Rule Details官方文档给出了三条最典型的错误代码。第一条涉及throw与case第二条涉及return第三条同时涉及switch中的case/*eslint space-return-throw-case: error*/ throw{a:0} function f(){ return-a; } switch(a){ casea: break; }逐个拆解这三处违规throw{a:0}throw与对象字面量{a:0}之间缺少空格被判定为错误return-a;return与一元负号表达式-a之间缺少空格被判定为错误casea:case与字符串字面量a之间缺少空格被判定为错误。这些写法虽然语法上合法return-a会被解析为return (-a)throw{a:0}会被解析为抛出一个对象但严重损害可读性容易让return -a被误读为return - a甚至减法表达式。正确代码示例对应的正确写法是让关键字与紧随其后的表达式之间保留空格/*eslint space-return-throw-case: error*/ throw {a: 0}; function f(){ return -a; } switch(a){ case a: break; }三条正确写法逐一对应throw {a: 0};throw与对象字面量之间有空格return -a;return与一元表达式之间有空格注意空格位于return与-之间而非-与a之间case a:case与字符串之间有空格。自动修复--fix支持规则文档中明确标注了(fixable)属性该规则支持 ESLint 命令行界面的--fix选项自动修复即 ESLint 会自动在缺失空格的位置插入一个空格无需手动修改。--fix的使用方式与所有可修复规则一致详见 命令行界面文档eslint --fix yourfile.js仓库 CHANGELOG 中记录了该规则的修复能力是后来才补齐的Update: Implement auto fix for space-return-throw-case (fixes #3732)。在此之前该规则只能报告问题而无法自动修复。为何被移除keyword-spacing的全面取代官方结论该规则的官方文档给出了明确的处置声明此规则已在 ESLint v2.0.0 中被移除并由 keyword-spacing 规则取代。也就是说space-return-throw-case不是被废弃后依然可用而是从 v2.0.0 起彻底从 ESLint 中删除其功能并入范围更广的keyword-spacing规则。仓库元数据中的替换映射本仓库在多个位置记录了这一替换关系形成交叉印证conf/replacements.json 是规则替换的权威映射表其中明确写着space-return-throw-case: [keyword-spacing]与space-after-keywords、space-before-keywords一并指向keyword-spacingdocs/src/_data/rules.json 中该规则被标记为removed: space-return-throw-casereplacedBy数组指向keyword-spacingrule-type-list.json 中同样存在指向keyword-spacing的replacedBy记录。升级文档中的官方说明在 Migrating to 2.0.0 的 Removed Rules 一节中ESLint 官方明确列出了space-return-throw-case及其替换规则并给出了两条关键的升级提示你需要更新规则配置以使用新规则ESLint v2.0.0 会在你使用已移除规则时发出警告并自动建议替换规则帮助你在升级过程中减少意外。迁移方案改用keyword-spacing为什么它能覆盖原规则space-return-throw-case只覆盖return、throw、case三个关键字且只检查关键字之后的空格。而keyword-spacing的覆盖面要大得多它强制约束return、throw、case、if、else、for、while、try、catch、finally、switch、function、class、import、export、yield、await、async等全部关键字的前后空格因此完全包含原规则的全部检查范围。从源码看keyword-spacing.js 通过keywords工具模块lib/rules/utils/keywords.js加载语言关键字列表并额外合并了as、async、await、from、get、let、of、set、yield等关键字类似词元然后在create(context)中对每个关键字的before/after两个方向分别做检查最后通过fix(fixer)插入或删除空格实现自动修复。这正是原space-return-throw-case检查能力的超集实现。配置迁移示例原配置/*eslint space-return-throw-case: error*/迁移后的等价配置keyword-spacing的默认选项即要求关键字前后各至少一个空格与原规则行为一致/*eslint keyword-spacing: [error, { before: true, after: true }]*/或在.eslintrc/eslint.config.js的 rules 对象中{ rules: { keyword-spacing: [error, { before: true, after: true }] } }如果希望只还原原规则“关键字后有空格”的检查而不过度约束例如不要求关键字前必须有空格可以通过overrides按关键字细调{ rules: { keyword-spacing: [error, { before: false, after: true, overrides: { return: { after: true }, throw: { after: true }, case: { after: true } } }] } }keyword-spacing的参数说明根据 keyword-spacing 规则文档其全部选项如下选项类型默认值说明beforebooleantrue要求关键字之前至少一个空格设为false则禁止关键字前的空格afterbooleantrue要求关键字之后至少一个空格设为false则禁止关键字后的空格overridesobject—按关键字覆盖before/after的默认设置例如{ if: { after: false } }其中overrides的每个键都是关键字名值为{ before: boolean, after: boolean }对象。仓库测试 tests/lib/rules/keyword-spacing.js 中有大量针对case、return、throw关键字及overrides选项的用例例如通过override(case, BOTH)、override(case, NEITHER)构造不同组合来验证case关键字前后空格的检查行为。与其它空格规则的边界keyword-spacing被设计为不与其它空格规则冲突它只负责关键字与相邻词元之间的空白而关键字与括号之间的空白如function (由 space-before-function-paren 负责。官方文档建议若只想统一关键字间距直接使用keyword-spacing即可无需同时开启多个相互重叠的旧规则。当你不需要这条规则时keyword-spacing的官方文档对“何时不使用”给出的建议是如果你不打算强制关键字间距的一致性那么禁用它即可。原space-return-throw-case同理——它本质上是编码风格偏好而非正确性检查不写空格不影响程序运行因此那些不关注此类排版风格的项目可以完全忽略该检查。{ rules: { keyword-spacing: off } }规则演进路线小结时间线事件仓库依据0.1.4space-return-throw-case首次出现rule_versions.json0.x 早期从更大的空格规则中拆分出本规则split GH-332 rule into space-unary-word-ops and space-return-throw-caseCHANGELOG.md1.x实现--fix自动修复Implement auto fix for space-return-throw-caseCHANGELOG.md2.0.0-beta.3规则被移除并入keyword-spacingrule_versions.json2.0.0官方升级文档公布替换方案使用旧规则时 ESLint 会警告并建议替换Migrating to 2.0.0对于仍在使用旧版 ESLint 1.x 的项目直接照文档启用space-return-throw-case: error即可获得return、throw、case关键字后的空格检查对于 v2.0.0 及以上版本的项目应使用 keyword-spacing 获得覆盖更全、可配置性更强且同样支持--fix的关键字空格检查。【免费下载链接】eslintFind and fix problems in your JavaScript code.项目地址: https://gitcode.com/GitHub_Trending/es/eslint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考