Class: Tapioca::Dsl::Compilers::SorbetView

Inherits:
Compiler
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/tapioca/dsl/compilers/sorbet_view.rb

Constant Summary collapse

ConstantType =
type_member { { fixed: T.class_of(::SorbetView) } }

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.gather_constantsObject



21
22
23
# File 'lib/tapioca/dsl/compilers/sorbet_view.rb', line 21

def gather_constants
  [::SorbetView]
end

Instance Method Details

#decorateObject



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/tapioca/dsl/compilers/sorbet_view.rb', line 27

def decorate
  @module_cache = T.let({}, T::Hash[String, RBI::Scope])
  @layout_contributions = T.let({}, T::Hash[String, T::Array[T::Hash[Symbol, T.untyped]]])
  @project = T.let(SrbLens::Project.load_or_index(Dir.pwd), T.untyped)

  # Ensure all controllers are loaded
  Rails.application.eager_load! if defined?(Rails) && Rails.respond_to?(:application)

  controllers = ObjectSpace.each_object(Class).select do |klass|
    klass < ::ActionController::Base && !klass.abstract?
  rescue StandardError
    false
  end

  # Deterministic order: ObjectSpace has no order guarantee, and "last controller wins" for
  # shared layout classes made RBI diffs unstable. Sort by constant name; anonymous classes
  # fall back to object_id.
  controllers = controllers.sort_by { |c| controller_sort_key(c) }

  controllers.each do |controller|
    process_controller(controller)
  end

  emit_merged_layout_includes

  generate_ivar_mapping(controllers)
  process_components
  compile_all_templates
end