rdoc 5.1.0 → 6.13.1
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 +5 -5
- data/CONTRIBUTING.rdoc +5 -6
- data/ExampleMarkdown.md +2 -0
- data/ExampleRDoc.rdoc +2 -0
- data/History.rdoc +68 -66
- data/LEGAL.rdoc +1 -1
- data/LICENSE.rdoc +2 -0
- data/README.rdoc +18 -6
- data/RI.md +842 -0
- data/TODO.rdoc +8 -7
- data/exe/rdoc +0 -1
- data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -12
- data/lib/rdoc/{anon_class.rb → code_object/anon_class.rb} +1 -2
- data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +83 -26
- data/lib/rdoc/{attr.rb → code_object/attr.rb} +5 -9
- data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +112 -24
- data/lib/rdoc/{constant.rb → code_object/constant.rb} +4 -5
- data/lib/rdoc/{context → code_object/context}/section.rb +13 -83
- data/lib/rdoc/{context.rb → code_object/context.rb} +69 -70
- data/lib/rdoc/{extend.rb → code_object/extend.rb} +1 -2
- data/lib/rdoc/{ghost_method.rb → code_object/ghost_method.rb} +1 -2
- data/lib/rdoc/{include.rb → code_object/include.rb} +1 -2
- data/lib/rdoc/{meta_method.rb → code_object/meta_method.rb} +1 -2
- data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +22 -31
- data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +1 -2
- data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +4 -5
- data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
- data/lib/rdoc/{require.rb → code_object/require.rb} +2 -3
- data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +6 -2
- data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +22 -32
- data/lib/rdoc/code_object.rb +8 -41
- data/lib/rdoc/code_objects.rb +2 -3
- data/lib/rdoc/comment.rb +48 -41
- data/lib/rdoc/cross_reference.rb +77 -33
- data/lib/rdoc/encoding.rb +50 -38
- data/lib/rdoc/erb_partial.rb +2 -3
- data/lib/rdoc/erbio.rb +4 -5
- data/lib/rdoc/generator/darkfish.rb +178 -125
- data/lib/rdoc/generator/json_index.rb +9 -22
- data/lib/rdoc/generator/markup.rb +6 -17
- data/lib/rdoc/generator/pot/message_extractor.rb +4 -4
- data/lib/rdoc/generator/pot/po.rb +3 -3
- data/lib/rdoc/generator/pot/po_entry.rb +12 -12
- data/lib/rdoc/generator/pot.rb +4 -8
- data/lib/rdoc/generator/ri.rb +1 -2
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -12
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +19 -10
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +26 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
- data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +1 -1
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +27 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
- data/lib/rdoc/generator/template/darkfish/class.rhtml +125 -78
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +430 -339
- data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/index.rhtml +13 -13
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -92
- data/lib/rdoc/generator/template/darkfish/js/search.js +35 -34
- data/lib/rdoc/generator/template/darkfish/page.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +10 -8
- data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +20 -18
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +32 -20
- data/lib/rdoc/generator/template/json_index/js/navigation.js +12 -49
- data/lib/rdoc/generator/template/json_index/js/searcher.js +6 -6
- data/lib/rdoc/generator.rb +6 -6
- data/lib/rdoc/i18n/locale.rb +1 -1
- data/lib/rdoc/i18n/text.rb +5 -5
- data/lib/rdoc/i18n.rb +4 -4
- data/lib/rdoc/known_classes.rb +6 -5
- data/lib/rdoc/markdown/entities.rb +1 -2
- data/lib/rdoc/markdown/literals.kpeg +1 -2
- data/lib/rdoc/markdown/literals.rb +99 -50
- data/lib/rdoc/markdown.kpeg +115 -58
- data/lib/rdoc/markdown.rb +1584 -902
- data/lib/rdoc/markup/attr_changer.rb +1 -2
- data/lib/rdoc/markup/attr_span.rb +9 -4
- data/lib/rdoc/markup/attribute_manager.rb +118 -57
- data/lib/rdoc/markup/attributes.rb +7 -8
- data/lib/rdoc/markup/blank_line.rb +1 -2
- data/lib/rdoc/markup/block_quote.rb +1 -2
- data/lib/rdoc/markup/document.rb +1 -2
- data/lib/rdoc/markup/formatter.rb +44 -37
- data/lib/rdoc/markup/hard_break.rb +1 -2
- data/lib/rdoc/markup/heading.rb +11 -6
- data/lib/rdoc/markup/include.rb +1 -2
- data/lib/rdoc/markup/indented_paragraph.rb +1 -2
- data/lib/rdoc/markup/list.rb +1 -2
- data/lib/rdoc/markup/list_item.rb +1 -2
- data/lib/rdoc/markup/paragraph.rb +1 -2
- data/lib/rdoc/markup/parser.rb +90 -48
- data/lib/rdoc/markup/pre_process.rb +38 -11
- data/lib/rdoc/markup/raw.rb +1 -2
- data/lib/rdoc/markup/regexp_handling.rb +40 -0
- data/lib/rdoc/markup/rule.rb +1 -2
- data/lib/rdoc/markup/table.rb +56 -0
- data/lib/rdoc/markup/to_ansi.rb +1 -2
- data/lib/rdoc/markup/to_bs.rb +30 -5
- data/lib/rdoc/markup/to_html.rb +95 -40
- data/lib/rdoc/markup/to_html_crossref.rb +108 -43
- data/lib/rdoc/markup/to_html_snippet.rb +13 -11
- data/lib/rdoc/markup/to_joined_paragraph.rb +6 -32
- data/lib/rdoc/markup/to_label.rb +11 -12
- data/lib/rdoc/markup/to_markdown.rb +13 -14
- data/lib/rdoc/markup/to_rdoc.rb +49 -31
- data/lib/rdoc/markup/to_table_of_contents.rb +2 -2
- data/lib/rdoc/markup/to_test.rb +1 -2
- data/lib/rdoc/markup/to_tt_only.rb +3 -4
- data/lib/rdoc/markup/verbatim.rb +1 -2
- data/lib/rdoc/markup.rb +64 -694
- data/lib/rdoc/options.rb +226 -44
- data/lib/rdoc/parser/c.rb +231 -246
- data/lib/rdoc/parser/changelog.rb +169 -23
- data/lib/rdoc/parser/markdown.rb +1 -3
- data/lib/rdoc/parser/prism_ruby.rb +1092 -0
- data/lib/rdoc/parser/rd.rb +1 -2
- data/lib/rdoc/parser/ripper_state_lex.rb +302 -0
- data/lib/rdoc/parser/ruby.rb +695 -478
- data/lib/rdoc/parser/ruby_tools.rb +33 -36
- data/lib/rdoc/parser/simple.rb +4 -4
- data/lib/rdoc/parser/text.rb +1 -2
- data/lib/rdoc/parser.rb +37 -42
- data/lib/rdoc/rd/block_parser.rb +708 -57
- data/lib/rdoc/rd/block_parser.ry +15 -11
- data/lib/rdoc/rd/inline.rb +5 -6
- data/lib/rdoc/rd/inline_parser.rb +787 -140
- data/lib/rdoc/rd/inline_parser.ry +1 -1
- data/lib/rdoc/rd.rb +4 -5
- data/lib/rdoc/rdoc.rb +72 -87
- data/lib/rdoc/ri/driver.rb +236 -152
- data/lib/rdoc/ri/formatter.rb +1 -1
- data/lib/rdoc/ri/paths.rb +4 -18
- data/lib/rdoc/ri/store.rb +1 -2
- data/lib/rdoc/ri/task.rb +2 -2
- data/lib/rdoc/ri.rb +5 -6
- data/lib/rdoc/rubygems_hook.rb +98 -20
- data/lib/rdoc/servlet.rb +30 -20
- data/lib/rdoc/stats/normal.rb +24 -18
- data/lib/rdoc/stats/quiet.rb +1 -2
- data/lib/rdoc/stats/verbose.rb +1 -3
- data/lib/rdoc/stats.rb +6 -7
- data/lib/rdoc/store.rb +84 -55
- data/lib/rdoc/task.rb +35 -10
- data/lib/rdoc/text.rb +40 -27
- data/lib/rdoc/token_stream.rb +56 -34
- data/lib/rdoc/tom_doc.rb +18 -19
- data/lib/rdoc/version.rb +10 -0
- data/lib/rdoc.rb +80 -56
- data/lib/rubygems_plugin.rb +23 -0
- data/man/ri.1 +247 -0
- metadata +45 -99
- data/.document +0 -5
- data/.gitignore +0 -13
- data/.travis.yml +0 -24
- data/Gemfile +0 -3
- data/RI.rdoc +0 -57
- data/Rakefile +0 -133
- data/bin/console +0 -7
- data/bin/setup +0 -6
- data/lib/gauntlet_rdoc.rb +0 -82
- data/lib/rdoc/generator/template/darkfish/.document +0 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
- data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
- data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
- data/lib/rdoc/generator/template/json_index/.document +0 -1
- data/lib/rdoc/markup/formatter_test_case.rb +0 -764
- data/lib/rdoc/markup/inline.rb +0 -2
- data/lib/rdoc/markup/special.rb +0 -41
- data/lib/rdoc/markup/text_formatter_test_case.rb +0 -115
- data/lib/rdoc/ruby_lex.rb +0 -1367
- data/lib/rdoc/ruby_token.rb +0 -461
- data/lib/rdoc/test_case.rb +0 -204
- data/rdoc.gemspec +0 -57
data/lib/rdoc/store.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
require 'fileutils'
|
3
3
|
|
4
4
|
##
|
@@ -94,11 +94,7 @@ class RDoc::Store
|
|
94
94
|
|
95
95
|
attr_accessor :path
|
96
96
|
|
97
|
-
|
98
|
-
# The RDoc::RDoc driver for this parse tree. This allows classes consulting
|
99
|
-
# the documentation tree to access user-set options, for example.
|
100
|
-
|
101
|
-
attr_accessor :rdoc
|
97
|
+
attr_reader :options
|
102
98
|
|
103
99
|
##
|
104
100
|
# Type of ri datastore this was loaded from. See RDoc::RI::Driver,
|
@@ -116,14 +112,19 @@ class RDoc::Store
|
|
116
112
|
|
117
113
|
attr_accessor :encoding
|
118
114
|
|
115
|
+
##
|
116
|
+
# The lazy constants alias will be discovered in passing
|
117
|
+
|
118
|
+
attr_reader :unmatched_constant_alias
|
119
|
+
|
119
120
|
##
|
120
121
|
# Creates a new Store of +type+ that will load or save to +path+
|
121
122
|
|
122
|
-
def initialize path
|
123
|
-
@
|
124
|
-
@
|
125
|
-
@
|
126
|
-
@
|
123
|
+
def initialize(options, path: nil, type: nil)
|
124
|
+
@options = options
|
125
|
+
@dry_run = options.dry_run
|
126
|
+
@encoding = options.encoding
|
127
|
+
@path = path || options.op_dir
|
127
128
|
@type = type
|
128
129
|
|
129
130
|
@cache = {
|
@@ -134,15 +135,16 @@ class RDoc::Store
|
|
134
135
|
:c_singleton_class_variables => {},
|
135
136
|
:encoding => @encoding,
|
136
137
|
:instance_methods => {},
|
137
|
-
:main =>
|
138
|
+
:main => options.main_page,
|
138
139
|
:modules => [],
|
139
140
|
:pages => [],
|
140
|
-
:title =>
|
141
|
+
:title => options.title,
|
141
142
|
}
|
142
143
|
|
143
144
|
@classes_hash = {}
|
144
145
|
@modules_hash = {}
|
145
146
|
@files_hash = {}
|
147
|
+
@text_files_hash = {}
|
146
148
|
|
147
149
|
@c_enclosure_classes = {}
|
148
150
|
@c_enclosure_names = {}
|
@@ -152,6 +154,8 @@ class RDoc::Store
|
|
152
154
|
|
153
155
|
@unique_classes = nil
|
154
156
|
@unique_modules = nil
|
157
|
+
|
158
|
+
@unmatched_constant_alias = {}
|
155
159
|
end
|
156
160
|
|
157
161
|
##
|
@@ -177,16 +181,39 @@ class RDoc::Store
|
|
177
181
|
# Adds the file with +name+ as an RDoc::TopLevel to the store. Returns the
|
178
182
|
# created RDoc::TopLevel.
|
179
183
|
|
180
|
-
def add_file absolute_name, relative_name
|
184
|
+
def add_file absolute_name, relative_name: absolute_name, parser: nil
|
181
185
|
unless top_level = @files_hash[relative_name] then
|
182
186
|
top_level = RDoc::TopLevel.new absolute_name, relative_name
|
187
|
+
top_level.parser = parser if parser
|
183
188
|
top_level.store = self
|
184
189
|
@files_hash[relative_name] = top_level
|
190
|
+
@text_files_hash[relative_name] = top_level if top_level.text?
|
185
191
|
end
|
186
192
|
|
187
193
|
top_level
|
188
194
|
end
|
189
195
|
|
196
|
+
##
|
197
|
+
# Make sure any references to C variable names are resolved to the corresponding class.
|
198
|
+
#
|
199
|
+
|
200
|
+
def resolve_c_superclasses
|
201
|
+
@classes_hash.each_value do |klass|
|
202
|
+
if klass.superclass.is_a?(String) && (candidate = find_c_enclosure(klass.superclass))
|
203
|
+
klass.superclass = candidate
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
##
|
209
|
+
# Sets the parser of +absolute_name+, unless it from a source code file.
|
210
|
+
|
211
|
+
def update_parser_of_file(absolute_name, parser)
|
212
|
+
if top_level = @files_hash[absolute_name] then
|
213
|
+
@text_files_hash[absolute_name] = top_level if top_level.text?
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
190
217
|
##
|
191
218
|
# Returns all classes discovered by RDoc
|
192
219
|
|
@@ -421,8 +448,8 @@ class RDoc::Store
|
|
421
448
|
# +file_name+
|
422
449
|
|
423
450
|
def find_text_page file_name
|
424
|
-
@
|
425
|
-
file.
|
451
|
+
@text_files_hash.each_value.find do |file|
|
452
|
+
file.full_name == file_name
|
426
453
|
end
|
427
454
|
end
|
428
455
|
|
@@ -466,7 +493,7 @@ class RDoc::Store
|
|
466
493
|
when :gem then
|
467
494
|
parent = File.expand_path '..', @path
|
468
495
|
"gem #{File.basename parent}"
|
469
|
-
when :home then
|
496
|
+
when :home then RDoc.home
|
470
497
|
when :site then 'ruby site'
|
471
498
|
when :system then 'ruby core'
|
472
499
|
else @path
|
@@ -530,6 +557,7 @@ class RDoc::Store
|
|
530
557
|
@cache[:pages].each do |page_name|
|
531
558
|
page = load_page page_name
|
532
559
|
@files_hash[page_name] = page
|
560
|
+
@text_files_hash[page_name] = page if page.text?
|
533
561
|
end
|
534
562
|
end
|
535
563
|
|
@@ -539,9 +567,7 @@ class RDoc::Store
|
|
539
567
|
def load_cache
|
540
568
|
#orig_enc = @encoding
|
541
569
|
|
542
|
-
|
543
|
-
@cache = Marshal.load io.read
|
544
|
-
end
|
570
|
+
@cache = marshal_load(cache_path)
|
545
571
|
|
546
572
|
load_enc = @cache[:encoding]
|
547
573
|
|
@@ -585,6 +611,8 @@ class RDoc::Store
|
|
585
611
|
case obj
|
586
612
|
when RDoc::NormalClass then
|
587
613
|
@classes_hash[klass_name] = obj
|
614
|
+
when RDoc::SingleClass then
|
615
|
+
@classes_hash[klass_name] = obj
|
588
616
|
when RDoc::NormalModule then
|
589
617
|
@modules_hash[klass_name] = obj
|
590
618
|
end
|
@@ -596,9 +624,7 @@ class RDoc::Store
|
|
596
624
|
def load_class_data klass_name
|
597
625
|
file = class_file klass_name
|
598
626
|
|
599
|
-
|
600
|
-
Marshal.load io.read
|
601
|
-
end
|
627
|
+
marshal_load(file)
|
602
628
|
rescue Errno::ENOENT => e
|
603
629
|
error = MissingFileError.new(self, file, klass_name)
|
604
630
|
error.set_backtrace e.backtrace
|
@@ -611,14 +637,10 @@ class RDoc::Store
|
|
611
637
|
def load_method klass_name, method_name
|
612
638
|
file = method_file klass_name, method_name
|
613
639
|
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
find_class_or_module(klass_name) || load_class(klass_name) unless
|
619
|
-
obj.parent
|
620
|
-
obj
|
621
|
-
end
|
640
|
+
obj = marshal_load(file)
|
641
|
+
obj.store = self
|
642
|
+
obj.parent ||= find_class_or_module(klass_name) || load_class(klass_name)
|
643
|
+
obj
|
622
644
|
rescue Errno::ENOENT => e
|
623
645
|
error = MissingFileError.new(self, file, klass_name + method_name)
|
624
646
|
error.set_backtrace e.backtrace
|
@@ -631,11 +653,9 @@ class RDoc::Store
|
|
631
653
|
def load_page page_name
|
632
654
|
file = page_file page_name
|
633
655
|
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
obj
|
638
|
-
end
|
656
|
+
obj = marshal_load(file)
|
657
|
+
obj.store = self
|
658
|
+
obj
|
639
659
|
rescue Errno::ENOENT => e
|
640
660
|
error = MissingFileError.new(self, file, page_name)
|
641
661
|
error.set_backtrace e.backtrace
|
@@ -703,8 +723,8 @@ class RDoc::Store
|
|
703
723
|
# Returns the RDoc::TopLevel that is a text file and has the given +name+
|
704
724
|
|
705
725
|
def page name
|
706
|
-
@
|
707
|
-
file.
|
726
|
+
@text_files_hash.each_value.find do |file|
|
727
|
+
file.page_name == name or file.base_name == name
|
708
728
|
end
|
709
729
|
end
|
710
730
|
|
@@ -742,7 +762,7 @@ class RDoc::Store
|
|
742
762
|
save_method klass, method
|
743
763
|
end
|
744
764
|
|
745
|
-
klass.
|
765
|
+
klass.attributes.each do |attribute|
|
746
766
|
save_method klass, attribute
|
747
767
|
end
|
748
768
|
end
|
@@ -776,10 +796,8 @@ class RDoc::Store
|
|
776
796
|
|
777
797
|
return if @dry_run
|
778
798
|
|
779
|
-
|
780
|
-
|
781
|
-
open cache_path, 'wb' do |io|
|
782
|
-
io.write marshal
|
799
|
+
File.open cache_path, 'wb' do |io|
|
800
|
+
Marshal.dump @cache, io
|
783
801
|
end
|
784
802
|
end
|
785
803
|
|
@@ -852,10 +870,8 @@ class RDoc::Store
|
|
852
870
|
|
853
871
|
FileUtils.rm_f to_delete
|
854
872
|
|
855
|
-
|
856
|
-
|
857
|
-
open path, 'wb' do |io|
|
858
|
-
io.write marshal
|
873
|
+
File.open path, 'wb' do |io|
|
874
|
+
Marshal.dump klass, io
|
859
875
|
end
|
860
876
|
end
|
861
877
|
|
@@ -877,10 +893,8 @@ class RDoc::Store
|
|
877
893
|
|
878
894
|
return if @dry_run
|
879
895
|
|
880
|
-
|
881
|
-
|
882
|
-
open method_file(full_name, method.full_name), 'wb' do |io|
|
883
|
-
io.write marshal
|
896
|
+
File.open method_file(full_name, method.full_name), 'wb' do |io|
|
897
|
+
Marshal.dump method, io
|
884
898
|
end
|
885
899
|
end
|
886
900
|
|
@@ -899,10 +913,8 @@ class RDoc::Store
|
|
899
913
|
|
900
914
|
return if @dry_run
|
901
915
|
|
902
|
-
|
903
|
-
|
904
|
-
open path, 'wb' do |io|
|
905
|
-
io.write marshal
|
916
|
+
File.open path, 'wb' do |io|
|
917
|
+
Marshal.dump page, io
|
906
918
|
end
|
907
919
|
end
|
908
920
|
|
@@ -965,4 +977,21 @@ class RDoc::Store
|
|
965
977
|
@unique_modules
|
966
978
|
end
|
967
979
|
|
980
|
+
private
|
981
|
+
def marshal_load(file)
|
982
|
+
File.open(file, 'rb') {|io| Marshal.load(io, MarshalFilter)}
|
983
|
+
end
|
984
|
+
|
985
|
+
MarshalFilter = proc do |obj|
|
986
|
+
case obj
|
987
|
+
when true, false, nil, Array, Class, Encoding, Hash, Integer, String, Symbol, RDoc::Text
|
988
|
+
else
|
989
|
+
unless obj.class.name.start_with?("RDoc::")
|
990
|
+
raise TypeError, "not permitted class: #{obj.class.name}"
|
991
|
+
end
|
992
|
+
end
|
993
|
+
obj
|
994
|
+
end
|
995
|
+
private_constant :MarshalFilter
|
996
|
+
|
968
997
|
end
|
data/lib/rdoc/task.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
#--
|
3
3
|
# Copyright (c) 2003, 2004 Jim Weirich, 2009 Eric Hodel
|
4
4
|
#
|
@@ -32,7 +32,7 @@ begin
|
|
32
32
|
rescue Gem::LoadError
|
33
33
|
end unless defined?(Rake)
|
34
34
|
|
35
|
-
|
35
|
+
require_relative '../rdoc'
|
36
36
|
require 'rake'
|
37
37
|
require 'rake/tasklib'
|
38
38
|
|
@@ -50,6 +50,9 @@ require 'rake/tasklib'
|
|
50
50
|
# [rerdoc]
|
51
51
|
# Rebuild the rdoc files from scratch, even if they are not out of date.
|
52
52
|
#
|
53
|
+
# [rdoc:coverage]
|
54
|
+
# Print RDoc coverage report for all rdoc files.
|
55
|
+
#
|
53
56
|
# Simple Example:
|
54
57
|
#
|
55
58
|
# require 'rdoc/task'
|
@@ -71,7 +74,7 @@ require 'rake/tasklib'
|
|
71
74
|
# require 'rdoc/task'
|
72
75
|
#
|
73
76
|
# RDoc::Task.new :rdoc_dev do |rdoc|
|
74
|
-
# rdoc.main = "README.
|
77
|
+
# rdoc.main = "README.rdoc"
|
75
78
|
# rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")
|
76
79
|
# rdoc.options << "--all"
|
77
80
|
# end
|
@@ -90,8 +93,8 @@ require 'rake/tasklib'
|
|
90
93
|
# RDoc::Task.new(:rdoc => "rdoc", :clobber_rdoc => "rdoc:clean",
|
91
94
|
# :rerdoc => "rdoc:force")
|
92
95
|
#
|
93
|
-
# This will create the tasks <tt>:rdoc</tt>, <tt>:rdoc:clean</tt
|
94
|
-
# <tt>:rdoc:force</tt>.
|
96
|
+
# This will create the tasks <tt>:rdoc</tt>, <tt>:rdoc:clean</tt>,
|
97
|
+
# <tt>:rdoc:force</tt>, and <tt>:rdoc:coverage</tt>.
|
95
98
|
|
96
99
|
class RDoc::Task < Rake::TaskLib
|
97
100
|
|
@@ -101,9 +104,8 @@ class RDoc::Task < Rake::TaskLib
|
|
101
104
|
attr_accessor :name
|
102
105
|
|
103
106
|
##
|
104
|
-
#
|
105
|
-
#
|
106
|
-
|
107
|
+
# The markup format; one of: +rdoc+ (the default), +markdown+, +rd+, +tomdoc+.
|
108
|
+
# See {Markup Formats}[rdoc-ref:RDoc::Markup@Markup+Formats].
|
107
109
|
attr_accessor :markup
|
108
110
|
|
109
111
|
##
|
@@ -128,7 +130,7 @@ class RDoc::Task < Rake::TaskLib
|
|
128
130
|
attr_accessor :template
|
129
131
|
|
130
132
|
##
|
131
|
-
# Name of format generator (<tt>--format
|
133
|
+
# Name of format generator (<tt>--format</tt>) used by rdoc. (defaults to
|
132
134
|
# rdoc's default)
|
133
135
|
|
134
136
|
attr_accessor :generator
|
@@ -248,6 +250,18 @@ class RDoc::Task < Rake::TaskLib
|
|
248
250
|
RDoc::RDoc.new.document args
|
249
251
|
end
|
250
252
|
|
253
|
+
namespace rdoc_task_name do
|
254
|
+
desc coverage_task_description
|
255
|
+
task coverage_task_name do
|
256
|
+
@before_running_rdoc.call if @before_running_rdoc
|
257
|
+
opts = option_list << "-C"
|
258
|
+
args = opts + @rdoc_files
|
259
|
+
|
260
|
+
$stderr.puts "rdoc #{args.join ' '}" if Rake.application.options.trace
|
261
|
+
RDoc::RDoc.new.document args
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
251
265
|
self
|
252
266
|
end
|
253
267
|
|
@@ -288,6 +302,13 @@ class RDoc::Task < Rake::TaskLib
|
|
288
302
|
"Rebuild RDoc HTML files"
|
289
303
|
end
|
290
304
|
|
305
|
+
##
|
306
|
+
# Task description for the coverage task or its renamed description
|
307
|
+
|
308
|
+
def coverage_task_description
|
309
|
+
"Print RDoc coverage report"
|
310
|
+
end
|
311
|
+
|
291
312
|
private
|
292
313
|
|
293
314
|
def rdoc_target
|
@@ -315,6 +336,10 @@ class RDoc::Task < Rake::TaskLib
|
|
315
336
|
end
|
316
337
|
end
|
317
338
|
|
339
|
+
def coverage_task_name
|
340
|
+
"coverage"
|
341
|
+
end
|
342
|
+
|
318
343
|
end
|
319
344
|
|
320
345
|
# :stopdoc:
|
@@ -323,7 +348,7 @@ module Rake
|
|
323
348
|
##
|
324
349
|
# For backwards compatibility
|
325
350
|
|
326
|
-
RDocTask = RDoc::Task
|
351
|
+
RDocTask = RDoc::Task # :nodoc:
|
327
352
|
|
328
353
|
end
|
329
354
|
# :startdoc:
|
data/lib/rdoc/text.rb
CHANGED
@@ -1,26 +1,21 @@
|
|
1
|
-
#
|
2
|
-
# frozen_string_literal: false
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
3
|
##
|
5
4
|
# For RDoc::Text#to_html
|
6
5
|
|
7
6
|
require 'strscan'
|
8
7
|
|
9
|
-
##
|
10
|
-
# For RDoc::Text#snippet
|
11
|
-
|
12
|
-
begin
|
13
|
-
gem 'json'
|
14
|
-
rescue NameError => e # --disable-gems
|
15
|
-
raise unless e.name == :gem
|
16
|
-
rescue Gem::LoadError
|
17
|
-
end
|
18
|
-
|
19
8
|
##
|
20
9
|
# Methods for manipulating comment text
|
21
10
|
|
22
11
|
module RDoc::Text
|
23
12
|
|
13
|
+
##
|
14
|
+
# The language for this text. This affects stripping comments
|
15
|
+
# markers.
|
16
|
+
|
17
|
+
attr_accessor :language
|
18
|
+
|
24
19
|
##
|
25
20
|
# Maps markup formats to classes that can parse them. If the format is
|
26
21
|
# unknown, "rdoc" format is used.
|
@@ -71,7 +66,7 @@ module RDoc::Text
|
|
71
66
|
text.each_line do |line|
|
72
67
|
nil while line.gsub!(/(?:\G|\r)((?:.{8})*?)([^\t\r\n]{0,7})\t/) do
|
73
68
|
r = "#{$1}#{$2}#{' ' * (8 - $2.size)}"
|
74
|
-
r.
|
69
|
+
r = RDoc::Encoding.change_encoding r, text.encoding
|
75
70
|
r
|
76
71
|
end
|
77
72
|
|
@@ -93,7 +88,7 @@ module RDoc::Text
|
|
93
88
|
end
|
94
89
|
|
95
90
|
empty = ''
|
96
|
-
empty.
|
91
|
+
empty = RDoc::Encoding.change_encoding empty, text.encoding
|
97
92
|
|
98
93
|
text.gsub(/^ {0,#{indent}}/, empty)
|
99
94
|
end
|
@@ -104,8 +99,8 @@ module RDoc::Text
|
|
104
99
|
# Requires the including class to implement #formatter
|
105
100
|
|
106
101
|
def markup text
|
107
|
-
if @store.
|
108
|
-
locale = @store.
|
102
|
+
if @store.options
|
103
|
+
locale = @store.options.locale
|
109
104
|
else
|
110
105
|
locale = nil
|
111
106
|
end
|
@@ -122,8 +117,12 @@ module RDoc::Text
|
|
122
117
|
def normalize_comment text
|
123
118
|
return text if text.empty?
|
124
119
|
|
125
|
-
|
126
|
-
|
120
|
+
case language
|
121
|
+
when :ruby
|
122
|
+
text = strip_hashes text
|
123
|
+
when :c
|
124
|
+
text = strip_stars text
|
125
|
+
end
|
127
126
|
text = expand_tabs text
|
128
127
|
text = flush_left text
|
129
128
|
text = strip_newlines text
|
@@ -160,7 +159,7 @@ module RDoc::Text
|
|
160
159
|
return text if text =~ /^(?>\s*)[^\#]/
|
161
160
|
|
162
161
|
empty = ''
|
163
|
-
empty.
|
162
|
+
empty = RDoc::Encoding.change_encoding empty, text.encoding
|
164
163
|
|
165
164
|
text.gsub(/^\s*(#+)/) { $1.tr '#', ' ' }.gsub(/^\s+$/, empty)
|
166
165
|
end
|
@@ -180,17 +179,17 @@ module RDoc::Text
|
|
180
179
|
|
181
180
|
encoding = text.encoding
|
182
181
|
|
183
|
-
text = text.gsub %r%Document-method:\s+[\w
|
182
|
+
text = text.gsub %r%Document-method:\s+[\w:.#=!?|^&<>~+\-/*\%@`\[\]]+%, ''
|
184
183
|
|
185
184
|
space = ' '
|
186
|
-
space.
|
185
|
+
space = RDoc::Encoding.change_encoding space, encoding if encoding
|
187
186
|
|
188
187
|
text.sub! %r%/\*+% do space * $&.length end
|
189
188
|
text.sub! %r%\*+/% do space * $&.length end
|
190
189
|
text.gsub! %r%^[ \t]*\*%m do space * $&.length end
|
191
190
|
|
192
191
|
empty = ''
|
193
|
-
empty.
|
192
|
+
empty = RDoc::Encoding.change_encoding empty, encoding if encoding
|
194
193
|
text.gsub(/^\s+$/, empty)
|
195
194
|
end
|
196
195
|
|
@@ -199,7 +198,7 @@ module RDoc::Text
|
|
199
198
|
# trademark symbols in +text+ to properly encoded characters.
|
200
199
|
|
201
200
|
def to_html text
|
202
|
-
html = ''.encode text.encoding
|
201
|
+
html = (''.encode text.encoding).dup
|
203
202
|
|
204
203
|
encoded = RDoc::Text::TO_HTML_CHARACTERS[text.encoding]
|
205
204
|
|
@@ -223,10 +222,10 @@ module RDoc::Text
|
|
223
222
|
when s.scan(/\.\.\.(\.?)/) then
|
224
223
|
html << s[1] << encoded[:ellipsis]
|
225
224
|
after_word = nil
|
226
|
-
when s.scan(/\(c\)/) then
|
225
|
+
when s.scan(/\(c\)/i) then
|
227
226
|
html << encoded[:copyright]
|
228
227
|
after_word = nil
|
229
|
-
when s.scan(/\(r\)/) then
|
228
|
+
when s.scan(/\(r\)/i) then
|
230
229
|
html << encoded[:trademark]
|
231
230
|
after_word = nil
|
232
231
|
when s.scan(/---/) then
|
@@ -242,10 +241,18 @@ module RDoc::Text
|
|
242
241
|
when s.scan(/``/) then # backtick double quote
|
243
242
|
html << encoded[:open_dquote]
|
244
243
|
after_word = nil
|
245
|
-
when s.scan(/'
|
244
|
+
when s.scan(/(?:'|'){2}/) then # tick double quote
|
246
245
|
html << encoded[:close_dquote]
|
247
246
|
after_word = nil
|
248
|
-
when s.scan(
|
247
|
+
when s.scan(/`/) then # backtick
|
248
|
+
if insquotes or after_word
|
249
|
+
html << '`'
|
250
|
+
after_word = false
|
251
|
+
else
|
252
|
+
html << encoded[:open_squote]
|
253
|
+
insquotes = true
|
254
|
+
end
|
255
|
+
when s.scan(/'|'/) then # single quote
|
249
256
|
if insquotes
|
250
257
|
html << encoded[:close_squote]
|
251
258
|
insquotes = false
|
@@ -306,4 +313,10 @@ module RDoc::Text
|
|
306
313
|
res.join.strip
|
307
314
|
end
|
308
315
|
|
316
|
+
##
|
317
|
+
# Character class to be separated by a space when concatenating
|
318
|
+
# lines.
|
319
|
+
|
320
|
+
SPACE_SEPARATED_LETTER_CLASS = /[\p{Nd}\p{Lc}\p{Pc}]|[!-~&&\W]/
|
321
|
+
|
309
322
|
end
|
data/lib/rdoc/token_stream.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# frozen_string_literal:
|
1
|
+
# frozen_string_literal: true
|
2
2
|
##
|
3
3
|
# A TokenStream is a list of tokens, gathered during the parse of some entity
|
4
4
|
# (say a method). Entities populate these streams by being registered with the
|
@@ -10,43 +10,61 @@ module RDoc::TokenStream
|
|
10
10
|
|
11
11
|
##
|
12
12
|
# Converts +token_stream+ to HTML wrapping various tokens with
|
13
|
-
# <tt><span></tt> elements.
|
14
|
-
# with the given class names
|
15
|
-
#
|
16
|
-
# TkCONSTANT :: 'ruby-constant'
|
17
|
-
# TkKW :: 'ruby-keyword'
|
18
|
-
# TkIVAR :: 'ruby-ivar'
|
19
|
-
# TkOp :: 'ruby-operator'
|
20
|
-
# TkId :: 'ruby-identifier'
|
21
|
-
# TkNode :: 'ruby-node'
|
22
|
-
# TkCOMMENT :: 'ruby-comment'
|
23
|
-
# TkREGEXP :: 'ruby-regexp'
|
24
|
-
# TkSTRING :: 'ruby-string'
|
25
|
-
# TkVal :: 'ruby-value'
|
26
|
-
#
|
27
|
-
# Other token types are not wrapped in spans.
|
13
|
+
# <tt><span></tt> elements. Some tokens types are wrapped in spans
|
14
|
+
# with the given class names. Other token types are not wrapped in spans.
|
28
15
|
|
29
16
|
def self.to_html token_stream
|
17
|
+
starting_title = false
|
18
|
+
|
30
19
|
token_stream.map do |t|
|
31
20
|
next unless t
|
32
21
|
|
33
|
-
style = case t
|
34
|
-
when
|
35
|
-
when
|
36
|
-
when
|
37
|
-
when
|
38
|
-
when
|
39
|
-
when
|
40
|
-
|
41
|
-
when
|
42
|
-
when
|
43
|
-
when
|
22
|
+
style = case t[:kind]
|
23
|
+
when :on_const then 'ruby-constant'
|
24
|
+
when :on_kw then 'ruby-keyword'
|
25
|
+
when :on_ivar then 'ruby-ivar'
|
26
|
+
when :on_cvar then 'ruby-identifier'
|
27
|
+
when :on_gvar then 'ruby-identifier'
|
28
|
+
when '=' != t[:text] && :on_op
|
29
|
+
then 'ruby-operator'
|
30
|
+
when :on_tlambda then 'ruby-operator'
|
31
|
+
when :on_ident then 'ruby-identifier'
|
32
|
+
when :on_label then 'ruby-value'
|
33
|
+
when :on_backref, :on_dstring
|
34
|
+
then 'ruby-node'
|
35
|
+
when :on_comment then 'ruby-comment'
|
36
|
+
when :on_embdoc then 'ruby-comment'
|
37
|
+
when :on_regexp then 'ruby-regexp'
|
38
|
+
when :on_tstring then 'ruby-string'
|
39
|
+
when :on_int, :on_float,
|
40
|
+
:on_rational, :on_imaginary,
|
41
|
+
:on_heredoc,
|
42
|
+
:on_symbol, :on_CHAR then 'ruby-value'
|
43
|
+
when :on_heredoc_beg, :on_heredoc_end
|
44
|
+
then 'ruby-identifier'
|
44
45
|
end
|
45
46
|
|
46
|
-
|
47
|
+
comment_with_nl = false
|
48
|
+
if :on_comment == t[:kind] or :on_embdoc == t[:kind] or :on_heredoc_end == t[:kind]
|
49
|
+
comment_with_nl = true if "\n" == t[:text][-1]
|
50
|
+
text = t[:text].rstrip
|
51
|
+
else
|
52
|
+
text = t[:text]
|
53
|
+
end
|
54
|
+
|
55
|
+
if :on_ident == t[:kind] && starting_title
|
56
|
+
starting_title = false
|
57
|
+
style = 'ruby-identifier ruby-title'
|
58
|
+
end
|
59
|
+
|
60
|
+
if :on_kw == t[:kind] and 'def' == t[:text]
|
61
|
+
starting_title = true
|
62
|
+
end
|
63
|
+
|
64
|
+
text = CGI.escapeHTML text
|
47
65
|
|
48
66
|
if style then
|
49
|
-
"<span class=\"#{style}\">#{text}</span
|
67
|
+
"<span class=\"#{style}\">#{text}</span>#{"\n" if comment_with_nl}"
|
50
68
|
else
|
51
69
|
text
|
52
70
|
end
|
@@ -56,11 +74,16 @@ module RDoc::TokenStream
|
|
56
74
|
##
|
57
75
|
# Adds +tokens+ to the collected tokens
|
58
76
|
|
59
|
-
def add_tokens(
|
60
|
-
|
77
|
+
def add_tokens(tokens)
|
78
|
+
@token_stream.concat(tokens)
|
61
79
|
end
|
62
80
|
|
63
|
-
|
81
|
+
##
|
82
|
+
# Adds one +token+ to the collected tokens
|
83
|
+
|
84
|
+
def add_token(token)
|
85
|
+
@token_stream.push(token)
|
86
|
+
end
|
64
87
|
|
65
88
|
##
|
66
89
|
# Starts collecting tokens
|
@@ -89,8 +112,7 @@ module RDoc::TokenStream
|
|
89
112
|
# Returns a string representation of the token stream
|
90
113
|
|
91
114
|
def tokens_to_s
|
92
|
-
token_stream.compact.map { |token| token
|
115
|
+
(token_stream or return '').compact.map { |token| token[:text] }.join ''
|
93
116
|
end
|
94
117
|
|
95
118
|
end
|
96
|
-
|