Skip to content

Commit 215a923

Browse files
committed
Pass fully qualified name for modules.
- Generate documentation for interfaces, included & extended modules
1 parent 1f6e8fb commit 215a923

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

lib/rdoc/parser/rbs.rb

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ def parse_member(decl:, context:, outer_name: nil)
2626
when ::RBS::AST::Declarations::Constant
2727
context = @top_level.find_class_or_module outer_name.to_s if outer_name
2828
parse_constant_decl(decl: decl, context: context, outer_name: outer_name)
29+
when ::RBS::AST::Declarations::Interface
30+
parse_module_decl(decl: decl, context: context, outer_name: outer_name)
2931
when ::RBS::AST::Members::MethodDefinition
3032
context = @top_level.find_class_or_module outer_name.to_s if outer_name
3133
parse_method_decl(decl: decl, context: context, outer_name: outer_name)
@@ -35,6 +37,12 @@ def parse_member(decl:, context:, outer_name: nil)
3537
when ::RBS::AST::Members::AttrReader, ::RBS::AST::Members::AttrWriter, ::RBS::AST::Members::AttrAccessor
3638
context = @top_level.find_class_or_module outer_name.to_s if outer_name
3739
parse_attr_decl(decl: decl, context: context, outer_name: outer_name)
40+
when ::RBS::AST::Members::Include
41+
context = @top_level.find_class_or_module outer_name.to_s if outer_name
42+
parse_include_decl(decl: decl, context: context, outer_name: outer_name)
43+
when ::RBS::AST::Members::Extend
44+
context = @top_level.find_class_or_module outer_name.to_s if outer_name
45+
parse_extend_decl(decl: decl, context: context, outer_name: outer_name)
3846
end
3947
end
4048

@@ -94,6 +102,38 @@ def parse_attr_decl(decl:, context:, outer_name: nil)
94102
context.add_attribute(attribute)
95103
end
96104

105+
def parse_include_decl(decl:, context:, outer_name: nil)
106+
name = decl.name.to_s
107+
outer_names = outer_name ? outer_name.to_s.split("::") : []
108+
qualified_name = ''
109+
outer_names.each do |namespace|
110+
qualified_name += namespace
111+
if (module_name = @top_level.find_module_named((qualified_name += "::") + name))
112+
name = module_name.full_name
113+
break
114+
end
115+
end
116+
include_decl = RDoc::Include.new(name, nil)
117+
include_decl.comment = construct_comment(context: context, comment: decl.comment.string) if decl.comment
118+
context.add_include(include_decl)
119+
end
120+
121+
def parse_extend_decl(decl:, context:, outer_name: nil)
122+
name = decl.name.to_s
123+
outer_names = outer_name ? outer_name.to_s.split("::") : []
124+
qualified_name = ''
125+
outer_names.each do |namespace|
126+
qualified_name += namespace
127+
if (module_name = @top_level.find_module_named((qualified_name += "::") + name))
128+
name = module_name.full_name
129+
break
130+
end
131+
end
132+
extend_decl = RDoc::Extend.new(name, nil)
133+
exclude_decl.comment = construct_comment(context: context, comment: decl.comment.string) if decl.comment
134+
context.add_extend(extend_decl)
135+
end
136+
97137
private
98138

99139
def construct_comment(context:, comment:)

0 commit comments

Comments
 (0)