rdoc 6.11.0 → 6.12.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.
- checksums.yaml +4 -4
- data/lib/rdoc/code_object/any_method.rb +3 -3
- data/lib/rdoc/code_object/attr.rb +1 -1
- data/lib/rdoc/code_object/class_module.rb +14 -11
- data/lib/rdoc/code_object/constant.rb +1 -1
- data/lib/rdoc/code_object/context/section.rb +10 -68
- data/lib/rdoc/code_object/top_level.rb +1 -1
- data/lib/rdoc/code_object.rb +0 -1
- data/lib/rdoc/comment.rb +11 -1
- data/lib/rdoc/generator/darkfish.rb +8 -12
- data/lib/rdoc/generator/template/darkfish/index.rhtml +4 -4
- data/lib/rdoc/parser/c.rb +1 -1
- data/lib/rdoc/parser/changelog.rb +3 -2
- data/lib/rdoc/parser/prism_ruby.rb +101 -30
- data/lib/rdoc/parser/ruby.rb +1 -1
- data/lib/rdoc/parser/simple.rb +1 -1
- data/lib/rdoc/parser.rb +3 -3
- data/lib/rdoc/ri/driver.rb +17 -16
- data/lib/rdoc/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7a81c2ecc4bf154e3dd627e46fb8128cd9b953b2d5108c95fab803049a45fe1
|
4
|
+
data.tar.gz: 6307f1c96724b63e01642814567c798f8a2f5e268c105429cf64c92581bec632
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3aa0ba6de344876c71c6a749795d81854718397741fe5c9c910b9f43da039cf383130451a6ea779575069b61c5b618f9dae40c8fdc9fddec7bc90a36e1ae8b55
|
7
|
+
data.tar.gz: ff19a385007977c9a7234e87181982d5a96c3c80bc5f8b79e5ae95aeda6a75348ece0a76c8d18ea21b55826a7c2471307bfd1eb4d6f15fcee49812ed3458b66d
|
@@ -198,7 +198,7 @@ class RDoc::AnyMethod < RDoc::MethodAttr
|
|
198
198
|
@full_name = array[2]
|
199
199
|
@singleton = array[3]
|
200
200
|
@visibility = array[4]
|
201
|
-
@comment = array[5]
|
201
|
+
@comment = RDoc::Comment.from_document array[5]
|
202
202
|
@call_seq = array[6]
|
203
203
|
@block_params = array[7]
|
204
204
|
# 8 handled below
|
@@ -210,8 +210,8 @@ class RDoc::AnyMethod < RDoc::MethodAttr
|
|
210
210
|
@section_title = array[14]
|
211
211
|
@is_alias_for = array[15]
|
212
212
|
|
213
|
-
array[8].each do |new_name,
|
214
|
-
add_alias RDoc::Alias.new(nil, @name, new_name,
|
213
|
+
array[8].each do |new_name, document|
|
214
|
+
add_alias RDoc::Alias.new(nil, @name, new_name, RDoc::Comment.from_document(document), @singleton)
|
215
215
|
end
|
216
216
|
|
217
217
|
@parent_name ||= if @full_name =~ /#/ then
|
@@ -136,7 +136,7 @@ class RDoc::Attr < RDoc::MethodAttr
|
|
136
136
|
@full_name = array[2]
|
137
137
|
@rw = array[3]
|
138
138
|
@visibility = array[4]
|
139
|
-
@comment = array[5]
|
139
|
+
@comment = RDoc::Comment.from_document array[5]
|
140
140
|
@singleton = array[6] || false # MARSHAL_VERSION == 0
|
141
141
|
# 7 handled below
|
142
142
|
@parent_name = array[8]
|
@@ -359,12 +359,14 @@ class RDoc::ClassModule < RDoc::Context
|
|
359
359
|
@name = array[1]
|
360
360
|
@full_name = array[2]
|
361
361
|
@superclass = array[3]
|
362
|
-
|
362
|
+
document = array[4]
|
363
363
|
|
364
|
-
@
|
365
|
-
|
364
|
+
@comment = RDoc::Comment.from_document document
|
365
|
+
|
366
|
+
@comment_location = if RDoc::Markup::Document === document.parts.first then
|
367
|
+
document
|
366
368
|
else
|
367
|
-
RDoc::Markup::Document.new
|
369
|
+
RDoc::Markup::Document.new document
|
368
370
|
end
|
369
371
|
|
370
372
|
array[5].each do |name, rw, visibility, singleton, file|
|
@@ -378,18 +380,18 @@ class RDoc::ClassModule < RDoc::Context
|
|
378
380
|
attr.record_location RDoc::TopLevel.new file
|
379
381
|
end
|
380
382
|
|
381
|
-
array[6].each do |constant,
|
383
|
+
array[6].each do |constant, document, file|
|
382
384
|
case constant
|
383
385
|
when RDoc::Constant then
|
384
386
|
add_constant constant
|
385
387
|
else
|
386
|
-
constant = add_constant RDoc::Constant.new(constant, nil,
|
388
|
+
constant = add_constant RDoc::Constant.new(constant, nil, RDoc::Comment.from_document(document))
|
387
389
|
constant.record_location RDoc::TopLevel.new file
|
388
390
|
end
|
389
391
|
end
|
390
392
|
|
391
|
-
array[7].each do |name,
|
392
|
-
incl = add_include RDoc::Include.new(name,
|
393
|
+
array[7].each do |name, document, file|
|
394
|
+
incl = add_include RDoc::Include.new(name, RDoc::Comment.from_document(document))
|
393
395
|
incl.record_location RDoc::TopLevel.new file
|
394
396
|
end
|
395
397
|
|
@@ -406,8 +408,8 @@ class RDoc::ClassModule < RDoc::Context
|
|
406
408
|
end
|
407
409
|
end
|
408
410
|
|
409
|
-
array[9].each do |name,
|
410
|
-
ext = add_extend RDoc::Extend.new(name,
|
411
|
+
array[9].each do |name, document, file|
|
412
|
+
ext = add_extend RDoc::Extend.new(name, RDoc::Comment.from_document(document))
|
411
413
|
ext.record_location RDoc::TopLevel.new file
|
412
414
|
end if array[9] # Support Marshal version 1
|
413
415
|
|
@@ -444,7 +446,8 @@ class RDoc::ClassModule < RDoc::Context
|
|
444
446
|
|
445
447
|
document = document.merge other_document
|
446
448
|
|
447
|
-
@comment =
|
449
|
+
@comment = RDoc::Comment.from_document(document)
|
450
|
+
@comment_location = document
|
448
451
|
end
|
449
452
|
|
450
453
|
cm = class_module
|
@@ -133,7 +133,7 @@ class RDoc::Constant < RDoc::CodeObject
|
|
133
133
|
# * #parent_name
|
134
134
|
|
135
135
|
def marshal_load array
|
136
|
-
initialize array[1], nil, array[5]
|
136
|
+
initialize array[1], nil, RDoc::Comment.from_document(array[5])
|
137
137
|
|
138
138
|
@full_name = array[2]
|
139
139
|
@visibility = array[3] || :public
|
@@ -61,19 +61,10 @@ class RDoc::Context::Section
|
|
61
61
|
# Adds +comment+ to this section
|
62
62
|
|
63
63
|
def add_comment comment
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
case comment
|
69
|
-
when RDoc::Comment then
|
70
|
-
@comments << comment
|
71
|
-
when RDoc::Markup::Document then
|
72
|
-
@comments.concat comment.parts
|
73
|
-
when Array then
|
74
|
-
@comments.concat comment
|
75
|
-
else
|
76
|
-
raise TypeError, "unknown comment type: #{comment.inspect}"
|
64
|
+
comments = Array(comment)
|
65
|
+
comments.each do |c|
|
66
|
+
extracted_comment = extract_comment(c)
|
67
|
+
@comments << extracted_comment unless extracted_comment.empty?
|
77
68
|
end
|
78
69
|
end
|
79
70
|
|
@@ -97,10 +88,6 @@ class RDoc::Context::Section
|
|
97
88
|
|
98
89
|
def extract_comment comment
|
99
90
|
case comment
|
100
|
-
when Array then
|
101
|
-
comment.map do |c|
|
102
|
-
extract_comment c
|
103
|
-
end
|
104
91
|
when nil
|
105
92
|
RDoc::Comment.new ''
|
106
93
|
when RDoc::Comment then
|
@@ -115,8 +102,6 @@ class RDoc::Context::Section
|
|
115
102
|
end
|
116
103
|
end
|
117
104
|
|
118
|
-
comment
|
119
|
-
when RDoc::Markup::Document then
|
120
105
|
comment
|
121
106
|
else
|
122
107
|
raise TypeError, "unknown comment #{comment.inspect}"
|
@@ -135,20 +120,7 @@ class RDoc::Context::Section
|
|
135
120
|
# The files comments in this section come from
|
136
121
|
|
137
122
|
def in_files
|
138
|
-
|
139
|
-
|
140
|
-
case @comments
|
141
|
-
when Array then
|
142
|
-
@comments.map do |comment|
|
143
|
-
comment.file
|
144
|
-
end
|
145
|
-
when RDoc::Markup::Document then
|
146
|
-
@comment.parts.map do |document|
|
147
|
-
document.file
|
148
|
-
end
|
149
|
-
else
|
150
|
-
raise RDoc::Error, "BUG: unknown comment class #{@comments.class}"
|
151
|
-
end
|
123
|
+
@comments.map(&:file)
|
152
124
|
end
|
153
125
|
|
154
126
|
##
|
@@ -170,7 +142,7 @@ class RDoc::Context::Section
|
|
170
142
|
@parent = nil
|
171
143
|
|
172
144
|
@title = array[1]
|
173
|
-
@comments = array[2]
|
145
|
+
@comments = array[2].parts.map { |doc| RDoc::Comment.from_document(doc) }
|
174
146
|
end
|
175
147
|
|
176
148
|
##
|
@@ -178,26 +150,7 @@ class RDoc::Context::Section
|
|
178
150
|
# multiple RDoc::Markup::Documents with their file set.
|
179
151
|
|
180
152
|
def parse
|
181
|
-
|
182
|
-
when String then
|
183
|
-
super
|
184
|
-
when Array then
|
185
|
-
docs = @comments.map do |comment, location|
|
186
|
-
doc = super comment
|
187
|
-
doc.file = location if location
|
188
|
-
doc
|
189
|
-
end
|
190
|
-
|
191
|
-
RDoc::Markup::Document.new(*docs)
|
192
|
-
when RDoc::Comment then
|
193
|
-
doc = super @comments.text, comments.format
|
194
|
-
doc.file = @comments.location
|
195
|
-
doc
|
196
|
-
when RDoc::Markup::Document then
|
197
|
-
return @comments
|
198
|
-
else
|
199
|
-
raise ArgumentError, "unknown comment class #{comments.class}"
|
200
|
-
end
|
153
|
+
RDoc::Markup::Document.new(*@comments.map(&:parse))
|
201
154
|
end
|
202
155
|
|
203
156
|
##
|
@@ -213,20 +166,9 @@ class RDoc::Context::Section
|
|
213
166
|
# Removes a comment from this section if it is from the same file as
|
214
167
|
# +comment+
|
215
168
|
|
216
|
-
def remove_comment
|
217
|
-
|
218
|
-
|
219
|
-
case @comments
|
220
|
-
when Array then
|
221
|
-
@comments.delete_if do |my_comment|
|
222
|
-
my_comment.file == comment.file
|
223
|
-
end
|
224
|
-
when RDoc::Markup::Document then
|
225
|
-
@comments.parts.delete_if do |document|
|
226
|
-
document.file == comment.file.name
|
227
|
-
end
|
228
|
-
else
|
229
|
-
raise RDoc::Error, "BUG: unknown comment class #{@comments.class}"
|
169
|
+
def remove_comment target_comment
|
170
|
+
@comments.delete_if do |stored_comment|
|
171
|
+
stored_comment.file == target_comment.file
|
230
172
|
end
|
231
173
|
end
|
232
174
|
|
data/lib/rdoc/code_object.rb
CHANGED
data/lib/rdoc/comment.rb
CHANGED
@@ -126,7 +126,7 @@ class RDoc::Comment
|
|
126
126
|
# A comment is empty if its text String is empty.
|
127
127
|
|
128
128
|
def empty?
|
129
|
-
@text.empty?
|
129
|
+
@text.empty? && (@document.nil? || @document.empty?)
|
130
130
|
end
|
131
131
|
|
132
132
|
##
|
@@ -226,4 +226,14 @@ class RDoc::Comment
|
|
226
226
|
@format == 'tomdoc'
|
227
227
|
end
|
228
228
|
|
229
|
+
##
|
230
|
+
# Create a new parsed comment from a document
|
231
|
+
|
232
|
+
def self.from_document(document) # :nodoc:
|
233
|
+
comment = RDoc::Comment.new('')
|
234
|
+
comment.document = document
|
235
|
+
comment.location = RDoc::TopLevel.new(document.file) if document.file
|
236
|
+
comment
|
237
|
+
end
|
238
|
+
|
229
239
|
end
|
@@ -316,11 +316,14 @@ class RDoc::Generator::Darkfish
|
|
316
316
|
asset_rel_prefix = rel_prefix + @asset_rel_path
|
317
317
|
|
318
318
|
@title = @options.title
|
319
|
+
@main_page = @files.find { |f| f.full_name == @options.main_page }
|
319
320
|
|
320
321
|
render_template template_file, out_file do |io|
|
321
322
|
here = binding
|
322
323
|
# suppress 1.9.3 warning
|
323
324
|
here.local_variable_set(:asset_rel_prefix, asset_rel_prefix)
|
325
|
+
# some partials rely on the presence of current variable to render
|
326
|
+
here.local_variable_set(:current, @main_page) if @main_page
|
324
327
|
here
|
325
328
|
end
|
326
329
|
rescue => e
|
@@ -780,20 +783,13 @@ class RDoc::Generator::Darkfish
|
|
780
783
|
template
|
781
784
|
end
|
782
785
|
|
783
|
-
# Returns an excerpt of the
|
784
|
-
def excerpt(
|
785
|
-
text = case
|
786
|
+
# Returns an excerpt of the comment for usage in meta description tags
|
787
|
+
def excerpt(comment)
|
788
|
+
text = case comment
|
786
789
|
when RDoc::Comment
|
787
|
-
|
788
|
-
when RDoc::Markup::Document
|
789
|
-
# This case is for page files that are not markdown nor rdoc
|
790
|
-
# We convert them to markdown for now as it's easier to extract the text
|
791
|
-
formatter = RDoc::Markup::ToMarkdown.new
|
792
|
-
formatter.start_accepting
|
793
|
-
formatter.accept_document(content)
|
794
|
-
formatter.end_accepting
|
790
|
+
comment.text
|
795
791
|
else
|
796
|
-
|
792
|
+
comment
|
797
793
|
end
|
798
794
|
|
799
795
|
# Match from a capital letter to the first period, discarding any links, so
|
@@ -7,6 +7,7 @@
|
|
7
7
|
<%= render '_sidebar_search.rhtml' %>
|
8
8
|
</div>
|
9
9
|
|
10
|
+
<%= render '_sidebar_table_of_contents.rhtml' if defined?(current) %>
|
10
11
|
<%= render '_sidebar_pages.rhtml' %>
|
11
12
|
<%= render '_sidebar_classes.rhtml' %>
|
12
13
|
|
@@ -14,10 +15,9 @@
|
|
14
15
|
</nav>
|
15
16
|
|
16
17
|
<main role="main">
|
17
|
-
<%- if @
|
18
|
-
|
19
|
-
<%= main_page.description %>
|
18
|
+
<%- if @main_page %>
|
19
|
+
<%= @main_page.description %>
|
20
20
|
<%- else -%>
|
21
|
-
<p>This is the API documentation for <%= h @title %>.
|
21
|
+
<p>This is the API documentation for <%= h @title %>.
|
22
22
|
<%- end -%>
|
23
23
|
</main>
|
data/lib/rdoc/parser/c.rb
CHANGED
@@ -168,7 +168,7 @@ class RDoc::Parser::C < RDoc::Parser
|
|
168
168
|
# Prepares for parsing a C file. See RDoc::Parser#initialize for details on
|
169
169
|
# the arguments.
|
170
170
|
|
171
|
-
def initialize top_level,
|
171
|
+
def initialize top_level, content, options, stats
|
172
172
|
super
|
173
173
|
|
174
174
|
@known_classes = RDoc::KNOWN_CLASSES.dup
|
@@ -210,8 +210,9 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
|
|
210
210
|
grouped_entries = group_entries entries
|
211
211
|
|
212
212
|
doc = create_document grouped_entries
|
213
|
-
|
214
|
-
|
213
|
+
comment = RDoc::Comment.new(@content)
|
214
|
+
comment.document = doc
|
215
|
+
@top_level.comment = comment
|
215
216
|
|
216
217
|
@top_level
|
217
218
|
end
|
@@ -18,7 +18,7 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
18
18
|
attr_accessor :visibility
|
19
19
|
attr_reader :container, :singleton
|
20
20
|
|
21
|
-
def initialize(top_level,
|
21
|
+
def initialize(top_level, content, options, stats)
|
22
22
|
super
|
23
23
|
|
24
24
|
content = handle_tab_width(content)
|
@@ -31,10 +31,21 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
31
31
|
@track_visibility = :nodoc != @options.visibility
|
32
32
|
@encoding = @options.encoding
|
33
33
|
|
34
|
-
@module_nesting = [top_level]
|
34
|
+
@module_nesting = [[top_level, false]]
|
35
35
|
@container = top_level
|
36
36
|
@visibility = :public
|
37
37
|
@singleton = false
|
38
|
+
@in_proc_block = false
|
39
|
+
end
|
40
|
+
|
41
|
+
# Suppress `extend` and `include` within block
|
42
|
+
# because they might be a metaprogramming block
|
43
|
+
# example: `Module.new { include M }` `M.module_eval { include N }`
|
44
|
+
|
45
|
+
def with_in_proc_block
|
46
|
+
@in_proc_block = true
|
47
|
+
yield
|
48
|
+
@in_proc_block = false
|
38
49
|
end
|
39
50
|
|
40
51
|
# Dive into another container
|
@@ -43,22 +54,24 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
43
54
|
old_container = @container
|
44
55
|
old_visibility = @visibility
|
45
56
|
old_singleton = @singleton
|
57
|
+
old_in_proc_block = @in_proc_block
|
46
58
|
@visibility = :public
|
47
59
|
@container = container
|
48
60
|
@singleton = singleton
|
61
|
+
@in_proc_block = false
|
49
62
|
unless singleton
|
50
|
-
@module_nesting.push container
|
51
|
-
|
52
63
|
# Need to update module parent chain to emulate Module.nesting.
|
53
64
|
# This mechanism is inaccurate and needs to be fixed.
|
54
65
|
container.parent = old_container
|
55
66
|
end
|
67
|
+
@module_nesting.push([container, singleton])
|
56
68
|
yield container
|
57
69
|
ensure
|
58
70
|
@container = old_container
|
59
71
|
@visibility = old_visibility
|
60
72
|
@singleton = old_singleton
|
61
|
-
@
|
73
|
+
@in_proc_block = old_in_proc_block
|
74
|
+
@module_nesting.pop
|
62
75
|
end
|
63
76
|
|
64
77
|
# Records the location of this +container+ in the file for this parser and
|
@@ -204,6 +217,10 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
204
217
|
@stats.add_method meth
|
205
218
|
end
|
206
219
|
|
220
|
+
def has_modifier_nodoc?(line_no) # :nodoc:
|
221
|
+
@modifier_comments[line_no]&.text&.match?(/\A#\s*:nodoc:/)
|
222
|
+
end
|
223
|
+
|
207
224
|
def handle_modifier_directive(code_object, line_no) # :nodoc:
|
208
225
|
comment = @modifier_comments[line_no]
|
209
226
|
@preprocess.handle(comment.text, code_object) if comment
|
@@ -467,6 +484,7 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
467
484
|
end
|
468
485
|
|
469
486
|
def add_includes_extends(names, rdoc_class, line_no) # :nodoc:
|
487
|
+
return if @in_proc_block
|
470
488
|
comment = consecutive_comment(line_no)
|
471
489
|
handle_consecutive_comment_directive(@container, comment)
|
472
490
|
names.each do |name|
|
@@ -492,7 +510,9 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
492
510
|
|
493
511
|
# Adds a method defined by `def` syntax
|
494
512
|
|
495
|
-
def add_method(name, receiver_name:, receiver_fallback_type:, visibility:, singleton:, params:, calls_super:, block_params:, tokens:, start_line:, end_line:)
|
513
|
+
def add_method(name, receiver_name:, receiver_fallback_type:, visibility:, singleton:, params:, calls_super:, block_params:, tokens:, start_line:, args_end_line:, end_line:)
|
514
|
+
return if @in_proc_block
|
515
|
+
|
496
516
|
receiver = receiver_name ? find_or_create_module_path(receiver_name, receiver_fallback_type) : @container
|
497
517
|
meth = RDoc::AnyMethod.new(nil, name)
|
498
518
|
if (comment = consecutive_comment(start_line))
|
@@ -504,20 +524,10 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
504
524
|
meth.comment = comment
|
505
525
|
end
|
506
526
|
handle_modifier_directive(meth, start_line)
|
527
|
+
handle_modifier_directive(meth, args_end_line)
|
507
528
|
handle_modifier_directive(meth, end_line)
|
508
529
|
return unless should_document?(meth)
|
509
530
|
|
510
|
-
|
511
|
-
if meth.name == 'initialize' && !singleton
|
512
|
-
if meth.dont_rename_initialize
|
513
|
-
visibility = :protected
|
514
|
-
else
|
515
|
-
meth.name = 'new'
|
516
|
-
singleton = true
|
517
|
-
visibility = :public
|
518
|
-
end
|
519
|
-
end
|
520
|
-
|
521
531
|
internal_add_method(
|
522
532
|
receiver,
|
523
533
|
meth,
|
@@ -529,6 +539,18 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
529
539
|
block_params: block_params,
|
530
540
|
tokens: tokens
|
531
541
|
)
|
542
|
+
|
543
|
+
# Rename after add_method to register duplicated 'new' and 'initialize'
|
544
|
+
# defined in c and ruby just like the old parser did.
|
545
|
+
if meth.name == 'initialize' && !singleton
|
546
|
+
if meth.dont_rename_initialize
|
547
|
+
meth.visibility = :protected
|
548
|
+
else
|
549
|
+
meth.name = 'new'
|
550
|
+
meth.singleton = true
|
551
|
+
meth.visibility = :public
|
552
|
+
end
|
553
|
+
end
|
532
554
|
end
|
533
555
|
|
534
556
|
private def internal_add_method(container, meth, line_no:, visibility:, singleton:, params:, calls_super:, block_params:, tokens:) # :nodoc:
|
@@ -565,12 +587,17 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
565
587
|
if root_name.empty?
|
566
588
|
mod = @top_level
|
567
589
|
else
|
568
|
-
@module_nesting.reverse_each do |nesting|
|
590
|
+
@module_nesting.reverse_each do |nesting, singleton|
|
591
|
+
next if singleton
|
569
592
|
mod = nesting.find_module_named(root_name)
|
570
593
|
break if mod
|
594
|
+
# If a constant is found and it is not a module or class, RDoc can't document about it.
|
595
|
+
# Return an anonymous module to avoid wrong document creation.
|
596
|
+
return RDoc::NormalModule.new(nil) if nesting.find_constant_named(root_name)
|
571
597
|
end
|
572
|
-
|
573
|
-
mod
|
598
|
+
last_nesting, = @module_nesting.reverse_each.find { |_, singleton| !singleton }
|
599
|
+
return mod || add_module.call(last_nesting, root_name, create_mode) unless name
|
600
|
+
mod ||= add_module.call(last_nesting, root_name, :module)
|
574
601
|
end
|
575
602
|
path.each do |name|
|
576
603
|
mod = mod.find_module_named(name) || add_module.call(mod, name, :module)
|
@@ -584,7 +611,8 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
584
611
|
owner_name, path = constant_path.split('::', 2)
|
585
612
|
return constant_path if owner_name.empty? # ::Foo, ::Foo::Bar
|
586
613
|
mod = nil
|
587
|
-
@module_nesting.reverse_each do |nesting|
|
614
|
+
@module_nesting.reverse_each do |nesting, singleton|
|
615
|
+
next if singleton
|
588
616
|
mod = nesting.find_module_named(owner_name)
|
589
617
|
break if mod
|
590
618
|
end
|
@@ -598,7 +626,10 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
598
626
|
def find_or_create_constant_owner_name(constant_path)
|
599
627
|
const_path, colon, name = constant_path.rpartition('::')
|
600
628
|
if colon.empty? # class Foo
|
601
|
-
|
629
|
+
# Within `class C` or `module C`, owner is C(== current container)
|
630
|
+
# Within `class <<C`, owner is C.singleton_class
|
631
|
+
# but RDoc don't track constants of a singleton class of module
|
632
|
+
[(@singleton ? nil : @container), name]
|
602
633
|
elsif const_path.empty? # class ::Foo
|
603
634
|
[@top_level, name]
|
604
635
|
else # `class Foo::Bar` or `class ::Foo::Bar`
|
@@ -612,6 +643,8 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
612
643
|
comment = consecutive_comment(start_line)
|
613
644
|
handle_consecutive_comment_directive(@container, comment)
|
614
645
|
owner, name = find_or_create_constant_owner_name(constant_name)
|
646
|
+
return unless owner
|
647
|
+
|
615
648
|
constant = RDoc::Constant.new(name, rhs_name, comment)
|
616
649
|
constant.store = @store
|
617
650
|
constant.line = start_line
|
@@ -635,12 +668,14 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
635
668
|
|
636
669
|
# Adds module or class
|
637
670
|
|
638
|
-
def add_module_or_class(module_name, start_line, end_line, is_class: false, superclass_name: nil)
|
671
|
+
def add_module_or_class(module_name, start_line, end_line, is_class: false, superclass_name: nil, superclass_expr: nil)
|
639
672
|
comment = consecutive_comment(start_line)
|
640
673
|
handle_consecutive_comment_directive(@container, comment)
|
641
674
|
return unless @container.document_children
|
642
675
|
|
643
676
|
owner, name = find_or_create_constant_owner_name(module_name)
|
677
|
+
return unless owner
|
678
|
+
|
644
679
|
if is_class
|
645
680
|
# RDoc::NormalClass resolves superclass name despite of the lack of module nesting information.
|
646
681
|
# We need to fix it when RDoc::NormalClass resolved to a wrong constant name
|
@@ -648,13 +683,14 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
648
683
|
superclass_full_path = resolve_constant_path(superclass_name)
|
649
684
|
superclass = @store.find_class_or_module(superclass_full_path) if superclass_full_path
|
650
685
|
superclass_full_path ||= superclass_name
|
686
|
+
superclass_full_path = superclass_full_path.sub(/^::/, '')
|
651
687
|
end
|
652
688
|
# add_class should be done after resolving superclass
|
653
|
-
mod = owner.classes_hash[name] || owner.add_class(RDoc::NormalClass, name, superclass_name || '::Object')
|
689
|
+
mod = owner.classes_hash[name] || owner.add_class(RDoc::NormalClass, name, superclass_name || superclass_expr || '::Object')
|
654
690
|
if superclass_name
|
655
691
|
if superclass
|
656
692
|
mod.superclass = superclass
|
657
|
-
elsif mod.superclass.is_a?(String) && mod.superclass != superclass_full_path
|
693
|
+
elsif (mod.superclass.is_a?(String) || mod.superclass.name == 'Object') && mod.superclass != superclass_full_path
|
658
694
|
mod.superclass = superclass_full_path
|
659
695
|
end
|
660
696
|
end
|
@@ -678,6 +714,20 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
678
714
|
@store = store
|
679
715
|
end
|
680
716
|
|
717
|
+
def visit_if_node(node)
|
718
|
+
if node.end_keyword
|
719
|
+
super
|
720
|
+
else
|
721
|
+
# Visit with the order in text representation to handle this method comment
|
722
|
+
# # comment
|
723
|
+
# def f
|
724
|
+
# end if call_node
|
725
|
+
node.statements.accept(self)
|
726
|
+
node.predicate.accept(self)
|
727
|
+
end
|
728
|
+
end
|
729
|
+
alias visit_unless_node visit_if_node
|
730
|
+
|
681
731
|
def visit_call_node(node)
|
682
732
|
@scanner.process_comments_until(node.location.start_line - 1)
|
683
733
|
if node.receiver.nil?
|
@@ -715,6 +765,7 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
715
765
|
when :private_class_method
|
716
766
|
_visit_call_public_private_class_method(node, :private) { super }
|
717
767
|
else
|
768
|
+
node.arguments&.accept(self)
|
718
769
|
super
|
719
770
|
end
|
720
771
|
else
|
@@ -722,6 +773,13 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
722
773
|
end
|
723
774
|
end
|
724
775
|
|
776
|
+
def visit_block_node(node)
|
777
|
+
@scanner.with_in_proc_block do
|
778
|
+
# include, extend and method definition inside block are not documentable
|
779
|
+
super
|
780
|
+
end
|
781
|
+
end
|
782
|
+
|
725
783
|
def visit_alias_method_node(node)
|
726
784
|
@scanner.process_comments_until(node.location.start_line - 1)
|
727
785
|
return unless node.old_name.is_a?(Prism::SymbolNode) && node.new_name.is_a?(Prism::SymbolNode)
|
@@ -729,12 +787,13 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
729
787
|
end
|
730
788
|
|
731
789
|
def visit_module_node(node)
|
790
|
+
node.constant_path.accept(self)
|
732
791
|
@scanner.process_comments_until(node.location.start_line - 1)
|
733
792
|
module_name = constant_path_string(node.constant_path)
|
734
793
|
mod = @scanner.add_module_or_class(module_name, node.location.start_line, node.location.end_line) if module_name
|
735
794
|
if mod
|
736
795
|
@scanner.with_container(mod) do
|
737
|
-
|
796
|
+
node.body&.accept(self)
|
738
797
|
@scanner.process_comments_until(node.location.end_line)
|
739
798
|
end
|
740
799
|
else
|
@@ -743,13 +802,16 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
743
802
|
end
|
744
803
|
|
745
804
|
def visit_class_node(node)
|
805
|
+
node.constant_path.accept(self)
|
806
|
+
node.superclass&.accept(self)
|
746
807
|
@scanner.process_comments_until(node.location.start_line - 1)
|
747
808
|
superclass_name = constant_path_string(node.superclass) if node.superclass
|
809
|
+
superclass_expr = node.superclass.slice if node.superclass && !superclass_name
|
748
810
|
class_name = constant_path_string(node.constant_path)
|
749
|
-
klass = @scanner.add_module_or_class(class_name, node.location.start_line, node.location.end_line, is_class: true, superclass_name: superclass_name) if class_name
|
811
|
+
klass = @scanner.add_module_or_class(class_name, node.location.start_line, node.location.end_line, is_class: true, superclass_name: superclass_name, superclass_expr: superclass_expr) if class_name
|
750
812
|
if klass
|
751
813
|
@scanner.with_container(klass) do
|
752
|
-
|
814
|
+
node.body&.accept(self)
|
753
815
|
@scanner.process_comments_until(node.location.end_line)
|
754
816
|
end
|
755
817
|
else
|
@@ -760,6 +822,12 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
760
822
|
def visit_singleton_class_node(node)
|
761
823
|
@scanner.process_comments_until(node.location.start_line - 1)
|
762
824
|
|
825
|
+
if @scanner.has_modifier_nodoc?(node.location.start_line)
|
826
|
+
# Skip visiting inside the singleton class. Also skips creation of node.expression as a module
|
827
|
+
@scanner.skip_comments_until(node.location.end_line)
|
828
|
+
return
|
829
|
+
end
|
830
|
+
|
763
831
|
expression = node.expression
|
764
832
|
expression = expression.body.body.first if expression.is_a?(Prism::ParenthesesNode) && expression.body&.body&.size == 1
|
765
833
|
|
@@ -774,9 +842,10 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
774
842
|
when Prism::SelfNode
|
775
843
|
mod = @scanner.container if @scanner.container != @top_level
|
776
844
|
end
|
845
|
+
expression.accept(self)
|
777
846
|
if mod
|
778
847
|
@scanner.with_container(mod, singleton: true) do
|
779
|
-
|
848
|
+
node.body&.accept(self)
|
780
849
|
@scanner.process_comments_until(node.location.end_line)
|
781
850
|
end
|
782
851
|
else
|
@@ -786,6 +855,7 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
786
855
|
|
787
856
|
def visit_def_node(node)
|
788
857
|
start_line = node.location.start_line
|
858
|
+
args_end_line = node.parameters&.location&.end_line || start_line
|
789
859
|
end_line = node.location.end_line
|
790
860
|
@scanner.process_comments_until(start_line - 1)
|
791
861
|
|
@@ -836,6 +906,7 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
836
906
|
calls_super: calls_super,
|
837
907
|
tokens: tokens,
|
838
908
|
start_line: start_line,
|
909
|
+
args_end_line: args_end_line,
|
839
910
|
end_line: end_line
|
840
911
|
)
|
841
912
|
ensure
|
@@ -944,7 +1015,7 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
944
1015
|
@scanner.visibility = visibility
|
945
1016
|
else # `public :foo, :bar`, `private def foo; end`
|
946
1017
|
yield
|
947
|
-
names = visibility_method_arguments(call_node, singleton:
|
1018
|
+
names = visibility_method_arguments(call_node, singleton: false)
|
948
1019
|
@scanner.change_method_visibility(names, visibility) if names
|
949
1020
|
end
|
950
1021
|
end
|
data/lib/rdoc/parser/ruby.rb
CHANGED
@@ -170,7 +170,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
|
|
170
170
|
##
|
171
171
|
# Creates a new Ruby parser.
|
172
172
|
|
173
|
-
def initialize(top_level,
|
173
|
+
def initialize(top_level, content, options, stats)
|
174
174
|
super
|
175
175
|
|
176
176
|
content = handle_tab_width(content)
|
data/lib/rdoc/parser/simple.rb
CHANGED
@@ -14,7 +14,7 @@ class RDoc::Parser::Simple < RDoc::Parser
|
|
14
14
|
##
|
15
15
|
# Prepare to parse a plain file
|
16
16
|
|
17
|
-
def initialize(top_level,
|
17
|
+
def initialize(top_level, content, options, stats)
|
18
18
|
super
|
19
19
|
|
20
20
|
preprocess = RDoc::Markup::PreProcess.new @file_name, @options.rdoc_include
|
data/lib/rdoc/parser.rb
CHANGED
@@ -191,7 +191,7 @@ class RDoc::Parser
|
|
191
191
|
|
192
192
|
content = remove_modeline content
|
193
193
|
|
194
|
-
parser.new top_level,
|
194
|
+
parser.new top_level, content, options, stats
|
195
195
|
rescue SystemCallError
|
196
196
|
nil
|
197
197
|
end
|
@@ -252,12 +252,12 @@ class RDoc::Parser
|
|
252
252
|
# RDoc::Markup::PreProcess object is created which allows processing of
|
253
253
|
# directives.
|
254
254
|
|
255
|
-
def initialize top_level,
|
255
|
+
def initialize top_level, content, options, stats
|
256
256
|
@top_level = top_level
|
257
257
|
@top_level.parser = self.class
|
258
258
|
@store = @top_level.store
|
259
259
|
|
260
|
-
@file_name =
|
260
|
+
@file_name = top_level.absolute_name
|
261
261
|
@content = content
|
262
262
|
@options = options
|
263
263
|
@stats = stats
|
data/lib/rdoc/ri/driver.rb
CHANGED
@@ -518,7 +518,7 @@ or the PAGER environment variable.
|
|
518
518
|
with.each do |incl|
|
519
519
|
out << RDoc::Markup::Paragraph.new(incl.name)
|
520
520
|
out << RDoc::Markup::BlankLine.new
|
521
|
-
out << incl.comment
|
521
|
+
out << incl.comment.parse
|
522
522
|
end
|
523
523
|
|
524
524
|
unless wout.empty? then
|
@@ -542,7 +542,7 @@ or the PAGER environment variable.
|
|
542
542
|
|
543
543
|
if include.comment then
|
544
544
|
out << RDoc::Markup::BlankLine.new
|
545
|
-
out << include.comment
|
545
|
+
out << include.comment.parse
|
546
546
|
end
|
547
547
|
end
|
548
548
|
|
@@ -657,12 +657,12 @@ or the PAGER environment variable.
|
|
657
657
|
##
|
658
658
|
# Adds the class +comment+ to +out+.
|
659
659
|
|
660
|
-
def class_document_comment out,
|
661
|
-
unless
|
660
|
+
def class_document_comment out, document # :nodoc:
|
661
|
+
unless document.empty? then
|
662
662
|
out << RDoc::Markup::Rule.new(1)
|
663
663
|
|
664
|
-
if
|
665
|
-
parts =
|
664
|
+
if document.merged? then
|
665
|
+
parts = document.parts
|
666
666
|
parts = parts.zip [RDoc::Markup::BlankLine.new] * parts.length
|
667
667
|
parts.flatten!
|
668
668
|
parts.pop
|
@@ -687,7 +687,7 @@ or the PAGER environment variable.
|
|
687
687
|
constants = klass.constants.sort_by { |constant| constant.name }
|
688
688
|
|
689
689
|
list.items.concat constants.map { |constant|
|
690
|
-
parts = constant.comment.parts
|
690
|
+
parts = constant.comment.parse.parts
|
691
691
|
parts << RDoc::Markup::Paragraph.new('[not documented]') if
|
692
692
|
parts.empty?
|
693
693
|
|
@@ -906,7 +906,7 @@ or the PAGER environment variable.
|
|
906
906
|
|
907
907
|
page = store.load_page page_name
|
908
908
|
|
909
|
-
display page.comment
|
909
|
+
display page.comment.parse
|
910
910
|
end
|
911
911
|
|
912
912
|
##
|
@@ -1207,7 +1207,8 @@ or the PAGER environment variable.
|
|
1207
1207
|
|
1208
1208
|
store.load_method klass, "#{type}#{method}"
|
1209
1209
|
rescue RDoc::Store::MissingFileError => e
|
1210
|
-
comment = RDoc::Comment.new("missing documentation at #{e.file}")
|
1210
|
+
comment = RDoc::Comment.new("missing documentation at #{e.file}")
|
1211
|
+
comment.parse
|
1211
1212
|
|
1212
1213
|
method = RDoc::AnyMethod.new nil, name
|
1213
1214
|
method.comment = comment
|
@@ -1367,13 +1368,13 @@ or the PAGER environment variable.
|
|
1367
1368
|
# documentable items the class is added to +also_in+ instead.
|
1368
1369
|
|
1369
1370
|
def render_class out, store, klass, also_in # :nodoc:
|
1370
|
-
|
1371
|
+
document = klass.comment.parse
|
1371
1372
|
# TODO the store's cache should always return an empty Array
|
1372
1373
|
class_methods = store.class_methods[klass.full_name] || []
|
1373
1374
|
instance_methods = store.instance_methods[klass.full_name] || []
|
1374
1375
|
attributes = store.attributes[klass.full_name] || []
|
1375
1376
|
|
1376
|
-
if
|
1377
|
+
if document.empty? and
|
1377
1378
|
instance_methods.empty? and class_methods.empty? then
|
1378
1379
|
also_in << store
|
1379
1380
|
return
|
@@ -1381,7 +1382,7 @@ or the PAGER environment variable.
|
|
1381
1382
|
|
1382
1383
|
add_from out, store
|
1383
1384
|
|
1384
|
-
class_document_comment out,
|
1385
|
+
class_document_comment out, document
|
1385
1386
|
|
1386
1387
|
if class_methods or instance_methods or not klass.constants.empty? then
|
1387
1388
|
out << RDoc::Markup::Rule.new(1)
|
@@ -1429,16 +1430,16 @@ or the PAGER environment variable.
|
|
1429
1430
|
if alias_for
|
1430
1431
|
unless method.comment.nil? or method.comment.empty?
|
1431
1432
|
out << RDoc::Markup::BlankLine.new
|
1432
|
-
out << method.comment
|
1433
|
+
out << method.comment.parse
|
1433
1434
|
end
|
1434
1435
|
out << RDoc::Markup::BlankLine.new
|
1435
1436
|
out << RDoc::Markup::Paragraph.new("(This method is an alias for #{alias_for.full_name}.)")
|
1436
1437
|
out << RDoc::Markup::BlankLine.new
|
1437
|
-
out << alias_for.comment
|
1438
|
+
out << alias_for.comment.parse
|
1438
1439
|
out << RDoc::Markup::BlankLine.new
|
1439
1440
|
else
|
1440
1441
|
out << RDoc::Markup::BlankLine.new
|
1441
|
-
out << method.comment
|
1442
|
+
out << method.comment.parse
|
1442
1443
|
out << RDoc::Markup::BlankLine.new
|
1443
1444
|
end
|
1444
1445
|
end
|
@@ -1551,7 +1552,7 @@ or the PAGER environment variable.
|
|
1551
1552
|
found_pages.each do |page|
|
1552
1553
|
out << RDoc::Markup::Heading.new(4, "Expanded from #{page.full_name}")
|
1553
1554
|
out << RDoc::Markup::BlankLine.new
|
1554
|
-
out << page.comment
|
1555
|
+
out << page.comment.parse
|
1555
1556
|
end
|
1556
1557
|
end
|
1557
1558
|
end
|
data/lib/rdoc/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Hodel
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
- ITOYANAGI Sakura
|
14
14
|
bindir: exe
|
15
15
|
cert_chain: []
|
16
|
-
date: 2025-
|
16
|
+
date: 2025-02-06 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: psych
|