Given a class that implement Enumerable:
class Something
include Enumerable
# @yield [key, value]
# @yieldparam [Integer] key
# @yieldparam [String] value
# @return void
def each
yield 123
end
end
The generated output is:
class Something
include Enumerable
# _@return_ — void
def each: () ?{ (Integer key, String value) -> void } -> untyped
end
If I then run steep check on this I get errors:
# Type checking files:
............................................F..............F.......
src/enum.rb:1:0: [error] UnexpectedError: sig/example.rbs:1:0...6:3: ::Enumerable expects parameters [Elem], but given args []
│ Diagnostic ID: Ruby::UnexpectedError
│
└ class Something
~~~~~~~~~~~~~~~
sig/example.rbs:1:0: [error] Type `::Enumerable` is generic but used as a non generic type
│ Diagnostic ID: RBS::InvalidTypeApplication
│
└ class Something
~~~~~~~~~~~~~~~
Detected 2 problems from 2 files
If I alter the RBS to include a param for the Enumerable:
class Something
include Enumerable[untyped]
# _@return_ — void
def each: () ?{ (Integer key, String value) -> void } -> untyped
end
Then it passes:
C:\Users\Thomas\SourceTree\sord-test>steep check
# Type checking files:
...................................................................
No type error detected. 🍵
I'm not actually 100% sure what param to give Enumerable in the case of each yielding key and value params. hence the untyped in this case. But given that you have a collection object that return String objects, then I presume it should be include Enumerable[String]. (?)
Is there a way I can make sord generate an RBS that will not cause an error in steep?
Given a class that implement Enumerable:
The generated output is:
If I then run
steep checkon this I get errors:If I alter the RBS to include a param for the
Enumerable:Then it passes:
I'm not actually 100% sure what param to give Enumerable in the case of each yielding key and value params. hence the
untypedin this case. But given that you have a collection object that returnStringobjects, then I presume it should beinclude Enumerable[String]. (?)Is there a way I can make
sordgenerate an RBS that will not cause an error insteep?