ESLint 中的 generator-star 规则:星号位置的强制统一与 v1.0.0 后的迁移路径
ESLint 中的 generator-star 规则星号位置的强制统一与 v1.0.0 后的迁移路径【免费下载链接】eslintFind and fix problems in your JavaScript code.项目地址: https://gitcode.com/GitHub_Trending/es/eslintgenerator-star 是 ESLint 早期0.x 时代为 ECMAScript 6 生成器函数提供的一条格式校验规则用于强制统一生成器函数声明中*星号与function关键字、函数名之间的相对位置。这条规则在 ESLint v1.0.0 中已被移除由功能更强、可配置项更细的 generator-star-spacing 规则取代。阅读本文后你将掌握生成器函数星号书写的三种合法形态、generator-star 规则的完整选项语义start / middle / end以及如何平稳迁移到替代规则并在现代 ESLint 版本中继续统一生成器代码风格。背景生成器函数与星号的三种合法写法生成器是 ECMAScript 6 引入的一种特殊函数类型可以在执行过程中多次暂停并返回值。此类函数通过在function关键字后放置一个*来表示。由于 JavaScript 语法本身对*的位置相当宽容同一个生成器函数存在三种等价但风格迥异的写法// 写法一星号紧贴 function 关键字 function* generator() { yield 44; yield 55; } // 写法二星号紧贴函数名 function *generator() { yield 44; yield 55; } // 写法三星号两侧都有空格 function * generator() { yield 44; yield 55; }以上三种写法在语法上全部合法原文档 generator-star.md 中逐一给出了可运行示例这也正是generator-star规则存在的意义——为了保持团队代码风格的一致性规则强制将*固定到唯一指定的位置。规则详情start / middle / end 三种选项generator-star规则的核心逻辑是强制*要么紧贴function关键字要么紧贴函数名两者之间只取其一作为团队规范。规则只接受一个字符串类型的选项用于指定星号的位置选项含义强制形态start星号紧贴function关键字function* generator()middle星号位于正中间两侧各一空格function * generator()end星号紧贴函数名function *generator()默认值为end即默认要求写成function *generator()的形式。在配置文件中启用该规则属于早期 ESLint 的配置风格直接在rules中配置规则名、严重级别与选项字符串即可generator-star: [error, start]将start换成middle或end即可切换强制风格generator-star: [error, middle]generator-star: [error, end]三种选项对应的声明形态选用start时强制以下写法星号紧贴function关键字function* generator() { }选用middle时强制星号两侧各保留一个空格function * generator() { }选用end时强制星号紧贴函数名function *generator() { }函数表达式形态的对应约束规则同样作用于函数表达式。使用start时强制var generator function* () { }使用middle时强制var generator function * () { }使用end时强制var generator function *() { }值得注意的是对于匿名函数表达式start与end两种配置下有一处交集当星号同时紧贴function关键字与左括号即匿名且星号两侧均无空格时function*()对两种选项都是合法写法var generator function*() { }此外规则明确不检查对象字面量中的生成器简写方法如{ *generator() {} }因为简写语法没有function关键字不存在位置歧义。规则历史v1.0.0 移除与官方替换generator-star是 ESLint 历史中的一条短命规则。它在 ESLintv1.0.0 中被正式移除官方以功能覆盖更完整的 generator-star-spacing 规则作为替代。原文档 generator-star.md 顶部用醒目的提示块标注了这一事实而仓库中多处元数据与文档均可交叉印证这条演进路径替换映射表conf/replacements.json 中记录了generator-star: [generator-star-spacing]的官方替换关系与此并列的还有global-strict → strict、no-comma-dangle → comma-dangle等一批同期调整规则元数据docs/src/_data/rules.json 的removed列表中同样收录了generator-star并指明其replacedBy为generator-star-spacing官方迁移指南migrating-to-1.0.0.md 的 Removed Rules 一节明确列出generator-star is replaced by generator-star-spacing并提示升级时如仍使用已被移除的规则ESLint v1.0.0 会发出警告并建议替换规则。替代规则 generator-star-spacing 的能力升级要理解迁移的价值需要看清替代规则 generator-star-spacing 比旧规则强在哪里。它的核心实现位于 lib/rules/generator-star-spacing.js从源码可以印证以下设计1. 双向空间控制取代单一位置枚举。旧规则用start/middle/end描述星号整体位置新规则拆分为before星号与function关键字之间与after星号与函数名或左括号之间两个布尔维度并提供了四个字符串简写before、after、both、neither默认值为{before: true, after: false}等价于旧规则的end风格。generator-star-spacing: [error, {before: true, after: false}]字符串简写写法generator-star-spacing: [error, after]2. 按函数形态分别覆写named / anonymous / method。源码中modes对象将配置解析为named、anonymous、method三类分别生效——命名函数、匿名函数、类方法或对象属性简写方法可各自独立设置风格generator-star-spacing: [error, { before: false, after: true, anonymous: neither, method: {before: true, after: true} }]在上述配置下顶层before/after定义默认行为anonymous与method覆盖默认行为覆盖值可以是{before, after}对象也可以是简写字符串generator-star-spacing.md 中给出了正确的代码示例。3. 可自动修复fixable: whitespace。源码meta.fixable声明为whitespacefix()函数会根据期望自动插入或删除空格--fix即可一键统一全项目生成器风格。源码中checkSpacing通过比较rightToken.range[0] - leftToken.range[1]与期望的布尔值是否一致来判定违规并分别用missingBefore、missingAfter、unexpectedBefore、unexpectedAfter四个消息 ID 上报lib/rules/generator-star-spacing.js。4. 对对象简写方法不检查 before。与旧规则一致对象字面量简写方法无function关键字不做 before 侧检查源码checkFunction中对method类型且星号为函数体第一个 token 时跳过before校验。替代规则本身也进入了新一轮生命周期它在ESLint v8.53.0 起被标记为弃用格式化类规则逐步移出核心包meta.deprecated注明availableUntil: 11.0.0推荐迁移至stylistic/eslint-plugin中同名规则lib/rules/generator-star-spacing.js。规则测试从测试用例验证行为仓库中 tests/lib/rules/generator-star-spacing.js 提供了 1041 行的完整RuleTester测试可用于精确验证替代规则的各项行为。测试覆盖了默认配置、四种字符串简写、对象覆写配置以及声明、命名表达式、匿名表达式、对象简写方法、类方法与静态方法等全部生成器形态错误消息 ID 也被独立提取missingBefore/missingAfter/unexpectedBefore/unexpectedAfter逐一断言。测试采用ecmaVersion: 2018的语言选项说明规则对 ES2018 之前的生成器语法均有稳定支持。迁移建议与何时不需要此规则从旧规则迁移到替代规则的实操步骤很简单在配置文件中将generator-star改为generator-star-spacing做一次语义映射start→neither星号两侧均无空格、middle→both两侧各一空格、end→before星号前保留空格、后无空格运行eslint --fix自动统一存量代码再人工复核差异即可。至于是否启用此类规则原文档 generator-star.md 给出的建议至今适用如果项目不会使用生成器函数就完全不需要这条规则对使用生成器但不在意空格一致性的项目也可以选择不启用。而在现代代码库中更推荐直接启用generator-star-spacing或迁移至stylistic/eslint-plugin的维护版本以获取更细粒度的风格控制与自动修复能力。【免费下载链接】eslintFind and fix problems in your JavaScript code.项目地址: https://gitcode.com/GitHub_Trending/es/eslint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →