hare-update 有助于处理代码中的中断性更改

主要观点:正在开发 hare-update 工具用于应对 Hare 下一次稳定版本中的破坏性变更,如 nomem 相关变更。该工具设计新颖、功能强大,能灵活制定和应用规则以更新代码应对破坏变更,可推广至其他编程语言,还可单独分发。
关键信息

  • hare-update 可通过hare tool update运行,分布式独立于 Hare 其余部分,是可选扩展,未来可能不再需要。
  • 工具包含规则引擎 DSL,能在 Hare 语法的特定非终结点注入规则,以解析和处理代码中的破坏变更,如更新已弃用函数调用等。
  • 规则引擎内部需fork Hare 标准库的解析器,以处理不同版本的语法,支持代码库的部分升级,并添加钩子和状态保存恢复机制。
  • 规则的模式匹配通过第二个 lexer 处理模式令牌与输入进行比较,捕获包括起始和结束位置及文本等信息。应用编辑时通过创建编辑组,利用捕获信息进行替换、插入等操作。
  • 规则可包含任意 Hare 代码,如辅助函数match_access等,还能处理标准库模块符号的迁移等复杂情况,且ensure_import函数可处理文件中导入模块的相关操作。
  • 处理完所有规则并收集用户所需编辑后,按编辑的偏移量顺序应用,以确保正确应用修改。
    重要细节
  • 即将发布的 Hare 版本包含一些小的破坏性变更,nomem 变更影响较大,导致发布延迟,hare-update 旨在帮助用户更新代码库。
  • 规则可针对不同的解析器非终结点,如call-expressionappend-expression等,且支持伪非终结点balancedlocation
  • 工具的设计旨在让规则编写简单、灵活且有趣,鼓励贡献者添加规则以简化处理破坏变更的过程。
  • 工具的应用示例包括简单的符号替换和复杂的标准库模块符号迁移等情况,展示了其在不同场景下的实用性。
阅读 8
0 条评论