Module: RDoc::RbsHelper
- Defined in:
- lib/rdoc/rbs_helper.rb
Class Method Summary collapse
-
.load_signatures(*dirs) ⇒ Object
Loads RBS signatures from the given directories.
-
.signature_to_html(lines, lookup:, from_path:) ⇒ Object
Converts type signature lines to HTML with type names linked to their documentation pages.
-
.valid_method_type?(sig) ⇒ Boolean
Returns true if
sigis a valid RBS method type signature. -
.valid_type?(sig) ⇒ Boolean
Returns true if
sigis a valid RBS type signature.
Class Method Details
.load_signatures(*dirs) ⇒ Object
Loads RBS signatures from the given directories. Returns a Hash mapping “ClassName#method_name” => [“type sig string”, …].
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# 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 |
.signature_to_html(lines, lookup:, from_path:) ⇒ Object
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 →.
83 84 85 86 87 |
# 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 |
.valid_method_type?(sig) ⇒ Boolean
Returns true if sig is a valid RBS method type signature.
20 21 22 23 24 25 |
# 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 |
.valid_type?(sig) ⇒ Boolean
Returns true if sig is a valid RBS type signature.
30 31 32 33 34 35 |
# 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 |