honeybadger 5.3.0 → 5.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (513) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/lib/honeybadger/plugins/active_job.rb +28 -0
  4. data/lib/honeybadger/version.rb +1 -1
  5. data/vendor/bundle/ruby/3.2.0/gems/cucumber-9.1.0/lib/cucumber/deprecate.rb +14 -0
  6. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/ast_lookup.rb +14 -6
  7. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/console.rb +7 -2
  8. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/json.rb +1 -1
  9. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/message_builder.rb +14 -5
  10. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/pretty.rb +6 -2
  11. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/glue/proto_world.rb +17 -22
  12. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/glue/registry_and_more.rb +7 -4
  13. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/rake/task.rb +1 -5
  14. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/runtime/for_programming_languages.rb +1 -2
  15. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/runtime/meta_message_builder.rb +2 -2
  16. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/runtime/user_interface.rb +2 -2
  17. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/event.rb +1 -1
  18. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/argument.rb +7 -3
  19. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/ast.rb +24 -59
  20. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/combinatorial_generated_expression_factory.rb +6 -13
  21. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/cucumber_expression.rb +9 -11
  22. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/cucumber_expression_generator.rb +11 -15
  23. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/cucumber_expression_parser.rb +37 -53
  24. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/cucumber_expression_tokenizer.rb +13 -18
  25. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-17.0.1/lib/cucumber/cucumber_expressions/errors.rb +232 -0
  26. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/expression_factory.rb +2 -0
  27. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/generated_expression.rb +2 -0
  28. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/group.rb +2 -0
  29. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/group_builder.rb +3 -1
  30. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/parameter_type.rb +13 -23
  31. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/parameter_type_matcher.rb +8 -6
  32. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/parameter_type_registry.rb +27 -22
  33. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/regular_expression.rb +3 -2
  34. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/lib/cucumber/cucumber_expressions/tree_regexp.rb +8 -7
  35. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/spec/cucumber/cucumber_expressions/argument_spec.rb +4 -2
  36. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/spec/cucumber/cucumber_expressions/combinatorial_generated_expression_factory_test.rb +8 -7
  37. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-17.0.1/spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb +234 -0
  38. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/spec/cucumber/cucumber_expressions/cucumber_expression_parser_spec.rb +2 -0
  39. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-17.0.1/spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb +178 -0
  40. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/spec/cucumber/cucumber_expressions/cucumber_expression_tokenizer_spec.rb +3 -1
  41. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/spec/cucumber/cucumber_expressions/cucumber_expression_transformation_spec.rb +2 -0
  42. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-17.0.1/spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb +216 -0
  43. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/spec/cucumber/cucumber_expressions/expression_factory_spec.rb +2 -0
  44. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-17.0.1/spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb +81 -0
  45. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/spec/cucumber/cucumber_expressions/parameter_type_spec.rb +5 -2
  46. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-17.0.1/spec/cucumber/cucumber_expressions/regular_expression_spec.rb +93 -0
  47. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-cucumber-expressions-17.0.1}/spec/cucumber/cucumber_expressions/tree_regexp_spec.rb +23 -22
  48. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages.deserializers.rb +1 -0
  49. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages.dtos.rb +5 -1
  50. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-tag-expressions-4.1.0 → cucumber-tag-expressions-5.0.6}/lib/cucumber/tag_expressions/expressions.rb +21 -2
  51. data/vendor/bundle/ruby/3.2.0/gems/{cucumber-tag-expressions-4.1.0 → cucumber-tag-expressions-5.0.6}/lib/cucumber/tag_expressions/parser.rb +48 -48
  52. data/vendor/bundle/ruby/3.2.0/gems/cucumber-tag-expressions-5.0.6/spec/errors_spec.rb +13 -0
  53. data/vendor/bundle/ruby/3.2.0/gems/cucumber-tag-expressions-5.0.6/spec/evaluations_spec.rb +17 -0
  54. data/vendor/bundle/ruby/3.2.0/gems/cucumber-tag-expressions-5.0.6/spec/parsing_spec.rb +14 -0
  55. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/device/date_rolling_log_file.rb +1 -1
  56. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/device/log_file.rb +1 -1
  57. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/device/multi.rb +1 -1
  58. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/device/null.rb +1 -1
  59. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/device/rolling_log_file.rb +1 -1
  60. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/device/size_rolling_log_file.rb +1 -1
  61. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/device/writer.rb +1 -1
  62. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/device.rb +1 -1
  63. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/date_time_formatter.rb +1 -1
  64. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/exception_formatter.rb +2 -2
  65. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/id_formatter.rb +1 -1
  66. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/inspect_formatter.rb +1 -1
  67. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/object_formatter.rb +1 -1
  68. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/pretty_print_formatter.rb +1 -1
  69. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/string_formatter.rb +1 -1
  70. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/strip_formatter.rb +1 -1
  71. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/structured_formatter.rb +1 -1
  72. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter/truncate_formatter.rb +1 -1
  73. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/formatter.rb +1 -1
  74. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/log_entry.rb +2 -2
  75. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/logger.rb +10 -6
  76. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/rack/context.rb +1 -1
  77. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/rack/request_id.rb +1 -1
  78. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/rack/unit_of_work.rb +1 -1
  79. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/rack.rb +1 -1
  80. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/severity.rb +13 -1
  81. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/template.rb +2 -2
  82. data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack.rb +2 -1
  83. data/vendor/bundle/ruby/3.2.0/gems/{public_suffix-5.0.3 → public_suffix-5.0.4}/lib/public_suffix/version.rb +1 -1
  84. data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/application.rb +26 -2
  85. data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/dsl_definition.rb +1 -1
  86. data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/file_task.rb +8 -4
  87. data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/file_utils.rb +0 -2
  88. data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/packagetask.rb +1 -1
  89. data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/task.rb +2 -2
  90. data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/thread_pool.rb +1 -1
  91. data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/version.rb +1 -1
  92. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/alias.rb +111 -0
  93. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/anon_class.rb +10 -0
  94. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/any_method.rb +379 -0
  95. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/attr.rb +175 -0
  96. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/class_module.rb +801 -0
  97. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/code_object.rb +421 -0
  98. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/code_objects.rb +5 -0
  99. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/comment.rb +229 -0
  100. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/constant.rb +186 -0
  101. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/context/section.rb +233 -0
  102. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/context.rb +1264 -0
  103. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/cross_reference.rb +225 -0
  104. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/encoding.rb +131 -0
  105. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/erb_partial.rb +18 -0
  106. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/erbio.rb +37 -0
  107. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/extend.rb +9 -0
  108. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/generator/darkfish.rb +786 -0
  109. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/generator/json_index.rb +300 -0
  110. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/generator/markup.rb +159 -0
  111. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/generator/pot/message_extractor.rb +68 -0
  112. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/generator/pot/po.rb +84 -0
  113. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/generator/pot/po_entry.rb +141 -0
  114. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/generator/pot.rb +98 -0
  115. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/generator/ri.rb +30 -0
  116. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/generator.rb +51 -0
  117. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/ghost_method.rb +6 -0
  118. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/i18n/locale.rb +102 -0
  119. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/i18n/text.rb +126 -0
  120. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/i18n.rb +10 -0
  121. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/include.rb +9 -0
  122. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/known_classes.rb +74 -0
  123. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markdown/entities.rb +2131 -0
  124. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markdown/literals.rb +474 -0
  125. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markdown.rb +16783 -0
  126. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/attr_changer.rb +22 -0
  127. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/attr_span.rb +35 -0
  128. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/attribute_manager.rb +402 -0
  129. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/attributes.rb +70 -0
  130. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/blank_line.rb +27 -0
  131. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/block_quote.rb +14 -0
  132. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/document.rb +164 -0
  133. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/formatter.rb +265 -0
  134. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/hard_break.rb +31 -0
  135. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/heading.rb +78 -0
  136. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/include.rb +42 -0
  137. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/indented_paragraph.rb +47 -0
  138. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/list.rb +101 -0
  139. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/list_item.rb +99 -0
  140. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/paragraph.rb +28 -0
  141. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/parser.rb +581 -0
  142. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/pre_process.rb +298 -0
  143. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/raw.rb +69 -0
  144. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/regexp_handling.rb +40 -0
  145. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/rule.rb +20 -0
  146. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/table.rb +47 -0
  147. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_ansi.rb +93 -0
  148. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_bs.rb +77 -0
  149. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_html.rb +449 -0
  150. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_html_crossref.rb +175 -0
  151. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_html_snippet.rb +284 -0
  152. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_joined_paragraph.rb +46 -0
  153. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_label.rb +74 -0
  154. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_markdown.rb +191 -0
  155. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_rdoc.rb +344 -0
  156. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_table_of_contents.rb +88 -0
  157. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_test.rb +69 -0
  158. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/to_tt_only.rb +120 -0
  159. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup/verbatim.rb +83 -0
  160. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/markup.rb +235 -0
  161. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/meta_method.rb +6 -0
  162. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/method_attr.rb +418 -0
  163. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/mixin.rb +120 -0
  164. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/normal_class.rb +92 -0
  165. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/normal_module.rb +73 -0
  166. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/options.rb +1330 -0
  167. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser/c.rb +1225 -0
  168. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser/changelog.rb +334 -0
  169. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser/markdown.rb +22 -0
  170. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser/rd.rb +22 -0
  171. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser/ripper_state_lex.rb +590 -0
  172. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser/ruby.rb +2360 -0
  173. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser/ruby_tools.rb +165 -0
  174. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser/simple.rb +61 -0
  175. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser/text.rb +11 -0
  176. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/parser.rb +294 -0
  177. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/rd/block_parser.rb +1710 -0
  178. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/rd/inline.rb +71 -0
  179. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/rd/inline_parser.rb +1210 -0
  180. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/rd.rb +99 -0
  181. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/rdoc.rb +563 -0
  182. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/require.rb +51 -0
  183. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/ri/driver.rb +1513 -0
  184. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/ri/formatter.rb +6 -0
  185. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/ri/paths.rb +171 -0
  186. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/ri/store.rb +6 -0
  187. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/ri/task.rb +71 -0
  188. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/ri.rb +20 -0
  189. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/rubygems_hook.rb +248 -0
  190. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/servlet.rb +451 -0
  191. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/single_class.rb +30 -0
  192. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/stats/normal.rb +58 -0
  193. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/stats/quiet.rb +59 -0
  194. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/stats/verbose.rb +44 -0
  195. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/stats.rb +461 -0
  196. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/store.rb +979 -0
  197. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/task.rb +355 -0
  198. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/text.rb +312 -0
  199. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/token_stream.rb +118 -0
  200. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/tom_doc.rb +263 -0
  201. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/top_level.rb +288 -0
  202. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc/version.rb +10 -0
  203. data/vendor/bundle/ruby/3.2.0/gems/rdoc-6.6.0/lib/rdoc.rb +201 -0
  204. data/vendor/bundle/ruby/3.2.0/gems/sshkit-1.21.6/lib/sshkit/version.rb +3 -0
  205. data/vendor/bundle/ruby/3.2.0/gems/stringio-3.1.0/ext/stringio/extconf.rb +7 -0
  206. metadata +478 -386
  207. data/vendor/bundle/ruby/3.2.0/gems/cucumber-9.0.2/lib/cucumber/deprecate.rb +0 -55
  208. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-16.1.2/lib/cucumber/cucumber_expressions/errors.rb +0 -214
  209. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-16.1.2/spec/cucumber/cucumber_expressions/cucumber_expression_generator_spec.rb +0 -231
  210. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-16.1.2/spec/cucumber/cucumber_expressions/cucumber_expression_spec.rb +0 -181
  211. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-16.1.2/spec/cucumber/cucumber_expressions/custom_parameter_type_spec.rb +0 -197
  212. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-16.1.2/spec/cucumber/cucumber_expressions/parameter_type_registry_spec.rb +0 -86
  213. data/vendor/bundle/ruby/3.2.0/gems/cucumber-cucumber-expressions-16.1.2/spec/cucumber/cucumber_expressions/regular_expression_spec.rb +0 -84
  214. data/vendor/bundle/ruby/3.2.0/gems/cucumber-messages-21.0.1/spec/capture_warnings.rb +0 -74
  215. data/vendor/bundle/ruby/3.2.0/gems/cucumber-tag-expressions-4.1.0/spec/capture_warnings.rb +0 -74
  216. data/vendor/bundle/ruby/3.2.0/gems/cucumber-tag-expressions-4.1.0/spec/expressions_spec.rb +0 -84
  217. data/vendor/bundle/ruby/3.2.0/gems/cucumber-tag-expressions-4.1.0/spec/parser_spec.rb +0 -50
  218. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/acceptance_test.rb +0 -131
  219. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/benchmarks/bm_find.rb +0 -66
  220. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/benchmarks/bm_find_all.rb +0 -102
  221. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/benchmarks/bm_names.rb +0 -91
  222. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/benchmarks/bm_select.rb +0 -26
  223. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/benchmarks/bm_select_incremental.rb +0 -25
  224. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/benchmarks/bm_valid.rb +0 -101
  225. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/profilers/domain_profiler.rb +0 -12
  226. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/profilers/find_profiler.rb +0 -12
  227. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/profilers/find_profiler_jp.rb +0 -12
  228. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/profilers/initialization_profiler.rb +0 -11
  229. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/profilers/list_profsize.rb +0 -11
  230. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/profilers/object_binsize.rb +0 -57
  231. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/psl_test.rb +0 -52
  232. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/test_helper.rb +0 -10
  233. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/unit/domain_test.rb +0 -106
  234. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/unit/errors_test.rb +0 -25
  235. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/unit/list_test.rb +0 -241
  236. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/unit/public_suffix_test.rb +0 -188
  237. data/vendor/bundle/ruby/3.2.0/gems/public_suffix-5.0.3/test/unit/rule_test.rb +0 -222
  238. data/vendor/bundle/ruby/3.2.0/gems/sshkit-1.21.5/lib/sshkit/version.rb +0 -3
  239. data/vendor/bundle/ruby/3.2.0/gems/stringio-3.0.8/ext/stringio/extconf.rb +0 -3
  240. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/autotest/cucumber.rb +0 -0
  241. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/autotest/cucumber_mixin.rb +0 -0
  242. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/autotest/cucumber_rails.rb +0 -0
  243. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/autotest/cucumber_rails_rspec.rb +0 -0
  244. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/autotest/cucumber_rails_rspec2.rb +0 -0
  245. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/autotest/cucumber_rspec.rb +0 -0
  246. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/autotest/cucumber_rspec2.rb +0 -0
  247. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/autotest/discover.rb +0 -0
  248. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/cli/configuration.rb +0 -0
  249. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/cli/main.rb +0 -0
  250. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/cli/options.rb +0 -0
  251. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/cli/profile_loader.rb +0 -0
  252. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/cli/rerun_file.rb +0 -0
  253. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/configuration.rb +0 -0
  254. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/constantize.rb +0 -0
  255. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/encoding.rb +0 -0
  256. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/errors.rb +0 -0
  257. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/envelope.rb +0 -0
  258. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/gherkin_source_parsed.rb +0 -0
  259. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/gherkin_source_read.rb +0 -0
  260. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/hook_test_step_created.rb +0 -0
  261. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/step_activated.rb +0 -0
  262. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/step_definition_registered.rb +0 -0
  263. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/test_case_created.rb +0 -0
  264. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/test_case_finished.rb +0 -0
  265. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/test_case_ready.rb +0 -0
  266. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/test_case_started.rb +0 -0
  267. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/test_run_finished.rb +0 -0
  268. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/test_run_started.rb +0 -0
  269. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/test_step_created.rb +0 -0
  270. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/test_step_finished.rb +0 -0
  271. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/test_step_started.rb +0 -0
  272. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events/undefined_parameter_type.rb +0 -0
  273. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/events.rb +0 -0
  274. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/file_specs.rb +0 -0
  275. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/activate_steps.rb +0 -0
  276. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/apply_after_hooks.rb +0 -0
  277. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/apply_after_step_hooks.rb +0 -0
  278. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/apply_around_hooks.rb +0 -0
  279. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/apply_before_hooks.rb +0 -0
  280. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/broadcast_test_case_ready_event.rb +0 -0
  281. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/broadcast_test_run_started_event.rb +0 -0
  282. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/gated_receiver.rb +0 -0
  283. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/prepare_world.rb +0 -0
  284. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/quit.rb +0 -0
  285. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/randomizer.rb +0 -0
  286. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/retry.rb +0 -0
  287. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/tag_limits/test_case_index.rb +0 -0
  288. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/tag_limits/verifier.rb +0 -0
  289. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters/tag_limits.rb +0 -0
  290. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/filters.rb +0 -0
  291. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/ansicolor.rb +0 -0
  292. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/backtrace_filter.rb +0 -0
  293. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/console_counts.rb +0 -0
  294. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/console_issues.rb +0 -0
  295. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/duration.rb +0 -0
  296. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/duration_extractor.rb +0 -0
  297. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/errors.rb +0 -0
  298. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/fail_fast.rb +0 -0
  299. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/fanout.rb +0 -0
  300. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/html.rb +0 -0
  301. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/http_io.rb +0 -0
  302. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/ignore_missing_messages.rb +0 -0
  303. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/interceptor.rb +0 -0
  304. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/io.rb +0 -0
  305. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/junit.rb +0 -0
  306. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/message.rb +0 -0
  307. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/progress.rb +0 -0
  308. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/publish_banner_printer.rb +0 -0
  309. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/query/hook_by_test_step.rb +0 -0
  310. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/query/pickle_by_test.rb +0 -0
  311. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/query/pickle_step_by_test_step.rb +0 -0
  312. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/query/step_definitions_by_test_step.rb +0 -0
  313. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/query/test_case_started_by_test_case.rb +0 -0
  314. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/rerun.rb +0 -0
  315. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/stepdefs.rb +0 -0
  316. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/steps.rb +0 -0
  317. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/summary.rb +0 -0
  318. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/unicode.rb +0 -0
  319. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/url_reporter.rb +0 -0
  320. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/formatter/usage.rb +0 -0
  321. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/gherkin/data_table_parser.rb +0 -0
  322. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/gherkin/formatter/ansi_escapes.rb +0 -0
  323. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/gherkin/formatter/escaping.rb +0 -0
  324. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/gherkin/i18n.rb +0 -0
  325. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/gherkin/steps_parser.rb +0 -0
  326. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/glue/dsl.rb +0 -0
  327. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/glue/hook.rb +0 -0
  328. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/glue/invoke_in_world.rb +0 -0
  329. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/glue/registry_wrapper.rb +0 -0
  330. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/glue/snippet.rb +0 -0
  331. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/glue/step_definition.rb +0 -0
  332. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/glue/world_factory.rb +0 -0
  333. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/hooks.rb +0 -0
  334. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/load_path.rb +0 -0
  335. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/multiline_argument/data_table/diff_matrices.rb +0 -0
  336. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/multiline_argument/data_table.rb +0 -0
  337. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/multiline_argument/doc_string.rb +0 -0
  338. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/multiline_argument.rb +0 -0
  339. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/platform.rb +0 -0
  340. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/project_initializer.rb +0 -0
  341. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/rspec/disable_option_parser.rb +0 -0
  342. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/rspec/doubles.rb +0 -0
  343. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/running_test_case.rb +0 -0
  344. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/runtime/after_hooks.rb +0 -0
  345. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/runtime/before_hooks.rb +0 -0
  346. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/runtime/step_hooks.rb +0 -0
  347. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/runtime/support_code.rb +0 -0
  348. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/runtime.rb +0 -0
  349. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/step_definition_light.rb +0 -0
  350. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/step_definitions.rb +0 -0
  351. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/step_match.rb +0 -0
  352. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/step_match_search.rb +0 -0
  353. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/term/ansicolor.rb +0 -0
  354. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/term/banner.rb +0 -0
  355. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber/unit.rb +0 -0
  356. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/cucumber.rb +0 -0
  357. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-9.0.2 → cucumber-9.1.0}/lib/simplecov_setup.rb +0 -0
  358. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/compiler.rb +0 -0
  359. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/event_bus.rb +0 -0
  360. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/events.rb +0 -0
  361. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/filter.rb +0 -0
  362. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/gherkin/document.rb +0 -0
  363. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/gherkin/parser.rb +0 -0
  364. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/gherkin/writer/helpers.rb +0 -0
  365. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/gherkin/writer.rb +0 -0
  366. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/platform.rb +0 -0
  367. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/report/summary.rb +0 -0
  368. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/action.rb +0 -0
  369. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/around_hook.rb +0 -0
  370. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/case.rb +0 -0
  371. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/data_table.rb +0 -0
  372. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/doc_string.rb +0 -0
  373. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/empty_multiline_argument.rb +0 -0
  374. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/filters/activate_steps_for_self_test.rb +0 -0
  375. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/filters/locations_filter.rb +0 -0
  376. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/filters/name_filter.rb +0 -0
  377. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/filters/tag_filter.rb +0 -0
  378. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/filters.rb +0 -0
  379. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/location.rb +0 -0
  380. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/result.rb +0 -0
  381. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/runner.rb +0 -0
  382. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/step.rb +0 -0
  383. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/tag.rb +0 -0
  384. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core/test/timer.rb +0 -0
  385. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-core-11.1.0 → cucumber-core-12.0.0}/lib/cucumber/core.rb +0 -0
  386. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages/id_generator.rb +0 -0
  387. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages/message/deserialization.rb +0 -0
  388. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages/message/serialization.rb +0 -0
  389. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages/message/utils.rb +0 -0
  390. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages/message.rb +0 -0
  391. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages/ndjson_to_message_enumerator.rb +0 -0
  392. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages/time_conversion.rb +0 -0
  393. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/lib/cucumber/messages.rb +0 -0
  394. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-cucumber-expressions-16.1.2 → cucumber-messages-22.0.0}/spec/capture_warnings.rb +0 -0
  395. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/spec/cucumber/messages/acceptance_spec.rb +0 -0
  396. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/spec/cucumber/messages/id_generator_spec.rb +0 -0
  397. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/spec/cucumber/messages/message/deserialization_spec.rb +0 -0
  398. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/spec/cucumber/messages/message/dummy_messages.rb +0 -0
  399. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/spec/cucumber/messages/message/serialization_spec.rb +0 -0
  400. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/spec/cucumber/messages/message/utils_spec.rb +0 -0
  401. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/spec/cucumber/messages/ndjson_serialization_spec.rb +0 -0
  402. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/spec/cucumber/messages/time_conversion_spec.rb +0 -0
  403. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-messages-21.0.1 → cucumber-messages-22.0.0}/spec/cucumber/messages/version_spec.rb +0 -0
  404. /data/vendor/bundle/ruby/3.2.0/gems/{cucumber-tag-expressions-4.1.0 → cucumber-tag-expressions-5.0.6}/lib/cucumber/tag_expressions.rb +0 -0
  405. /data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/context.rb +0 -0
  406. /data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/tag_formatter.rb +0 -0
  407. /data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/tagged_logger_support.rb +0 -0
  408. /data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/tagged_logging.rb +0 -0
  409. /data/vendor/bundle/ruby/3.2.0/gems/{lumberjack-1.2.9 → lumberjack-1.2.10}/lib/lumberjack/tags.rb +0 -0
  410. /data/vendor/bundle/ruby/3.2.0/gems/{public_suffix-5.0.3 → public_suffix-5.0.4}/lib/public_suffix/domain.rb +0 -0
  411. /data/vendor/bundle/ruby/3.2.0/gems/{public_suffix-5.0.3 → public_suffix-5.0.4}/lib/public_suffix/errors.rb +0 -0
  412. /data/vendor/bundle/ruby/3.2.0/gems/{public_suffix-5.0.3 → public_suffix-5.0.4}/lib/public_suffix/list.rb +0 -0
  413. /data/vendor/bundle/ruby/3.2.0/gems/{public_suffix-5.0.3 → public_suffix-5.0.4}/lib/public_suffix/rule.rb +0 -0
  414. /data/vendor/bundle/ruby/3.2.0/gems/{public_suffix-5.0.3 → public_suffix-5.0.4}/lib/public_suffix.rb +0 -0
  415. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/doc/jamis.rb +0 -0
  416. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/backtrace.rb +0 -0
  417. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/clean.rb +0 -0
  418. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/cloneable.rb +0 -0
  419. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/cpu_counter.rb +0 -0
  420. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/default_loader.rb +0 -0
  421. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/early_time.rb +0 -0
  422. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/ext/core.rb +0 -0
  423. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/ext/string.rb +0 -0
  424. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/file_creation_task.rb +0 -0
  425. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/file_list.rb +0 -0
  426. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/file_utils_ext.rb +0 -0
  427. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/invocation_chain.rb +0 -0
  428. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/invocation_exception_mixin.rb +0 -0
  429. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/late_time.rb +0 -0
  430. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/linked_list.rb +0 -0
  431. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/loaders/makefile.rb +0 -0
  432. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/multi_task.rb +0 -0
  433. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/name_space.rb +0 -0
  434. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/phony.rb +0 -0
  435. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/private_reader.rb +0 -0
  436. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/promise.rb +0 -0
  437. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/pseudo_status.rb +0 -0
  438. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/rake_module.rb +0 -0
  439. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/rake_test_loader.rb +0 -0
  440. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/rule_recursion_overflow_error.rb +0 -0
  441. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/scope.rb +0 -0
  442. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/task_argument_error.rb +0 -0
  443. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/task_arguments.rb +0 -0
  444. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/task_manager.rb +0 -0
  445. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/tasklib.rb +0 -0
  446. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/testtask.rb +0 -0
  447. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/thread_history_display.rb +0 -0
  448. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/trace_output.rb +0 -0
  449. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake/win32.rb +0 -0
  450. /data/vendor/bundle/ruby/3.2.0/gems/{rake-13.0.6 → rake-13.1.0}/lib/rake.rb +0 -0
  451. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/examples/simple_connection.rb +0 -0
  452. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/core_ext/array.rb +0 -0
  453. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/core_ext/hash.rb +0 -0
  454. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/all.rb +0 -0
  455. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/backends/abstract.rb +0 -0
  456. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/backends/connection_pool/cache.rb +0 -0
  457. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/backends/connection_pool/nil_cache.rb +0 -0
  458. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/backends/connection_pool.rb +0 -0
  459. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/backends/local.rb +0 -0
  460. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/backends/netssh/known_hosts.rb +0 -0
  461. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/backends/netssh.rb +0 -0
  462. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/backends/printer.rb +0 -0
  463. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/backends/skipper.rb +0 -0
  464. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/color.rb +0 -0
  465. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/command.rb +0 -0
  466. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/command_map.rb +0 -0
  467. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/configuration.rb +0 -0
  468. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/coordinator.rb +0 -0
  469. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/deprecation_logger.rb +0 -0
  470. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/dsl.rb +0 -0
  471. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/exception.rb +0 -0
  472. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/formatters/abstract.rb +0 -0
  473. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/formatters/black_hole.rb +0 -0
  474. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/formatters/dot.rb +0 -0
  475. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/formatters/pretty.rb +0 -0
  476. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/formatters/simple_text.rb +0 -0
  477. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/host.rb +0 -0
  478. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/log_message.rb +0 -0
  479. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/logger.rb +0 -0
  480. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/mapping_interaction_handler.rb +0 -0
  481. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/runners/abstract.rb +0 -0
  482. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/runners/group.rb +0 -0
  483. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/runners/null.rb +0 -0
  484. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/runners/parallel.rb +0 -0
  485. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit/runners/sequential.rb +0 -0
  486. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/lib/sshkit.rb +0 -0
  487. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/functional/backends/test_local.rb +0 -0
  488. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/functional/backends/test_netssh.rb +0 -0
  489. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/functional/test_ssh_server_comes_up_for_functional_tests.rb +0 -0
  490. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/helper.rb +0 -0
  491. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/support/vagrant_wrapper.rb +0 -0
  492. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/backends/test_abstract.rb +0 -0
  493. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/backends/test_connection_pool.rb +0 -0
  494. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/backends/test_local.rb +0 -0
  495. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/backends/test_netssh.rb +0 -0
  496. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/backends/test_printer.rb +0 -0
  497. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/formatters/test_custom.rb +0 -0
  498. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/formatters/test_dot.rb +0 -0
  499. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/formatters/test_pretty.rb +0 -0
  500. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/formatters/test_simple_text.rb +0 -0
  501. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/runners/test_group.rb +0 -0
  502. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/runners/test_parallel.rb +0 -0
  503. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/runners/test_sequential.rb +0 -0
  504. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_color.rb +0 -0
  505. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_command.rb +0 -0
  506. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_command_map.rb +0 -0
  507. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_configuration.rb +0 -0
  508. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_coordinator.rb +0 -0
  509. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_deprecation_logger.rb +0 -0
  510. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_dsl.rb +0 -0
  511. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_host.rb +0 -0
  512. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_logger.rb +0 -0
  513. /data/vendor/bundle/ruby/3.2.0/gems/{sshkit-1.21.5 → sshkit-1.21.6}/test/unit/test_mapping_interaction_handler.rb +0 -0
@@ -0,0 +1,2360 @@
1
+ # frozen_string_literal: true
2
+ ##
3
+ # This file contains stuff stolen outright from:
4
+ #
5
+ # rtags.rb -
6
+ # ruby-lex.rb - ruby lexcal analyzer
7
+ # ruby-token.rb - ruby tokens
8
+ # by Keiju ISHITSUKA (Nippon Rational Inc.)
9
+ #
10
+
11
+ require 'ripper'
12
+ require_relative 'ripper_state_lex'
13
+
14
+ ##
15
+ # Extracts code elements from a source file returning a TopLevel object
16
+ # containing the constituent file elements.
17
+ #
18
+ # This file is based on rtags
19
+ #
20
+ # RubyParser understands how to document:
21
+ # * classes
22
+ # * modules
23
+ # * methods
24
+ # * constants
25
+ # * aliases
26
+ # * private, public, protected
27
+ # * private_class_function, public_class_function
28
+ # * private_constant, public_constant
29
+ # * module_function
30
+ # * attr, attr_reader, attr_writer, attr_accessor
31
+ # * extra accessors given on the command line
32
+ # * metaprogrammed methods
33
+ # * require
34
+ # * include
35
+ #
36
+ # == Method Arguments
37
+ #
38
+ #--
39
+ # NOTE: I don't think this works, needs tests, remove the paragraph following
40
+ # this block when known to work
41
+ #
42
+ # The parser extracts the arguments from the method definition. You can
43
+ # override this with a custom argument definition using the :args: directive:
44
+ #
45
+ # ##
46
+ # # This method tries over and over until it is tired
47
+ #
48
+ # def go_go_go(thing_to_try, tries = 10) # :args: thing_to_try
49
+ # puts thing_to_try
50
+ # go_go_go thing_to_try, tries - 1
51
+ # end
52
+ #
53
+ # If you have a more-complex set of overrides you can use the :call-seq:
54
+ # directive:
55
+ #++
56
+ #
57
+ # The parser extracts the arguments from the method definition. You can
58
+ # override this with a custom argument definition using the :call-seq:
59
+ # directive:
60
+ #
61
+ # ##
62
+ # # This method can be called with a range or an offset and length
63
+ # #
64
+ # # :call-seq:
65
+ # # my_method(Range)
66
+ # # my_method(offset, length)
67
+ #
68
+ # def my_method(*args)
69
+ # end
70
+ #
71
+ # The parser extracts +yield+ expressions from method bodies to gather the
72
+ # yielded argument names. If your method manually calls a block instead of
73
+ # yielding or you want to override the discovered argument names use
74
+ # the :yields: directive:
75
+ #
76
+ # ##
77
+ # # My method is awesome
78
+ #
79
+ # def my_method(&block) # :yields: happy, times
80
+ # block.call 1, 2
81
+ # end
82
+ #
83
+ # == Metaprogrammed Methods
84
+ #
85
+ # To pick up a metaprogrammed method, the parser looks for a comment starting
86
+ # with '##' before an identifier:
87
+ #
88
+ # ##
89
+ # # This is a meta-programmed method!
90
+ #
91
+ # add_my_method :meta_method, :arg1, :arg2
92
+ #
93
+ # The parser looks at the token after the identifier to determine the name, in
94
+ # this example, :meta_method. If a name cannot be found, a warning is printed
95
+ # and 'unknown is used.
96
+ #
97
+ # You can force the name of a method using the :method: directive:
98
+ #
99
+ # ##
100
+ # # :method: some_method!
101
+ #
102
+ # By default, meta-methods are instance methods. To indicate that a method is
103
+ # a singleton method instead use the :singleton-method: directive:
104
+ #
105
+ # ##
106
+ # # :singleton-method:
107
+ #
108
+ # You can also use the :singleton-method: directive with a name:
109
+ #
110
+ # ##
111
+ # # :singleton-method: some_method!
112
+ #
113
+ # You can define arguments for metaprogrammed methods via either the
114
+ # :call-seq:, :arg: or :args: directives.
115
+ #
116
+ # Additionally you can mark a method as an attribute by
117
+ # using :attr:, :attr_reader:, :attr_writer: or :attr_accessor:. Just like
118
+ # for :method:, the name is optional.
119
+ #
120
+ # ##
121
+ # # :attr_reader: my_attr_name
122
+ #
123
+ # == Hidden methods and attributes
124
+ #
125
+ # You can provide documentation for methods that don't appear using
126
+ # the :method:, :singleton-method: and :attr: directives:
127
+ #
128
+ # ##
129
+ # # :attr_writer: ghost_writer
130
+ # # There is an attribute here, but you can't see it!
131
+ #
132
+ # ##
133
+ # # :method: ghost_method
134
+ # # There is a method here, but you can't see it!
135
+ #
136
+ # ##
137
+ # # this is a comment for a regular method
138
+ #
139
+ # def regular_method() end
140
+ #
141
+ # Note that by default, the :method: directive will be ignored if there is a
142
+ # standard rdocable item following it.
143
+
144
+ class RDoc::Parser::Ruby < RDoc::Parser
145
+
146
+ parse_files_matching(/\.rbw?$/)
147
+
148
+ include RDoc::TokenStream
149
+ include RDoc::Parser::RubyTools
150
+
151
+ ##
152
+ # RDoc::NormalClass type
153
+
154
+ NORMAL = "::"
155
+
156
+ ##
157
+ # RDoc::SingleClass type
158
+
159
+ SINGLE = "<<"
160
+
161
+ ##
162
+ # Creates a new Ruby parser.
163
+
164
+ def initialize(top_level, file_name, content, options, stats)
165
+ super
166
+
167
+ content = handle_tab_width(content)
168
+
169
+ @size = 0
170
+ @token_listeners = nil
171
+ content = RDoc::Encoding.remove_magic_comment content
172
+ @scanner = RDoc::Parser::RipperStateLex.parse(content)
173
+ @content = content
174
+ @scanner_point = 0
175
+ @prev_seek = nil
176
+ @markup = @options.markup
177
+ @track_visibility = :nodoc != @options.visibility
178
+ @encoding = @options.encoding
179
+
180
+ reset
181
+ end
182
+
183
+ def tk_nl?(tk)
184
+ :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]
185
+ end
186
+
187
+ ##
188
+ # Retrieves the read token stream and replaces +pattern+ with +replacement+
189
+ # using gsub. If the result is only a ";" returns an empty string.
190
+
191
+ def get_tkread_clean pattern, replacement # :nodoc:
192
+ read = get_tkread.gsub(pattern, replacement).strip
193
+ return '' if read == ';'
194
+ read
195
+ end
196
+
197
+ ##
198
+ # Extracts the visibility information for the visibility token +tk+
199
+ # and +single+ class type identifier.
200
+ #
201
+ # Returns the visibility type (a string), the visibility (a symbol) and
202
+ # +singleton+ if the methods following should be converted to singleton
203
+ # methods.
204
+
205
+ def get_visibility_information tk, single # :nodoc:
206
+ vis_type = tk[:text]
207
+ singleton = single == SINGLE
208
+
209
+ vis =
210
+ case vis_type
211
+ when 'private' then :private
212
+ when 'protected' then :protected
213
+ when 'public' then :public
214
+ when 'private_class_method' then
215
+ singleton = true
216
+ :private
217
+ when 'public_class_method' then
218
+ singleton = true
219
+ :public
220
+ when 'module_function' then
221
+ singleton = true
222
+ :public
223
+ else
224
+ raise RDoc::Error, "Invalid visibility: #{tk.name}"
225
+ end
226
+
227
+ return vis_type, vis, singleton
228
+ end
229
+
230
+ ##
231
+ # Look for the first comment in a file that isn't a shebang line.
232
+
233
+ def collect_first_comment
234
+ skip_tkspace
235
+ comment = ''.dup
236
+ comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
237
+ first_line = true
238
+ first_comment_tk_kind = nil
239
+ line_no = nil
240
+
241
+ tk = get_tk
242
+
243
+ while tk && (:on_comment == tk[:kind] or :on_embdoc == tk[:kind])
244
+ comment_body = retrieve_comment_body(tk)
245
+ if first_line and comment_body =~ /\A#!/ then
246
+ skip_tkspace
247
+ tk = get_tk
248
+ elsif first_line and comment_body =~ /\A#\s*-\*-/ then
249
+ first_line = false
250
+ skip_tkspace
251
+ tk = get_tk
252
+ else
253
+ break if first_comment_tk_kind and not first_comment_tk_kind === tk[:kind]
254
+ first_comment_tk_kind = tk[:kind]
255
+
256
+ line_no = tk[:line_no] if first_line
257
+ first_line = false
258
+ comment << comment_body
259
+ tk = get_tk
260
+
261
+ if :on_nl === tk then
262
+ skip_tkspace_without_nl
263
+ tk = get_tk
264
+ end
265
+ end
266
+ end
267
+
268
+ unget_tk tk
269
+
270
+ new_comment comment, line_no
271
+ end
272
+
273
+ ##
274
+ # Consumes trailing whitespace from the token stream
275
+
276
+ def consume_trailing_spaces # :nodoc:
277
+ skip_tkspace_without_nl
278
+ end
279
+
280
+ ##
281
+ # Creates a new attribute in +container+ with +name+.
282
+
283
+ def create_attr container, single, name, rw, comment # :nodoc:
284
+ att = RDoc::Attr.new get_tkread, name, rw, comment, single == SINGLE
285
+ record_location att
286
+
287
+ container.add_attribute att
288
+ @stats.add_attribute att
289
+
290
+ att
291
+ end
292
+
293
+ ##
294
+ # Creates a module alias in +container+ at +rhs_name+ (or at the top-level
295
+ # for "::") with the name from +constant+.
296
+
297
+ def create_module_alias container, constant, rhs_name # :nodoc:
298
+ mod = if rhs_name =~ /^::/ then
299
+ @store.find_class_or_module rhs_name
300
+ else
301
+ container.find_module_named rhs_name
302
+ end
303
+
304
+ container.add_module_alias mod, rhs_name, constant, @top_level
305
+ end
306
+
307
+ ##
308
+ # Aborts with +msg+
309
+
310
+ def error(msg)
311
+ msg = make_message msg
312
+
313
+ abort msg
314
+ end
315
+
316
+ ##
317
+ # Looks for a true or false token.
318
+
319
+ def get_bool
320
+ skip_tkspace
321
+ tk = get_tk
322
+ if :on_kw == tk[:kind] && 'true' == tk[:text]
323
+ true
324
+ elsif :on_kw == tk[:kind] && ('false' == tk[:text] || 'nil' == tk[:text])
325
+ false
326
+ else
327
+ unget_tk tk
328
+ true
329
+ end
330
+ end
331
+
332
+ ##
333
+ # Look for the name of a class of module (optionally with a leading :: or
334
+ # with :: separated named) and return the ultimate name, the associated
335
+ # container, and the given name (with the ::).
336
+
337
+ def get_class_or_module container, ignore_constants = false
338
+ skip_tkspace
339
+ name_t = get_tk
340
+ given_name = ''.dup
341
+
342
+ # class ::A -> A is in the top level
343
+ if :on_op == name_t[:kind] and '::' == name_t[:text] then # bug
344
+ name_t = get_tk
345
+ container = @top_level
346
+ given_name << '::'
347
+ end
348
+
349
+ skip_tkspace_without_nl
350
+ given_name << name_t[:text]
351
+
352
+ is_self = name_t[:kind] == :on_op && name_t[:text] == '<<'
353
+ new_modules = []
354
+ while !is_self && (tk = peek_tk) and :on_op == tk[:kind] and '::' == tk[:text] do
355
+ prev_container = container
356
+ container = container.find_module_named name_t[:text]
357
+ container ||=
358
+ if ignore_constants then
359
+ c = RDoc::NormalModule.new name_t[:text]
360
+ c.store = @store
361
+ new_modules << [prev_container, c]
362
+ c
363
+ else
364
+ c = prev_container.add_module RDoc::NormalModule, name_t[:text]
365
+ c.ignore unless prev_container.document_children
366
+ @top_level.add_to_classes_or_modules c
367
+ c
368
+ end
369
+
370
+ record_location container
371
+
372
+ get_tk
373
+ skip_tkspace
374
+ if :on_lparen == peek_tk[:kind] # ProcObjectInConstant::()
375
+ parse_method_or_yield_parameters
376
+ break
377
+ end
378
+ name_t = get_tk
379
+ unless :on_const == name_t[:kind] || :on_ident == name_t[:kind]
380
+ raise RDoc::Error, "Invalid class or module definition: #{given_name}"
381
+ end
382
+ if prev_container == container and !ignore_constants
383
+ given_name = name_t[:text]
384
+ else
385
+ given_name << '::' + name_t[:text]
386
+ end
387
+ end
388
+
389
+ skip_tkspace_without_nl
390
+
391
+ return [container, name_t, given_name, new_modules]
392
+ end
393
+
394
+ ##
395
+ # Skip opening parentheses and yield the block.
396
+ # Skip closing parentheses too when exists.
397
+
398
+ def skip_parentheses(&block)
399
+ left_tk = peek_tk
400
+
401
+ if :on_lparen == left_tk[:kind]
402
+ get_tk
403
+
404
+ ret = skip_parentheses(&block)
405
+
406
+ right_tk = peek_tk
407
+ if :on_rparen == right_tk[:kind]
408
+ get_tk
409
+ end
410
+
411
+ ret
412
+ else
413
+ yield
414
+ end
415
+ end
416
+
417
+ ##
418
+ # Return a superclass, which can be either a constant of an expression
419
+
420
+ def get_class_specification
421
+ tk = peek_tk
422
+ if tk.nil?
423
+ return ''
424
+ elsif :on_kw == tk[:kind] && 'self' == tk[:text]
425
+ return 'self'
426
+ elsif :on_gvar == tk[:kind]
427
+ return ''
428
+ end
429
+
430
+ res = get_constant
431
+
432
+ skip_tkspace_without_nl
433
+
434
+ get_tkread # empty out read buffer
435
+
436
+ tk = get_tk
437
+ return res unless tk
438
+
439
+ case tk[:kind]
440
+ when :on_nl, :on_comment, :on_embdoc, :on_semicolon then
441
+ unget_tk(tk)
442
+ return res
443
+ end
444
+
445
+ res += parse_call_parameters(tk)
446
+ res
447
+ end
448
+
449
+ ##
450
+ # Parse a constant, which might be qualified by one or more class or module
451
+ # names
452
+
453
+ def get_constant
454
+ res = ""
455
+ skip_tkspace_without_nl
456
+ tk = get_tk
457
+
458
+ while tk && ((:on_op == tk[:kind] && '::' == tk[:text]) || :on_const == tk[:kind]) do
459
+ res += tk[:text]
460
+ tk = get_tk
461
+ end
462
+
463
+ unget_tk(tk)
464
+ res
465
+ end
466
+
467
+ ##
468
+ # Get an included module that may be surrounded by parens
469
+
470
+ def get_included_module_with_optional_parens
471
+ skip_tkspace_without_nl
472
+ get_tkread
473
+ tk = get_tk
474
+ end_token = get_end_token tk
475
+ return '' unless end_token
476
+
477
+ nest = 0
478
+ continue = false
479
+ only_constant = true
480
+
481
+ while tk != nil do
482
+ is_element_of_constant = false
483
+ case tk[:kind]
484
+ when :on_semicolon then
485
+ break if nest == 0
486
+ when :on_lbracket then
487
+ nest += 1
488
+ when :on_rbracket then
489
+ nest -= 1
490
+ when :on_lbrace then
491
+ nest += 1
492
+ when :on_rbrace then
493
+ nest -= 1
494
+ if nest <= 0
495
+ # we might have a.each { |i| yield i }
496
+ unget_tk(tk) if nest < 0
497
+ break
498
+ end
499
+ when :on_lparen then
500
+ nest += 1
501
+ when end_token[:kind] then
502
+ if end_token[:kind] == :on_rparen
503
+ nest -= 1
504
+ break if nest <= 0
505
+ else
506
+ break if nest <= 0
507
+ end
508
+ when :on_rparen then
509
+ nest -= 1
510
+ when :on_comment, :on_embdoc then
511
+ @read.pop
512
+ if :on_nl == end_token[:kind] and "\n" == tk[:text][-1] and
513
+ (!continue or (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) != 0) then
514
+ break if !continue and nest <= 0
515
+ end
516
+ when :on_comma then
517
+ continue = true
518
+ when :on_ident then
519
+ continue = false if continue
520
+ when :on_kw then
521
+ case tk[:text]
522
+ when 'def', 'do', 'case', 'for', 'begin', 'class', 'module'
523
+ nest += 1
524
+ when 'if', 'unless', 'while', 'until', 'rescue'
525
+ # postfix if/unless/while/until/rescue must be EXPR_LABEL
526
+ nest += 1 unless (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) != 0
527
+ when 'end'
528
+ nest -= 1
529
+ break if nest == 0
530
+ end
531
+ when :on_const then
532
+ is_element_of_constant = true
533
+ when :on_op then
534
+ is_element_of_constant = true if '::' == tk[:text]
535
+ end
536
+ only_constant = false unless is_element_of_constant
537
+ tk = get_tk
538
+ end
539
+
540
+ if only_constant
541
+ get_tkread_clean(/\s+/, ' ')
542
+ else
543
+ ''
544
+ end
545
+ end
546
+
547
+ ##
548
+ # Little hack going on here. In the statement:
549
+ #
550
+ # f = 2*(1+yield)
551
+ #
552
+ # We see the RPAREN as the next token, so we need to exit early. This still
553
+ # won't catch all cases (such as "a = yield + 1"
554
+
555
+ def get_end_token tk # :nodoc:
556
+ case tk[:kind]
557
+ when :on_lparen
558
+ token = RDoc::Parser::RipperStateLex::Token.new
559
+ token[:kind] = :on_rparen
560
+ token[:text] = ')'
561
+ token
562
+ when :on_rparen
563
+ nil
564
+ else
565
+ token = RDoc::Parser::RipperStateLex::Token.new
566
+ token[:kind] = :on_nl
567
+ token[:text] = "\n"
568
+ token
569
+ end
570
+ end
571
+
572
+ ##
573
+ # Retrieves the method container for a singleton method.
574
+
575
+ def get_method_container container, name_t # :nodoc:
576
+ prev_container = container
577
+ container = container.find_module_named(name_t[:text])
578
+
579
+ unless container then
580
+ constant = prev_container.constants.find do |const|
581
+ const.name == name_t[:text]
582
+ end
583
+
584
+ if constant then
585
+ parse_method_dummy prev_container
586
+ return
587
+ end
588
+ end
589
+
590
+ unless container then
591
+ # TODO seems broken, should starting at Object in @store
592
+ obj = name_t[:text].split("::").inject(Object) do |state, item|
593
+ state.const_get(item)
594
+ end rescue nil
595
+
596
+ type = obj.class == Class ? RDoc::NormalClass : RDoc::NormalModule
597
+
598
+ unless [Class, Module].include?(obj.class) then
599
+ warn("Couldn't find #{name_t[:text]}. Assuming it's a module")
600
+ end
601
+
602
+ if type == RDoc::NormalClass then
603
+ sclass = obj.superclass ? obj.superclass.name : nil
604
+ container = prev_container.add_class type, name_t[:text], sclass
605
+ else
606
+ container = prev_container.add_module type, name_t[:text]
607
+ end
608
+
609
+ record_location container
610
+ end
611
+
612
+ container
613
+ end
614
+
615
+ ##
616
+ # Extracts a name or symbol from the token stream.
617
+
618
+ def get_symbol_or_name
619
+ tk = get_tk
620
+ case tk[:kind]
621
+ when :on_symbol then
622
+ text = tk[:text].sub(/^:/, '')
623
+
624
+ next_tk = peek_tk
625
+ if next_tk && :on_op == next_tk[:kind] && '=' == next_tk[:text] then
626
+ get_tk
627
+ text << '='
628
+ end
629
+
630
+ text
631
+ when :on_ident, :on_const, :on_gvar, :on_cvar, :on_ivar, :on_op, :on_kw then
632
+ tk[:text]
633
+ when :on_tstring, :on_dstring then
634
+ tk[:text][1..-2]
635
+ else
636
+ raise RDoc::Error, "Name or symbol expected (got #{tk})"
637
+ end
638
+ end
639
+
640
+ ##
641
+ # Marks containers between +container+ and +ancestor+ as ignored
642
+
643
+ def suppress_parents container, ancestor # :nodoc:
644
+ while container and container != ancestor do
645
+ container.suppress unless container.documented?
646
+ container = container.parent
647
+ end
648
+ end
649
+
650
+ ##
651
+ # Look for directives in a normal comment block:
652
+ #
653
+ # # :stopdoc:
654
+ # # Don't display comment from this point forward
655
+ #
656
+ # This routine modifies its +comment+ parameter.
657
+
658
+ def look_for_directives_in container, comment
659
+ @preprocess.handle comment, container do |directive, param|
660
+ case directive
661
+ when 'method', 'singleton-method',
662
+ 'attr', 'attr_accessor', 'attr_reader', 'attr_writer' then
663
+ false # handled elsewhere
664
+ when 'section' then
665
+ break unless container.kind_of?(RDoc::Context)
666
+ container.set_current_section param, comment.dup
667
+ comment.text = ''
668
+ break
669
+ end
670
+ end
671
+
672
+ comment.remove_private
673
+ end
674
+
675
+ ##
676
+ # Adds useful info about the parser to +message+
677
+
678
+ def make_message message
679
+ prefix = "#{@file_name}:".dup
680
+
681
+ tk = peek_tk
682
+ prefix << "#{tk[:line_no]}:#{tk[:char_no]}:" if tk
683
+
684
+ "#{prefix} #{message}"
685
+ end
686
+
687
+ ##
688
+ # Creates a comment with the correct format
689
+
690
+ def new_comment comment, line_no = nil
691
+ c = RDoc::Comment.new comment, @top_level, :ruby
692
+ c.line = line_no
693
+ c.format = @markup
694
+ c
695
+ end
696
+
697
+ ##
698
+ # Creates an RDoc::Attr for the name following +tk+, setting the comment to
699
+ # +comment+.
700
+
701
+ def parse_attr(context, single, tk, comment)
702
+ line_no = tk[:line_no]
703
+
704
+ args = parse_symbol_arg 1
705
+ if args.size > 0 then
706
+ name = args[0]
707
+ rw = "R"
708
+ skip_tkspace_without_nl
709
+ tk = get_tk
710
+
711
+ if :on_comma == tk[:kind] then
712
+ rw = "RW" if get_bool
713
+ else
714
+ unget_tk tk
715
+ end
716
+
717
+ att = create_attr context, single, name, rw, comment
718
+ att.line = line_no
719
+
720
+ read_documentation_modifiers att, RDoc::ATTR_MODIFIERS
721
+ else
722
+ warn "'attr' ignored - looks like a variable"
723
+ end
724
+ end
725
+
726
+ ##
727
+ # Creates an RDoc::Attr for each attribute listed after +tk+, setting the
728
+ # comment for each to +comment+.
729
+
730
+ def parse_attr_accessor(context, single, tk, comment)
731
+ line_no = tk[:line_no]
732
+
733
+ args = parse_symbol_arg
734
+ rw = "?"
735
+
736
+ tmp = RDoc::CodeObject.new
737
+ read_documentation_modifiers tmp, RDoc::ATTR_MODIFIERS
738
+ # TODO In most other places we let the context keep track of document_self
739
+ # and add found items appropriately but here we do not. I'm not sure why.
740
+ return if @track_visibility and not tmp.document_self
741
+
742
+ case tk[:text]
743
+ when "attr_reader" then rw = "R"
744
+ when "attr_writer" then rw = "W"
745
+ when "attr_accessor" then rw = "RW"
746
+ else
747
+ rw = '?'
748
+ end
749
+
750
+ for name in args
751
+ att = create_attr context, single, name, rw, comment
752
+ att.line = line_no
753
+ end
754
+ end
755
+
756
+ ##
757
+ # Parses an +alias+ in +context+ with +comment+
758
+
759
+ def parse_alias(context, single, tk, comment)
760
+ line_no = tk[:line_no]
761
+
762
+ skip_tkspace
763
+
764
+ if :on_lparen === peek_tk[:kind] then
765
+ get_tk
766
+ skip_tkspace
767
+ end
768
+
769
+ new_name = get_symbol_or_name
770
+
771
+ skip_tkspace
772
+ if :on_comma === peek_tk[:kind] then
773
+ get_tk
774
+ skip_tkspace
775
+ end
776
+
777
+ begin
778
+ old_name = get_symbol_or_name
779
+ rescue RDoc::Error
780
+ return
781
+ end
782
+
783
+ al = RDoc::Alias.new(get_tkread, old_name, new_name, comment,
784
+ single == SINGLE)
785
+ record_location al
786
+ al.line = line_no
787
+
788
+ read_documentation_modifiers al, RDoc::ATTR_MODIFIERS
789
+ context.add_alias al
790
+ @stats.add_alias al
791
+
792
+ al
793
+ end
794
+
795
+ ##
796
+ # Extracts call parameters from the token stream.
797
+
798
+ def parse_call_parameters(tk)
799
+ end_token = case tk[:kind]
800
+ when :on_lparen
801
+ :on_rparen
802
+ when :on_rparen
803
+ return ""
804
+ else
805
+ :on_nl
806
+ end
807
+ nest = 0
808
+
809
+ loop do
810
+ break if tk.nil?
811
+ case tk[:kind]
812
+ when :on_semicolon
813
+ break
814
+ when :on_lparen
815
+ nest += 1
816
+ when end_token
817
+ if end_token == :on_rparen
818
+ nest -= 1
819
+ break if RDoc::Parser::RipperStateLex.end?(tk) and nest <= 0
820
+ else
821
+ break if RDoc::Parser::RipperStateLex.end?(tk)
822
+ end
823
+ when :on_comment, :on_embdoc
824
+ unget_tk(tk)
825
+ break
826
+ when :on_op
827
+ if tk[:text] =~ /^(.{1,2})?=$/
828
+ unget_tk(tk)
829
+ break
830
+ end
831
+ end
832
+ tk = get_tk
833
+ end
834
+
835
+ get_tkread_clean "\n", " "
836
+ end
837
+
838
+ ##
839
+ # Parses a class in +context+ with +comment+
840
+
841
+ def parse_class container, single, tk, comment
842
+ line_no = tk[:line_no]
843
+
844
+ declaration_context = container
845
+ container, name_t, given_name, = get_class_or_module container
846
+
847
+ if name_t[:kind] == :on_const
848
+ cls = parse_class_regular container, declaration_context, single,
849
+ name_t, given_name, comment
850
+ elsif name_t[:kind] == :on_op && name_t[:text] == '<<'
851
+ case name = skip_parentheses { get_class_specification }
852
+ when 'self', container.name
853
+ read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
854
+ parse_statements container, SINGLE
855
+ return # don't update line
856
+ else
857
+ cls = parse_class_singleton container, name, comment
858
+ end
859
+ else
860
+ warn "Expected class name or '<<'. Got #{name_t[:kind]}: #{name_t[:text].inspect}"
861
+ return
862
+ end
863
+
864
+ cls.line = line_no
865
+
866
+ # after end modifiers
867
+ read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
868
+
869
+ cls
870
+ end
871
+
872
+ ##
873
+ # Parses and creates a regular class
874
+
875
+ def parse_class_regular container, declaration_context, single, # :nodoc:
876
+ name_t, given_name, comment
877
+ superclass = '::Object'
878
+
879
+ if given_name =~ /^::/ then
880
+ declaration_context = @top_level
881
+ given_name = $'
882
+ end
883
+
884
+ tk = peek_tk
885
+ if tk[:kind] == :on_op && tk[:text] == '<' then
886
+ get_tk
887
+ skip_tkspace
888
+ superclass = get_class_specification
889
+ superclass = '(unknown)' if superclass.empty?
890
+ end
891
+
892
+ cls_type = single == SINGLE ? RDoc::SingleClass : RDoc::NormalClass
893
+ cls = declaration_context.add_class cls_type, given_name, superclass
894
+ cls.ignore unless container.document_children
895
+
896
+ read_documentation_modifiers cls, RDoc::CLASS_MODIFIERS
897
+ record_location cls
898
+
899
+ cls.add_comment comment, @top_level
900
+
901
+ @top_level.add_to_classes_or_modules cls
902
+ @stats.add_class cls
903
+
904
+ suppress_parents container, declaration_context unless cls.document_self
905
+
906
+ parse_statements cls
907
+
908
+ cls
909
+ end
910
+
911
+ ##
912
+ # Parses a singleton class in +container+ with the given +name+ and
913
+ # +comment+.
914
+
915
+ def parse_class_singleton container, name, comment # :nodoc:
916
+ other = @store.find_class_named name
917
+
918
+ unless other then
919
+ if name =~ /^::/ then
920
+ name = $'
921
+ container = @top_level
922
+ end
923
+
924
+ other = container.add_module RDoc::NormalModule, name
925
+ record_location other
926
+
927
+ # class << $gvar
928
+ other.ignore if name.empty?
929
+
930
+ other.add_comment comment, @top_level
931
+ end
932
+
933
+ # notify :nodoc: all if not a constant-named class/module
934
+ # (and remove any comment)
935
+ unless name =~ /\A(::)?[A-Z]/ then
936
+ other.document_self = nil
937
+ other.document_children = false
938
+ other.clear_comment
939
+ end
940
+
941
+ @top_level.add_to_classes_or_modules other
942
+ @stats.add_class other
943
+
944
+ read_documentation_modifiers other, RDoc::CLASS_MODIFIERS
945
+ parse_statements(other, SINGLE)
946
+
947
+ other
948
+ end
949
+
950
+ ##
951
+ # Parses a constant in +context+ with +comment+. If +ignore_constants+ is
952
+ # true, no found constants will be added to RDoc.
953
+
954
+ def parse_constant container, tk, comment, ignore_constants = false
955
+ line_no = tk[:line_no]
956
+
957
+ name = tk[:text]
958
+ skip_tkspace_without_nl
959
+
960
+ return unless name =~ /^\w+$/
961
+
962
+ new_modules = []
963
+ if :on_op == peek_tk[:kind] && '::' == peek_tk[:text] then
964
+ unget_tk tk
965
+
966
+ container, name_t, _, new_modules = get_class_or_module container, true
967
+
968
+ name = name_t[:text]
969
+ end
970
+
971
+ is_array_or_hash = false
972
+ if peek_tk && :on_lbracket == peek_tk[:kind]
973
+ get_tk
974
+ nest = 1
975
+ while bracket_tk = get_tk
976
+ case bracket_tk[:kind]
977
+ when :on_lbracket
978
+ nest += 1
979
+ when :on_rbracket
980
+ nest -= 1
981
+ break if nest == 0
982
+ end
983
+ end
984
+ skip_tkspace_without_nl
985
+ is_array_or_hash = true
986
+ end
987
+
988
+ unless peek_tk && :on_op == peek_tk[:kind] && '=' == peek_tk[:text] then
989
+ return false
990
+ end
991
+ get_tk
992
+
993
+ unless ignore_constants
994
+ new_modules.each do |prev_c, new_module|
995
+ prev_c.add_module_by_normal_module new_module
996
+ new_module.ignore unless prev_c.document_children
997
+ @top_level.add_to_classes_or_modules new_module
998
+ end
999
+ end
1000
+
1001
+ value = ''
1002
+ con = RDoc::Constant.new name, value, comment
1003
+
1004
+ body = parse_constant_body container, con, is_array_or_hash
1005
+
1006
+ return unless body
1007
+
1008
+ con.value = body
1009
+ record_location con
1010
+ con.line = line_no
1011
+ read_documentation_modifiers con, RDoc::CONSTANT_MODIFIERS
1012
+
1013
+ return if is_array_or_hash
1014
+
1015
+ @stats.add_constant con
1016
+ container.add_constant con
1017
+
1018
+ true
1019
+ end
1020
+
1021
+ def parse_constant_body container, constant, is_array_or_hash # :nodoc:
1022
+ nest = 0
1023
+ rhs_name = ''.dup
1024
+
1025
+ get_tkread
1026
+
1027
+ tk = get_tk
1028
+
1029
+ body = nil
1030
+ loop do
1031
+ break if tk.nil?
1032
+ if :on_semicolon == tk[:kind] then
1033
+ break if nest <= 0
1034
+ elsif [:on_tlambeg, :on_lparen, :on_lbrace, :on_lbracket].include?(tk[:kind]) then
1035
+ nest += 1
1036
+ elsif (:on_kw == tk[:kind] && 'def' == tk[:text]) then
1037
+ nest += 1
1038
+ elsif (:on_kw == tk[:kind] && %w{do if unless case begin}.include?(tk[:text])) then
1039
+ if (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) == 0
1040
+ nest += 1
1041
+ end
1042
+ elsif [:on_rparen, :on_rbrace, :on_rbracket].include?(tk[:kind]) ||
1043
+ (:on_kw == tk[:kind] && 'end' == tk[:text]) then
1044
+ nest -= 1
1045
+ elsif (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) then
1046
+ unget_tk tk
1047
+ if nest <= 0 and RDoc::Parser::RipperStateLex.end?(tk) then
1048
+ body = get_tkread_clean(/^[ \t]+/, '')
1049
+ read_documentation_modifiers constant, RDoc::CONSTANT_MODIFIERS
1050
+ break
1051
+ else
1052
+ read_documentation_modifiers constant, RDoc::CONSTANT_MODIFIERS
1053
+ end
1054
+ elsif :on_const == tk[:kind] then
1055
+ rhs_name << tk[:text]
1056
+
1057
+ next_tk = peek_tk
1058
+ if nest <= 0 and (next_tk.nil? || :on_nl == next_tk[:kind]) then
1059
+ create_module_alias container, constant, rhs_name unless is_array_or_hash
1060
+ break
1061
+ end
1062
+ elsif :on_nl == tk[:kind] then
1063
+ if nest <= 0 and RDoc::Parser::RipperStateLex.end?(tk) then
1064
+ unget_tk tk
1065
+ break
1066
+ end
1067
+ elsif :on_op == tk[:kind] && '::' == tk[:text]
1068
+ rhs_name << '::'
1069
+ end
1070
+ tk = get_tk
1071
+ end
1072
+
1073
+ body ? body : get_tkread_clean(/^[ \t]+/, '')
1074
+ end
1075
+
1076
+ ##
1077
+ # Generates an RDoc::Method or RDoc::Attr from +comment+ by looking for
1078
+ # :method: or :attr: directives in +comment+.
1079
+
1080
+ def parse_comment container, tk, comment
1081
+ return parse_comment_tomdoc container, tk, comment if @markup == 'tomdoc'
1082
+ column = tk[:char_no]
1083
+ line_no = comment.line.nil? ? tk[:line_no] : comment.line
1084
+
1085
+ comment.text = comment.text.sub(/(^# +:?)(singleton-)(method:)/, '\1\3')
1086
+ singleton = !!$~
1087
+
1088
+ co =
1089
+ if (comment.text = comment.text.sub(/^# +:?method: *(\S*).*?\n/i, '')) && !!$~ then
1090
+ line_no += $`.count("\n")
1091
+ parse_comment_ghost container, comment.text, $1, column, line_no, comment
1092
+ elsif (comment.text = comment.text.sub(/# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i, '')) && !!$~ then
1093
+ parse_comment_attr container, $1, $3, comment
1094
+ end
1095
+
1096
+ if co then
1097
+ co.singleton = singleton
1098
+ co.line = line_no
1099
+ end
1100
+
1101
+ true
1102
+ end
1103
+
1104
+ ##
1105
+ # Parse a comment that is describing an attribute in +container+ with the
1106
+ # given +name+ and +comment+.
1107
+
1108
+ def parse_comment_attr container, type, name, comment # :nodoc:
1109
+ return if name.empty?
1110
+
1111
+ rw = case type
1112
+ when 'attr_reader' then 'R'
1113
+ when 'attr_writer' then 'W'
1114
+ else 'RW'
1115
+ end
1116
+
1117
+ create_attr container, NORMAL, name, rw, comment
1118
+ end
1119
+
1120
+ def parse_comment_ghost container, text, name, column, line_no, # :nodoc:
1121
+ comment
1122
+ name = nil if name.empty?
1123
+
1124
+ meth = RDoc::GhostMethod.new get_tkread, name
1125
+ record_location meth
1126
+
1127
+ meth.start_collecting_tokens
1128
+ indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
1129
+ position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
1130
+ position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
1131
+ newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
1132
+ meth.add_tokens [position_comment, newline, indent]
1133
+
1134
+ meth.params =
1135
+ if text.sub!(/^#\s+:?args?:\s*(.*?)\s*$/i, '') then
1136
+ $1
1137
+ else
1138
+ ''
1139
+ end
1140
+
1141
+ comment.normalize
1142
+ comment.extract_call_seq meth
1143
+
1144
+ return unless meth.name
1145
+
1146
+ container.add_method meth
1147
+
1148
+ meth.comment = comment
1149
+
1150
+ @stats.add_method meth
1151
+
1152
+ meth
1153
+ end
1154
+
1155
+ ##
1156
+ # Creates an RDoc::Method on +container+ from +comment+ if there is a
1157
+ # Signature section in the comment
1158
+
1159
+ def parse_comment_tomdoc container, tk, comment
1160
+ return unless signature = RDoc::TomDoc.signature(comment)
1161
+ column = tk[:char_no]
1162
+ line_no = tk[:line_no]
1163
+
1164
+ name, = signature.split %r%[ \(]%, 2
1165
+
1166
+ meth = RDoc::GhostMethod.new get_tkread, name
1167
+ record_location meth
1168
+ meth.line = line_no
1169
+
1170
+ meth.start_collecting_tokens
1171
+ indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
1172
+ position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
1173
+ position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
1174
+ newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
1175
+ meth.add_tokens [position_comment, newline, indent]
1176
+
1177
+ meth.call_seq = signature
1178
+
1179
+ comment.normalize
1180
+
1181
+ return unless meth.name
1182
+
1183
+ container.add_method meth
1184
+
1185
+ meth.comment = comment
1186
+
1187
+ @stats.add_method meth
1188
+ end
1189
+
1190
+ ##
1191
+ # Parses an +include+ or +extend+, indicated by the +klass+ and adds it to
1192
+ # +container+ # with +comment+
1193
+
1194
+ def parse_extend_or_include klass, container, comment # :nodoc:
1195
+ loop do
1196
+ skip_tkspace_comment
1197
+
1198
+ name = get_included_module_with_optional_parens
1199
+
1200
+ unless name.empty? then
1201
+ obj = container.add klass, name, comment
1202
+ record_location obj
1203
+ end
1204
+
1205
+ return if peek_tk.nil? || :on_comma != peek_tk[:kind]
1206
+
1207
+ get_tk
1208
+ end
1209
+ end
1210
+
1211
+ ##
1212
+ # Parses an +included+ with a block feature of ActiveSupport::Concern.
1213
+
1214
+ def parse_included_with_activesupport_concern container, comment # :nodoc:
1215
+ skip_tkspace_without_nl
1216
+ tk = get_tk
1217
+ unless tk[:kind] == :on_lbracket || (tk[:kind] == :on_kw && tk[:text] == 'do')
1218
+ unget_tk tk
1219
+ return nil # should be a block
1220
+ end
1221
+
1222
+ parse_statements container
1223
+
1224
+ container
1225
+ end
1226
+
1227
+ ##
1228
+ # Parses identifiers that can create new methods or change visibility.
1229
+ #
1230
+ # Returns true if the comment was not consumed.
1231
+
1232
+ def parse_identifier container, single, tk, comment # :nodoc:
1233
+ case tk[:text]
1234
+ when 'private', 'protected', 'public', 'private_class_method',
1235
+ 'public_class_method', 'module_function' then
1236
+ parse_visibility container, single, tk
1237
+ return true
1238
+ when 'private_constant', 'public_constant'
1239
+ parse_constant_visibility container, single, tk
1240
+ return true
1241
+ when 'attr' then
1242
+ parse_attr container, single, tk, comment
1243
+ when /^attr_(reader|writer|accessor)$/ then
1244
+ parse_attr_accessor container, single, tk, comment
1245
+ when 'alias_method' then
1246
+ parse_alias container, single, tk, comment
1247
+ when 'require', 'include' then
1248
+ # ignore
1249
+ else
1250
+ if comment.text =~ /\A#\#$/ then
1251
+ case comment.text
1252
+ when /^# +:?attr(_reader|_writer|_accessor)?:/ then
1253
+ parse_meta_attr container, single, tk, comment
1254
+ else
1255
+ method = parse_meta_method container, single, tk, comment
1256
+ method.params = container.params if
1257
+ container.params
1258
+ method.block_params = container.block_params if
1259
+ container.block_params
1260
+ end
1261
+ end
1262
+ end
1263
+
1264
+ false
1265
+ end
1266
+
1267
+ ##
1268
+ # Parses a meta-programmed attribute and creates an RDoc::Attr.
1269
+ #
1270
+ # To create foo and bar attributes on class C with comment "My attributes":
1271
+ #
1272
+ # class C
1273
+ #
1274
+ # ##
1275
+ # # :attr:
1276
+ # #
1277
+ # # My attributes
1278
+ #
1279
+ # my_attr :foo, :bar
1280
+ #
1281
+ # end
1282
+ #
1283
+ # To create a foo attribute on class C with comment "My attribute":
1284
+ #
1285
+ # class C
1286
+ #
1287
+ # ##
1288
+ # # :attr: foo
1289
+ # #
1290
+ # # My attribute
1291
+ #
1292
+ # my_attr :foo, :bar
1293
+ #
1294
+ # end
1295
+
1296
+ def parse_meta_attr(context, single, tk, comment)
1297
+ args = parse_symbol_arg
1298
+ rw = "?"
1299
+
1300
+ # If nodoc is given, don't document any of them
1301
+
1302
+ tmp = RDoc::CodeObject.new
1303
+ read_documentation_modifiers tmp, RDoc::ATTR_MODIFIERS
1304
+
1305
+ regexp = /^# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i
1306
+ if regexp =~ comment.text then
1307
+ comment.text = comment.text.sub(regexp, '')
1308
+ rw = case $1
1309
+ when 'attr_reader' then 'R'
1310
+ when 'attr_writer' then 'W'
1311
+ else 'RW'
1312
+ end
1313
+ name = $3 unless $3.empty?
1314
+ end
1315
+
1316
+ if name then
1317
+ att = create_attr context, single, name, rw, comment
1318
+ else
1319
+ args.each do |attr_name|
1320
+ att = create_attr context, single, attr_name, rw, comment
1321
+ end
1322
+ end
1323
+
1324
+ att
1325
+ end
1326
+
1327
+ ##
1328
+ # Parses a meta-programmed method
1329
+
1330
+ def parse_meta_method(container, single, tk, comment)
1331
+ column = tk[:char_no]
1332
+ line_no = tk[:line_no]
1333
+
1334
+ start_collecting_tokens
1335
+ add_token tk
1336
+ add_token_listener self
1337
+
1338
+ skip_tkspace_without_nl
1339
+
1340
+ comment.text = comment.text.sub(/(^# +:?)(singleton-)(method:)/, '\1\3')
1341
+ singleton = !!$~
1342
+
1343
+ name = parse_meta_method_name comment, tk
1344
+
1345
+ return unless name
1346
+
1347
+ meth = RDoc::MetaMethod.new get_tkread, name
1348
+ record_location meth
1349
+ meth.line = line_no
1350
+ meth.singleton = singleton
1351
+
1352
+ remove_token_listener self
1353
+
1354
+ meth.start_collecting_tokens
1355
+ indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
1356
+ position_comment = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
1357
+ position_comment[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
1358
+ newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
1359
+ meth.add_tokens [position_comment, newline, indent]
1360
+ meth.add_tokens @token_stream
1361
+
1362
+ parse_meta_method_params container, single, meth, tk, comment
1363
+
1364
+ meth.comment = comment
1365
+
1366
+ @stats.add_method meth
1367
+
1368
+ meth
1369
+ end
1370
+
1371
+ ##
1372
+ # Parses the name of a metaprogrammed method. +comment+ is used to
1373
+ # determine the name while +tk+ is used in an error message if the name
1374
+ # cannot be determined.
1375
+
1376
+ def parse_meta_method_name comment, tk # :nodoc:
1377
+ if comment.text.sub!(/^# +:?method: *(\S*).*?\n/i, '') then
1378
+ return $1 unless $1.empty?
1379
+ end
1380
+
1381
+ name_t = get_tk
1382
+
1383
+ if :on_symbol == name_t[:kind] then
1384
+ name_t[:text][1..-1]
1385
+ elsif :on_tstring == name_t[:kind] then
1386
+ name_t[:text][1..-2]
1387
+ elsif :on_op == name_t[:kind] && '=' == name_t[:text] then # ignore
1388
+ remove_token_listener self
1389
+
1390
+ nil
1391
+ else
1392
+ warn "unknown name token #{name_t.inspect} for meta-method '#{tk[:text]}'"
1393
+ 'unknown'
1394
+ end
1395
+ end
1396
+
1397
+ ##
1398
+ # Parses the parameters and block for a meta-programmed method.
1399
+
1400
+ def parse_meta_method_params container, single, meth, tk, comment # :nodoc:
1401
+ token_listener meth do
1402
+ meth.params = ''
1403
+
1404
+ look_for_directives_in meth, comment
1405
+ comment.normalize
1406
+ comment.extract_call_seq meth
1407
+
1408
+ container.add_method meth
1409
+
1410
+ last_tk = tk
1411
+
1412
+ while tk = get_tk do
1413
+ if :on_semicolon == tk[:kind] then
1414
+ break
1415
+ elsif :on_nl == tk[:kind] then
1416
+ break unless last_tk and :on_comma == last_tk[:kind]
1417
+ elsif :on_sp == tk[:kind] then
1418
+ # expression continues
1419
+ elsif :on_kw == tk[:kind] && 'do' == tk[:text] then
1420
+ parse_statements container, single, meth
1421
+ break
1422
+ else
1423
+ last_tk = tk
1424
+ end
1425
+ end
1426
+ end
1427
+ end
1428
+
1429
+ ##
1430
+ # Parses a normal method defined by +def+
1431
+
1432
+ def parse_method(container, single, tk, comment)
1433
+ singleton = nil
1434
+ added_container = false
1435
+ name = nil
1436
+ column = tk[:char_no]
1437
+ line_no = tk[:line_no]
1438
+
1439
+ start_collecting_tokens
1440
+ add_token tk
1441
+
1442
+ token_listener self do
1443
+ prev_container = container
1444
+ name, container, singleton = parse_method_name container
1445
+ added_container = container != prev_container
1446
+ end
1447
+
1448
+ return unless name
1449
+
1450
+ meth = RDoc::AnyMethod.new get_tkread, name
1451
+ look_for_directives_in meth, comment
1452
+ meth.singleton = single == SINGLE ? true : singleton
1453
+
1454
+ record_location meth
1455
+ meth.line = line_no
1456
+
1457
+ meth.start_collecting_tokens
1458
+ indent = RDoc::Parser::RipperStateLex::Token.new(1, 1, :on_sp, ' ' * column)
1459
+ token = RDoc::Parser::RipperStateLex::Token.new(line_no, 1, :on_comment)
1460
+ token[:text] = "# File #{@top_level.relative_name}, line #{line_no}"
1461
+ newline = RDoc::Parser::RipperStateLex::Token.new(0, 0, :on_nl, "\n")
1462
+ meth.add_tokens [token, newline, indent]
1463
+ meth.add_tokens @token_stream
1464
+
1465
+ parse_method_params_and_body container, single, meth, added_container
1466
+
1467
+ comment.normalize
1468
+ comment.extract_call_seq meth
1469
+
1470
+ meth.comment = comment
1471
+
1472
+ # after end modifiers
1473
+ read_documentation_modifiers meth, RDoc::METHOD_MODIFIERS
1474
+
1475
+ @stats.add_method meth
1476
+ end
1477
+
1478
+ ##
1479
+ # Parses the parameters and body of +meth+
1480
+
1481
+ def parse_method_params_and_body container, single, meth, added_container
1482
+ token_listener meth do
1483
+ parse_method_parameters meth
1484
+
1485
+ if meth.document_self or not @track_visibility then
1486
+ container.add_method meth
1487
+ elsif added_container then
1488
+ container.document_self = false
1489
+ end
1490
+
1491
+ # Having now read the method parameters and documentation modifiers, we
1492
+ # now know whether we have to rename #initialize to ::new
1493
+
1494
+ if meth.name == "initialize" && !meth.singleton then
1495
+ if meth.dont_rename_initialize then
1496
+ meth.visibility = :protected
1497
+ else
1498
+ meth.singleton = true
1499
+ meth.name = "new"
1500
+ meth.visibility = :public
1501
+ end
1502
+ end
1503
+
1504
+ parse_statements container, single, meth
1505
+ end
1506
+ end
1507
+
1508
+ ##
1509
+ # Parses a method that needs to be ignored.
1510
+
1511
+ def parse_method_dummy container
1512
+ dummy = RDoc::Context.new
1513
+ dummy.parent = container
1514
+ dummy.store = container.store
1515
+ skip_method dummy
1516
+ end
1517
+
1518
+ ##
1519
+ # Parses the name of a method in +container+.
1520
+ #
1521
+ # Returns the method name, the container it is in (for def Foo.name) and if
1522
+ # it is a singleton or regular method.
1523
+
1524
+ def parse_method_name container # :nodoc:
1525
+ skip_tkspace
1526
+ name_t = get_tk
1527
+ back_tk = skip_tkspace_without_nl
1528
+ singleton = false
1529
+
1530
+ dot = get_tk
1531
+ if dot[:kind] == :on_period || (dot[:kind] == :on_op && dot[:text] == '::') then
1532
+ singleton = true
1533
+
1534
+ name, container = parse_method_name_singleton container, name_t
1535
+ else
1536
+ unget_tk dot
1537
+ back_tk.reverse_each do |token|
1538
+ unget_tk token
1539
+ end
1540
+
1541
+ name = parse_method_name_regular container, name_t
1542
+ end
1543
+
1544
+ return name, container, singleton
1545
+ end
1546
+
1547
+ ##
1548
+ # For the given +container+ and initial name token +name_t+ the method name
1549
+ # is parsed from the token stream for a regular method.
1550
+
1551
+ def parse_method_name_regular container, name_t # :nodoc:
1552
+ if :on_op == name_t[:kind] && (%w{* & [] []= <<}.include?(name_t[:text])) then
1553
+ name_t[:text]
1554
+ else
1555
+ unless [:on_kw, :on_const, :on_ident].include?(name_t[:kind]) then
1556
+ warn "expected method name token, . or ::, got #{name_t.inspect}"
1557
+ skip_method container
1558
+ return
1559
+ end
1560
+ name_t[:text]
1561
+ end
1562
+ end
1563
+
1564
+ ##
1565
+ # For the given +container+ and initial name token +name_t+ the method name
1566
+ # and the new +container+ (if necessary) are parsed from the token stream
1567
+ # for a singleton method.
1568
+
1569
+ def parse_method_name_singleton container, name_t # :nodoc:
1570
+ skip_tkspace
1571
+ name_t2 = get_tk
1572
+
1573
+ if (:on_kw == name_t[:kind] && 'self' == name_t[:text]) || (:on_op == name_t[:kind] && '%' == name_t[:text]) then
1574
+ # NOTE: work around '[' being consumed early
1575
+ if :on_lbracket == name_t2[:kind]
1576
+ get_tk
1577
+ name = '[]'
1578
+ else
1579
+ name = name_t2[:text]
1580
+ end
1581
+ elsif :on_const == name_t[:kind] then
1582
+ name = name_t2[:text]
1583
+
1584
+ container = get_method_container container, name_t
1585
+
1586
+ return unless container
1587
+
1588
+ name
1589
+ elsif :on_ident == name_t[:kind] || :on_ivar == name_t[:kind] || :on_gvar == name_t[:kind] then
1590
+ parse_method_dummy container
1591
+
1592
+ name = nil
1593
+ elsif (:on_kw == name_t[:kind]) && ('true' == name_t[:text] || 'false' == name_t[:text] || 'nil' == name_t[:text]) then
1594
+ klass_name = "#{name_t[:text].capitalize}Class"
1595
+ container = @store.find_class_named klass_name
1596
+ container ||= @top_level.add_class RDoc::NormalClass, klass_name
1597
+
1598
+ name = name_t2[:text]
1599
+ else
1600
+ warn "unexpected method name token #{name_t.inspect}"
1601
+ # break
1602
+ skip_method container
1603
+
1604
+ name = nil
1605
+ end
1606
+
1607
+ return name, container
1608
+ end
1609
+
1610
+ ##
1611
+ # Extracts +yield+ parameters from +method+
1612
+
1613
+ def parse_method_or_yield_parameters(method = nil,
1614
+ modifiers = RDoc::METHOD_MODIFIERS)
1615
+ skip_tkspace_without_nl
1616
+ tk = get_tk
1617
+ end_token = get_end_token tk
1618
+ return '' unless end_token
1619
+
1620
+ nest = 0
1621
+ continue = false
1622
+
1623
+ while tk != nil do
1624
+ case tk[:kind]
1625
+ when :on_semicolon then
1626
+ break if nest == 0
1627
+ when :on_lbracket then
1628
+ nest += 1
1629
+ when :on_rbracket then
1630
+ nest -= 1
1631
+ when :on_lbrace then
1632
+ nest += 1
1633
+ when :on_rbrace then
1634
+ nest -= 1
1635
+ if nest <= 0
1636
+ # we might have a.each { |i| yield i }
1637
+ unget_tk(tk) if nest < 0
1638
+ break
1639
+ end
1640
+ when :on_lparen then
1641
+ nest += 1
1642
+ when end_token[:kind] then
1643
+ if end_token[:kind] == :on_rparen
1644
+ nest -= 1
1645
+ break if nest <= 0
1646
+ else
1647
+ break
1648
+ end
1649
+ when :on_rparen then
1650
+ nest -= 1
1651
+ when :on_comment, :on_embdoc then
1652
+ @read.pop
1653
+ if :on_nl == end_token[:kind] and "\n" == tk[:text][-1] and
1654
+ (!continue or (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) != 0) then
1655
+ if method && method.block_params.nil? then
1656
+ unget_tk tk
1657
+ read_documentation_modifiers method, modifiers
1658
+ end
1659
+ break if !continue and nest <= 0
1660
+ end
1661
+ when :on_comma then
1662
+ continue = true
1663
+ when :on_ident then
1664
+ continue = false if continue
1665
+ end
1666
+ tk = get_tk
1667
+ end
1668
+
1669
+ get_tkread_clean(/\s+/, ' ')
1670
+ end
1671
+
1672
+ ##
1673
+ # Capture the method's parameters. Along the way, look for a comment
1674
+ # containing:
1675
+ #
1676
+ # # yields: ....
1677
+ #
1678
+ # and add this as the block_params for the method
1679
+
1680
+ def parse_method_parameters method
1681
+ res = parse_method_or_yield_parameters method
1682
+
1683
+ res = "(#{res})" unless res =~ /\A\(/
1684
+ method.params = res unless method.params
1685
+
1686
+ return if method.block_params
1687
+
1688
+ skip_tkspace_without_nl
1689
+ read_documentation_modifiers method, RDoc::METHOD_MODIFIERS
1690
+ end
1691
+
1692
+ ##
1693
+ # Parses an RDoc::NormalModule in +container+ with +comment+
1694
+
1695
+ def parse_module container, single, tk, comment
1696
+ container, name_t, = get_class_or_module container
1697
+
1698
+ name = name_t[:text]
1699
+
1700
+ mod = container.add_module RDoc::NormalModule, name
1701
+ mod.ignore unless container.document_children
1702
+ record_location mod
1703
+
1704
+ read_documentation_modifiers mod, RDoc::CLASS_MODIFIERS
1705
+ mod.add_comment comment, @top_level
1706
+ parse_statements mod
1707
+
1708
+ # after end modifiers
1709
+ read_documentation_modifiers mod, RDoc::CLASS_MODIFIERS
1710
+
1711
+ @stats.add_module mod
1712
+ end
1713
+
1714
+ ##
1715
+ # Parses an RDoc::Require in +context+ containing +comment+
1716
+
1717
+ def parse_require(context, comment)
1718
+ skip_tkspace_comment
1719
+ tk = get_tk
1720
+
1721
+ if :on_lparen == tk[:kind] then
1722
+ skip_tkspace_comment
1723
+ tk = get_tk
1724
+ end
1725
+
1726
+ name = tk[:text][1..-2] if :on_tstring == tk[:kind]
1727
+
1728
+ if name then
1729
+ @top_level.add_require RDoc::Require.new(name, comment)
1730
+ else
1731
+ unget_tk tk
1732
+ end
1733
+ end
1734
+
1735
+ ##
1736
+ # Parses a rescue
1737
+
1738
+ def parse_rescue
1739
+ skip_tkspace_without_nl
1740
+
1741
+ while tk = get_tk
1742
+ case tk[:kind]
1743
+ when :on_nl, :on_semicolon, :on_comment then
1744
+ break
1745
+ when :on_comma then
1746
+ skip_tkspace_without_nl
1747
+
1748
+ get_tk if :on_nl == peek_tk[:kind]
1749
+ end
1750
+
1751
+ skip_tkspace_without_nl
1752
+ end
1753
+ end
1754
+
1755
+ ##
1756
+ # Retrieve comment body without =begin/=end
1757
+
1758
+ def retrieve_comment_body(tk)
1759
+ if :on_embdoc == tk[:kind]
1760
+ tk[:text].gsub(/\A=begin.*\n/, '').gsub(/=end\n?\z/, '')
1761
+ else
1762
+ tk[:text]
1763
+ end
1764
+ end
1765
+
1766
+ ##
1767
+ # The core of the Ruby parser.
1768
+
1769
+ def parse_statements(container, single = NORMAL, current_method = nil,
1770
+ comment = new_comment(''))
1771
+ raise 'no' unless RDoc::Comment === comment
1772
+ comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
1773
+
1774
+ nest = 1
1775
+ save_visibility = container.visibility
1776
+
1777
+ non_comment_seen = true
1778
+
1779
+ while tk = get_tk do
1780
+ keep_comment = false
1781
+ try_parse_comment = false
1782
+
1783
+ non_comment_seen = true unless (:on_comment == tk[:kind] or :on_embdoc == tk[:kind])
1784
+
1785
+ case tk[:kind]
1786
+ when :on_nl, :on_ignored_nl, :on_comment, :on_embdoc then
1787
+ if :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]
1788
+ skip_tkspace
1789
+ tk = get_tk
1790
+ else
1791
+ past_tokens = @read.size > 1 ? @read[0..-2] : []
1792
+ nl_position = 0
1793
+ past_tokens.reverse.each_with_index do |read_tk, i|
1794
+ if read_tk =~ /^\n$/ then
1795
+ nl_position = (past_tokens.size - 1) - i
1796
+ break
1797
+ elsif read_tk =~ /^#.*\n$/ then
1798
+ nl_position = ((past_tokens.size - 1) - i) + 1
1799
+ break
1800
+ end
1801
+ end
1802
+ comment_only_line = past_tokens[nl_position..-1].all?{ |c| c =~ /^\s+$/ }
1803
+ unless comment_only_line then
1804
+ tk = get_tk
1805
+ end
1806
+ end
1807
+
1808
+ if tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) then
1809
+ if non_comment_seen then
1810
+ # Look for RDoc in a comment about to be thrown away
1811
+ non_comment_seen = parse_comment container, tk, comment unless
1812
+ comment.empty?
1813
+
1814
+ comment = ''
1815
+ comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
1816
+ end
1817
+
1818
+ line_no = nil
1819
+ while tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) do
1820
+ comment_body = retrieve_comment_body(tk)
1821
+ line_no = tk[:line_no] if comment.empty?
1822
+ comment += comment_body
1823
+ comment << "\n" unless comment_body =~ /\n\z/
1824
+
1825
+ if comment_body.size > 1 && comment_body =~ /\n\z/ then
1826
+ skip_tkspace_without_nl # leading spaces
1827
+ end
1828
+ tk = get_tk
1829
+ end
1830
+
1831
+ comment = new_comment comment, line_no
1832
+
1833
+ unless comment.empty? then
1834
+ look_for_directives_in container, comment
1835
+
1836
+ if container.done_documenting then
1837
+ throw :eof if RDoc::TopLevel === container
1838
+ container.ongoing_visibility = save_visibility
1839
+ end
1840
+ end
1841
+
1842
+ keep_comment = true
1843
+ else
1844
+ non_comment_seen = true
1845
+ end
1846
+
1847
+ unget_tk tk
1848
+ keep_comment = true
1849
+ container.current_line_visibility = nil
1850
+
1851
+ when :on_kw then
1852
+ case tk[:text]
1853
+ when 'class' then
1854
+ parse_class container, single, tk, comment
1855
+
1856
+ when 'module' then
1857
+ parse_module container, single, tk, comment
1858
+
1859
+ when 'def' then
1860
+ parse_method container, single, tk, comment
1861
+
1862
+ when 'alias' then
1863
+ parse_alias container, single, tk, comment unless current_method
1864
+
1865
+ when 'yield' then
1866
+ if current_method.nil? then
1867
+ warn "Warning: yield outside of method" if container.document_self
1868
+ else
1869
+ parse_yield container, single, tk, current_method
1870
+ end
1871
+
1872
+ when 'until', 'while' then
1873
+ if (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) == 0
1874
+ nest += 1
1875
+ skip_optional_do_after_expression
1876
+ end
1877
+
1878
+ # Until and While can have a 'do', which shouldn't increase the nesting.
1879
+ # We can't solve the general case, but we can handle most occurrences by
1880
+ # ignoring a do at the end of a line.
1881
+
1882
+ # 'for' is trickier
1883
+ when 'for' then
1884
+ nest += 1
1885
+ skip_for_variable
1886
+ skip_optional_do_after_expression
1887
+
1888
+ when 'case', 'do', 'if', 'unless', 'begin' then
1889
+ if (tk[:state] & RDoc::Parser::RipperStateLex::EXPR_LABEL) == 0
1890
+ nest += 1
1891
+ end
1892
+
1893
+ when 'super' then
1894
+ current_method.calls_super = true if current_method
1895
+
1896
+ when 'rescue' then
1897
+ parse_rescue
1898
+
1899
+ when 'end' then
1900
+ nest -= 1
1901
+ if nest == 0 then
1902
+ container.ongoing_visibility = save_visibility
1903
+
1904
+ parse_comment container, tk, comment unless comment.empty?
1905
+
1906
+ return
1907
+ end
1908
+ end
1909
+
1910
+ when :on_const then
1911
+ unless parse_constant container, tk, comment, current_method then
1912
+ try_parse_comment = true
1913
+ end
1914
+
1915
+ when :on_ident then
1916
+ if nest == 1 and current_method.nil? then
1917
+ keep_comment = parse_identifier container, single, tk, comment
1918
+ end
1919
+
1920
+ case tk[:text]
1921
+ when "require" then
1922
+ parse_require container, comment
1923
+ when "include" then
1924
+ parse_extend_or_include RDoc::Include, container, comment
1925
+ when "extend" then
1926
+ parse_extend_or_include RDoc::Extend, container, comment
1927
+ when "included" then
1928
+ parse_included_with_activesupport_concern container, comment
1929
+ end
1930
+
1931
+ else
1932
+ try_parse_comment = nest == 1
1933
+ end
1934
+
1935
+ if try_parse_comment then
1936
+ non_comment_seen = parse_comment container, tk, comment unless
1937
+ comment.empty?
1938
+
1939
+ keep_comment = false
1940
+ end
1941
+
1942
+ unless keep_comment then
1943
+ comment = new_comment ''
1944
+ comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
1945
+ container.params = nil
1946
+ container.block_params = nil
1947
+ end
1948
+
1949
+ consume_trailing_spaces
1950
+ end
1951
+
1952
+ container.params = nil
1953
+ container.block_params = nil
1954
+ end
1955
+
1956
+ ##
1957
+ # Parse up to +no+ symbol arguments
1958
+
1959
+ def parse_symbol_arg(no = nil)
1960
+ skip_tkspace_comment
1961
+
1962
+ tk = get_tk
1963
+ if tk[:kind] == :on_lparen
1964
+ parse_symbol_arg_paren no
1965
+ else
1966
+ parse_symbol_arg_space no, tk
1967
+ end
1968
+ end
1969
+
1970
+ ##
1971
+ # Parses up to +no+ symbol arguments surrounded by () and places them in
1972
+ # +args+.
1973
+
1974
+ def parse_symbol_arg_paren no # :nodoc:
1975
+ args = []
1976
+
1977
+ loop do
1978
+ skip_tkspace_comment
1979
+ if tk1 = parse_symbol_in_arg
1980
+ args.push tk1
1981
+ break if no and args.size >= no
1982
+ end
1983
+
1984
+ skip_tkspace_comment
1985
+ case (tk2 = get_tk)[:kind]
1986
+ when :on_rparen
1987
+ break
1988
+ when :on_comma
1989
+ else
1990
+ warn("unexpected token: '#{tk2.inspect}'") if $DEBUG_RDOC
1991
+ break
1992
+ end
1993
+ end
1994
+
1995
+ args
1996
+ end
1997
+
1998
+ ##
1999
+ # Parses up to +no+ symbol arguments separated by spaces and places them in
2000
+ # +args+.
2001
+
2002
+ def parse_symbol_arg_space no, tk # :nodoc:
2003
+ args = []
2004
+
2005
+ unget_tk tk
2006
+ if tk = parse_symbol_in_arg
2007
+ args.push tk
2008
+ return args if no and args.size >= no
2009
+ end
2010
+
2011
+ loop do
2012
+ skip_tkspace_without_nl
2013
+
2014
+ tk1 = get_tk
2015
+ if tk1.nil? || :on_comma != tk1[:kind] then
2016
+ unget_tk tk1
2017
+ break
2018
+ end
2019
+
2020
+ skip_tkspace_comment
2021
+ if tk = parse_symbol_in_arg
2022
+ args.push tk
2023
+ break if no and args.size >= no
2024
+ end
2025
+ end
2026
+
2027
+ args
2028
+ end
2029
+
2030
+ ##
2031
+ # Returns symbol text from the next token
2032
+
2033
+ def parse_symbol_in_arg
2034
+ tk = get_tk
2035
+ if :on_symbol == tk[:kind] then
2036
+ tk[:text].sub(/^:/, '')
2037
+ elsif :on_tstring == tk[:kind] then
2038
+ tk[:text][1..-2]
2039
+ elsif :on_dstring == tk[:kind] or :on_ident == tk[:kind] then
2040
+ nil # ignore
2041
+ else
2042
+ warn("Expected symbol or string, got #{tk.inspect}") if $DEBUG_RDOC
2043
+ nil
2044
+ end
2045
+ end
2046
+
2047
+ ##
2048
+ # Parses statements in the top-level +container+
2049
+
2050
+ def parse_top_level_statements container
2051
+ comment = collect_first_comment
2052
+
2053
+ look_for_directives_in container, comment
2054
+
2055
+ throw :eof if container.done_documenting
2056
+
2057
+ @markup = comment.format
2058
+
2059
+ # HACK move if to RDoc::Context#comment=
2060
+ container.comment = comment if container.document_self unless comment.empty?
2061
+
2062
+ parse_statements container, NORMAL, nil, comment
2063
+ end
2064
+
2065
+ ##
2066
+ # Determines the visibility in +container+ from +tk+
2067
+
2068
+ def parse_visibility(container, single, tk)
2069
+ vis_type, vis, singleton = get_visibility_information tk, single
2070
+
2071
+ skip_tkspace_comment false
2072
+
2073
+ ptk = peek_tk
2074
+ # Ryan Davis suggested the extension to ignore modifiers, because he
2075
+ # often writes
2076
+ #
2077
+ # protected unless $TESTING
2078
+ #
2079
+ if [:on_nl, :on_semicolon].include?(ptk[:kind]) || (:on_kw == ptk[:kind] && (['if', 'unless'].include?(ptk[:text]))) then
2080
+ container.ongoing_visibility = vis
2081
+ elsif :on_kw == ptk[:kind] && 'def' == ptk[:text]
2082
+ container.current_line_visibility = vis
2083
+ else
2084
+ update_visibility container, vis_type, vis, singleton
2085
+ end
2086
+ end
2087
+
2088
+ ##
2089
+ # Parses a Module#private_constant or Module#public_constant call from +tk+.
2090
+
2091
+ def parse_constant_visibility(container, single, tk)
2092
+ args = parse_symbol_arg
2093
+ case tk[:text]
2094
+ when 'private_constant'
2095
+ vis = :private
2096
+ when 'public_constant'
2097
+ vis = :public
2098
+ else
2099
+ raise RDoc::Error, 'Unreachable'
2100
+ end
2101
+ container.set_constant_visibility_for args, vis
2102
+ end
2103
+
2104
+ ##
2105
+ # Determines the block parameter for +context+
2106
+
2107
+ def parse_yield(context, single, tk, method)
2108
+ return if method.block_params
2109
+
2110
+ get_tkread
2111
+ method.block_params = parse_method_or_yield_parameters
2112
+ end
2113
+
2114
+ ##
2115
+ # Directives are modifier comments that can appear after class, module, or
2116
+ # method names. For example:
2117
+ #
2118
+ # def fred # :yields: a, b
2119
+ #
2120
+ # or:
2121
+ #
2122
+ # class MyClass # :nodoc:
2123
+ #
2124
+ # We return the directive name and any parameters as a two element array if
2125
+ # the name is in +allowed+. A directive can be found anywhere up to the end
2126
+ # of the current line.
2127
+
2128
+ def read_directive allowed
2129
+ tokens = []
2130
+
2131
+ while tk = get_tk do
2132
+ tokens << tk
2133
+
2134
+ if :on_nl == tk[:kind] or (:on_kw == tk[:kind] && 'def' == tk[:text]) then
2135
+ return
2136
+ elsif :on_comment == tk[:kind] or :on_embdoc == tk[:kind] then
2137
+ return unless tk[:text] =~ /:?\b([\w-]+):\s*(.*)/
2138
+
2139
+ directive = $1.downcase
2140
+
2141
+ return [directive, $2] if allowed.include? directive
2142
+
2143
+ return
2144
+ end
2145
+ end
2146
+ ensure
2147
+ unless tokens.length == 1 and (:on_comment == tokens.first[:kind] or :on_embdoc == tokens.first[:kind]) then
2148
+ tokens.reverse_each do |token|
2149
+ unget_tk token
2150
+ end
2151
+ end
2152
+ end
2153
+
2154
+ ##
2155
+ # Handles directives following the definition for +context+ (any
2156
+ # RDoc::CodeObject) if the directives are +allowed+ at this point.
2157
+ #
2158
+ # See also RDoc::Markup::PreProcess#handle_directive
2159
+
2160
+ def read_documentation_modifiers context, allowed
2161
+ skip_tkspace_without_nl
2162
+ directive, value = read_directive allowed
2163
+
2164
+ return unless directive
2165
+
2166
+ @preprocess.handle_directive '', directive, value, context do |dir, param|
2167
+ if %w[notnew not_new not-new].include? dir then
2168
+ context.dont_rename_initialize = true
2169
+
2170
+ true
2171
+ end
2172
+ end
2173
+ end
2174
+
2175
+ ##
2176
+ # Records the location of this +container+ in the file for this parser and
2177
+ # adds it to the list of classes and modules in the file.
2178
+
2179
+ def record_location container # :nodoc:
2180
+ case container
2181
+ when RDoc::ClassModule then
2182
+ @top_level.add_to_classes_or_modules container
2183
+ end
2184
+
2185
+ container.record_location @top_level
2186
+ end
2187
+
2188
+ ##
2189
+ # Scans this Ruby file for Ruby constructs
2190
+
2191
+ def scan
2192
+ reset
2193
+
2194
+ catch :eof do
2195
+ begin
2196
+ parse_top_level_statements @top_level
2197
+
2198
+ rescue StandardError => e
2199
+ if @content.include?('<%') and @content.include?('%>') then
2200
+ # Maybe, this is ERB.
2201
+ $stderr.puts "\033[2KRDoc detects ERB file. Skips it for compatibility:"
2202
+ $stderr.puts @file_name
2203
+ return
2204
+ end
2205
+
2206
+ if @scanner_point >= @scanner.size
2207
+ now_line_no = @scanner[@scanner.size - 1][:line_no]
2208
+ else
2209
+ now_line_no = peek_tk[:line_no]
2210
+ end
2211
+ first_tk_index = @scanner.find_index { |tk| tk[:line_no] == now_line_no }
2212
+ last_tk_index = @scanner.find_index { |tk| tk[:line_no] == now_line_no + 1 }
2213
+ last_tk_index = last_tk_index ? last_tk_index - 1 : @scanner.size - 1
2214
+ code = @scanner[first_tk_index..last_tk_index].map{ |t| t[:text] }.join
2215
+
2216
+ $stderr.puts <<-EOF
2217
+
2218
+ #{self.class} failure around line #{now_line_no} of
2219
+ #{@file_name}
2220
+
2221
+ EOF
2222
+
2223
+ unless code.empty? then
2224
+ $stderr.puts code
2225
+ $stderr.puts
2226
+ end
2227
+
2228
+ raise e
2229
+ end
2230
+ end
2231
+
2232
+ @top_level
2233
+ end
2234
+
2235
+ ##
2236
+ # while, until, and for have an optional do
2237
+
2238
+ def skip_optional_do_after_expression
2239
+ skip_tkspace_without_nl
2240
+ tk = get_tk
2241
+
2242
+ b_nest = 0
2243
+ nest = 0
2244
+
2245
+ loop do
2246
+ break unless tk
2247
+ case tk[:kind]
2248
+ when :on_semicolon, :on_nl, :on_ignored_nl then
2249
+ break if b_nest.zero?
2250
+ when :on_lparen then
2251
+ nest += 1
2252
+ when :on_rparen then
2253
+ nest -= 1
2254
+ when :on_kw then
2255
+ case tk[:text]
2256
+ when 'begin'
2257
+ b_nest += 1
2258
+ when 'end'
2259
+ b_nest -= 1
2260
+ when 'do'
2261
+ break if nest.zero?
2262
+ end
2263
+ when :on_comment, :on_embdoc then
2264
+ if b_nest.zero? and "\n" == tk[:text][-1] then
2265
+ break
2266
+ end
2267
+ end
2268
+ tk = get_tk
2269
+ end
2270
+
2271
+ skip_tkspace_without_nl
2272
+
2273
+ get_tk if peek_tk && :on_kw == peek_tk[:kind] && 'do' == peek_tk[:text]
2274
+ end
2275
+
2276
+ ##
2277
+ # skip the var [in] part of a 'for' statement
2278
+
2279
+ def skip_for_variable
2280
+ skip_tkspace_without_nl
2281
+ get_tk
2282
+ skip_tkspace_without_nl
2283
+ tk = get_tk
2284
+ unget_tk(tk) unless :on_kw == tk[:kind] and 'in' == tk[:text]
2285
+ end
2286
+
2287
+ ##
2288
+ # Skips the next method in +container+
2289
+
2290
+ def skip_method container
2291
+ meth = RDoc::AnyMethod.new "", "anon"
2292
+ parse_method_parameters meth
2293
+ parse_statements container, false, meth
2294
+ end
2295
+
2296
+ ##
2297
+ # Skip spaces until a comment is found
2298
+
2299
+ def skip_tkspace_comment(skip_nl = true)
2300
+ loop do
2301
+ skip_nl ? skip_tkspace : skip_tkspace_without_nl
2302
+ next_tk = peek_tk
2303
+ return if next_tk.nil? || (:on_comment != next_tk[:kind] and :on_embdoc != next_tk[:kind])
2304
+ get_tk
2305
+ end
2306
+ end
2307
+
2308
+ ##
2309
+ # Updates visibility in +container+ from +vis_type+ and +vis+.
2310
+
2311
+ def update_visibility container, vis_type, vis, singleton # :nodoc:
2312
+ new_methods = []
2313
+
2314
+ case vis_type
2315
+ when 'module_function' then
2316
+ args = parse_symbol_arg
2317
+ container.set_visibility_for args, :private, false
2318
+
2319
+ container.methods_matching args do |m|
2320
+ s_m = m.dup
2321
+ record_location s_m
2322
+ s_m.singleton = true
2323
+ new_methods << s_m
2324
+ end
2325
+ when 'public_class_method', 'private_class_method' then
2326
+ args = parse_symbol_arg
2327
+
2328
+ container.methods_matching args, true do |m|
2329
+ if m.parent != container then
2330
+ m = m.dup
2331
+ record_location m
2332
+ new_methods << m
2333
+ end
2334
+
2335
+ m.visibility = vis
2336
+ end
2337
+ else
2338
+ args = parse_symbol_arg
2339
+ container.set_visibility_for args, vis, singleton
2340
+ end
2341
+
2342
+ new_methods.each do |method|
2343
+ case method
2344
+ when RDoc::AnyMethod then
2345
+ container.add_method method
2346
+ when RDoc::Attr then
2347
+ container.add_attribute method
2348
+ end
2349
+ method.visibility = vis
2350
+ end
2351
+ end
2352
+
2353
+ ##
2354
+ # Prints +message+ to +$stderr+ unless we're being quiet
2355
+
2356
+ def warn message
2357
+ @options.warn make_message message
2358
+ end
2359
+
2360
+ end