module RDoc::RbsHelper
Public Class Methods
Source
# 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 key = member.singleton? ? "#{class_name}.#{member.name}" : "#{class_name}##{member.name}" sigs = member.overloads.map { |o| o.method_type.to_s } signatures[key] = sigs.join("\n") when RBS::AST::Members::AttrReader, RBS::AST::Members::AttrWriter, RBS::AST::Members::AttrAccessor key = "#{class_name}##{member.name}" signatures[key] = member.type.to_s end end end end signatures end
Loads RBS signatures from the given directories. Returns a Hash mapping “ClassName#method_name” => “type sig string”.
Source
# File lib/rdoc/rbs_helper.rb, line 82 def signature_to_html(lines, lookup:, from_path:) lines.map { |line| link_type_names_in_line(line, lookup, from_path).gsub('->', '→') }.join("\n") 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 +→+.
Source
# 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 method type signature.
Source
# 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
Returns true if sig is a valid RBS type signature.