Class: Tapioca::Dsl::Compilers::PhlexKit

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

Overview

Generates RBI files for Phlex::Kit modules.

When a module ‘extend Phlex::Kit`, Phlex installs an instance method and a singleton method for every component constant added under that module (see `Phlex::Kit#const_added`). Those methods render the component and are invoked from inside other components like `Card { … }` or `Button(label: “Save”)`.

Sorbet only sees ‘Phlex::Kit#method_missing` and reports such calls as unknown methods. This compiler emits a typed RBI entry for each registered component so call sites type-check.

Constant Summary collapse

ConstantType =
type_member { { fixed: T::Module[T.anything] } }

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.gather_constantsObject



36
37
38
39
40
# File 'lib/tapioca/dsl/compilers/phlex_kit.rb', line 36

def self.gather_constants
  all_modules.select do |m|
    !m.is_a?(Class) && m.singleton_class < ::Phlex::Kit
  end
end

Instance Method Details

#decorateObject



27
28
29
30
31
32
33
# File 'lib/tapioca/dsl/compilers/phlex_kit.rb', line 27

def decorate
  components = component_constants
  return if components.empty?

  generate_kit_methods(components)
  generate_component_includes(components)
end