class RBS::Template::Type

属性

c_constant_name[R]

存储指向生成的类的 Ruby VALUE 的 C 常量的名称。例如,‘RBS_AST_Declarations_TypeAlias`

c_function_name[R]

预先存在的 C 函数的名称,该函数构造此类型的新 Ruby 对象。例如, ‘rbs_ast_declarations_typealias_new`

c_parent_constant_name[R]

‘c_constant_name` 嵌套在其中的 C 常量的名称。 例如,`RBS_AST_Declarations`

c_type_name[R]

此类型的自动生成的 C 结构体的名称,例如 ‘rbs_ast_declarations_typealias_t`

fields[R]
ruby_class_name[R]

此类型的自动生成的 Ruby 类的名称,例如 ‘TypeAlias`

ruby_full_name[R]

此类型的自动生成的 Ruby 类的完全限定名称,例如 ‘RBS::AST::Declarations::TypeAlias`

公共类方法

new(yaml) 点击以切换源代码
# File rbs-3.8.0/templates/template.rb, line 46
def initialize(yaml)
  @ruby_full_name = yaml["name"]
  @ruby_class_name = @ruby_full_name[/[^:]+\z/] # demodulize-like
  name = @ruby_full_name.gsub("::", "_")
  @c_function_name = name.gsub(/(^)?(_)?([A-Z](?:[A-Z]*(?=[A-Z_])|[a-z0-9]*))/) { ($1 || $2 || "_") + $3.downcase } # underscore-like
  @c_function_name.gsub!(/^rbs_types_/, 'rbs_')
  @c_function_name.gsub!(/^rbs_ast_declarations_/, 'rbs_ast_decl_')
  @c_constant_name = @ruby_full_name.gsub("::", "_")
  @c_parent_constant_name = @ruby_full_name.split("::")[0..-2].join("::").gsub("::", "_")

  @fields = yaml.fetch("fields", []).map { |field| Field.new(field) }.freeze
end