Slide 17
Slide 17 text
Demo 2: Goodcheck
17
class Goodcheck::Pattern::Token
attr_reader source : untyped
attr_reader case_sensitive : true
attr_reader variables : {}
def initialize : (source: untyped,
variables: {},
case_sensitive: true) -> true
@regexp : Regexp
def regexp : -> Regexp
def test_variables : (untyped) -> bool
def self.expand :
(untyped, untyped, ?depth: Integer) -> Array[Regexp]
def self.regexp_for_type :
(name: untyped, type: :__, scanner: untyped) -> Regexp?
def self.compile_tokens :
(untyped,
{},
case_sensitive: true) -> Regexp
@@TYPES : {}
end
class Goodcheck::Pattern::Token
attr_reader source: String
attr_reader case_sensitive: bool
attr_reader variables: Hash[Symbol, VarPattern]
def initialize: (source: String,
variables: Hash[Symbol, VarPattern],
case_sensitive: bool) -> void
def regexp: -> ::Regexp
def self.expand:
(String, String, ?depth: Integer) -> Array[::Regexp]
def self.regexp_for_type:
(name: Symbol, type: Symbol, scanner: StringScanner) -> ::Regexp
def self.compile_tokens:
(String source,
Hash[Symbol, VarPattern] variables,
case_sensitive: bool) -> void
@@TYPES: Hash[Symbol, ^(String) -> ::Regexp]
end
RBS inferred by Type Profiler Hand-written by Soutaro
Too specfic
Failed to track
the elements
C lib constant
(Lack of RBS)
void is intended
I think
not so bad