Class: Yoda::Model::Environment::InstanceAccessor

Inherits:
Object
  • Object
show all
Includes:
AccessorInterface, WithCache
Defined in:
lib/yoda/model/environment/instance_accessor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from WithCache

#with_cache

Constructor Details

#initialize(environment:, path:, type_args:) ⇒ InstanceAccessor

Returns a new instance of InstanceAccessor.

Parameters:

  • environment (Environment)
  • path (String, Path)
  • type_args (Array<RBS::Types::t>)


23
24
25
26
27
# File 'lib/yoda/model/environment/instance_accessor.rb', line 23

def initialize(environment:, path:, type_args:)
  @environment = environment
  @path = path
  @type_args = type_args
end

Instance Attribute Details

#environmentEnvironment (readonly)

Returns:



12
13
14
# File 'lib/yoda/model/environment/instance_accessor.rb', line 12

def environment
  @environment
end

#pathString, Path (readonly)

Returns:



15
16
17
# File 'lib/yoda/model/environment/instance_accessor.rb', line 15

def path
  @path
end

#type_argsRBS::Types::t (readonly)

Returns:

  • (RBS::Types::t)


18
19
20
# File 'lib/yoda/model/environment/instance_accessor.rb', line 18

def type_args
  @type_args
end

Instance Method Details

#class_objectStore::Objects::NamespaceObject::Connected?



35
36
37
38
39
40
# File 'lib/yoda/model/environment/instance_accessor.rb', line 35

def class_object
  with_cache(:class_object) do
    object = environment.resolve_constant(path)&.with_connection(registry: environment.registry)
    object&.namespace? ? object : nil
  end
end

#instance_accessornil

Returns:

  • (nil)


54
55
56
# File 'lib/yoda/model/environment/instance_accessor.rb', line 54

def instance_accessor
  nil
end

#membersNamespaceMembers

Returns:



30
31
32
# File 'lib/yoda/model/environment/instance_accessor.rb', line 30

def members
  @members ||= NamespaceMembers.new(accessor: self, environment: environment)
end

#rbs_class_declObject

Parameters:

  • return (RBS::AST::Declarations::Class, nil)


79
80
81
82
83
# File 'lib/yoda/model/environment/instance_accessor.rb', line 79

def rbs_class_decl
  with_cache(:rbs_class_decl) do
    environment.resolve_rbs_class_decl(type_name)
  end
end

#rbs_definitionRBS::Definition?

Returns:

  • (RBS::Definition, nil)


64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/yoda/model/environment/instance_accessor.rb', line 64

def rbs_definition
  with_cache(:rbs_definition) do
    if rbs_class_decl
      builder = RBS::DefinitionBuilder.new(env: environment.rbs_environment)
      builder.build_instance(type_name).sub(substitution)
    elsif rbs_interface_decl
      builder = RBS::DefinitionBuilder.new(env: environment.rbs_environment)
      builder.build_interface(type_name).sub(substitution)
    else
      nil
    end
  end
end

#rbs_definition_builderObject



97
98
99
# File 'lib/yoda/model/environment/instance_accessor.rb', line 97

def rbs_definition_builder
  @rbs_definition_builder ||= RBS::DefinitionBuilder.new(env: environment.rbs_environment)
end

#rbs_interface_declObject

Parameters:

  • return (RBS::AST::Declarations::Interface, nil)


86
87
88
89
90
# File 'lib/yoda/model/environment/instance_accessor.rb', line 86

def rbs_interface_decl
  with_cache(:rbs_interface_decl) do
    environment.resolve_rbs_interface_decl(type_name)
  end
end

#self_objectStore::Objects::NamespaceObject::Connected?



43
44
45
46
47
48
49
50
51
# File 'lib/yoda/model/environment/instance_accessor.rb', line 43

def self_object
  with_cache(:self_object) do
    if class_object&.kind == :meta_class
      class_object.instance
    else
      nil
    end
  end
end

#singleton_accessorSingletonAccessor

Returns:



59
60
61
# File 'lib/yoda/model/environment/instance_accessor.rb', line 59

def singleton_accessor
  SingletonAccessor.new(self)
end

#type_nameRBS::TypeName

Returns:

  • (RBS::TypeName)


93
94
95
# File 'lib/yoda/model/environment/instance_accessor.rb', line 93

def type_name
  @type_name ||= TypeName(path.to_s)
end