From 66f968c9de89904a645a4e1587081974a119ef7e Mon Sep 17 00:00:00 2001 From: Sushanth Sathesh Rao <57192414+raosush@users.noreply.github.com> Date: Tue, 6 Sep 2022 14:26:49 +0530 Subject: [PATCH] RDoc: Add support for generics in RDoc --- lib/rdoc_plugin/parser.rb | 17 +++++++++++++++-- stdlib/rdoc/0/rdoc.rbs | 23 +++++++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/lib/rdoc_plugin/parser.rb b/lib/rdoc_plugin/parser.rb index 4f02e04e4..ee267d3d6 100644 --- a/lib/rdoc_plugin/parser.rb +++ b/lib/rdoc_plugin/parser.rb @@ -52,14 +52,27 @@ def parse_member(decl:, context:, outer_name: nil) def parse_class_decl(decl:, context:, outer_name: nil) full_name = fully_qualified_name(outer_name: outer_name, decl: decl) - klass = context.add_class(RDoc::NormalClass, full_name.to_s, decl.super_class&.name&.to_s || "::Object") + klass = context.add_class(RDoc::NormalClass, full_name.to_s, decl.super_class&.name&.to_s || "::Object", + decl.type_params.map do |type_param| + RDoc::TypeParameter.new(type_param.name.to_s, + type_param.variance, + type_param.unchecked?, + type_param.upper_bound&.name&.to_s) + end + ) klass.add_comment(construct_comment(context: context, comment: comment_string(decl)), context) if decl.comment decl.members.each { |member| parse_member(decl: member, context: context, outer_name: full_name) } end def parse_module_decl(decl:, context:, outer_name: nil) full_name = fully_qualified_name(outer_name: outer_name, decl: _ = decl) - kmodule = context.add_module(RDoc::NormalModule, full_name.to_s) + kmodule = context.add_module(RDoc::NormalModule, full_name.to_s, + decl.type_params.map do |type_param| + RDoc::TypeParameter.new(type_param.name.to_s, + type_param.variance, + type_param.unchecked?, + type_param.upper_bound&.name&.to_s) + end) kmodule.add_comment(construct_comment(context: context, comment: comment_string(decl)), context) if decl.comment decl.members.each { |member| parse_member(decl: member, context: context, outer_name: full_name) } end diff --git a/stdlib/rdoc/0/rdoc.rbs b/stdlib/rdoc/0/rdoc.rbs index 73ec3458d..89f360cff 100644 --- a/stdlib/rdoc/0/rdoc.rbs +++ b/stdlib/rdoc/0/rdoc.rbs @@ -228,7 +228,7 @@ module RDoc # later sees `class Container`. `add_class` automatically upgrades `given_name` # to a class in this case. # - def add_class: (class_types class_type, ::String given_name, ?::String superclass) -> (RDoc::NormalClass | RDoc::SingleClass) + def add_class: (class_types class_type, ::String given_name, ?::String superclass, ?Array[RDoc::TypeParameter]) -> (RDoc::NormalClass | RDoc::SingleClass) # # RDoc statistics collector which prints a summary and report of a project's # documentation totals.