rdoc 6.3.4.1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +195 -0
  3. data/History.rdoc +65 -63
  4. data/LEGAL.rdoc +7 -1
  5. data/LICENSE.rdoc +6 -0
  6. data/README.md +236 -0
  7. data/RI.md +842 -0
  8. data/TODO.rdoc +8 -7
  9. data/doc/markup_reference/markdown.md +659 -0
  10. data/doc/markup_reference/rdoc.rdoc +1169 -0
  11. data/exe/rdoc +0 -1
  12. data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -18
  13. data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +50 -24
  14. data/lib/rdoc/{attr.rb → code_object/attr.rb} +16 -14
  15. data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +225 -58
  16. data/lib/rdoc/{constant.rb → code_object/constant.rb} +44 -10
  17. data/lib/rdoc/code_object/context/section.rb +182 -0
  18. data/lib/rdoc/{context.rb → code_object/context.rb} +78 -106
  19. data/lib/rdoc/{extend.rb → code_object/extend.rb} +0 -1
  20. data/lib/rdoc/{include.rb → code_object/include.rb} +0 -1
  21. data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +46 -48
  22. data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +6 -4
  23. data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +2 -3
  24. data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
  25. data/lib/rdoc/{require.rb → code_object/require.rb} +1 -2
  26. data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +5 -1
  27. data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +60 -63
  28. data/lib/rdoc/code_object.rb +11 -39
  29. data/lib/rdoc/code_objects.rb +1 -2
  30. data/lib/rdoc/comment.rb +202 -99
  31. data/lib/rdoc/cross_reference.rb +75 -62
  32. data/lib/rdoc/encoding.rb +8 -24
  33. data/lib/rdoc/erb_partial.rb +1 -2
  34. data/lib/rdoc/erbio.rb +3 -8
  35. data/lib/rdoc/generator/aliki.rb +200 -0
  36. data/lib/rdoc/generator/darkfish.rb +156 -122
  37. data/lib/rdoc/generator/json_index.rb +8 -24
  38. data/lib/rdoc/generator/markup.rb +70 -34
  39. data/lib/rdoc/generator/pot/message_extractor.rb +7 -7
  40. data/lib/rdoc/generator/pot/po.rb +1 -1
  41. data/lib/rdoc/generator/pot/po_entry.rb +8 -8
  42. data/lib/rdoc/generator/pot.rb +1 -5
  43. data/lib/rdoc/generator/ri.rb +1 -2
  44. data/lib/rdoc/generator/template/aliki/DESIGN.md +536 -0
  45. data/lib/rdoc/generator/template/aliki/_aside_toc.rhtml +8 -0
  46. data/lib/rdoc/generator/template/aliki/_footer.rhtml +23 -0
  47. data/lib/rdoc/generator/template/aliki/_head.rhtml +163 -0
  48. data/lib/rdoc/generator/template/aliki/_header.rhtml +56 -0
  49. data/lib/rdoc/generator/template/aliki/_icons.rhtml +208 -0
  50. data/lib/rdoc/generator/template/aliki/_sidebar_ancestors.rhtml +16 -0
  51. data/lib/rdoc/generator/template/aliki/_sidebar_classes.rhtml +15 -0
  52. data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +27 -0
  53. data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +27 -0
  54. data/lib/rdoc/generator/template/aliki/_sidebar_installed.rhtml +16 -0
  55. data/lib/rdoc/generator/template/aliki/_sidebar_methods.rhtml +41 -0
  56. data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +67 -0
  57. data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +15 -0
  58. data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +21 -0
  59. data/lib/rdoc/generator/template/aliki/_sidebar_toggle.rhtml +3 -0
  60. data/lib/rdoc/generator/template/aliki/class.rhtml +230 -0
  61. data/lib/rdoc/generator/template/aliki/css/rdoc.css +2181 -0
  62. data/lib/rdoc/generator/template/aliki/index.rhtml +22 -0
  63. data/lib/rdoc/generator/template/aliki/js/aliki.js +513 -0
  64. data/lib/rdoc/generator/template/aliki/js/bash_highlighter.js +167 -0
  65. data/lib/rdoc/generator/template/aliki/js/c_highlighter.js +299 -0
  66. data/lib/rdoc/generator/template/aliki/js/search_controller.js +129 -0
  67. data/lib/rdoc/generator/template/aliki/js/search_navigation.js +105 -0
  68. data/lib/rdoc/generator/template/aliki/js/search_ranker.js +239 -0
  69. data/lib/rdoc/generator/template/aliki/js/theme-toggle.js +112 -0
  70. data/lib/rdoc/generator/template/aliki/page.rhtml +18 -0
  71. data/lib/rdoc/generator/template/aliki/servlet_not_found.rhtml +14 -0
  72. data/lib/rdoc/generator/template/aliki/servlet_root.rhtml +65 -0
  73. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +3 -3
  74. data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -14
  75. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
  76. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +11 -9
  77. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +11 -9
  78. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +7 -6
  79. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +20 -11
  80. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +25 -5
  81. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
  82. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +2 -1
  83. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  84. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +28 -7
  85. data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
  86. data/lib/rdoc/generator/template/darkfish/class.rhtml +138 -90
  87. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +420 -358
  88. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  89. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  90. data/lib/rdoc/generator/template/darkfish/index.rhtml +14 -12
  91. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +59 -3
  92. data/lib/rdoc/generator/template/darkfish/js/search.js +15 -5
  93. data/lib/rdoc/generator/template/darkfish/page.rhtml +7 -6
  94. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +12 -9
  95. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +24 -21
  96. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +35 -21
  97. data/lib/rdoc/generator/template/json_index/js/navigation.js +8 -8
  98. data/lib/rdoc/generator/template/json_index/js/searcher.js +48 -6
  99. data/lib/rdoc/generator.rb +6 -5
  100. data/lib/rdoc/i18n/text.rb +3 -3
  101. data/lib/rdoc/i18n.rb +1 -1
  102. data/lib/rdoc/known_classes.rb +5 -4
  103. data/lib/rdoc/markdown/entities.rb +0 -1
  104. data/lib/rdoc/markdown/literals.kpeg +0 -2
  105. data/lib/rdoc/markdown/literals.rb +0 -1
  106. data/lib/rdoc/markdown.kpeg +140 -62
  107. data/lib/rdoc/markdown.rb +1015 -873
  108. data/lib/rdoc/markup/blank_line.rb +25 -24
  109. data/lib/rdoc/markup/block_quote.rb +1 -2
  110. data/lib/rdoc/markup/document.rb +10 -11
  111. data/lib/rdoc/markup/element.rb +21 -0
  112. data/lib/rdoc/markup/formatter.rb +134 -115
  113. data/lib/rdoc/markup/hard_break.rb +30 -28
  114. data/lib/rdoc/markup/heading.rb +163 -72
  115. data/lib/rdoc/markup/include.rb +3 -4
  116. data/lib/rdoc/markup/indented_paragraph.rb +4 -5
  117. data/lib/rdoc/markup/inline_parser.rb +312 -0
  118. data/lib/rdoc/markup/list.rb +6 -7
  119. data/lib/rdoc/markup/list_item.rb +6 -7
  120. data/lib/rdoc/markup/paragraph.rb +2 -3
  121. data/lib/rdoc/markup/parser.rb +29 -19
  122. data/lib/rdoc/markup/pre_process.rb +39 -18
  123. data/lib/rdoc/markup/raw.rb +52 -56
  124. data/lib/rdoc/markup/rule.rb +2 -3
  125. data/lib/rdoc/markup/table.rb +49 -32
  126. data/lib/rdoc/markup/to_ansi.rb +58 -8
  127. data/lib/rdoc/markup/to_bs.rb +47 -38
  128. data/lib/rdoc/markup/to_html.rb +343 -105
  129. data/lib/rdoc/markup/to_html_crossref.rb +143 -58
  130. data/lib/rdoc/markup/to_html_snippet.rb +78 -76
  131. data/lib/rdoc/markup/to_joined_paragraph.rb +3 -9
  132. data/lib/rdoc/markup/to_label.rb +34 -25
  133. data/lib/rdoc/markup/to_markdown.rb +74 -51
  134. data/lib/rdoc/markup/to_rdoc.rb +141 -82
  135. data/lib/rdoc/markup/to_table_of_contents.rb +4 -5
  136. data/lib/rdoc/markup/to_test.rb +10 -3
  137. data/lib/rdoc/markup/to_tt_only.rb +17 -31
  138. data/lib/rdoc/markup/verbatim.rb +5 -6
  139. data/lib/rdoc/markup.rb +59 -707
  140. data/lib/rdoc/options.rb +228 -101
  141. data/lib/rdoc/parser/c.rb +186 -184
  142. data/lib/rdoc/parser/changelog.rb +57 -13
  143. data/lib/rdoc/parser/markdown.rb +0 -2
  144. data/lib/rdoc/parser/rbs.rb +275 -0
  145. data/lib/rdoc/parser/rd.rb +0 -1
  146. data/lib/rdoc/parser/ruby.rb +963 -2024
  147. data/lib/rdoc/parser/ruby_colorizer.rb +253 -0
  148. data/lib/rdoc/parser/simple.rb +6 -23
  149. data/lib/rdoc/parser/text.rb +0 -1
  150. data/lib/rdoc/parser.rb +35 -14
  151. data/lib/rdoc/rbs_helper.rb +186 -0
  152. data/lib/rdoc/rd/block_parser.rb +659 -11
  153. data/lib/rdoc/rd/block_parser.ry +13 -9
  154. data/lib/rdoc/rd/inline.rb +4 -5
  155. data/lib/rdoc/rd/inline_parser.rb +646 -2
  156. data/lib/rdoc/rd.rb +4 -5
  157. data/lib/rdoc/rdoc.rb +234 -90
  158. data/lib/rdoc/ri/driver.rb +172 -172
  159. data/lib/rdoc/ri/paths.rb +3 -3
  160. data/lib/rdoc/{servlet.rb → ri/servlet.rb} +28 -27
  161. data/lib/rdoc/ri/store.rb +0 -1
  162. data/lib/rdoc/ri/task.rb +3 -3
  163. data/lib/rdoc/ri.rb +5 -5
  164. data/lib/rdoc/rubygems_hook.rb +106 -25
  165. data/lib/rdoc/server.rb +460 -0
  166. data/lib/rdoc/stats/normal.rb +1 -1
  167. data/lib/rdoc/stats/quiet.rb +1 -2
  168. data/lib/rdoc/stats/verbose.rb +3 -5
  169. data/lib/rdoc/stats.rb +158 -136
  170. data/lib/rdoc/store.rb +267 -48
  171. data/lib/rdoc/task.rb +54 -28
  172. data/lib/rdoc/text.rb +60 -120
  173. data/lib/rdoc/token_stream.rb +30 -45
  174. data/lib/rdoc/tom_doc.rb +9 -15
  175. data/lib/rdoc/version.rb +3 -1
  176. data/lib/rdoc.rb +90 -52
  177. data/lib/rubygems_plugin.rb +14 -0
  178. data/man/ri.1 +2 -0
  179. data/rdoc-logo.svg +43 -0
  180. data/rdoc.gemspec +25 -200
  181. metadata +120 -53
  182. data/CONTRIBUTING.rdoc +0 -220
  183. data/ExampleMarkdown.md +0 -37
  184. data/ExampleRDoc.rdoc +0 -208
  185. data/Gemfile +0 -12
  186. data/README.rdoc +0 -129
  187. data/RI.rdoc +0 -57
  188. data/Rakefile +0 -101
  189. data/bin/console +0 -7
  190. data/bin/setup +0 -6
  191. data/lib/rdoc/anon_class.rb +0 -11
  192. data/lib/rdoc/context/section.rb +0 -232
  193. data/lib/rdoc/generator/template/darkfish/.document +0 -0
  194. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
  195. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
  196. data/lib/rdoc/generator/template/json_index/.document +0 -1
  197. data/lib/rdoc/ghost_method.rb +0 -7
  198. data/lib/rdoc/markup/attr_changer.rb +0 -23
  199. data/lib/rdoc/markup/attr_span.rb +0 -36
  200. data/lib/rdoc/markup/attribute_manager.rb +0 -409
  201. data/lib/rdoc/markup/attributes.rb +0 -71
  202. data/lib/rdoc/markup/regexp_handling.rb +0 -41
  203. data/lib/rdoc/meta_method.rb +0 -7
  204. data/lib/rdoc/parser/ripper_state_lex.rb +0 -590
  205. data/lib/rdoc/parser/ruby_tools.rb +0 -167
data/lib/rdoc/stats.rb CHANGED
@@ -7,6 +7,19 @@ class RDoc::Stats
7
7
 
8
8
  include RDoc::Text
9
9
 
10
+ ##
11
+ # Display order for item types in the coverage report
12
+
13
+ TYPE_ORDER = %w[Class Module Constant Attribute Method].freeze
14
+
15
+ ##
16
+ # Message displayed when all items are documented
17
+
18
+ GREAT_JOB_MESSAGE = <<~MSG
19
+ 100% documentation!
20
+ Great Job!
21
+ MSG
22
+
10
23
  ##
11
24
  # Output level for the coverage report
12
25
 
@@ -26,7 +39,7 @@ class RDoc::Stats
26
39
  # Creates a new Stats that will have +num_files+. +verbosity+ defaults to 1
27
40
  # which will create an RDoc::Stats::Normal outputter.
28
41
 
29
- def initialize store, num_files, verbosity = 1
42
+ def initialize(store, num_files, verbosity = 1)
30
43
  @num_files = num_files
31
44
  @store = store
32
45
 
@@ -39,38 +52,45 @@ class RDoc::Stats
39
52
  @start = Time.now
40
53
  @undoc_params = 0
41
54
 
55
+ self.verbosity = verbosity
56
+ end
57
+
58
+ ##
59
+ # Sets the verbosity level, rebuilding the display outputter.
60
+
61
+ def verbosity=(verbosity)
42
62
  @display = case verbosity
43
- when 0 then Quiet.new num_files
44
- when 1 then Normal.new num_files
45
- else Verbose.new num_files
63
+ when 0 then Quiet.new @num_files
64
+ when 1 then Normal.new @num_files
65
+ else Verbose.new @num_files
46
66
  end
47
67
  end
48
68
 
49
69
  ##
50
70
  # Records the parsing of an alias +as+.
51
71
 
52
- def add_alias as
72
+ def add_alias(as)
53
73
  @display.print_alias as
54
74
  end
55
75
 
56
76
  ##
57
77
  # Records the parsing of an attribute +attribute+
58
78
 
59
- def add_attribute attribute
79
+ def add_attribute(attribute)
60
80
  @display.print_attribute attribute
61
81
  end
62
82
 
63
83
  ##
64
84
  # Records the parsing of a class +klass+
65
85
 
66
- def add_class klass
86
+ def add_class(klass)
67
87
  @display.print_class klass
68
88
  end
69
89
 
70
90
  ##
71
91
  # Records the parsing of +constant+
72
92
 
73
- def add_constant constant
93
+ def add_constant(constant)
74
94
  @display.print_constant constant
75
95
  end
76
96
 
@@ -155,7 +175,7 @@ class RDoc::Stats
155
175
  # 0:: Classes, modules, constants, attributes, methods
156
176
  # 1:: Level 0 + method parameters
157
177
 
158
- def coverage_level= level
178
+ def coverage_level=(level)
159
179
  level = -1 unless level
160
180
 
161
181
  @coverage_level = level
@@ -164,7 +184,7 @@ class RDoc::Stats
164
184
  ##
165
185
  # Returns the length and number of undocumented items in +collection+.
166
186
 
167
- def doc_stats collection
187
+ def doc_stats(collection)
168
188
  visible = collection.select { |item| item.display? }
169
189
  [visible.length, visible.count { |item| not item.documented? }]
170
190
  end
@@ -186,18 +206,6 @@ class RDoc::Stats
186
206
  @fully_documented
187
207
  end
188
208
 
189
- ##
190
- # A report that says you did a great job!
191
-
192
- def great_job
193
- report = RDoc::Markup::Document.new
194
-
195
- report << RDoc::Markup::Paragraph.new('100% documentation!')
196
- report << RDoc::Markup::Paragraph.new('Great Job!')
197
-
198
- report
199
- end
200
-
201
209
  ##
202
210
  # Calculates the percentage of items documented.
203
211
 
@@ -223,48 +231,55 @@ class RDoc::Stats
223
231
  if @coverage_level.zero? then
224
232
  calculate
225
233
 
226
- return great_job if @num_items == @doc_items
234
+ return GREAT_JOB_MESSAGE if @num_items == @doc_items
227
235
  end
228
236
 
229
- ucm = @store.unique_classes_and_modules
237
+ items, empty_classes = collect_undocumented_items
230
238
 
231
- report = RDoc::Markup::Document.new
232
- report << RDoc::Markup::Paragraph.new('The following items are not documented:')
233
- report << RDoc::Markup::BlankLine.new
234
-
235
- ucm.sort.each do |cm|
236
- body = report_class_module(cm) {
237
- [
238
- report_constants(cm),
239
- report_attributes(cm),
240
- report_methods(cm),
241
- ].compact
242
- }
239
+ if @coverage_level > 0 then
240
+ calculate
243
241
 
244
- report << body if body
242
+ return GREAT_JOB_MESSAGE if @num_items == @doc_items
245
243
  end
246
244
 
247
- if @coverage_level > 0 then
248
- calculate
245
+ report = +""
246
+ report << "The following items are not documented:\n\n"
249
247
 
250
- return great_job if @num_items == @doc_items
248
+ # Referenced-but-empty classes
249
+ empty_classes.each do |cm|
250
+ report << "#{cm.full_name} is referenced but empty.\n"
251
+ report << "It probably came from another project. I'm sorry I'm holding it against you.\n\n"
251
252
  end
252
253
 
253
- report
254
- end
254
+ # Group items by file, then by type
255
+ by_file = items.group_by { |item| item[:file] }
255
256
 
256
- ##
257
- # Returns a report on undocumented attributes in ClassModule +cm+
257
+ by_file.sort_by { |file, _| file }.each do |file, file_items|
258
+ report << "#{file}:\n"
258
259
 
259
- def report_attributes cm
260
- return if cm.attributes.empty?
260
+ by_type = file_items.group_by { |item| item[:type] }
261
261
 
262
- report = []
262
+ TYPE_ORDER.each do |type|
263
+ next unless by_type[type]
264
+
265
+ report << " #{type}:\n"
266
+
267
+ sorted = by_type[type].sort_by { |item| [item[:line] || 0, item[:name]] }
268
+ name_width = sorted.reduce(0) { |max, item| item[:line] && item[:name].length > max ? item[:name].length : max }
269
+
270
+ sorted.each do |item|
271
+ if item[:line]
272
+ report << " %-*s %s:%d\n" % [name_width, item[:name], item[:file], item[:line]]
273
+ else
274
+ report << " #{item[:name]}\n"
275
+ end
276
+
277
+ if item[:undoc_params]
278
+ report << " Undocumented params: #{item[:undoc_params].join(', ')}\n"
279
+ end
280
+ end
281
+ end
263
282
 
264
- cm.each_attribute do |attr|
265
- next if attr.documented?
266
- line = attr.line ? ":#{attr.line}" : nil
267
- report << " #{attr.definition} :#{attr.name} # in file #{attr.file.full_name}#{line}\n"
268
283
  report << "\n"
269
284
  end
270
285
 
@@ -272,115 +287,128 @@ class RDoc::Stats
272
287
  end
273
288
 
274
289
  ##
275
- # Returns a report on undocumented items in ClassModule +cm+
276
-
277
- def report_class_module cm
278
- return if cm.fully_documented? and @coverage_level.zero?
279
- return unless cm.display?
280
-
281
- report = RDoc::Markup::Document.new
282
-
283
- if cm.in_files.empty? then
284
- report << RDoc::Markup::Paragraph.new("#{cm.definition} is referenced but empty.")
285
- report << RDoc::Markup::Paragraph.new("It probably came from another project. I'm sorry I'm holding it against you.")
290
+ # Collects all undocumented items across all classes and modules.
291
+ # Returns [items, empty_classes] where items is an Array of Hashes
292
+ # with keys :type, :name, :file, :line, and empty_classes is an
293
+ # Array of ClassModule objects that are referenced but have no files.
286
294
 
287
- return report
288
- elsif cm.documented? then
289
- documented = true
290
- klass = RDoc::Markup::Verbatim.new("#{cm.definition} # is documented\n")
291
- else
292
- report << RDoc::Markup::Paragraph.new('In files:')
295
+ def collect_undocumented_items
296
+ empty_classes = []
297
+ items = []
293
298
 
294
- list = RDoc::Markup::List.new :BULLET
299
+ @store.unique_classes_and_modules.each do |class_module|
300
+ next unless class_module.display?
295
301
 
296
- cm.in_files.each do |file|
297
- para = RDoc::Markup::Paragraph.new file.full_name
298
- list << RDoc::Markup::ListItem.new(nil, para)
302
+ if class_module.in_files.empty?
303
+ empty_classes << class_module
304
+ next
299
305
  end
300
306
 
301
- report << list
302
- report << RDoc::Markup::BlankLine.new
307
+ unless class_module.documented? || class_module.full_name == 'Object'
308
+ collect_undocumented_class_module(class_module, items)
309
+ end
303
310
 
304
- klass = RDoc::Markup::Verbatim.new("#{cm.definition}\n")
311
+ collect_undocumented_constants(class_module, items)
312
+ collect_undocumented_attributes(class_module, items)
313
+ collect_undocumented_methods(class_module, items)
305
314
  end
306
315
 
307
- klass << "\n"
308
-
309
- body = yield.flatten # HACK remove #flatten
310
-
311
- if body.empty? then
312
- return if documented
316
+ [items, empty_classes]
317
+ end
313
318
 
314
- klass.parts.pop
315
- else
316
- klass.parts.concat body
319
+ ##
320
+ # Collects undocumented classes or modules from +class_module+ into +items+.
321
+ # Reopened classes/modules are reported in every file they appear in.
322
+
323
+ def collect_undocumented_class_module(class_module, items)
324
+ class_module.in_files.map(&:full_name).uniq.each do |file|
325
+ items << {
326
+ type: class_module.type.capitalize,
327
+ name: class_module.full_name,
328
+ file: file,
329
+ line: nil,
330
+ }
317
331
  end
332
+ end
333
+
334
+ ##
335
+ # Collects undocumented constants from +class_module+ into +items+.
318
336
 
319
- klass << "end\n"
337
+ def collect_undocumented_constants(class_module, items)
338
+ class_module.constants.each do |constant|
339
+ next unless constant.display?
340
+ next if constant.documented? || constant.is_alias_for
320
341
 
321
- report << klass
342
+ file = constant.file&.full_name
343
+ next unless file
322
344
 
323
- report
345
+ items << {
346
+ type: "Constant",
347
+ name: constant.full_name,
348
+ file: file,
349
+ line: constant.line,
350
+ }
351
+ end
324
352
  end
325
353
 
326
354
  ##
327
- # Returns a report on undocumented constants in ClassModule +cm+
328
-
329
- def report_constants cm
330
- return if cm.constants.empty?
355
+ # Collects undocumented attributes from +class_module+ into +items+.
331
356
 
332
- report = []
357
+ def collect_undocumented_attributes(class_module, items)
358
+ class_module.attributes.each do |attr|
359
+ next unless attr.display?
360
+ next if attr.documented?
333
361
 
334
- cm.each_constant do |constant|
335
- # TODO constant aliases are listed in the summary but not reported
336
- # figure out what to do here
337
- next if constant.documented? || constant.is_alias_for
362
+ file = attr.file&.full_name
363
+ next unless file
338
364
 
339
- line = constant.line ? ":#{constant.line}" : line
340
- report << " # in file #{constant.file.full_name}#{line}\n"
341
- report << " #{constant.name} = nil\n"
342
- report << "\n"
365
+ scope = attr.singleton ? "." : "#"
366
+ items << {
367
+ type: "Attribute",
368
+ name: "#{class_module.full_name}#{scope}#{attr.name}",
369
+ file: file,
370
+ line: attr.line,
371
+ }
343
372
  end
344
-
345
- report
346
373
  end
347
374
 
348
375
  ##
349
- # Returns a report on undocumented methods in ClassModule +cm+
350
-
351
- def report_methods cm
352
- return if cm.method_list.empty?
376
+ # Collects undocumented methods from +class_module+ into +items+.
377
+ # At coverage level > 0, also counts undocumented parameters.
353
378
 
354
- report = []
379
+ def collect_undocumented_methods(class_module, items)
380
+ class_module.each_method do |method|
381
+ next unless method.display?
382
+ next if method.documented? && @coverage_level.zero?
355
383
 
356
- cm.each_method do |method|
357
- next if method.documented? and @coverage_level.zero?
384
+ undoc_param_names = nil
358
385
 
359
- if @coverage_level > 0 then
386
+ if @coverage_level > 0
360
387
  params, undoc = undoc_params method
361
-
362
388
  @num_params += params
363
389
 
364
- unless undoc.empty? then
390
+ unless undoc.empty?
365
391
  @undoc_params += undoc.length
366
-
367
- undoc = undoc.map do |param| "+#{param}+" end
368
- param_report = " # #{undoc.join ', '} is not documented\n"
392
+ undoc_param_names = undoc
369
393
  end
370
394
  end
371
395
 
372
- next if method.documented? and not param_report
396
+ next if method.documented? && !undoc_param_names
373
397
 
374
- line = method.line ? ":#{method.line}" : nil
375
- scope = method.singleton ? 'self.' : nil
398
+ file = method.file&.full_name
399
+ next unless file
376
400
 
377
- report << " # in file #{method.file.full_name}#{line}\n"
378
- report << param_report if param_report
379
- report << " def #{scope}#{method.name}#{method.params}; end\n"
380
- report << "\n"
381
- end
401
+ scope = method.singleton ? "." : "#"
402
+ item = {
403
+ type: "Method",
404
+ name: "#{class_module.full_name}#{scope}#{method.name}",
405
+ file: file,
406
+ line: method.line,
407
+ }
408
+ item[:undoc_params] = undoc_param_names if undoc_param_names
382
409
 
383
- report
410
+ items << item
411
+ end
384
412
  end
385
413
 
386
414
  ##
@@ -400,12 +428,10 @@ class RDoc::Stats
400
428
  @undoc_params,
401
429
  ].max.to_s.length
402
430
 
403
- report = RDoc::Markup::Verbatim.new
431
+ report = +""
404
432
 
405
433
  report << "Files: %*d\n" % [num_width, @num_files]
406
-
407
434
  report << "\n"
408
-
409
435
  report << "Classes: %*d (%*d undocumented)\n" % [
410
436
  num_width, @num_classes, undoc_width, @undoc_classes]
411
437
  report << "Modules: %*d (%*d undocumented)\n" % [
@@ -419,24 +445,21 @@ class RDoc::Stats
419
445
  report << "Parameters: %*d (%*d undocumented)\n" % [
420
446
  num_width, @num_params, undoc_width, @undoc_params] if
421
447
  @coverage_level > 0
422
-
423
448
  report << "\n"
424
-
425
449
  report << "Total: %*d (%*d undocumented)\n" % [
426
450
  num_width, @num_items, undoc_width, @undoc_items]
427
-
428
451
  report << "%6.2f%% documented\n" % percent_doc
429
452
  report << "\n"
430
453
  report << "Elapsed: %0.1fs\n" % (Time.now - @start)
431
454
 
432
- RDoc::Markup::Document.new report
455
+ report
433
456
  end
434
457
 
435
458
  ##
436
459
  # Determines which parameters in +method+ were not documented. Returns a
437
460
  # total parameter count and an Array of undocumented methods.
438
461
 
439
- def undoc_params method
462
+ def undoc_params(method)
440
463
  @formatter ||= RDoc::Markup::ToTtOnly.new
441
464
 
442
465
  params = method.param_list
@@ -454,9 +477,8 @@ class RDoc::Stats
454
477
  [params.length, undoc]
455
478
  end
456
479
 
457
- autoload :Quiet, 'rdoc/stats/quiet'
458
- autoload :Normal, 'rdoc/stats/normal'
459
- autoload :Verbose, 'rdoc/stats/verbose'
480
+ autoload :Quiet, "#{__dir__}/stats/quiet"
481
+ autoload :Normal, "#{__dir__}/stats/normal"
482
+ autoload :Verbose, "#{__dir__}/stats/verbose"
460
483
 
461
484
  end
462
-