Tapioca 没有为 Rails 模型生成正确的 RBI 文件

Tapioca not generating correct RBI file for Rails model

我正在将生成 RBI 文件的方式从 Sorbet 迁移到 Tapioca。但是,我的 Rails 模型的许多 RBI 文件中反复出现问题。在尝试为 has_many 关系生成签名时,RBI 文件似乎出错了。

(注意 - 生成警告的是 RBI 文件本身,而不是模型)

user.rbi 文件中,user.plans has_many 关联的签名是:

    sig { returns(::ActiveRecord::Associations::CollectionProxy[Plan]) }
    def plans; end

当我 运行 srb tc 我看到以下错误:

sorbet/rbi/dsl/user.rbi:110: Method [] does not exist on T.class_of(ActiveRecord::Associations::CollectionProxy) https://srb.help/7003
     110 |    sig { returns(::ActiveRecord::Associations::CollectionProxy[Plan]) }
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Got T.class_of(ActiveRecord::Associations::CollectionProxy) originating from:
    sorbet/rbi/dsl/user.rbi:110:
     110 |    sig { returns(::ActiveRecord::Associations::CollectionProxy[Plan]) }
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  Did you mean:
    sorbet/rbi/gems/activerecord@6.1.4.1.rbi:3238: ActiveRecord::Delegation#[]
    3238 |  def [](*args, &block); end

不幸的是,这是目前木薯粉的粗糙边缘之一。由于 AR 关联代码是从 Shopify Core 中提取出来的,它最终继承了 CollectionProxy 的那个奇怪的通用类型,而没有关联的 RBI 文件来实际定义通用类型。

正如我们所说,我们正在解决此问题,但与此同时,请查看此解决方法:https://github.com/Shopify/tapioca/issues/179#issuecomment-738948320