Class: Chiridion::Engine::RbsTypeAliasLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/chiridion/engine/rbs_type_alias_loader.rb

Overview

Extracts RBS type alias definitions from generated .rbs files.

Reads type aliases from RBS files (typically in sig/generated/) which have already been properly parsed by RBS::Inline. This is more reliable than re-parsing @rbs! blocks ourselves.

RBS format is straightforward:

module Namespace
  # Description comment
  type name = definition
end

Examples:

loader = RbsTypeAliasLoader.new(true, logger, rbs_dir: "sig/generated")
type_aliases = loader.load
# => { "Archema" => [{ name: "attribute_value", definition: "...", ... }] }

Instance Method Summary collapse

Constructor Details

#initialize(verbose, logger, rbs_dir: nil) ⇒ RbsTypeAliasLoader

Returns a new instance of RbsTypeAliasLoader.



23
24
25
26
27
# File 'lib/chiridion/engine/rbs_type_alias_loader.rb', line 23

def initialize(verbose, logger, rbs_dir: nil)
  @verbose = verbose
  @logger  = logger
  @rbs_dir = rbs_dir
end

Instance Method Details

#loadHash{String => Array<Hash>}

Extract type aliases from generated RBS files.

Returns:

  • (Hash{String => Array<Hash>})

    namespace -> array of type definitions



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/chiridion/engine/rbs_type_alias_loader.rb', line 32

def load
  type_aliases = {}
  return type_aliases unless @rbs_dir && Dir.exist?(@rbs_dir)

  rbs_files = Dir.glob(File.join(@rbs_dir, "**/*.rbs"))
  rbs_files.each do |file|
    parse_rbs_file(file, type_aliases)
  end

  count = type_aliases.values.flatten.size
  @logger.info "Extracted #{count} type aliases from #{rbs_files.size} RBS files" if @verbose && count.positive?
  type_aliases
end