5. TypeProf: A static analyzer for Ruby 3
•TypeProf analyzes non-annotated Ruby code
• guess types of method arguments and a return value
5
class User
def initialize(name)
@name = name
end
end
User.new("John")
Ruby code
class User
def initialize:(String name)->void
end
RBS
TypeProf
6. TypeProf? RBS? Steep? Sorbet?
6
Name What
RBS
TypeProf
Steep
Sorbet
The Ruby official type definition language
A static type analyzer for Ruby
A static type analyzer for Ruby
A static type analyzer for Ruby
7. Comparison between static analyzers
7
TypeProf Steep Sorbet
Type inference Strong Weak Weak
Accuracy Weak Strong Strong
Analysis speed Slow Fast Very fast
RBS support Yes Yes Not yet
IDE support No → Yes Yes Yes
8. RBS: An official language for Ruby types
• Common complaint: "Header files suck"
• TypeProf for IDE may solve this issue
8
class User
def initialize(name)
@name = name
end
end
User.new("John")
user.rb
class User
def initialize:
(String name) -> void
end
user.rbs
10. Today's topic: TypeProf for IDE
10
VSCode TypeProf
code changed
error found
complete "5.ti"
maybe "5.times"
5.ti|
Do you mean:
5.times
1 + "str"
1 + "str"
Is this a bug?
• A VSCode extension for Ruby powered by TypeProf
17. Demo: Summary
•Modern development experience comes to Ruby
without type annotations
•RBS are interspersed to Ruby files
• One possible answer to "Header files suck"
17
19. How to configure TypeProf for IDE
• Use ruby 3.1.0-dev (development version☺)
• Add for your Gemfile
• Configure RBS collection
• if you use gems
• Install VSCode extension→
• search "typeprof"
• Open your folder with VSCode and pray
• More detail: https://github.com/ruby/typeprof/blob/master/doc/ide.md
19
gem "typeprof"
22. Demo: Passing an unknown type
22
The method signature is changed
to accept a new type
Error in the callee side
23. Demo: Manual RBS specification
23
Click here
A prototype RBS is
created
24. Demo: Manual RBS specification (cont'd)
24
Error in the caller side
# means RBS-defined
25. Protips™
•Write a simple test in a file
• TypeProf requires a test to guess method signatures
•Write RBS to fix method signatures (if needed)
• This makes TypeProf analysis faster
• This is also useful to make TypeProf faster
25
27. Release plan
•TypeProf for IDE will be released in Ruby 3.1
• Happy if you could play with it and give us feedback
•Ready for production?
• Experimental, but hopefully works for small programs
• For large code base, please write RBS for gems first!
• https://github.com/ruby/gem_rbs_collection
27
28. Special thanks
•Hideki Miura
•Ruby committers: matz, akr, ko1, soutaro
•Katsuhiro Ueno & Eijiro Sumii
•Stripe team & Shopify team & Jeff Foster
•Yuta Saito (@kateinoigakukun)
• Many improvements of TypeProf for IDE
28
29. Conclusion
•The modern development experience is possible
without full type annotations by TypeProf for IDE
•Ruby 3.1 will bundle TypeProf for IDE
29