【问题标题】:Handling conflicts between "sorbet-typed" and "gems" RBI files处理“sorbet-typed”和“gems”RBI 文件之间的冲突
【发布时间】:2020-01-07 03:46:24
【问题描述】:

我已经在 Rails 代码库中安装了 Sorbet,并且看到许多出现以下错误的实例:

sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi:958:
Method ActiveRecord::ConnectionAdapters::TableDefinition#column redefined without matching argument count. Expected: 3, got: 5 https://srb.help/4010
     958 |  def column(
     959 |    name,
     960 |    type,
     961 |    index: nil,
     962 |    default: nil,
     963 |    **options
     964 |  ); end
    sorbet/rbi/gems/activerecord.rbi:5256: Previous definition
    5256 |  def column(name, type, **options); end

要消除类型错误,我要么必须将其中一个文件中的 typed: true 更改为 typed: false(不包括一些重叠的类型),要么我必须手动进入并删除/注释掉重叠的方法(这既耗时又脆弱)。

我想知道是否有某种程序化解决方案,我可以说“如果发生冲突,请使用具有更高数量的方法”或“始终选择 sorbet 类型的定义。”

这又是在 Rails 代码库中,但我想这将存在于手动生成和自动生成的 RBI 之间的任何冲突。

【问题讨论】:

    标签: sorbet


    【解决方案1】:

    我写了其中一些方法,不幸的是,由于“Shapes”(Sorbet 的可键入哈希的实验性实现)不允许可选键,它们不能用于准确地表示这些方法。因此,许多方法的数量——尤其是 Rails 中的复杂内容——在 sorbet 类型文件和 sorbet 自动生成的文件之间是不同的。

    我刚刚使用srb rbi suggest-typed 自动设置我的repo 中文件的类型,它只是将这些标记为假。据我所知,即使文件被标记为 false,仍然使用来自 sorbet-typed 的类型信息(尽管我可能应该进一步研究以确认是这种情况)。

    不幸的是,目前我没有更好的解决方案,但到目前为止,仅使用建议类型似乎就足够了。

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 1970-01-01
      • 2022-06-15
      • 2013-08-15
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      相关资源
      最近更新 更多