Sorbet
RubyMine は Ruby コードから直接多くの型を推論できます。 たとえば、文字列リテラルを 文字列 として認識し、 String#length が 整数 を返すことを判定します。
型を確実に推論できない場合、RubyMine は Sorbet 型シグネチャーを使用できます。 sig を使用して Ruby コード内でインラインにシグネチャーを宣言するか、 .rbi ファイルに別途保存できます。 RubyMine は両方のソースの型情報を使用して、パラメーター、戻り値、変数、式の型を判定します。
型シグネチャーの追加
Ruby コード内でシグネチャーを直接宣言するには、
T::Sigを拡張し、メソッドの前にsig宣言を追加します:# typed: true module MyFoo class Bar end class Service extend T::Sig sig { params(foo: MyFoo::Bar).returns(MyFoo::Bar) } def process(foo) foo end end end service = MyFoo::Service.new result = service.process(MyFoo::Bar.new)シグネチャーは、
processがMyFoo::Bar型のオブジェクトを受け取り、返すことを宣言します。 そのため、RubyMine はfoo、メソッド呼び出し、resultの型を判定できます。Ruby 実装に Sorbet アノテーションを含めないようにするには、対応する型を別の .rbi ファイルで宣言します:
# typed: true module MyFoo class Bar end class Service sig { params(foo: MyFoo::Bar).returns(MyFoo::Bar) } def process(foo); end end end明示的な
# typed:sigil が必要です。 宣言にextend T::Sigを追加する必要はありません。
型情報を表示する
型を調べる式の中にキャレットを置きます。 次に、 を選択するか、 Ctrl+Shift+P を押します。
キャレット位置で複数の式を使用できる場合、RubyMine は式選択ツールを表示します。 型情報を表示する式を選択します。

次の例は、Ruby コードに直接記述された sig 宣言から取得された型情報を示しています:

次の例は、RBI ファイルに別途保存されたシグネチャーから取得された型情報を示しています:

型が一致することを確認する
メソッド引数または戻り値が Sorbet シグネチャーと一致しない場合、RubyMine は警告します。 次の例では、
Greeting#greetメソッドはユーザーのインスタンスを想定しています:module InspectionExample class User end class Greeting extend T::Sig sig { params(user: User).void } def greet(user) puts "Hello!" end end end greeting = InspectionExample::Greeting.new greeting.greet("Ruby")この呼び出しは、必要な
ユーザーの代わりに文字列を渡します。 RubyMine は"Ruby"をハイライトし、次のように報告します:Expected type 'User', got 'String' instead。これらの警告は、 引数の型が一致していません および 不一致の戻り型 インスペクションを使用して管理できます。

Ruby ファイルと RBI ファイル間を移動する
RubyMine は、Ruby 宣言からその型シグネチャーへ、および RBI シグネチャーから関連する Ruby 宣言への移動を有効化します。
型署名に移動する
Ruby 宣言を選択し、メインメニューの に移動します。

関連する Ruby 宣言に移動する
型シグネチャーを選択し、メインメニューの に移動します。
