Sorbet - невозможно разрешить константу

После запуска srb init и srb tc в новом проекте Rails я установил RSpec, и srb tc теперь имеет много жалоб, включая:

spec/spec_helper.rb:16: Unable to resolve constant RSpec https://srb.help/5002
    16 |RSpec.configure do |config|

Как я могу решить эту ошибку?


person steel    schedule 28.06.2019    source источник


Ответы (2)


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

При установке новых драгоценных камней вам необходимо обновить файлы RBI, что легко сделать с помощью

srb rbi update

Примечание. Если возникает ошибка с No such file or directory @ rb_sysopen - update, измените эту строку в вашем локальном геме, чтобы использовать STDIN.gets вместо Kernel.gets. Существует как минимум пара PR, адресованных проблема, которая на момент этого ответа не объединена.

person steel    schedule 28.06.2019
comment
Это связано с тем, что Sorbet по умолчанию не знает ни о чем, определенном в драгоценном камне. -- Это неправда. Несмотря на то, что Sorbet не знает типы или типизированные сигнатуры методов в геме, они генерируют константы и доступные методы из все драгоценные камни в репозитории и включите их в папку sorbet/gems. - person hdoan; 28.06.2019
comment
@hdoan эта цитата взята непосредственно из документов Sorbet, если вы нажмете первую ссылку в моем ответе. - person steel; 29.06.2019

Я подозреваю, что srb init не заканчивается должным образом. У меня есть модуль RSpec, определенный в sorbet/gems/rspec-core.rbi, и несколько других драгоценных камней rspec rbi.

У вас есть папка sorbet/gems? srb rbi gems вам подходит? Если нет, загляните на канал Slack и спросите об этом там.

Изменить: проблема связана с драгоценными камнями, установленными после начального srb init. Для этого вам следует запустить srb rbi gems, чтобы сгенерировать файл RBI для добавленных драгоценных камней.

person hdoan    schedule 28.06.2019
comment
Я думаю, проблема была в том, что я сначала запустил srb init, srb tc прошел, затем я установил RSpec и должен был обновить rbi с помощью srb rbi update (который также запускает srb rbi gems) - person steel; 29.06.2019
comment
Ok. Это бы объяснило :-) - person hdoan; 29.06.2019