module RDoc::RbsHelper

Public Class Methods

Loads RBS signatures from the given directories. Returns a Hash mapping “ClassName#method_name” => [“type sig string”, …].

# File lib/rdoc/rbs_helper.rb, line 41
def load_signatures(*dirs)
  loader = RBS::EnvironmentLoader.new
  dirs.each { |dir| loader.add(path: Pathname(dir)) }

  env = RBS::Environment.new
  loader.load(env: env)

  signatures = {}

  env.class_decls.each do |type_name, entry|
    class_name = type_name.to_s.delete_prefix('::')

    entry.each_decl do |decl|
      decl.members.each do |member|
        case member
        when RBS::AST::Members::MethodDefinition
          sigs = member.overloads.map { |o| o.method_type.to_s }
          method_keys_for(class_name, member).each do |key|
            signatures[key] ||= sigs
          end
        when RBS::AST::Members::AttrReader, RBS::AST::Members::AttrWriter, RBS::AST::Members::AttrAccessor
          key = member.kind == :singleton ? "#{class_name}.#{member.name}" : "#{class_name}##{member.name}"
          signatures[key] ||= [member.type.to_s]
        end
      end
    end
  end

  signatures
end

Converts type signature lines to HTML with type names linked to their documentation pages. Uses the RBS parser to extract type name locations precisely.

lines is an Array of signature line strings. lookup is a Hash mapping type names to their doc paths. from_path is the current page path for generating relative URLs.

Returns escaped HTML with -> replaced by +→+.

# File lib/rdoc/rbs_helper.rb, line 83
def signature_to_html(lines, lookup:, from_path:)
  lines.map { |line|
    link_type_names_in_line(line, lookup, from_path).gsub('->', '→')
  }.join("\n")
end

Returns true if sig is a valid RBS method type signature.

# File lib/rdoc/rbs_helper.rb, line 20
def valid_method_type?(sig)
  RBS::Parser.parse_method_type(sig, require_eof: true)
  true
rescue RBS::ParsingError
  false
end

Returns true if sig is a valid RBS type signature.

# File lib/rdoc/rbs_helper.rb, line 30
def valid_type?(sig)
  RBS::Parser.parse_type(sig, require_eof: true)
  true
rescue RBS::ParsingError
  false
end