Class: Yoda::Model::Environment

Inherits:
Object
  • Object
show all
Defined in:
lib/yoda/model/environment.rb,
lib/yoda/model/environment/with_cache.rb,
lib/yoda/model/environment/value_factory.rb,
lib/yoda/model/environment/instance_accessor.rb,
lib/yoda/model/environment/namespace_members.rb,
lib/yoda/model/environment/accessor_interface.rb,
lib/yoda/model/environment/singleton_accessor.rb,
lib/yoda/model/environment/value_resolve_context.rb

Overview

Environment can resolve constants from type expressions.

Defined Under Namespace

Modules: AccessorInterface, WithCache Classes: InstanceAccessor, NamespaceMembers, SingletonAccessor, ValueFactory, ValueResolveContext

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(registry:, rbs_environment:) ⇒ Environment



39
40
41
42
# File 'lib/yoda/model/environment.rb', line 39

def initialize(registry:, rbs_environment:)
  @registry = registry
  @rbs_environment = rbs_environment
end

Instance Attribute Details

#rbs_environmentRBS::Environment (readonly)



35
36
37
# File 'lib/yoda/model/environment.rb', line 35

def rbs_environment
  @rbs_environment
end

#registryStore::Registry::ProjectRegistry (readonly)



32
33
34
# File 'lib/yoda/model/environment.rb', line 32

def registry
  @registry
end

Class Method Details

.build(registry: nil, rbs_environment: nil) ⇒ Environment



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

def self.build(registry: nil, rbs_environment: nil)
  # TODO: Allow to make registry parameter empty
  registry ||= Yoda::Store::Project.temporal.registry
  rbs_environment ||= RBS::Environment.new
  new(registry: registry, rbs_environment: rbs_environment)
end

.from_project(project) ⇒ Object



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

def self.from_project(project)
  new(registry: project.registry, rbs_environment: project.rbs_environment)
end

Instance Method Details

#pretty_print(pp) ⇒ Object



98
99
100
101
102
103
104
105
106
107
# File 'lib/yoda/model/environment.rb', line 98

def pretty_print(pp)
  pp.object_group(self) do
    pp.breakable
    pp.text "@rbs_environment="
    pp.pp rbs_environment
    pp.comma_breakable
    pp.text "@registry="
    pp.pp registry
  end
end

#resolve_constant(key) ⇒ Store::Objects::Base?



69
70
71
# File 'lib/yoda/model/environment.rb', line 69

def resolve_constant(key)
  Store::Query::FindConstant.new(registry).find(key)&.with_connection(registry: registry)
end

#resolve_rbs_class_decl(type_name) ⇒ Object



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

def resolve_rbs_class_decl(type_name)
  rbs_environment.class_decls[type_name]
end

#resolve_rbs_constant_decl(type_name) ⇒ Object



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

def resolve_rbs_constant_decl(type_name)
  environment.rbs_environment.constant_decls[type_name]&.decl
end

#resolve_rbs_interface_decl(type_name) ⇒ Object



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

def resolve_rbs_interface_decl(type_name)
  rbs_environment.interface_decls[type_name]&.decl
end

#resolve_rbs_type(type_expression) ⇒ RBS::Types::Bases::Base, ...



52
53
54
# File 'lib/yoda/model/environment.rb', line 52

def resolve_rbs_type(type_expression)
  type_expression.to_rbs_type(self)
end

#resolve_rbs_type_name(path) ⇒ RBS::TypeName?

Return RBS::TypeName for the instance of the given path.



59
60
61
62
63
64
65
# File 'lib/yoda/model/environment.rb', line 59

def resolve_rbs_type_name(path)
  scoped_path = ScopedPath.build(path)
  # TODO: ask both registry in lexical priority
  object = resolve_constant(scoped_path)
  return TypeName(object.path).absolute! if object
  rbs_type_name_resolver.resolve(TypeName(scoped_path.path.to_s), context: scoped_path.lexical_context.to_rbs_context)
end

#resolve_singleton_class(key) ⇒ Store::Objects::MetaClassObject?



75
76
77
# File 'lib/yoda/model/environment.rb', line 75

def resolve_singleton_class(key)
  Store::Query::FindMetaClass.new(registry).find(key)&.with_connection(registry: registry)
end

#resolve_value_by_rbs_type(rbs_type) ⇒ Values::Base?



46
47
48
# File 'lib/yoda/model/environment.rb', line 46

def resolve_value_by_rbs_type(rbs_type)
  ValueFactory.from_environment(self).resolve_value_by_rbs_type(rbs_type)
end