使用 zeitwerk 修复 ruby 项目不一致的文件

问题描述 投票:0回答:1

对于一个包含数千个文件的大型(非 Rails)Ruby 项目,这些文件不遵循类、模块和常量的命名约定,并且使用大量 require 和 require_relative 以及潜在的循环依赖项,是否有一种方法可以检测它们,以便可以应用纠正措施并允许采用代码加载器

我找到了 Rails 项目的东西 https://github.com/rails/rails/blob/main/railties/lib/rails/zeitwerk_checker.rb

ruby require zeitwerk
1个回答
0
投票

require
require_relative
调用并不重要,因为如果您迁移,它们将被删除。

解决此问题的一种方法是立即加载项目,迭代

ObjectSpace
以打印路径位于项目中的类和模块的
const_source_location

然后,在尚未驱动项目的临时脚本中,实例化 Zeitwerk 加载器,设置其根目录或目录,然后检查

loader.all_expected_cpaths
。此方法为您提供具有给定配置的项目中预期的恒定路径,并且它不会加载代码。因此,即使该项目不是由 Zeitwerk 管理,您也可以运行它。

这两个数据源可以进行比较,并可以为您提供一个指标。

为了使两者趋同,您通常会移动一些东西。您可以在留在项目中的同时执行此操作。只需移动文件,将一项内容放入一个文件中,然后修改

require
require_relative
调用,以便项目仍然有效(假设这些不是公共接口并且您可以更改位置)。

重新组织后,您可以根据需要重命名常量,或使用词形变化使它们保持原样。

© www.soinside.com 2019 - 2024. All rights reserved.