Class: RBS::Definition
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Classes:
| |
Inherits: | Object |
Defined in: | lib/rbs/definition.rb |
Class Method Summary
Instance Attribute Summary
- #ancestors readonly
- #class? ⇒ Boolean readonly
- #class_type? ⇒ Boolean readonly
- #class_variables readonly
- #entry readonly
- #instance_type? ⇒ Boolean readonly
- #instance_variables readonly
- #interface? ⇒ Boolean readonly
- #interface_type? ⇒ Boolean readonly
- #methods readonly
- #module? ⇒ Boolean readonly
- #self_type readonly
- #type_name readonly
Instance Method Summary
Constructor Details
.new(type_name:, entry:, self_type:, ancestors:) ⇒ Definition
# File 'lib/rbs/definition.rb', line 282
def initialize(type_name:, entry:, self_type:, ancestors:) case entry when Environment::ClassEntry, Environment::ModuleEntry # ok else unless entry.decl.is_a?(AST::Declarations::Interface) raise "Declaration should be a class, module, or interface: #{type_name}" end end unless self_type.is_a?(Types::ClassSingleton) || self_type.is_a?(Types::Interface) || self_type.is_a?(Types::ClassInstance) raise "self_type should be the type of declaration: #{self_type}" end @type_name = type_name @self_type = self_type @entry = entry @methods = {} @instance_variables = {} @class_variables = {} @ancestors = ancestors end
Instance Attribute Details
#ancestors (readonly)
[ GitHub ]# File 'lib/rbs/definition.rb', line 276
attr_reader :ancestors
#class? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/rbs/definition.rb', line 305
def class? entry.is_a?(Environment::ClassEntry) end
#class_type? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/rbs/definition.rb', line 322
def class_type? self_type.is_a?(Types::ClassSingleton) end
#class_variables (readonly)
[ GitHub ]# File 'lib/rbs/definition.rb', line 280
attr_reader :class_variables
#entry (readonly)
[ GitHub ]# File 'lib/rbs/definition.rb', line 275
attr_reader :entry
#instance_type? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/rbs/definition.rb', line 326
def instance_type? self_type.is_a?(Types::ClassInstance) end
#instance_variables (readonly)
[ GitHub ]# File 'lib/rbs/definition.rb', line 279
attr_reader :instance_variables
#interface? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/rbs/definition.rb', line 313
def interface? case en = entry when Environment::SingleEntry en.decl.is_a?(AST::Declarations::Interface) else false end end
#interface_type? ⇒ Boolean
(readonly)
[ GitHub ]
#methods (readonly)
[ GitHub ]# File 'lib/rbs/definition.rb', line 278
attr_reader :methods
#module? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/rbs/definition.rb', line 309
def module? entry.is_a?(Environment::ModuleEntry) end
#self_type (readonly)
[ GitHub ]# File 'lib/rbs/definition.rb', line 277
attr_reader :self_type
#type_name (readonly)
[ GitHub ]# File 'lib/rbs/definition.rb', line 274
attr_reader :type_name
Instance Method Details
#each_type(&block)
[ GitHub ]# File 'lib/rbs/definition.rb', line 367
def each_type(&block) if block methods.each_value do |method| if method.defined_in == type_name method.method_types.each do |method_type| method_type.each_type(&block) end end end instance_variables.each_value do |var| if var.declared_in == type_name yield var.type end end class_variables.each_value do |var| if var.declared_in == type_name yield var.type end end else enum_for :each_type end end
#map_method_type(&block)
[ GitHub ]# File 'lib/rbs/definition.rb', line 357
def map_method_type(&block) definition = self.class.new(type_name: type_name, self_type: self_type, ancestors: ancestors, entry: entry) definition.methods.merge!(methods.transform_values {|method| method.map_method_type(&block) }) definition.instance_variables.merge!(instance_variables) definition.class_variables.merge!(class_variables) definition end
#sub(s)
[ GitHub ]# File 'lib/rbs/definition.rb', line 347
def sub(s) definition = self.class.new(type_name: type_name, self_type: _ = self_type.sub(s), ancestors: ancestors, entry: entry) definition.methods.merge!(methods.transform_values {|method| method.sub(s) }) definition.instance_variables.merge!(instance_variables.transform_values {|v| v.sub(s) }) definition.class_variables.merge!(class_variables.transform_values {|v| v.sub(s) }) definition end
#type_params
[ GitHub ]# File 'lib/rbs/definition.rb', line 334
def type_params type_params_decl.each.map(&:name) end
#type_params_decl
[ GitHub ]# File 'lib/rbs/definition.rb', line 338
def type_params_decl case en = entry when Environment::ClassEntry, Environment::ModuleEntry en.type_params when Environment::SingleEntry en.decl.type_params end end