Обработка конфликтов между RBI-файлами типа «sorbet-typed» и «gems» - PullRequest
0 голосов
/ 06 января 2020

Я установил Sorbet в кодовой базе Rails и вижу много случаев следующей ошибки:

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

Чтобы исключить ошибки типа go, мне нужно либо изменить typed: true на typed: false в одном из файлов (за исключением некоторых типов, которые не перекрываются), или мне нужно вручную go ввести и удалить / закомментировать перекрывающиеся методы (что по времени потребляет и хрупкий) типизированное определение. "

Опять же, это в кодовой базе Rails, но я думаю, что это могло бы существовать для любого конфликта между генерируемыми вручную и автоматически генерируемыми RBI.

1 Ответ

0 голосов
/ 06 января 2020

Я написал некоторые из этих методов, к сожалению, поскольку "Shapes" (экспериментальная реализация Sorbet с типизируемыми хэшами) не позволяет использовать необязательные ключи, их нельзя использовать для точного представления этих методов. В результате, множество методов, особенно сложных в Rails, различаются между автоматически генерируемыми файлами сорбета и сорбетом.

Я только что использовал srb rbi suggest-typed, чтобы автоматически установить типизацию файлы в моем репо, и он просто помечает их как ложные. Насколько я могу судить, информация о типах из sorbet-typed по-прежнему используется, даже если файл помечен как ложный (хотя мне, вероятно, следует изучить это подробнее, чтобы убедиться, что это так).

К сожалению, я На данный момент у меня нет лучшего решения этой проблемы, но мне кажется, что достаточно просто использовать тип с подсказкой.

...