diff --git a/docs/data_and_struct.md b/docs/data_and_struct.md index 2de695d96..f5ec0ace8 100644 --- a/docs/data_and_struct.md +++ b/docs/data_and_struct.md @@ -55,3 +55,32 @@ Measure.ancestors #=> [Measure, #, Data, ...] ``` [^1]: [Shannon Skipper](https://github.com/havenwood) told me it in Discord + +## Generate prototype for `Data` and `Struct` + +RBS prototypes for classes using `Data` and `Struct` can be generated by `rbs prototype runtime`. + +```rb +# t.rb +class Measure < Data.define(:amount, :unit) +end +``` + +``` +$ bundle exec rbs prototype runtime -R t.rb Measure +class Measure < ::Data + def self.new: (untyped amount, untyped unit) -> instance + | (amount: untyped, unit: untyped) -> instance + + def self.[]: (untyped amount, untyped unit) -> instance + | (amount: untyped, unit: untyped) -> instance + + def self.members: () -> [ :amount, :unit ] + + def members: () -> [ :amount, :unit ] + + attr_reader amount: untyped + + attr_reader unit: untyped +end +```