9. 1. 型シグネチャフォーマット(.rbs)
Rubyコードの型情報を示す標準形式
9
class Array[X] < Object
include Enumerable
def []: (Integer) -> X?
def []=: (Integer, X) -> X
def each: () { (X) -> void } -> Array[X]
...
end
組み込みメソッドの.rbsをRuby 3に同梱予定
コントリビューションチャンス!
github.com/ruby/ruby-signature
10. 2. 型シグネチャなし検査+推定
無注釈コードの緩い型検査+型シグネチャ推定
def foo(n)
n + "s"
end
def bar(n)
ary = [1, "S"]
ary[n]
end
foo(gets.to_i)
bar(gets.to_i)
10
型プロファイラ開発中
github.com/mame/ruby-type-profiler
def bar:
(Int) -> (Int | Str)
TypeError: failed to
resolve Integer#+(String)
mruby 向けには mruby-meta-circular も
11. 3. 型シグネチャあり型検査
型シグネチャとコードの整合性を検査する
class Foo
def foo(s)
s + 42
end
def bar(s)
s.gsuub(//,"")
end
end
class Foo
def foo:(Str)->Int
def bar:(Str)->Int
end
11
TypeError!
Str + Int
NoMethod
Error!
Steep github.com/soutaro/steep
Sorbet github.com/sorbet/sorbet
整合?