rdoc 6.6.3.1 → 6.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.rdoc +1 -1
  3. data/ExampleMarkdown.md +2 -0
  4. data/ExampleRDoc.rdoc +2 -0
  5. data/History.rdoc +64 -62
  6. data/LICENSE.rdoc +2 -0
  7. data/README.rdoc +13 -0
  8. data/RI.md +842 -0
  9. data/TODO.rdoc +8 -7
  10. data/lib/rdoc/{alias.rb → code_object/alias.rb} +1 -1
  11. data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +54 -0
  12. data/lib/rdoc/{context.rb → code_object/context.rb} +1 -1
  13. data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +3 -3
  14. data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +4 -4
  15. data/lib/rdoc/code_object.rb +6 -0
  16. data/lib/rdoc/generator/darkfish.rb +45 -3
  17. data/lib/rdoc/generator/pot/message_extractor.rb +1 -1
  18. data/lib/rdoc/generator/pot/po_entry.rb +1 -1
  19. data/lib/rdoc/generator/template/darkfish/_head.rhtml +23 -0
  20. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +20 -11
  21. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +3 -8
  22. data/lib/rdoc/generator/template/darkfish/class.rhtml +69 -43
  23. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +367 -392
  24. data/lib/rdoc/generator/template/darkfish/index.rhtml +7 -6
  25. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +18 -1
  26. data/lib/rdoc/generator/template/darkfish/page.rhtml +5 -5
  27. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +10 -8
  28. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +5 -2
  29. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +11 -0
  30. data/lib/rdoc/markdown.kpeg +3 -3
  31. data/lib/rdoc/markdown.rb +25 -15
  32. data/lib/rdoc/markup/attribute_manager.rb +2 -2
  33. data/lib/rdoc/markup/pre_process.rb +9 -6
  34. data/lib/rdoc/markup/to_bs.rb +26 -1
  35. data/lib/rdoc/markup/to_html_crossref.rb +12 -13
  36. data/lib/rdoc/markup/to_markdown.rb +4 -4
  37. data/lib/rdoc/markup/to_rdoc.rb +15 -7
  38. data/lib/rdoc/markup.rb +18 -13
  39. data/lib/rdoc/options.rb +23 -5
  40. data/lib/rdoc/parser/c.rb +19 -9
  41. data/lib/rdoc/parser/changelog.rb +2 -2
  42. data/lib/rdoc/parser/ripper_state_lex.rb +7 -305
  43. data/lib/rdoc/parser/ruby.rb +26 -8
  44. data/lib/rdoc/parser.rb +6 -3
  45. data/lib/rdoc/rd/block_parser.rb +3 -7
  46. data/lib/rdoc/rd/inline_parser.rb +3 -7
  47. data/lib/rdoc/rdoc.rb +3 -2
  48. data/lib/rdoc/ri/driver.rb +11 -7
  49. data/lib/rdoc/task.rb +2 -3
  50. data/lib/rdoc/tom_doc.rb +1 -7
  51. data/lib/rdoc/version.rb +1 -1
  52. data/lib/rdoc.rb +23 -23
  53. metadata +27 -24
  54. data/RI.rdoc +0 -57
  55. /data/lib/rdoc/{anon_class.rb → code_object/anon_class.rb} +0 -0
  56. /data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +0 -0
  57. /data/lib/rdoc/{attr.rb → code_object/attr.rb} +0 -0
  58. /data/lib/rdoc/{constant.rb → code_object/constant.rb} +0 -0
  59. /data/lib/rdoc/{context → code_object/context}/section.rb +0 -0
  60. /data/lib/rdoc/{extend.rb → code_object/extend.rb} +0 -0
  61. /data/lib/rdoc/{ghost_method.rb → code_object/ghost_method.rb} +0 -0
  62. /data/lib/rdoc/{include.rb → code_object/include.rb} +0 -0
  63. /data/lib/rdoc/{meta_method.rb → code_object/meta_method.rb} +0 -0
  64. /data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +0 -0
  65. /data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +0 -0
  66. /data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +0 -0
  67. /data/lib/rdoc/{require.rb → code_object/require.rb} +0 -0
  68. /data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +0 -0
data/lib/rdoc/options.rb CHANGED
@@ -105,6 +105,7 @@ class RDoc::Options
105
105
  generator_name
106
106
  generator_options
107
107
  generators
108
+ locale
108
109
  op_dir
109
110
  page_dir
110
111
  option_parser
@@ -232,9 +233,9 @@ class RDoc::Options
232
233
  attr_accessor :main_page
233
234
 
234
235
  ##
235
- # The default markup format. The default is 'rdoc'. 'markdown', 'tomdoc'
236
- # and 'rd' are also built-in.
237
-
236
+ # The markup format.
237
+ # One of: +rdoc+ (the default), +markdown+, +rd+, +tomdoc+.
238
+ # See {Markup Formats}[rdoc-ref:RDoc::Markup@Markup+Formats].
238
239
  attr_accessor :markup
239
240
 
240
241
  ##
@@ -343,6 +344,11 @@ class RDoc::Options
343
344
  # Indicates if files of test suites should be skipped
344
345
  attr_accessor :skip_tests
345
346
 
347
+ ##
348
+ # Embed mixin methods, attributes, and constants into class documentation. Set via
349
+ # +--[no-]embed-mixins+ (Default is +false+.)
350
+ attr_accessor :embed_mixins
351
+
346
352
  def initialize loaded_options = nil # :nodoc:
347
353
  init_ivars
348
354
  override loaded_options if loaded_options
@@ -350,6 +356,7 @@ class RDoc::Options
350
356
 
351
357
  def init_ivars # :nodoc:
352
358
  @dry_run = false
359
+ @embed_mixins = false
353
360
  @exclude = %w[
354
361
  ~\z \.orig\z \.rej\z \.bak\z
355
362
  \.gemspec\z
@@ -400,6 +407,7 @@ class RDoc::Options
400
407
  @encoding = encoding ? Encoding.find(encoding) : encoding
401
408
 
402
409
  @charset = map['charset']
410
+ @embed_mixins = map['embed_mixins']
403
411
  @exclude = map['exclude']
404
412
  @generator_name = map['generator_name']
405
413
  @hyperlink_all = map['hyperlink_all']
@@ -431,6 +439,7 @@ class RDoc::Options
431
439
  end
432
440
 
433
441
  @charset = map['charset'] if map.has_key?('charset')
442
+ @embed_mixins = map['embed_mixins'] if map.has_key?('embed_mixins')
434
443
  @exclude = map['exclude'] if map.has_key?('exclude')
435
444
  @generator_name = map['generator_name'] if map.has_key?('generator_name')
436
445
  @hyperlink_all = map['hyperlink_all'] if map.has_key?('hyperlink_all')
@@ -459,11 +468,12 @@ class RDoc::Options
459
468
  def == other # :nodoc:
460
469
  self.class === other and
461
470
  @encoding == other.encoding and
471
+ @embed_mixins == other.embed_mixins and
462
472
  @generator_name == other.generator_name and
463
473
  @hyperlink_all == other.hyperlink_all and
464
474
  @line_numbers == other.line_numbers and
465
475
  @locale == other.locale and
466
- @locale_dir == other.locale_dir and
476
+ @locale_dir == other.locale_dir and
467
477
  @main_page == other.main_page and
468
478
  @markup == other.markup and
469
479
  @op_dir == other.op_dir and
@@ -682,7 +692,7 @@ Usage: #{opt.program_name} [options] [names...]
682
692
 
683
693
  EOF
684
694
 
685
- parsers = Hash.new { |h,parser| h[parser] = [] }
695
+ parsers = Hash.new { |h, parser| h[parser] = [] }
686
696
 
687
697
  RDoc::Parser.parsers.each do |regexp, parser|
688
698
  parsers[parser.name.sub('RDoc::Parser::', '')] << regexp.source
@@ -841,6 +851,14 @@ Usage: #{opt.program_name} [options] [names...]
841
851
 
842
852
  opt.separator nil
843
853
 
854
+ opt.on("--[no-]embed-mixins",
855
+ "Embed mixin methods, attributes, and constants",
856
+ "into class documentation. (default false)") do |value|
857
+ @embed_mixins = value
858
+ end
859
+
860
+ opt.separator nil
861
+
844
862
  markup_formats = RDoc::Text::MARKUP_FORMAT.keys.sort
845
863
 
846
864
  opt.on("--markup=MARKUP", markup_formats,
data/lib/rdoc/parser/c.rb CHANGED
@@ -440,7 +440,7 @@ class RDoc::Parser::C < RDoc::Parser
440
440
  # Scans #content for rb_include_module
441
441
 
442
442
  def do_includes
443
- @content.scan(/rb_include_module\s*\(\s*(\w+?),\s*(\w+?)\s*\)/) do |c,m|
443
+ @content.scan(/rb_include_module\s*\(\s*(\w+?),\s*(\w+?)\s*\)/) do |c, m|
444
444
  next unless cls = @classes[c]
445
445
  m = @known_classes[m] || m
446
446
 
@@ -756,17 +756,27 @@ class RDoc::Parser::C < RDoc::Parser
756
756
  def gen_const_table file_content
757
757
  table = {}
758
758
  @content.scan(%r{
759
- ((?>^\s*/\*.*?\*/\s+))
760
- rb_define_(\w+)\((?:\s*(?:\w+),)?\s*
761
- "(\w+)"\s*,
759
+ (?<doc>(?>^\s*/\*.*?\*/\s+))
760
+ rb_define_(?<type>\w+)\(\s*(?:\w+),\s*
761
+ "(?<name>\w+)"\s*,
762
762
  .*?\)\s*;
763
+ | (?<doc>(?>^\s*/\*.*?\*/\s+))
764
+ rb_file_(?<type>const)\(\s*
765
+ "(?<name>\w+)"\s*,
766
+ .*?\)\s*;
767
+ | (?<doc>(?>^\s*/\*.*?\*/\s+))
768
+ rb_curses_define_(?<type>const)\(\s*
769
+ (?<name>\w+)
770
+ \s*\)\s*;
763
771
  | Document-(?:const|global|variable):\s
764
- ((?:\w+::)*\w+)
765
- \s*?\n((?>.*?\*/))
772
+ (?<name>(?:\w+::)*\w+)
773
+ \s*?\n(?<doc>(?>.*?\*/))
766
774
  }mxi) do
767
- case
768
- when $1 then table[[$2, $3]] = $1
769
- when $4 then table[$4] = "/*\n" + $5
775
+ name, doc, type = $~.values_at(:name, :doc, :type)
776
+ if type
777
+ table[[type, name]] = doc
778
+ else
779
+ table[name] = "/*\n" + doc
770
780
  end
771
781
  end
772
782
  table
@@ -193,7 +193,7 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
193
193
 
194
194
  entries << [entry_name, entry_body] if entry_name
195
195
 
196
- entries.reject! do |(entry,_)|
196
+ entries.reject! do |(entry, _)|
197
197
  entry == nil
198
198
  end
199
199
 
@@ -221,7 +221,7 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
221
221
 
222
222
  module Git
223
223
  ##
224
- # Parses auxiliary info. Currentry `base-url` to expand
224
+ # Parses auxiliary info. Currently `base-url` to expand
225
225
  # references is effective.
226
226
 
227
227
  def parse_info(info)
@@ -7,307 +7,12 @@ require 'ripper'
7
7
  class RDoc::Parser::RipperStateLex
8
8
  # :stopdoc:
9
9
 
10
- # TODO: Remove this constants after Ruby 2.4 EOL
11
- RIPPER_HAS_LEX_STATE = Ripper::Filter.method_defined?(:state)
12
-
13
10
  Token = Struct.new(:line_no, :char_no, :kind, :text, :state)
14
11
 
15
- EXPR_NONE = 0
16
- EXPR_BEG = 1
17
- EXPR_END = 2
18
- EXPR_ENDARG = 4
19
- EXPR_ENDFN = 8
20
- EXPR_ARG = 16
21
- EXPR_CMDARG = 32
22
- EXPR_MID = 64
23
- EXPR_FNAME = 128
24
- EXPR_DOT = 256
25
- EXPR_CLASS = 512
26
- EXPR_LABEL = 1024
27
- EXPR_LABELED = 2048
28
- EXPR_FITEM = 4096
29
- EXPR_VALUE = EXPR_BEG
30
- EXPR_BEG_ANY = (EXPR_BEG | EXPR_MID | EXPR_CLASS)
31
- EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG)
32
- EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
33
-
34
- class InnerStateLex < Ripper::Filter
35
- attr_accessor :lex_state
36
-
37
- def initialize(code)
38
- @lex_state = EXPR_BEG
39
- @in_fname = false
40
- @continue = false
41
- reset
42
- super(code)
43
- end
44
-
45
- def reset
46
- @command_start = false
47
- @cmd_state = @command_start
48
- end
49
-
50
- def on_nl(tok, data)
51
- case @lex_state
52
- when EXPR_FNAME, EXPR_DOT
53
- @continue = true
54
- else
55
- @continue = false
56
- @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
57
- end
58
- data << Token.new(lineno, column, __method__, tok, @lex_state)
59
- end
60
-
61
- def on_ignored_nl(tok, data)
62
- case @lex_state
63
- when EXPR_FNAME, EXPR_DOT
64
- @continue = true
65
- else
66
- @continue = false
67
- @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
68
- end
69
- data << Token.new(lineno, column, __method__, tok, @lex_state)
70
- end
71
-
72
- def on_op(tok, data)
73
- case tok
74
- when '&', '|', '!', '!=', '!~'
75
- case @lex_state
76
- when EXPR_FNAME, EXPR_DOT
77
- @lex_state = EXPR_ARG
78
- else
79
- @lex_state = EXPR_BEG
80
- end
81
- when '<<'
82
- # TODO next token?
83
- case @lex_state
84
- when EXPR_FNAME, EXPR_DOT
85
- @lex_state = EXPR_ARG
86
- else
87
- @lex_state = EXPR_BEG
88
- end
89
- when '?'
90
- @lex_state = EXPR_BEG
91
- when '&&', '||', '+=', '-=', '*=', '**=',
92
- '&=', '|=', '^=', '<<=', '>>=', '||=', '&&='
93
- @lex_state = EXPR_BEG
94
- when '::'
95
- case @lex_state
96
- when EXPR_ARG, EXPR_CMDARG
97
- @lex_state = EXPR_DOT
98
- when EXPR_FNAME, EXPR_DOT
99
- @lex_state = EXPR_ARG
100
- else
101
- @lex_state = EXPR_BEG
102
- end
103
- else
104
- case @lex_state
105
- when EXPR_FNAME, EXPR_DOT
106
- @lex_state = EXPR_ARG
107
- else
108
- @lex_state = EXPR_BEG
109
- end
110
- end
111
- data << Token.new(lineno, column, __method__, tok, @lex_state)
112
- end
113
-
114
- def on_kw(tok, data)
115
- case tok
116
- when 'class'
117
- @lex_state = EXPR_CLASS
118
- @in_fname = true
119
- when 'def'
120
- @lex_state = EXPR_FNAME
121
- @continue = true
122
- @in_fname = true
123
- when 'if', 'unless', 'while', 'until'
124
- if ((EXPR_MID | EXPR_END | EXPR_ENDARG | EXPR_ENDFN | EXPR_ARG | EXPR_CMDARG) & @lex_state) != 0 # postfix if
125
- @lex_state = EXPR_BEG | EXPR_LABEL
126
- else
127
- @lex_state = EXPR_BEG
128
- end
129
- when 'begin', 'case', 'when'
130
- @lex_state = EXPR_BEG
131
- when 'return', 'break'
132
- @lex_state = EXPR_MID
133
- else
134
- if @lex_state == EXPR_FNAME
135
- @lex_state = EXPR_END
136
- else
137
- @lex_state = EXPR_END
138
- end
139
- end
140
- data << Token.new(lineno, column, __method__, tok, @lex_state)
141
- end
142
-
143
- def on_tstring_beg(tok, data)
144
- @lex_state = EXPR_BEG
145
- data << Token.new(lineno, column, __method__, tok, @lex_state)
146
- end
147
-
148
- def on_tstring_end(tok, data)
149
- @lex_state = EXPR_END | EXPR_ENDARG
150
- data << Token.new(lineno, column, __method__, tok, @lex_state)
151
- end
152
-
153
- def on_CHAR(tok, data)
154
- @lex_state = EXPR_END
155
- data << Token.new(lineno, column, __method__, tok, @lex_state)
156
- end
157
-
158
- def on_period(tok, data)
159
- @lex_state = EXPR_DOT
160
- data << Token.new(lineno, column, __method__, tok, @lex_state)
161
- end
162
-
163
- def on_int(tok, data)
164
- @lex_state = EXPR_END | EXPR_ENDARG
165
- data << Token.new(lineno, column, __method__, tok, @lex_state)
166
- end
167
-
168
- def on_float(tok, data)
169
- @lex_state = EXPR_END | EXPR_ENDARG
170
- data << Token.new(lineno, column, __method__, tok, @lex_state)
171
- end
172
-
173
- def on_rational(tok, data)
174
- @lex_state = EXPR_END | EXPR_ENDARG
175
- data << Token.new(lineno, column, __method__, tok, @lex_state)
176
- end
177
-
178
- def on_imaginary(tok, data)
179
- @lex_state = EXPR_END | EXPR_ENDARG
180
- data << Token.new(lineno, column, __method__, tok, @lex_state)
181
- end
182
-
183
- def on_symbeg(tok, data)
184
- @lex_state = EXPR_FNAME
185
- @continue = true
186
- @in_fname = true
187
- data << Token.new(lineno, column, __method__, tok, @lex_state)
188
- end
189
-
190
- private def on_variables(event, tok, data)
191
- if @in_fname
192
- @lex_state = EXPR_ENDFN
193
- @in_fname = false
194
- @continue = false
195
- elsif @continue
196
- case @lex_state
197
- when EXPR_DOT
198
- @lex_state = EXPR_ARG
199
- else
200
- @lex_state = EXPR_ENDFN
201
- @continue = false
202
- end
203
- else
204
- @lex_state = EXPR_CMDARG
205
- end
206
- data << Token.new(lineno, column, event, tok, @lex_state)
207
- end
208
-
209
- def on_ident(tok, data)
210
- on_variables(__method__, tok, data)
211
- end
212
-
213
- def on_ivar(tok, data)
214
- @lex_state = EXPR_END
215
- on_variables(__method__, tok, data)
216
- end
217
-
218
- def on_cvar(tok, data)
219
- @lex_state = EXPR_END
220
- on_variables(__method__, tok, data)
221
- end
222
-
223
- def on_gvar(tok, data)
224
- @lex_state = EXPR_END
225
- on_variables(__method__, tok, data)
226
- end
227
-
228
- def on_backref(tok, data)
229
- @lex_state = EXPR_END
230
- on_variables(__method__, tok, data)
231
- end
232
-
233
- def on_lparen(tok, data)
234
- @lex_state = EXPR_LABEL | EXPR_BEG
235
- data << Token.new(lineno, column, __method__, tok, @lex_state)
236
- end
237
-
238
- def on_rparen(tok, data)
239
- @lex_state = EXPR_ENDFN
240
- data << Token.new(lineno, column, __method__, tok, @lex_state)
241
- end
242
-
243
- def on_lbrace(tok, data)
244
- @lex_state = EXPR_LABEL | EXPR_BEG
245
- data << Token.new(lineno, column, __method__, tok, @lex_state)
246
- end
247
-
248
- def on_rbrace(tok, data)
249
- @lex_state = EXPR_ENDARG
250
- data << Token.new(lineno, column, __method__, tok, @lex_state)
251
- end
252
-
253
- def on_lbracket(tok, data)
254
- @lex_state = EXPR_LABEL | EXPR_BEG
255
- data << Token.new(lineno, column, __method__, tok, @lex_state)
256
- end
257
-
258
- def on_rbracket(tok, data)
259
- @lex_state = EXPR_ENDARG
260
- data << Token.new(lineno, column, __method__, tok, @lex_state)
261
- end
262
-
263
- def on_const(tok, data)
264
- case @lex_state
265
- when EXPR_FNAME
266
- @lex_state = EXPR_ENDFN
267
- when EXPR_CLASS, EXPR_CMDARG, EXPR_MID
268
- @lex_state = EXPR_ARG
269
- else
270
- @lex_state = EXPR_CMDARG
271
- end
272
- data << Token.new(lineno, column, __method__, tok, @lex_state)
273
- end
274
-
275
- def on_sp(tok, data)
276
- data << Token.new(lineno, column, __method__, tok, @lex_state)
277
- end
278
-
279
- def on_comma(tok, data)
280
- @lex_state = EXPR_BEG | EXPR_LABEL if (EXPR_ARG_ANY & @lex_state) != 0
281
- data << Token.new(lineno, column, __method__, tok, @lex_state)
282
- end
283
-
284
- def on_comment(tok, data)
285
- @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
286
- data << Token.new(lineno, column, __method__, tok, @lex_state)
287
- end
288
-
289
- def on_ignored_sp(tok, data)
290
- @lex_state = EXPR_BEG unless (EXPR_LABEL & @lex_state) != 0
291
- data << Token.new(lineno, column, __method__, tok, @lex_state)
292
- end
293
-
294
- def on_heredoc_beg(tok, data)
295
- data << Token.new(lineno, column, __method__, tok, @lex_state)
296
- @lex_state = EXPR_END
297
- data
298
- end
299
-
300
- def on_heredoc_end(tok, data)
301
- data << Token.new(lineno, column, __method__, tok, @lex_state)
302
- @lex_state = EXPR_BEG
303
- data
304
- end
305
-
306
- def on_default(event, tok, data)
307
- reset
308
- data << Token.new(lineno, column, event, tok, @lex_state)
309
- end
310
- end unless RIPPER_HAS_LEX_STATE
12
+ EXPR_END = Ripper::EXPR_END
13
+ EXPR_ENDFN = Ripper::EXPR_ENDFN
14
+ EXPR_ARG = Ripper::EXPR_ARG
15
+ EXPR_FNAME = Ripper::EXPR_FNAME
311
16
 
312
17
  class InnerStateLex < Ripper::Filter
313
18
  def initialize(code)
@@ -317,7 +22,7 @@ class RDoc::Parser::RipperStateLex
317
22
  def on_default(event, tok, data)
318
23
  data << Token.new(lineno, column, event, tok, state)
319
24
  end
320
- end if RIPPER_HAS_LEX_STATE
25
+ end
321
26
 
322
27
  def get_squashed_tk
323
28
  if @buf.empty?
@@ -333,9 +38,8 @@ class RDoc::Parser::RipperStateLex
333
38
  tk = get_string_tk(tk)
334
39
  when :on_backtick then
335
40
  if (tk[:state] & (EXPR_FNAME | EXPR_ENDFN)) != 0
336
- @inner_lex.lex_state = EXPR_ARG unless RIPPER_HAS_LEX_STATE
337
41
  tk[:kind] = :on_ident
338
- tk[:state] = Ripper::Lexer.const_defined?(:State) ? Ripper::Lexer::State.new(EXPR_ARG) : EXPR_ARG
42
+ tk[:state] = Ripper::Lexer::State.new(EXPR_ARG)
339
43
  else
340
44
  tk = get_string_tk(tk)
341
45
  end
@@ -345,7 +49,6 @@ class RDoc::Parser::RipperStateLex
345
49
  tk = get_embdoc_tk(tk)
346
50
  when :on_heredoc_beg then
347
51
  @heredoc_queue << retrieve_heredoc_info(tk)
348
- @inner_lex.lex_state = EXPR_END unless RIPPER_HAS_LEX_STATE
349
52
  when :on_nl, :on_ignored_nl, :on_comment, :on_heredoc_end then
350
53
  if !@heredoc_queue.empty?
351
54
  get_heredoc_tk(*@heredoc_queue.shift)
@@ -549,8 +252,7 @@ class RDoc::Parser::RipperStateLex
549
252
  private def get_op_tk(tk)
550
253
  redefinable_operators = %w[! != !~ % & * ** + +@ - -@ / < << <= <=> == === =~ > >= >> [] []= ^ ` | ~]
551
254
  if redefinable_operators.include?(tk[:text]) and tk[:state] == EXPR_ARG then
552
- @inner_lex.lex_state = EXPR_ARG unless RIPPER_HAS_LEX_STATE
553
- tk[:state] = Ripper::Lexer.const_defined?(:State) ? Ripper::Lexer::State.new(EXPR_ARG) : EXPR_ARG
255
+ tk[:state] = Ripper::Lexer::State.new(EXPR_ARG)
554
256
  tk[:kind] = :on_ident
555
257
  elsif tk[:text] =~ /^[-+]$/ then
556
258
  tk_ahead = get_squashed_tk
@@ -8,6 +8,15 @@
8
8
  # by Keiju ISHITSUKA (Nippon Rational Inc.)
9
9
  #
10
10
 
11
+ if ENV['RDOC_USE_PRISM_PARSER']
12
+ require 'rdoc/parser/prism_ruby'
13
+ RDoc::Parser.const_set(:Ruby, RDoc::Parser::PrismRuby)
14
+ puts "========================================================================="
15
+ puts "RDoc is using the experimental Prism parser to generate the documentation"
16
+ puts "========================================================================="
17
+ return
18
+ end
19
+
11
20
  require 'ripper'
12
21
  require_relative 'ripper_state_lex'
13
22
 
@@ -513,7 +522,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
513
522
  when :on_comment, :on_embdoc then
514
523
  @read.pop
515
524
  if :on_nl == end_token[:kind] and "\n" == tk[:text][-1] and
516
- (!continue or (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) != 0) then
525
+ (!continue or (tk[:state] & Ripper::EXPR_LABEL) != 0) then
517
526
  break if !continue and nest <= 0
518
527
  end
519
528
  when :on_comma then
@@ -526,7 +535,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
526
535
  nest += 1
527
536
  when 'if', 'unless', 'while', 'until', 'rescue'
528
537
  # postfix if/unless/while/until/rescue must be EXPR_LABEL
529
- nest += 1 unless (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) != 0
538
+ nest += 1 unless (tk[:state] & Ripper::EXPR_LABEL) != 0
530
539
  when 'end'
531
540
  nest -= 1
532
541
  break if nest == 0
@@ -789,8 +798,10 @@ class RDoc::Parser::Ruby < RDoc::Parser
789
798
  al.line = line_no
790
799
 
791
800
  read_documentation_modifiers al, RDoc::ATTR_MODIFIERS
792
- context.add_alias al
793
- @stats.add_alias al
801
+ if al.document_self or not @track_visibility
802
+ context.add_alias al
803
+ @stats.add_alias al
804
+ end
794
805
 
795
806
  al
796
807
  end
@@ -1039,7 +1050,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
1039
1050
  elsif (:on_kw == tk[:kind] && 'def' == tk[:text]) then
1040
1051
  nest += 1
1041
1052
  elsif (:on_kw == tk[:kind] && %w{do if unless case begin}.include?(tk[:text])) then
1042
- if (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) == 0
1053
+ if (tk[:state] & Ripper::EXPR_LABEL) == 0
1043
1054
  nest += 1
1044
1055
  end
1045
1056
  elsif [:on_rparen, :on_rbrace, :on_rbracket].include?(tk[:kind]) ||
@@ -1453,6 +1464,12 @@ class RDoc::Parser::Ruby < RDoc::Parser
1453
1464
  meth = RDoc::AnyMethod.new get_tkread, name
1454
1465
  look_for_directives_in meth, comment
1455
1466
  meth.singleton = single == SINGLE ? true : singleton
1467
+ if singleton
1468
+ # `current_line_visibility' is useless because it works against
1469
+ # the normal method named as same as the singleton method, after
1470
+ # the latter was defined. Of course these are different things.
1471
+ container.current_line_visibility = :public
1472
+ end
1456
1473
 
1457
1474
  record_location meth
1458
1475
  meth.line = line_no
@@ -1654,7 +1671,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
1654
1671
  when :on_comment, :on_embdoc then
1655
1672
  @read.pop
1656
1673
  if :on_nl == end_token[:kind] and "\n" == tk[:text][-1] and
1657
- (!continue or (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) != 0) then
1674
+ (!continue or (tk[:state] & Ripper::EXPR_LABEL) != 0) then
1658
1675
  if method && method.block_params.nil? then
1659
1676
  unget_tk tk
1660
1677
  read_documentation_modifiers method, modifiers
@@ -1776,6 +1793,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
1776
1793
 
1777
1794
  nest = 1
1778
1795
  save_visibility = container.visibility
1796
+ container.visibility = :public unless current_method
1779
1797
 
1780
1798
  non_comment_seen = true
1781
1799
 
@@ -1873,7 +1891,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
1873
1891
  end
1874
1892
 
1875
1893
  when 'until', 'while' then
1876
- if (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) == 0
1894
+ if (tk[:state] & Ripper::EXPR_LABEL) == 0
1877
1895
  nest += 1
1878
1896
  skip_optional_do_after_expression
1879
1897
  end
@@ -1889,7 +1907,7 @@ class RDoc::Parser::Ruby < RDoc::Parser
1889
1907
  skip_optional_do_after_expression
1890
1908
 
1891
1909
  when 'case', 'do', 'if', 'unless', 'begin' then
1892
- if (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) == 0
1910
+ if (tk[:state] & Ripper::EXPR_LABEL) == 0
1893
1911
  nest += 1
1894
1912
  end
1895
1913
 
data/lib/rdoc/parser.rb CHANGED
@@ -125,9 +125,11 @@ class RDoc::Parser
125
125
  return parser if ext_name.empty?
126
126
 
127
127
  if parser == RDoc::Parser::Simple and ext_name !~ /txt|rdoc/ then
128
- case check_modeline file_name
128
+ case mode = check_modeline(file_name)
129
129
  when nil, 'rdoc' then # continue
130
- else return nil
130
+ else
131
+ RDoc::Parser.parsers.find { |_, p| return p if mode.casecmp?(p.name[/\w+\z/]) }
132
+ return nil
131
133
  end
132
134
  end
133
135
 
@@ -164,7 +166,8 @@ class RDoc::Parser
164
166
  # Finds and instantiates the correct parser for the given +file_name+ and
165
167
  # +content+.
166
168
 
167
- def self.for top_level, file_name, content, options, stats
169
+ def self.for top_level, content, options, stats
170
+ file_name = top_level.absolute_name
168
171
  return if binary? file_name
169
172
 
170
173
  parser = use_markup content
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  #
3
3
  # DO NOT MODIFY!!!!
4
- # This file is automatically generated by Racc 1.7.3
4
+ # This file is automatically generated by Racc 1.8.1
5
5
  # from Racc grammar file "block_parser.ry".
6
6
  #
7
7
 
@@ -23,7 +23,7 @@ unless $".find {|p| p.end_with?('/racc/info.rb')}
23
23
  $".push "#{__dir__}/racc/info.rb"
24
24
 
25
25
  module Racc
26
- VERSION = '1.7.3'
26
+ VERSION = '1.8.1'
27
27
  Version = VERSION
28
28
  Copyright = 'Copyright (c) 1999-2006 Minero Aoki'
29
29
  end
@@ -31,10 +31,6 @@ end
31
31
  end
32
32
 
33
33
 
34
- unless defined?(NotImplementedError)
35
- NotImplementedError = NotImplementError # :nodoc:
36
- end
37
-
38
34
  module Racc
39
35
  class ParseError < StandardError; end
40
36
  end
@@ -42,7 +38,7 @@ unless defined?(::ParseError)
42
38
  ParseError = Racc::ParseError # :nodoc:
43
39
  end
44
40
 
45
- # Racc is a LALR(1) parser generator.
41
+ # Racc is an LALR(1) parser generator.
46
42
  # It is written in Ruby itself, and generates Ruby programs.
47
43
  #
48
44
  # == Command-line Reference