处理 "sorbet-typed" 和 "gems" RBI 文件之间的冲突
Handling conflicts between "sorbet-typed" and "gems" RBI files
我已经在 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
(不包括一些 不需要的类型 重叠),或者我必须手动进入并 delete/comment 出重叠方法(这既耗时又脆弱)。
我想知道是否有某种编程解决方案,我可以说 "in case of conflict, use the method with higher arity" 或 "always choose the sorbet-typed definition."
同样,这是在 Rails 代码库中,但我想这将存在于手动生成和自动生成的 RBI 之间的任何冲突。
我写了其中一些方法,不幸的是,由于 "Shapes"(Sorbet 的可键入哈希的实验性实现)不允许可选键,它们不能用于准确地表示这些方法。因此,很多方法的多样性——尤其是 Rails 中的复杂内容——在 sorbet 类型的文件和 sorbet 的自动生成文件之间是不同的。
我刚刚一直在使用 srb rbi suggest-typed
自动设置我的存储库中文件的类型,它只是将这些标记为错误。据我所知,即使文件被标记为 false,来自 sorbet-typed 的类型信息仍然被使用(尽管我可能应该进一步研究以验证情况是否如此)。
不幸的是,我目前没有更好的解决方案,但到目前为止,仅使用 suggest-typed 似乎就足够了。
我已经在 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
(不包括一些 不需要的类型 重叠),或者我必须手动进入并 delete/comment 出重叠方法(这既耗时又脆弱)。
我想知道是否有某种编程解决方案,我可以说 "in case of conflict, use the method with higher arity" 或 "always choose the sorbet-typed definition."
同样,这是在 Rails 代码库中,但我想这将存在于手动生成和自动生成的 RBI 之间的任何冲突。
我写了其中一些方法,不幸的是,由于 "Shapes"(Sorbet 的可键入哈希的实验性实现)不允许可选键,它们不能用于准确地表示这些方法。因此,很多方法的多样性——尤其是 Rails 中的复杂内容——在 sorbet 类型的文件和 sorbet 的自动生成文件之间是不同的。
我刚刚一直在使用 srb rbi suggest-typed
自动设置我的存储库中文件的类型,它只是将这些标记为错误。据我所知,即使文件被标记为 false,来自 sorbet-typed 的类型信息仍然被使用(尽管我可能应该进一步研究以验证情况是否如此)。
不幸的是,我目前没有更好的解决方案,但到目前为止,仅使用 suggest-typed 似乎就足够了。