Как мне включить типы из драгоценного камня с сигмами? - PullRequest
0 голосов
/ 29 февраля 2020

Допустим, у меня есть общий гем под названием thing, который используется во многих других проектах, например example-project. Я хочу использовать сорбет в моем thing геме, чтобы воспользоваться проверкой типов. Как заставить мои проекты-потребители проверять типы в моем геме?

Например, код может выглядеть следующим образом:

вещь драгоценного камня

# typed: strict

require 'sorbet-runtime'

class Thing
  extend T::Sig

  sig { params(phrase: String).returns(String) }
  def say(phrase)
    "Thing said: '#{phrase}'"
  end
end

пример проекта

# typed: strict

require 'thing'

Thing.new.say(1) # Should cause a type error

Что происходит

После запуска srb rbi update я получаю sorbet/rbi/gems/thing.rbi

class Thing
  def say(*args, &blk); end
  extend T::Private::Methods::MethodHooks
  extend T::Private::Methods::SingletonMethodHooks
  extend T::Sig
end

Это не имеет сигнатуры от драгоценного камня, который я ожидаю, и srb tc не вызывает ошибку, которую я ожидаю.

Другие вещи, которые я пробовал

Включая rbi/thing.rbi в gem

Это работает, но я лучше напишу свои sigs inline в коде gem, чем поддержу отдельные файлы rbi. Есть ли какой-нибудь инструмент, который мог бы взять файлы .rb с sigs и вывести файлы .rbi (и, возможно, вырезать sigs из файлов .rb, чтобы их гем можно было распространять без сорбета). Я имею в виду рабочий процесс, похожий на машинопись tsc --declaration, которая начинается с .ts => .d.ts + .js.

1 Ответ

1 голос
/ 03 марта 2020

https://github.com/AaronC81/brain_freeze - это новый проект, целью которого является создание возможности создания файла RBI из файлов RB со встроенными объявлениями. Пока еще рано, но, возможно, стоит попробовать

...