honeybadger 5.3.0 → 5.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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