Class: RBS::Definition

Inherits:
Object
  • Object
show all
Defined in:
lib/rbs/definition.rb,
sig/definition.rbs

Defined Under Namespace

Classes: InstanceAncestors, Method, SingletonAncestors, Variable

Constant Summary collapse

Ancestor =

Returns:

  • (:Instance,)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(type_name:, entry:, self_type:, ancestors:) ⇒ Definition

Returns a new instance of Definition.

Parameters:



302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
# File 'lib/rbs/definition.rb', line 302

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

#ancestorsInstanceAncestors, ... (readonly)

Returns the value of attribute ancestors.



296
297
298
# File 'lib/rbs/definition.rb', line 296

def ancestors
  @ancestors
end

#class_variablesHash[Symbol, Variable] (readonly)

Returns the value of attribute class_variables.

Returns:



300
301
302
# File 'lib/rbs/definition.rb', line 300

def class_variables
  @class_variables
end

#entrydefinition_entry (readonly)

Returns the value of attribute entry.

Returns:

  • (definition_entry)


295
296
297
# File 'lib/rbs/definition.rb', line 295

def entry
  @entry
end

#instance_variablesHash[Symbol, Variable] (readonly)

Returns the value of attribute instance_variables.

Returns:



299
300
301
# File 'lib/rbs/definition.rb', line 299

def instance_variables
  @instance_variables
end

#methodsHash[Symbol, Method] (readonly)

Returns the value of attribute methods.

Returns:



298
299
300
# File 'lib/rbs/definition.rb', line 298

def methods
  @methods
end

#self_typeself_type (readonly)

Returns the value of attribute self_type.

Returns:



297
298
299
# File 'lib/rbs/definition.rb', line 297

def self_type
  @self_type
end

#type_nameTypeName (readonly)

Returns the value of attribute type_name.

Returns:



294
295
296
# File 'lib/rbs/definition.rb', line 294

def type_name
  @type_name
end

Instance Method Details

#class?Boolean

Returns:

  • (Boolean)


325
326
327
# File 'lib/rbs/definition.rb', line 325

def class?
  entry.is_a?(Environment::ClassEntry)
end

#class_type?Boolean

Returns:

  • (Boolean)


342
343
344
# File 'lib/rbs/definition.rb', line 342

def class_type?
  self_type.is_a?(Types::ClassSingleton)
end

#each_typevoid #each_typeEnumerator[Types::t, void]

Overloads:

  • #each_typevoid

    This method returns an undefined value.

  • #each_typeEnumerator[Types::t, void]

    Returns:

    • (Enumerator[Types::t, void])

Yields:

Yield Parameters:

  • arg0 (Types::t)

Yield Returns:

  • (void)


389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
# File 'lib/rbs/definition.rb', line 389

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

#instance_type?Boolean

Returns:

  • (Boolean)


346
347
348
# File 'lib/rbs/definition.rb', line 346

def instance_type?
  self_type.is_a?(Types::ClassInstance)
end

#interface?Boolean

Returns:

  • (Boolean)


333
334
335
336
337
338
339
340
# File 'lib/rbs/definition.rb', line 333

def interface?
  case en = entry
  when Environment::SingleEntry
    en.decl.is_a?(AST::Declarations::Interface)
  else
    false
  end
end

#interface_type?Boolean

Returns:

  • (Boolean)


350
351
352
# File 'lib/rbs/definition.rb', line 350

def interface_type?
  self_type.is_a?(Types::Interface)
end

#map_method_type {|arg0| ... } ⇒ Definition

Yields:

Yield Parameters:

Yield Returns:

Returns:



379
380
381
382
383
384
385
386
387
# File 'lib/rbs/definition.rb', line 379

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

#module?Boolean

Returns:

  • (Boolean)


329
330
331
# File 'lib/rbs/definition.rb', line 329

def module?
  entry.is_a?(Environment::ModuleEntry)
end

#sub(s) ⇒ Definition

Parameters:

Returns:



367
368
369
370
371
372
373
374
375
376
377
# File 'lib/rbs/definition.rb', line 367

def sub(s)
  return self if s.empty?

  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_paramsArray[Symbol]

Returns:

  • (Array[Symbol])


354
355
356
# File 'lib/rbs/definition.rb', line 354

def type_params
  type_params_decl.each.map(&:name)
end

#type_params_declArray[AST::TypeParam]

Returns:



358
359
360
361
362
363
364
365
# File 'lib/rbs/definition.rb', line 358

def type_params_decl
  case en = entry
  when Environment::ClassEntry, Environment::ModuleEntry
    en.type_params
  when Environment::SingleEntry
    en.decl.type_params
  end
end