mcpField
E
eslint-migrate-options

eslint-migrate-options

github.com/biomejs开发26.0k35 次安装今天更新
代码仓库

关于 eslint-migrate-options

eslint-migrate-options 是用于开发的技能,指导将 ESLint 规则选项自定义迁移为 Biome 配置。内容涵盖源选项建模、语义转换、类型化分发、迁移接线和基于样例的测试。

主要功能

  1. 01建模 ESLint 选项载荷
  2. 02将源语义转换为 Biome 选项
  3. 03添加类型化规则分发
  4. 04在严重级别处理后接入自定义迁移
  5. 05测试迁移样例及边界情况

适用场景

  1. 01保留受支持的 ESLint 规则选项
  2. 02迁移嵌套规则设置
  3. 03验证默认值和不支持的字段
  4. 04检查自定义迁移改动

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/biomejs/biome --skill eslint-migrate-options

安装后在 Claude Code 中输入/eslint-migrate-options确认已加载。

详细介绍

ESLint 选项迁移

仅当现有 Biome 规则需要保留有意义的 ESLint 选项时,才使用自定义迁移器。仅迁移严重级别应由生成的规则映射处理。

前置条件

编辑前确认:

  1. Biome 规则及其选项类型已存在。
  2. 规则元数据标明了对应的 ESLint 源规则。
  3. 生成的严重级别迁移已存在,或将重新生成。
  4. 官方 ESLint 或插件文档明确了确切的选项结构和默认值。
  5. 支持的 Biome 语义清晰,包括不支持的源选项。

如果 Biome 规则本身或其选项仍需实现,请加载 lint-rule-development。

流程

自定义迁移包含四个部分:

  1. 插件专用类型反序列化 ESLint 负载。
  2. 转换逻辑将源语义映射为 Biome 选项类型。
  3. 共享 ESLint Rule 枚举将该规则识别为类型化变体。
  4. migrate_eslint_rule() 在处理通用严重级别后安装生成的 Biome 配置。

关键文件

文件职责
eslint_eslint.rs共享配置模型、Rule、RuleConf<T> 和分发逻辑
eslint_unicorn.rsUnicorn 选项类型和转换逻辑
eslint_typescript.rsTypeScript ESLint 选项类型和转换逻辑
eslint_jsxa11y.rsJSX 无障碍选项类型和转换逻辑
eslint_to_biome.rs主要转换逻辑和自定义迁移分支
eslint_any_rule_to_biome.rs生成的严重级别映射
tests/specs/migrate_eslint/基于测试样例的迁移快照

使用与源规则对应的插件专用模块,并检查一个负载和 Biome 配置类型类似的现有迁移器。

建模源选项

应按照 ESLint JSON 结构建模,而非按照 Biome 目标结构建模。

  • 在转换前保留源结构的嵌套关系。
  • 源允许省略的字段应使用可选字段。
  • 参照相邻选项类型,遵循当前的反序列化命名和默认值约定。
  • 对支持的实际配置进行反序列化所需的字段应建模。
  • 确认不支持的源字段不会导致有效配置反序列化失败;是否需要显式定义这些字段,取决于当前反序列化器的约定。

不要假设源默认值与目标默认值等效。

转换语义

在源选项类型旁实现转换逻辑。

  • 当 ESLint 和 Biome 使用不同术语时,转换相应概念。
  • 有意舍弃不支持的行为。
  • 避免生成空的嵌套选项对象。
  • 如果应用 Biome 默认值会改变仅设置严重级别时的行为,则保留未提供选项的状态。
  • 当标准化或条件构造具有明确的领域含义时,使用小型辅助函数。

转换逻辑应通过分支清楚表明不支持的行为和默认行为,而不是依赖逐字段赋值。

添加类型化规则变体

在 eslint_eslint.rs 中更新所有类型化分发位置:

  • 将 RuleConf<SourceOptions> 添加到 Rule;
  • 让 Rule::name() 返回确切的 ESLint 规则名称;
  • 在通用兜底分支之前,将该名称反序列化为类型化变体。

添加变体后,搜索枚举的所有匹配分支,确保没有遗漏需要更新的分发位置。

接入迁移

在 migrate_eslint_rule() 中添加自定义分支,并首先调用 migrate_eslint_any_rule()。通用路径负责跟踪严重级别、报告不支持的规则以及去重。

使用目标规则实际所属的规则组和配置类型:

  • 可修复规则使用 RuleFixConfiguration::WithOptions;
  • 不可修复规则使用 RuleConfiguration::WithOptions。

根据源结构选择 RuleConf 的访问方式:

  • 当仅设置严重级别的输入应通过源默认值映射时,使用 option_or_default();
  • 当只有提供选项时才应附加选项,使用显式的 RuleConf::Option 匹配;
  • 对需要聚合或标准化的数组负载使用 into_vec()。

复制一个当前类似的分支,不要依赖记忆中的结构体字段。

测试

在 crates/biome_cli/tests/specs/migrate_eslint/ 下添加有针对性的测试夹具,涵盖:

  • 仅包含严重级别的配置;
  • 每种受支持的选项模式;
  • 在其他方面有效的输入中包含不受支持的字段;
  • 为空和部分指定的嵌套对象;
  • ESLint 和 Biome 默认值不同的情况;
  • 合并行为相关的预先存在的 Biome 配置。

运行针对性的迁移测试,并检查相邻的快照。如果迁移输出取决于规则语义,也要运行分析器选项测试。

常用命令:

cargo check -p biome_cli
cargo test -p biome_cli migrate_eslint

审查清单

  • 源类型与官方 ESLint 配置相符。
  • 转换映射的是语义,而不是机械地映射名称。
  • 仅包含严重级别时的行为仍然正确。
  • 类型化变体、名称、反序列化和迁移均完整。
  • 通用严重级别迁移先于自定义选项安装运行。
  • 分组和可修复性与目标规则相符。
  • 测试夹具涵盖省略、默认值、不受支持的字段和嵌套选项。

参考资料

评论

支持 Markdown