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.
Files changed (179) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.rdoc +5 -6
  3. data/ExampleMarkdown.md +2 -0
  4. data/ExampleRDoc.rdoc +2 -0
  5. data/History.rdoc +68 -66
  6. data/LEGAL.rdoc +1 -1
  7. data/LICENSE.rdoc +2 -0
  8. data/README.rdoc +18 -6
  9. data/RI.md +842 -0
  10. data/TODO.rdoc +8 -7
  11. data/exe/rdoc +0 -1
  12. data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -12
  13. data/lib/rdoc/{anon_class.rb → code_object/anon_class.rb} +1 -2
  14. data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +83 -26
  15. data/lib/rdoc/{attr.rb → code_object/attr.rb} +5 -9
  16. data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +112 -24
  17. data/lib/rdoc/{constant.rb → code_object/constant.rb} +4 -5
  18. data/lib/rdoc/{context → code_object/context}/section.rb +13 -83
  19. data/lib/rdoc/{context.rb → code_object/context.rb} +69 -70
  20. data/lib/rdoc/{extend.rb → code_object/extend.rb} +1 -2
  21. data/lib/rdoc/{ghost_method.rb → code_object/ghost_method.rb} +1 -2
  22. data/lib/rdoc/{include.rb → code_object/include.rb} +1 -2
  23. data/lib/rdoc/{meta_method.rb → code_object/meta_method.rb} +1 -2
  24. data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +22 -31
  25. data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +1 -2
  26. data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +4 -5
  27. data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
  28. data/lib/rdoc/{require.rb → code_object/require.rb} +2 -3
  29. data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +6 -2
  30. data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +22 -32
  31. data/lib/rdoc/code_object.rb +8 -41
  32. data/lib/rdoc/code_objects.rb +2 -3
  33. data/lib/rdoc/comment.rb +48 -41
  34. data/lib/rdoc/cross_reference.rb +77 -33
  35. data/lib/rdoc/encoding.rb +50 -38
  36. data/lib/rdoc/erb_partial.rb +2 -3
  37. data/lib/rdoc/erbio.rb +4 -5
  38. data/lib/rdoc/generator/darkfish.rb +178 -125
  39. data/lib/rdoc/generator/json_index.rb +9 -22
  40. data/lib/rdoc/generator/markup.rb +6 -17
  41. data/lib/rdoc/generator/pot/message_extractor.rb +4 -4
  42. data/lib/rdoc/generator/pot/po.rb +3 -3
  43. data/lib/rdoc/generator/pot/po_entry.rb +12 -12
  44. data/lib/rdoc/generator/pot.rb +4 -8
  45. data/lib/rdoc/generator/ri.rb +1 -2
  46. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
  47. data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -12
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
  49. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
  50. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
  51. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
  52. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +19 -10
  53. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +26 -6
  54. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
  55. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +1 -1
  56. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  57. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +27 -6
  58. data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
  59. data/lib/rdoc/generator/template/darkfish/class.rhtml +125 -78
  60. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +430 -339
  61. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  62. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  63. data/lib/rdoc/generator/template/darkfish/index.rhtml +13 -13
  64. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -92
  65. data/lib/rdoc/generator/template/darkfish/js/search.js +35 -34
  66. data/lib/rdoc/generator/template/darkfish/page.rhtml +5 -5
  67. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +10 -8
  68. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +20 -18
  69. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +32 -20
  70. data/lib/rdoc/generator/template/json_index/js/navigation.js +12 -49
  71. data/lib/rdoc/generator/template/json_index/js/searcher.js +6 -6
  72. data/lib/rdoc/generator.rb +6 -6
  73. data/lib/rdoc/i18n/locale.rb +1 -1
  74. data/lib/rdoc/i18n/text.rb +5 -5
  75. data/lib/rdoc/i18n.rb +4 -4
  76. data/lib/rdoc/known_classes.rb +6 -5
  77. data/lib/rdoc/markdown/entities.rb +1 -2
  78. data/lib/rdoc/markdown/literals.kpeg +1 -2
  79. data/lib/rdoc/markdown/literals.rb +99 -50
  80. data/lib/rdoc/markdown.kpeg +115 -58
  81. data/lib/rdoc/markdown.rb +1584 -902
  82. data/lib/rdoc/markup/attr_changer.rb +1 -2
  83. data/lib/rdoc/markup/attr_span.rb +9 -4
  84. data/lib/rdoc/markup/attribute_manager.rb +118 -57
  85. data/lib/rdoc/markup/attributes.rb +7 -8
  86. data/lib/rdoc/markup/blank_line.rb +1 -2
  87. data/lib/rdoc/markup/block_quote.rb +1 -2
  88. data/lib/rdoc/markup/document.rb +1 -2
  89. data/lib/rdoc/markup/formatter.rb +44 -37
  90. data/lib/rdoc/markup/hard_break.rb +1 -2
  91. data/lib/rdoc/markup/heading.rb +11 -6
  92. data/lib/rdoc/markup/include.rb +1 -2
  93. data/lib/rdoc/markup/indented_paragraph.rb +1 -2
  94. data/lib/rdoc/markup/list.rb +1 -2
  95. data/lib/rdoc/markup/list_item.rb +1 -2
  96. data/lib/rdoc/markup/paragraph.rb +1 -2
  97. data/lib/rdoc/markup/parser.rb +90 -48
  98. data/lib/rdoc/markup/pre_process.rb +38 -11
  99. data/lib/rdoc/markup/raw.rb +1 -2
  100. data/lib/rdoc/markup/regexp_handling.rb +40 -0
  101. data/lib/rdoc/markup/rule.rb +1 -2
  102. data/lib/rdoc/markup/table.rb +56 -0
  103. data/lib/rdoc/markup/to_ansi.rb +1 -2
  104. data/lib/rdoc/markup/to_bs.rb +30 -5
  105. data/lib/rdoc/markup/to_html.rb +95 -40
  106. data/lib/rdoc/markup/to_html_crossref.rb +108 -43
  107. data/lib/rdoc/markup/to_html_snippet.rb +13 -11
  108. data/lib/rdoc/markup/to_joined_paragraph.rb +6 -32
  109. data/lib/rdoc/markup/to_label.rb +11 -12
  110. data/lib/rdoc/markup/to_markdown.rb +13 -14
  111. data/lib/rdoc/markup/to_rdoc.rb +49 -31
  112. data/lib/rdoc/markup/to_table_of_contents.rb +2 -2
  113. data/lib/rdoc/markup/to_test.rb +1 -2
  114. data/lib/rdoc/markup/to_tt_only.rb +3 -4
  115. data/lib/rdoc/markup/verbatim.rb +1 -2
  116. data/lib/rdoc/markup.rb +64 -694
  117. data/lib/rdoc/options.rb +226 -44
  118. data/lib/rdoc/parser/c.rb +231 -246
  119. data/lib/rdoc/parser/changelog.rb +169 -23
  120. data/lib/rdoc/parser/markdown.rb +1 -3
  121. data/lib/rdoc/parser/prism_ruby.rb +1092 -0
  122. data/lib/rdoc/parser/rd.rb +1 -2
  123. data/lib/rdoc/parser/ripper_state_lex.rb +302 -0
  124. data/lib/rdoc/parser/ruby.rb +695 -478
  125. data/lib/rdoc/parser/ruby_tools.rb +33 -36
  126. data/lib/rdoc/parser/simple.rb +4 -4
  127. data/lib/rdoc/parser/text.rb +1 -2
  128. data/lib/rdoc/parser.rb +37 -42
  129. data/lib/rdoc/rd/block_parser.rb +708 -57
  130. data/lib/rdoc/rd/block_parser.ry +15 -11
  131. data/lib/rdoc/rd/inline.rb +5 -6
  132. data/lib/rdoc/rd/inline_parser.rb +787 -140
  133. data/lib/rdoc/rd/inline_parser.ry +1 -1
  134. data/lib/rdoc/rd.rb +4 -5
  135. data/lib/rdoc/rdoc.rb +72 -87
  136. data/lib/rdoc/ri/driver.rb +236 -152
  137. data/lib/rdoc/ri/formatter.rb +1 -1
  138. data/lib/rdoc/ri/paths.rb +4 -18
  139. data/lib/rdoc/ri/store.rb +1 -2
  140. data/lib/rdoc/ri/task.rb +2 -2
  141. data/lib/rdoc/ri.rb +5 -6
  142. data/lib/rdoc/rubygems_hook.rb +98 -20
  143. data/lib/rdoc/servlet.rb +30 -20
  144. data/lib/rdoc/stats/normal.rb +24 -18
  145. data/lib/rdoc/stats/quiet.rb +1 -2
  146. data/lib/rdoc/stats/verbose.rb +1 -3
  147. data/lib/rdoc/stats.rb +6 -7
  148. data/lib/rdoc/store.rb +84 -55
  149. data/lib/rdoc/task.rb +35 -10
  150. data/lib/rdoc/text.rb +40 -27
  151. data/lib/rdoc/token_stream.rb +56 -34
  152. data/lib/rdoc/tom_doc.rb +18 -19
  153. data/lib/rdoc/version.rb +10 -0
  154. data/lib/rdoc.rb +80 -56
  155. data/lib/rubygems_plugin.rb +23 -0
  156. data/man/ri.1 +247 -0
  157. metadata +45 -99
  158. data/.document +0 -5
  159. data/.gitignore +0 -13
  160. data/.travis.yml +0 -24
  161. data/Gemfile +0 -3
  162. data/RI.rdoc +0 -57
  163. data/Rakefile +0 -133
  164. data/bin/console +0 -7
  165. data/bin/setup +0 -6
  166. data/lib/gauntlet_rdoc.rb +0 -82
  167. data/lib/rdoc/generator/template/darkfish/.document +0 -0
  168. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
  169. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
  170. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
  171. data/lib/rdoc/generator/template/json_index/.document +0 -1
  172. data/lib/rdoc/markup/formatter_test_case.rb +0 -764
  173. data/lib/rdoc/markup/inline.rb +0 -2
  174. data/lib/rdoc/markup/special.rb +0 -41
  175. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -115
  176. data/lib/rdoc/ruby_lex.rb +0 -1367
  177. data/lib/rdoc/ruby_token.rb +0 -461
  178. data/lib/rdoc/test_case.rb +0 -204
  179. data/rdoc.gemspec +0 -57
data/lib/rdoc/store.rb CHANGED
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
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 = nil, type = nil
123
- @dry_run = false
124
- @encoding = nil
125
- @path = path
126
- @rdoc = nil
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 => nil,
138
+ :main => options.main_page,
138
139
  :modules => [],
139
140
  :pages => [],
140
- :title => nil,
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 = absolute_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
- @files_hash.each_value.find do |file|
425
- file.text? and file.full_name == file_name
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 '~/.rdoc'
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
- open cache_path, 'rb' do |io|
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
- open file, 'rb' do |io|
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
- open file, 'rb' do |io|
615
- obj = Marshal.load io.read
616
- obj.store = self
617
- obj.parent =
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
- open file, 'rb' do |io|
635
- obj = Marshal.load io.read
636
- obj.store = self
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
- @files_hash.each_value.find do |file|
707
- file.text? and file.page_name == name
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.each_attribute do |attribute|
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
- marshal = Marshal.dump @cache
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
- marshal = Marshal.dump klass
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
- marshal = Marshal.dump method
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
- marshal = Marshal.dump page
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: false
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
- require 'rdoc'
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.doc"
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> and
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
- # Comment markup format. rdoc, rd and tomdoc are supported. (default is
105
- # 'rdoc')
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<tt>) used by rdoc. (defaults to
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
- # coding: utf-8
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.force_encoding text.encoding
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.force_encoding text.encoding
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.rdoc.options
108
- locale = @store.rdoc.options.locale
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
- text = strip_stars text
126
- text = strip_hashes text
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.force_encoding text.encoding
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.force_encoding encoding if encoding
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.force_encoding encoding if encoding
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(/''/) then # tick double quote
244
+ when s.scan(/(?:&#39;|'){2}/) then # tick double quote
246
245
  html << encoded[:close_dquote]
247
246
  after_word = nil
248
- when s.scan(/'/) then # single quote
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(/&#39;|'/) 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
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
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. The following tokens types are wrapped in spans
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 RDoc::RubyToken::TkCONSTANT then 'ruby-constant'
35
- when RDoc::RubyToken::TkKW then 'ruby-keyword'
36
- when RDoc::RubyToken::TkIVAR then 'ruby-ivar'
37
- when RDoc::RubyToken::TkOp then 'ruby-operator'
38
- when RDoc::RubyToken::TkId then 'ruby-identifier'
39
- when RDoc::RubyToken::TkNode then 'ruby-node'
40
- when RDoc::RubyToken::TkCOMMENT then 'ruby-comment'
41
- when RDoc::RubyToken::TkREGEXP then 'ruby-regexp'
42
- when RDoc::RubyToken::TkSTRING then 'ruby-string'
43
- when RDoc::RubyToken::TkVal then 'ruby-value'
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
- text = CGI.escapeHTML t.text
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(*tokens)
60
- tokens.flatten.each { |token| @token_stream << token }
77
+ def add_tokens(tokens)
78
+ @token_stream.concat(tokens)
61
79
  end
62
80
 
63
- alias add_token add_tokens
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.text }.join ''
115
+ (token_stream or return '').compact.map { |token| token[:text] }.join ''
93
116
  end
94
117
 
95
118
  end
96
-