rdoc 7.2.0 → 8.1.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 (150) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +4 -7
  3. data/LICENSE.rdoc +4 -0
  4. data/README.md +43 -2
  5. data/RI.md +75 -75
  6. data/doc/markup_reference/markdown.md +104 -3
  7. data/exe/rdoc +2 -2
  8. data/lib/rdoc/code_object/alias.rb +70 -74
  9. data/lib/rdoc/code_object/any_method.rb +305 -298
  10. data/lib/rdoc/code_object/attr.rb +150 -143
  11. data/lib/rdoc/code_object/class_module.rb +801 -765
  12. data/lib/rdoc/code_object/constant.rb +178 -150
  13. data/lib/rdoc/code_object/context/section.rb +133 -160
  14. data/lib/rdoc/code_object/context.rb +925 -952
  15. data/lib/rdoc/code_object/extend.rb +7 -5
  16. data/lib/rdoc/code_object/include.rb +7 -5
  17. data/lib/rdoc/code_object/method_attr.rb +325 -324
  18. data/lib/rdoc/code_object/mixin.rb +97 -95
  19. data/lib/rdoc/code_object/normal_class.rb +77 -78
  20. data/lib/rdoc/code_object/normal_module.rb +61 -59
  21. data/lib/rdoc/code_object/require.rb +23 -39
  22. data/lib/rdoc/code_object/single_class.rb +21 -19
  23. data/lib/rdoc/code_object/top_level.rb +212 -213
  24. data/lib/rdoc/code_object.rb +305 -305
  25. data/lib/rdoc/comment.rb +274 -337
  26. data/lib/rdoc/cross_reference.rb +194 -212
  27. data/lib/rdoc/encoding.rb +105 -103
  28. data/lib/rdoc/erb_partial.rb +13 -11
  29. data/lib/rdoc/erbio.rb +29 -27
  30. data/lib/rdoc/generator/aliki.rb +165 -140
  31. data/lib/rdoc/generator/darkfish.rb +647 -631
  32. data/lib/rdoc/generator/json_index.rb +233 -229
  33. data/lib/rdoc/generator/markup.rb +165 -122
  34. data/lib/rdoc/generator/pot/message_extractor.rb +57 -51
  35. data/lib/rdoc/generator/pot/po.rb +52 -51
  36. data/lib/rdoc/generator/pot/po_entry.rb +138 -132
  37. data/lib/rdoc/generator/pot.rb +85 -81
  38. data/lib/rdoc/generator/ri.rb +23 -19
  39. data/lib/rdoc/generator/template/aliki/DESIGN.md +538 -0
  40. data/lib/rdoc/generator/template/aliki/_aside_toc.rhtml +1 -1
  41. data/lib/rdoc/generator/template/aliki/_footer.rhtml +1 -1
  42. data/lib/rdoc/generator/template/aliki/_head.rhtml +11 -11
  43. data/lib/rdoc/generator/template/aliki/_header.rhtml +29 -44
  44. data/lib/rdoc/generator/template/aliki/_sidebar_extends.rhtml +8 -6
  45. data/lib/rdoc/generator/template/aliki/_sidebar_includes.rhtml +8 -6
  46. data/lib/rdoc/generator/template/aliki/_sidebar_installed.rhtml +1 -1
  47. data/lib/rdoc/generator/template/aliki/_sidebar_pages.rhtml +2 -2
  48. data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +4 -4
  49. data/lib/rdoc/generator/template/aliki/_sidebar_sections.rhtml +1 -1
  50. data/lib/rdoc/generator/template/aliki/_sidebar_toggle.rhtml +1 -1
  51. data/lib/rdoc/generator/template/aliki/class.rhtml +56 -46
  52. data/lib/rdoc/generator/template/aliki/css/rdoc.css +538 -283
  53. data/lib/rdoc/generator/template/aliki/index.rhtml +1 -1
  54. data/lib/rdoc/generator/template/aliki/js/aliki.js +80 -102
  55. data/lib/rdoc/generator/template/aliki/page.rhtml +1 -1
  56. data/lib/rdoc/generator/template/aliki/servlet_not_found.rhtml +1 -1
  57. data/lib/rdoc/generator/template/aliki/servlet_root.rhtml +2 -2
  58. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +1 -1
  59. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +8 -6
  60. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +8 -6
  61. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +1 -1
  62. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +1 -1
  63. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +1 -1
  64. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +5 -5
  65. data/lib/rdoc/generator/template/darkfish/class.rhtml +18 -21
  66. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +0 -1
  67. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +3 -3
  68. data/lib/rdoc/generator.rb +48 -46
  69. data/lib/rdoc/i18n/locale.rb +99 -95
  70. data/lib/rdoc/i18n/text.rb +109 -105
  71. data/lib/rdoc/i18n.rb +7 -5
  72. data/lib/rdoc/markdown/byte_runtime.rb +80 -0
  73. data/lib/rdoc/markdown.kpeg +30 -21
  74. data/lib/rdoc/markdown.rb +329 -151
  75. data/lib/rdoc/markup/block_quote.rb +12 -8
  76. data/lib/rdoc/markup/document.rb +127 -123
  77. data/lib/rdoc/markup/formatter.rb +215 -221
  78. data/lib/rdoc/markup/heading.rb +1 -4
  79. data/lib/rdoc/markup/include.rb +33 -29
  80. data/lib/rdoc/markup/indented_paragraph.rb +37 -33
  81. data/lib/rdoc/markup/inline_parser.rb +281 -277
  82. data/lib/rdoc/markup/list.rb +80 -88
  83. data/lib/rdoc/markup/list_item.rb +73 -85
  84. data/lib/rdoc/markup/paragraph.rb +23 -19
  85. data/lib/rdoc/markup/parser.rb +501 -497
  86. data/lib/rdoc/markup/pre_process.rb +284 -305
  87. data/lib/rdoc/markup/raw.rb +2 -2
  88. data/lib/rdoc/markup/rule.rb +16 -12
  89. data/lib/rdoc/markup/to_ansi.rb +143 -139
  90. data/lib/rdoc/markup/to_bs.rb +72 -68
  91. data/lib/rdoc/markup/to_html.rb +600 -493
  92. data/lib/rdoc/markup/to_html_crossref.rb +221 -191
  93. data/lib/rdoc/markup/to_html_snippet.rb +232 -227
  94. data/lib/rdoc/markup/to_joined_paragraph.rb +40 -41
  95. data/lib/rdoc/markup/to_label.rb +63 -59
  96. data/lib/rdoc/markup/to_markdown.rb +212 -208
  97. data/lib/rdoc/markup/to_rdoc.rb +336 -332
  98. data/lib/rdoc/markup/to_table_of_contents.rb +66 -62
  99. data/lib/rdoc/markup/to_test.rb +60 -56
  100. data/lib/rdoc/markup/to_tt_only.rb +83 -86
  101. data/lib/rdoc/markup/verbatim.rb +62 -58
  102. data/lib/rdoc/markup.rb +198 -196
  103. data/lib/rdoc/options.rb +1063 -1076
  104. data/lib/rdoc/parser/c.rb +1039 -1036
  105. data/lib/rdoc/parser/changelog.rb +319 -315
  106. data/lib/rdoc/parser/markdown.rb +17 -13
  107. data/lib/rdoc/parser/rbs.rb +279 -0
  108. data/lib/rdoc/parser/rd.rb +17 -13
  109. data/lib/rdoc/parser/ruby.rb +1231 -2222
  110. data/lib/rdoc/parser/ruby_colorizer.rb +303 -0
  111. data/lib/rdoc/parser/simple.rb +31 -27
  112. data/lib/rdoc/parser/text.rb +12 -8
  113. data/lib/rdoc/parser.rb +230 -221
  114. data/lib/rdoc/rbs_helper.rb +186 -0
  115. data/lib/rdoc/rd/inline.rb +57 -53
  116. data/lib/rdoc/rd.rb +90 -88
  117. data/lib/rdoc/rdoc.rb +547 -366
  118. data/lib/rdoc/ri/driver.rb +1141 -1130
  119. data/lib/rdoc/ri/formatter.rb +7 -3
  120. data/lib/rdoc/ri/paths.rb +140 -136
  121. data/lib/rdoc/ri/servlet.rb +456 -0
  122. data/lib/rdoc/ri/store.rb +4 -2
  123. data/lib/rdoc/ri/task.rb +55 -51
  124. data/lib/rdoc/ri.rb +14 -11
  125. data/lib/rdoc/rubygems_hook.rb +194 -192
  126. data/lib/rdoc/server.rb +462 -0
  127. data/lib/rdoc/stats/normal.rb +46 -42
  128. data/lib/rdoc/stats/quiet.rb +39 -35
  129. data/lib/rdoc/stats/verbose.rb +35 -31
  130. data/lib/rdoc/stats.rb +363 -338
  131. data/lib/rdoc/store.rb +919 -725
  132. data/lib/rdoc/task.rb +260 -255
  133. data/lib/rdoc/text.rb +130 -245
  134. data/lib/rdoc/token_stream.rb +101 -115
  135. data/lib/rdoc/tom_doc.rb +203 -201
  136. data/lib/rdoc/version.rb +1 -1
  137. data/lib/rdoc.rb +35 -7
  138. data/lib/rubygems_plugin.rb +2 -11
  139. data/rdoc-logo.svg +43 -0
  140. data/rdoc.gemspec +6 -4
  141. metadata +36 -20
  142. data/lib/rdoc/code_object/anon_class.rb +0 -10
  143. data/lib/rdoc/code_object/ghost_method.rb +0 -6
  144. data/lib/rdoc/code_object/meta_method.rb +0 -6
  145. data/lib/rdoc/markdown/literals.kpeg +0 -21
  146. data/lib/rdoc/markdown/literals.rb +0 -454
  147. data/lib/rdoc/parser/prism_ruby.rb +0 -1112
  148. data/lib/rdoc/parser/ripper_state_lex.rb +0 -302
  149. data/lib/rdoc/parser/ruby_tools.rb +0 -163
  150. data/lib/rdoc/servlet.rb +0 -452
@@ -1,195 +1,223 @@
1
1
  # frozen_string_literal: true
2
- ##
3
- # A constant
2
+ module RDoc
3
+ ##
4
+ # A constant
4
5
 
5
- class RDoc::Constant < RDoc::CodeObject
6
+ class Constant < CodeObject
6
7
 
7
- MARSHAL_VERSION = 0 # :nodoc:
8
+ MARSHAL_VERSION = 0 # :nodoc:
8
9
 
9
- ##
10
- # Sets the module or class this is constant is an alias for.
10
+ ##
11
+ # Sets the module or class this is constant is an alias for.
11
12
 
12
- attr_writer :is_alias_for
13
+ attr_writer :is_alias_for
13
14
 
14
- ##
15
- # The constant's name
15
+ ##
16
+ # The constant's name
16
17
 
17
- attr_accessor :name
18
+ attr_accessor :name
18
19
 
19
- ##
20
- # The constant's value
20
+ ##
21
+ # The constant's value
21
22
 
22
- attr_accessor :value
23
+ attr_accessor :value
23
24
 
24
- ##
25
- # The constant's visibility
25
+ ##
26
+ # The constant's visibility
26
27
 
27
- attr_accessor :visibility
28
+ attr_accessor :visibility
28
29
 
29
- ##
30
- # Creates a new constant with +name+, +value+ and +comment+
30
+ ##
31
+ # The constant path on the RHS when the RHS is a bare constant reference
32
+ # (+Foo = Bar+ or +Foo = Bar::Baz+). Captured at parse time so
33
+ # #resolved_alias_target doesn't have to re-derive it from the textual
34
+ # #value. nil for other RHS shapes.
31
35
 
32
- def initialize(name, value, comment)
33
- super()
36
+ attr_accessor :is_alias_for_path
34
37
 
35
- @name = name
36
- @value = value
38
+ ##
39
+ # Creates a new constant with +name+, +value+ and +comment+
37
40
 
38
- @is_alias_for = nil
39
- @visibility = :public
41
+ def initialize(name, value, comment)
42
+ super()
40
43
 
41
- self.comment = comment
42
- end
44
+ @name = name
45
+ @value = value
43
46
 
44
- ##
45
- # Constants are ordered by name
47
+ @is_alias_for = nil
48
+ @is_alias_for_path = nil
49
+ @visibility = :public
46
50
 
47
- def <=>(other)
48
- return unless self.class === other
51
+ self.comment = comment
52
+ end
49
53
 
50
- [parent_name, name] <=> [other.parent_name, other.name]
51
- end
54
+ ##
55
+ # Constants are ordered by name
52
56
 
53
- ##
54
- # Constants are equal when their #parent and #name is the same
57
+ def <=>(other)
58
+ return unless self.class === other
55
59
 
56
- def ==(other)
57
- self.class == other.class and
58
- @parent == other.parent and
59
- @name == other.name
60
- end
60
+ [parent_name, name] <=> [other.parent_name, other.name]
61
+ end
61
62
 
62
- ##
63
- # A constant is documented if it has a comment, or is an alias
64
- # for a documented class or module.
65
-
66
- def documented?
67
- return true if super
68
- return false unless @is_alias_for
69
- case @is_alias_for
70
- when String then
71
- found = @store.find_class_or_module @is_alias_for
72
- return false unless found
73
- @is_alias_for = found
63
+ ##
64
+ # Constants are equal when their #parent and #name is the same
65
+
66
+ def ==(other)
67
+ self.class == other.class and
68
+ @parent == other.parent and
69
+ @name == other.name
74
70
  end
75
- @is_alias_for.documented?
76
- end
77
71
 
78
- ##
79
- # Full constant name including namespace
72
+ ##
73
+ # A constant is documented if it has a comment, or is an alias
74
+ # for a documented class or module.
75
+
76
+ def documented?
77
+ return true if super
78
+ return false unless @is_alias_for
79
+ case @is_alias_for
80
+ when String
81
+ found = @store.find_class_or_module @is_alias_for
82
+ return false unless found
83
+ @is_alias_for = found
84
+ end
85
+ @is_alias_for.documented?
86
+ end
80
87
 
81
- def full_name
82
- @full_name ||= "#{parent_name}::#{@name}"
83
- end
88
+ ##
89
+ # Full constant name including namespace
84
90
 
85
- ##
86
- # The module or class this constant is an alias for
87
-
88
- def is_alias_for
89
- case @is_alias_for
90
- when String then
91
- found = @store.find_class_or_module @is_alias_for
92
- @is_alias_for = found if found
93
- @is_alias_for
94
- else
95
- @is_alias_for
91
+ def full_name
92
+ @full_name ||= "#{parent_name}::#{@name}"
96
93
  end
97
- end
98
94
 
99
- def inspect # :nodoc:
100
- "#<%s:0x%x %s::%s>" % [
101
- self.class, object_id,
102
- parent_name, @name,
103
- ]
104
- end
95
+ ##
96
+ # The module or class this constant is an alias for, when one was recorded
97
+ # explicitly (by RDoc::Context#add_module_alias, RDoc::ClassModule#update_aliases,
98
+ # or ri marshal load). Pure accessor; see #resolved_alias_target for the
99
+ # opportunistic lookup path.
100
+
101
+ def is_alias_for
102
+ case @is_alias_for
103
+ when String
104
+ found = @store.find_class_or_module @is_alias_for
105
+ @is_alias_for = found if found
106
+ @is_alias_for
107
+ else
108
+ @is_alias_for
109
+ end
110
+ end
105
111
 
106
- ##
107
- # Dumps this Constant for use by ri. See also #marshal_load
108
-
109
- def marshal_dump
110
- alias_name = case found = is_alias_for
111
- when RDoc::CodeObject then found.full_name
112
- else found
113
- end
114
-
115
- [ MARSHAL_VERSION,
116
- @name,
117
- full_name,
118
- @visibility,
119
- alias_name,
120
- parse(@comment),
121
- @file.relative_name,
122
- parent.name,
123
- parent.class,
124
- section.title,
125
- ]
126
- end
112
+ ##
113
+ # Returns the class/module this constant *would* alias if #is_alias_for_path
114
+ # was set by the parser and that path resolves to a known class/module, or
115
+ # nil. Used to support `Const = RHS` parsed before `class RHS;end` is defined
116
+ # in another file. Pure lookup; does not mutate state. Honors :nodoc:
117
+ # (returns nil if document_self is false). Note that module nesting
118
+ # information is lost, so constant lookup is inaccurate.
119
+
120
+ def resolved_alias_target
121
+ return nil unless document_self
122
+ return nil unless @is_alias_for_path
123
+ parent.find_module_named(@is_alias_for_path)
124
+ end
127
125
 
128
- ##
129
- # Loads this Constant from +array+. For a loaded Constant the following
130
- # methods will return cached values:
131
- #
132
- # * #full_name
133
- # * #parent_name
134
-
135
- def marshal_load(array)
136
- initialize array[1], nil, RDoc::Comment.from_document(array[5])
137
-
138
- @full_name = array[2]
139
- @visibility = array[3] || :public
140
- @is_alias_for = array[4]
141
- # 5 handled above
142
- # 6 handled below
143
- @parent_name = array[7]
144
- @parent_class = array[8]
145
- @section_title = array[9]
146
-
147
- @file = RDoc::TopLevel.new array[6]
148
- end
126
+ def inspect # :nodoc:
127
+ "#<%s:0x%x %s::%s>" % [
128
+ self.class, object_id,
129
+ parent_name, @name,
130
+ ]
131
+ end
149
132
 
150
- ##
151
- # Path to this constant for use with HTML generator output.
133
+ ##
134
+ # Dumps this Constant for use by ri. See also #marshal_load
135
+
136
+ def marshal_dump
137
+ alias_name = case found = is_alias_for
138
+ when CodeObject then found.full_name
139
+ else found
140
+ end
141
+
142
+ [ MARSHAL_VERSION,
143
+ @name,
144
+ full_name,
145
+ @visibility,
146
+ alias_name,
147
+ parse(@comment),
148
+ @file.relative_name,
149
+ parent.name,
150
+ parent.class,
151
+ section.title,
152
+ ]
153
+ end
152
154
 
153
- def path
154
- "#{@parent.path}##{@name}"
155
- end
155
+ ##
156
+ # Loads this Constant from +array+. For a loaded Constant the following
157
+ # methods will return cached values:
158
+ #
159
+ # * #full_name
160
+ # * #parent_name
161
+
162
+ def marshal_load(array)
163
+ initialize array[1], nil, Comment.from_document(array[5])
164
+
165
+ @full_name = array[2]
166
+ @visibility = array[3] || :public
167
+ @is_alias_for = array[4]
168
+ # 5 handled above
169
+ # 6 handled below
170
+ @parent_name = array[7]
171
+ @parent_class = array[8]
172
+ @section_title = array[9]
173
+
174
+ @file = TopLevel.new array[6]
175
+ end
156
176
 
157
- ##
158
- # Returns an HTML snippet of the comment for search results.
177
+ ##
178
+ # Path to this constant for use with HTML generator output.
159
179
 
160
- def search_snippet
161
- return '' if comment.empty?
180
+ def path
181
+ "#{@parent.path}##{@name}"
182
+ end
162
183
 
163
- snippet(comment)
164
- end
184
+ ##
185
+ # Returns an HTML snippet of the comment for search results.
186
+
187
+ def search_snippet
188
+ return '' if comment.empty?
165
189
 
166
- def pretty_print(q) # :nodoc:
167
- q.group 2, "[#{self.class.name} #{full_name}", "]" do
168
- unless comment.empty? then
169
- q.breakable
170
- q.text "comment:"
171
- q.breakable
172
- q.pp @comment
190
+ snippet(comment)
191
+ end
192
+
193
+ def pretty_print(q) # :nodoc:
194
+ q.group 2, "[#{self.class.name} #{full_name}", "]" do
195
+ unless comment.empty?
196
+ q.breakable
197
+ q.text "comment:"
198
+ q.breakable
199
+ q.pp @comment
200
+ end
173
201
  end
174
202
  end
175
- end
176
203
 
177
- ##
178
- # Sets the store for this class or module and its contained code objects.
204
+ ##
205
+ # Sets the store for this class or module and its contained code objects.
179
206
 
180
- def store=(store)
181
- super
207
+ def store=(store)
208
+ super
182
209
 
183
- @file = @store.add_file @file.full_name if @file
184
- end
210
+ @file = @store.add_file @file.full_name if @file
211
+ end
185
212
 
186
- def to_s # :nodoc:
187
- parent_name = parent ? parent.full_name : '(unknown)'
188
- if is_alias_for
189
- "constant #{parent_name}::#@name -> #{is_alias_for}"
190
- else
191
- "constant #{parent_name}::#@name"
213
+ def to_s # :nodoc:
214
+ parent_name = parent ? parent.full_name : '(unknown)'
215
+ if is_alias_for
216
+ "constant #{parent_name}::#@name -> #{is_alias_for}"
217
+ else
218
+ "constant #{parent_name}::#@name"
219
+ end
192
220
  end
193
- end
194
221
 
222
+ end
195
223
  end