docspring 3.0.0 → 3.1.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 (523) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile.lock +4 -4
  4. data/README.md +11 -5
  5. data/docs/CreateHtmlSubmissionData.md +3 -1
  6. data/docs/CreatePdfSubmissionData.md +3 -1
  7. data/docs/PDFApi.md +156 -10
  8. data/docs/PublishVersionData.md +20 -0
  9. data/docs/RestoreVersionData.md +18 -0
  10. data/docs/Submission.md +4 -0
  11. data/docs/SubmissionPreview.md +4 -0
  12. data/docs/Template.md +15 -1
  13. data/docs/TemplateDeleteResponse.md +24 -0
  14. data/docs/TemplatePreview.md +13 -1
  15. data/docs/TemplatePublishVersionResponse.md +22 -0
  16. data/lib/docspring/api/pdf_api.rb +152 -5
  17. data/lib/docspring/api_client.rb +1 -1
  18. data/lib/docspring/models/combined_submission_action.rb +1 -5
  19. data/lib/docspring/models/create_html_submission_data.rb +13 -4
  20. data/lib/docspring/models/create_pdf_submission_data.rb +13 -4
  21. data/lib/docspring/models/publish_version_data.rb +230 -0
  22. data/lib/docspring/models/restore_version_data.rb +221 -0
  23. data/lib/docspring/models/submission.rb +41 -1
  24. data/lib/docspring/models/submission_data_request_event.rb +1 -5
  25. data/lib/docspring/models/submission_preview.rb +41 -1
  26. data/lib/docspring/models/template.rb +106 -4
  27. data/lib/docspring/models/template_delete_response.rb +287 -0
  28. data/lib/docspring/models/template_preview.rb +88 -4
  29. data/lib/docspring/models/template_publish_version_response.rb +282 -0
  30. data/lib/docspring/version.rb +1 -1
  31. data/lib/docspring.rb +4 -0
  32. data/spec/api/pdf_api_spec.rb +27 -2
  33. data/spec/models/create_html_submission_data_spec.rb +6 -0
  34. data/spec/models/create_pdf_submission_data_spec.rb +6 -0
  35. data/spec/models/publish_version_data_spec.rb +42 -0
  36. data/spec/models/restore_version_data_spec.rb +36 -0
  37. data/spec/models/submission_preview_spec.rb +16 -0
  38. data/spec/models/submission_spec.rb +16 -0
  39. data/spec/models/template_delete_response_spec.rb +58 -0
  40. data/spec/models/template_preview_spec.rb +40 -0
  41. data/spec/models/template_publish_version_response_spec.rb +52 -0
  42. data/spec/models/template_spec.rb +46 -0
  43. data/vendor/bundle/ruby/3.3.0/bin/irb +29 -0
  44. data/vendor/bundle/ruby/3.3.0/bin/rdbg +29 -0
  45. data/vendor/bundle/ruby/3.3.0/bin/rdoc +29 -0
  46. data/vendor/bundle/ruby/3.3.0/bin/ri +29 -0
  47. data/vendor/bundle/ruby/3.3.0/cache/ast-2.4.3.gem +0 -0
  48. data/vendor/bundle/ruby/3.3.0/cache/debug-1.10.0.gem +0 -0
  49. data/vendor/bundle/ruby/3.3.0/cache/io-console-0.8.0.gem +0 -0
  50. data/vendor/bundle/ruby/3.3.0/cache/irb-1.15.1.gem +0 -0
  51. data/vendor/bundle/ruby/3.3.0/cache/parser-3.3.7.2.gem +0 -0
  52. data/vendor/bundle/ruby/3.3.0/cache/pp-0.6.2.gem +0 -0
  53. data/vendor/bundle/ruby/3.3.0/cache/prettyprint-0.2.0.gem +0 -0
  54. data/vendor/bundle/ruby/3.3.0/cache/rdoc-6.12.0.gem +0 -0
  55. data/vendor/bundle/ruby/3.3.0/cache/reline-0.6.0.gem +0 -0
  56. data/vendor/bundle/ruby/3.3.0/extensions/arm64-darwin-24/3.3.0/debug-1.10.0/debug/debug.bundle +0 -0
  57. data/vendor/bundle/ruby/3.3.0/extensions/arm64-darwin-24/3.3.0/debug-1.10.0/gem.build_complete +0 -0
  58. data/vendor/bundle/ruby/3.3.0/extensions/arm64-darwin-24/3.3.0/debug-1.10.0/gem_make.out +19 -0
  59. data/vendor/bundle/ruby/3.3.0/extensions/arm64-darwin-24/3.3.0/io-console-0.8.0/gem.build_complete +0 -0
  60. data/vendor/bundle/ruby/3.3.0/extensions/arm64-darwin-24/3.3.0/io-console-0.8.0/gem_make.out +31 -0
  61. data/vendor/bundle/ruby/3.3.0/extensions/arm64-darwin-24/3.3.0/io-console-0.8.0/io/console.bundle +0 -0
  62. data/vendor/bundle/ruby/3.3.0/extensions/arm64-darwin-24/3.3.0/io-console-0.8.0/mkmf.log +447 -0
  63. data/vendor/bundle/ruby/3.3.0/gems/ast-2.4.3/LICENSE.MIT +20 -0
  64. data/vendor/bundle/ruby/3.3.0/gems/ast-2.4.3/README.YARD.md +12 -0
  65. data/vendor/bundle/ruby/3.3.0/gems/ast-2.4.3/lib/ast/node.rb +268 -0
  66. data/vendor/bundle/ruby/3.3.0/gems/ast-2.4.3/lib/ast/processor/mixin.rb +288 -0
  67. data/vendor/bundle/ruby/3.3.0/gems/ast-2.4.3/lib/ast/processor.rb +12 -0
  68. data/vendor/bundle/ruby/3.3.0/gems/ast-2.4.3/lib/ast/sexp.rb +30 -0
  69. data/vendor/bundle/ruby/3.3.0/gems/ast-2.4.3/lib/ast.rb +17 -0
  70. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/CONTRIBUTING.md +573 -0
  71. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/Gemfile +10 -0
  72. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/LICENSE.txt +22 -0
  73. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/README.md +970 -0
  74. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/Rakefile +57 -0
  75. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/TODO.md +23 -0
  76. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/debug.gemspec +33 -0
  77. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/exe/rdbg +53 -0
  78. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/ext/debug/Makefile +270 -0
  79. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/ext/debug/debug.c +228 -0
  80. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/ext/debug/debug_version.h +1 -0
  81. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/ext/debug/extconf.rb +27 -0
  82. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/ext/debug/iseq_collector.c +93 -0
  83. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/abbrev_command.rb +77 -0
  84. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/breakpoint.rb +556 -0
  85. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/client.rb +263 -0
  86. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/color.rb +123 -0
  87. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/config.rb +590 -0
  88. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/console.rb +213 -0
  89. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/dap_custom/traceInspector.rb +336 -0
  90. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/debug.bundle +0 -0
  91. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/frame_info.rb +188 -0
  92. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/irb_integration.rb +37 -0
  93. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/local.rb +115 -0
  94. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/open.rb +13 -0
  95. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/open_nonstop.rb +15 -0
  96. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/prelude.rb +50 -0
  97. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/server.rb +534 -0
  98. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/server_cdp.rb +1348 -0
  99. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/server_dap.rb +1108 -0
  100. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/session.rb +2659 -0
  101. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/source_repository.rb +150 -0
  102. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/start.rb +5 -0
  103. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/thread_client.rb +1455 -0
  104. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/tracer.rb +241 -0
  105. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug/version.rb +5 -0
  106. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/lib/debug.rb +9 -0
  107. data/vendor/bundle/ruby/3.3.0/gems/debug-1.10.0/misc/README.md.erb +636 -0
  108. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/.document +5 -0
  109. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/BSDL +22 -0
  110. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/COPYING +56 -0
  111. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/README.md +46 -0
  112. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/ext/io/console/Makefile +272 -0
  113. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/ext/io/console/console.c +1969 -0
  114. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/ext/io/console/extconf.rb +61 -0
  115. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/ext/io/console/win32_vk.inc +1390 -0
  116. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/lib/io/console/size.rb +23 -0
  117. data/vendor/bundle/ruby/3.3.0/gems/io-console-0.8.0/lib/io/console.bundle +0 -0
  118. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/Gemfile +29 -0
  119. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/LICENSE.txt +22 -0
  120. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/README.md +125 -0
  121. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/Rakefile +52 -0
  122. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/bin/console +6 -0
  123. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/bin/setup +6 -0
  124. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/doc/irb/irb-tools.rd.ja +184 -0
  125. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/doc/irb/irb.rd.ja +425 -0
  126. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/exe/irb +9 -0
  127. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/irb.gemspec +46 -0
  128. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/cmd/nop.rb +4 -0
  129. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/color.rb +263 -0
  130. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/color_printer.rb +56 -0
  131. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/backtrace.rb +17 -0
  132. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/base.rb +60 -0
  133. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/break.rb +17 -0
  134. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/catch.rb +17 -0
  135. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/cd.rb +51 -0
  136. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/chws.rb +40 -0
  137. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/context.rb +16 -0
  138. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/continue.rb +17 -0
  139. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/copy.rb +73 -0
  140. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/debug.rb +73 -0
  141. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/delete.rb +17 -0
  142. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/disable_irb.rb +19 -0
  143. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/edit.rb +63 -0
  144. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/exit.rb +18 -0
  145. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/finish.rb +17 -0
  146. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/force_exit.rb +18 -0
  147. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/help.rb +83 -0
  148. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/history.rb +45 -0
  149. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/info.rb +17 -0
  150. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/internal_helpers.rb +27 -0
  151. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/irb_info.rb +33 -0
  152. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/load.rb +91 -0
  153. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/ls.rb +167 -0
  154. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/measure.rb +49 -0
  155. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/next.rb +17 -0
  156. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/pushws.rb +65 -0
  157. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/show_doc.rb +51 -0
  158. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/show_source.rb +74 -0
  159. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/step.rb +17 -0
  160. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/subirb.rb +123 -0
  161. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command/whereami.rb +23 -0
  162. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/command.rb +23 -0
  163. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/completion.rb +504 -0
  164. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/context.rb +751 -0
  165. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/debug/ui.rb +101 -0
  166. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/debug.rb +127 -0
  167. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/default_commands.rb +279 -0
  168. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/easter-egg.rb +152 -0
  169. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ext/change-ws.rb +37 -0
  170. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ext/eval_history.rb +149 -0
  171. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ext/loader.rb +127 -0
  172. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ext/multi-irb.rb +258 -0
  173. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ext/tracer.rb +39 -0
  174. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ext/use-loader.rb +67 -0
  175. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ext/workspaces.rb +36 -0
  176. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/frame.rb +80 -0
  177. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/help.rb +28 -0
  178. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/helper_method/base.rb +16 -0
  179. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/helper_method/conf.rb +11 -0
  180. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/helper_method.rb +29 -0
  181. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/history.rb +116 -0
  182. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/init.rb +540 -0
  183. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/input-method.rb +515 -0
  184. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/inspector.rb +136 -0
  185. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/lc/error.rb +52 -0
  186. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/lc/help-message +55 -0
  187. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/lc/ja/error.rb +53 -0
  188. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/lc/ja/help-message +58 -0
  189. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/locale.rb +153 -0
  190. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/nesting_parser.rb +239 -0
  191. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/notifier.rb +230 -0
  192. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/output-method.rb +80 -0
  193. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/pager.rb +213 -0
  194. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ruby-lex.rb +476 -0
  195. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ruby_logo.aa +118 -0
  196. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/source_finder.rb +138 -0
  197. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/statement.rb +101 -0
  198. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/version.rb +11 -0
  199. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/workspace.rb +171 -0
  200. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/ws-for-case-2.rb +9 -0
  201. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb/xmp.rb +164 -0
  202. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/lib/irb.rb +736 -0
  203. data/vendor/bundle/ruby/3.3.0/gems/irb-1.15.1/man/irb.1 +292 -0
  204. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/LICENSE.txt +26 -0
  205. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/bin/ruby-parse +7 -0
  206. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/bin/ruby-rewrite +7 -0
  207. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/gauntlet_parser.rb +123 -0
  208. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/all.rb +17 -0
  209. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ast/node.rb +40 -0
  210. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ast/processor.rb +293 -0
  211. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/base.rb +291 -0
  212. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/builders/default.rb +2338 -0
  213. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/clobbering_error.rb +13 -0
  214. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/color.rb +32 -0
  215. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/context.rb +51 -0
  216. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/current.rb +137 -0
  217. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/current_arg_stack.rb +46 -0
  218. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/deprecation.rb +13 -0
  219. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/diagnostic/engine.rb +104 -0
  220. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/diagnostic.rb +163 -0
  221. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/lexer/dedenter.rb +88 -0
  222. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/lexer/explanation.rb +55 -0
  223. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/lexer/literal.rb +284 -0
  224. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/lexer/stack_state.rb +49 -0
  225. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/lexer-F0.rb +12922 -0
  226. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/lexer-F1.rb +14875 -0
  227. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/lexer-strings.rb +5424 -0
  228. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/macruby.rb +9634 -0
  229. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/max_numparam_stack.rb +56 -0
  230. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/messages.rb +125 -0
  231. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/meta.rb +48 -0
  232. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/rewriter.rb +105 -0
  233. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby18.rb +9272 -0
  234. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby19.rb +9558 -0
  235. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby20.rb +10229 -0
  236. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby21.rb +10203 -0
  237. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby22.rb +10302 -0
  238. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby23.rb +10322 -0
  239. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby24.rb +10454 -0
  240. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby25.rb +10374 -0
  241. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby26.rb +10352 -0
  242. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby27.rb +11947 -0
  243. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby30.rb +12243 -0
  244. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby31.rb +12716 -0
  245. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby32.rb +12704 -0
  246. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby33.rb +12589 -0
  247. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/ruby34.rb +12596 -0
  248. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/rubymotion.rb +9515 -0
  249. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/runner/ruby_parse.rb +157 -0
  250. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/runner/ruby_rewrite.rb +101 -0
  251. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/runner.rb +299 -0
  252. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/buffer.rb +369 -0
  253. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/comment/associator.rb +233 -0
  254. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/comment.rb +134 -0
  255. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/collection.rb +18 -0
  256. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/condition.rb +21 -0
  257. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/constant.rb +32 -0
  258. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/definition.rb +23 -0
  259. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/for.rb +19 -0
  260. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/heredoc.rb +19 -0
  261. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/index.rb +33 -0
  262. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/keyword.rb +20 -0
  263. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/method_definition.rb +25 -0
  264. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/objc_kwarg.rb +19 -0
  265. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/operator.rb +17 -0
  266. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/rescue_body.rb +21 -0
  267. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/send.rb +36 -0
  268. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/ternary.rb +18 -0
  269. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map/variable.rb +31 -0
  270. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/map.rb +186 -0
  271. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/range.rb +326 -0
  272. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/rewriter/action.rb +44 -0
  273. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/rewriter.rb +513 -0
  274. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/tree_rewriter/action.rb +243 -0
  275. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/source/tree_rewriter.rb +431 -0
  276. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/static_environment.rb +134 -0
  277. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/syntax_error.rb +21 -0
  278. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/tree_rewriter.rb +133 -0
  279. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/unknown_encoding_in_magic_comment_error.rb +15 -0
  280. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/variables_stack.rb +36 -0
  281. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser/version.rb +5 -0
  282. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/lib/parser.rb +91 -0
  283. data/vendor/bundle/ruby/3.3.0/gems/parser-3.3.7.2/parser.gemspec +43 -0
  284. data/vendor/bundle/ruby/3.3.0/gems/pp-0.6.2/BSDL +22 -0
  285. data/vendor/bundle/ruby/3.3.0/gems/pp-0.6.2/COPYING +56 -0
  286. data/vendor/bundle/ruby/3.3.0/gems/pp-0.6.2/lib/pp.rb +699 -0
  287. data/vendor/bundle/ruby/3.3.0/gems/pp-0.6.2/pp.gemspec +35 -0
  288. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/.github/dependabot.yml +6 -0
  289. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/.github/workflows/test.yml +41 -0
  290. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/.gitignore +8 -0
  291. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/Gemfile +4 -0
  292. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/LICENSE.txt +22 -0
  293. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/README.md +43 -0
  294. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/Rakefile +10 -0
  295. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/bin/console +14 -0
  296. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/bin/setup +8 -0
  297. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/lib/prettyprint.rb +558 -0
  298. data/vendor/bundle/ruby/3.3.0/gems/prettyprint-0.2.0/prettyprint.gemspec +29 -0
  299. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/CONTRIBUTING.rdoc +219 -0
  300. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/CVE-2013-0256.rdoc +49 -0
  301. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/ExampleMarkdown.md +39 -0
  302. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/ExampleRDoc.rdoc +210 -0
  303. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/History.rdoc +1668 -0
  304. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/LEGAL.rdoc +50 -0
  305. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/LICENSE.rdoc +59 -0
  306. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/README.rdoc +142 -0
  307. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/RI.md +842 -0
  308. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/TODO.rdoc +60 -0
  309. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/exe/rdoc +43 -0
  310. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/exe/ri +12 -0
  311. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/alias.rb +111 -0
  312. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/anon_class.rb +10 -0
  313. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/any_method.rb +379 -0
  314. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/attr.rb +175 -0
  315. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/class_module.rb +871 -0
  316. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/constant.rb +186 -0
  317. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/context/section.rb +175 -0
  318. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/context.rb +1264 -0
  319. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/extend.rb +9 -0
  320. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/ghost_method.rb +6 -0
  321. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/include.rb +9 -0
  322. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/meta_method.rb +6 -0
  323. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/method_attr.rb +430 -0
  324. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/mixin.rb +120 -0
  325. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/normal_class.rb +92 -0
  326. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/normal_module.rb +73 -0
  327. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/require.rb +51 -0
  328. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/single_class.rb +30 -0
  329. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object/top_level.rb +291 -0
  330. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_object.rb +426 -0
  331. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/code_objects.rb +5 -0
  332. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/comment.rb +239 -0
  333. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/cross_reference.rb +228 -0
  334. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/encoding.rb +120 -0
  335. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/erb_partial.rb +18 -0
  336. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/erbio.rb +37 -0
  337. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/darkfish.rb +824 -0
  338. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/json_index.rb +300 -0
  339. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/markup.rb +159 -0
  340. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/pot/message_extractor.rb +68 -0
  341. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/pot/po.rb +84 -0
  342. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/pot/po_entry.rb +141 -0
  343. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/pot.rb +99 -0
  344. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/ri.rb +30 -0
  345. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_footer.rhtml +5 -0
  346. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_head.rhtml +43 -0
  347. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +19 -0
  348. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +34 -0
  349. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +15 -0
  350. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +9 -0
  351. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +15 -0
  352. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +15 -0
  353. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +21 -0
  354. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +11 -0
  355. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +32 -0
  356. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +6 -0
  357. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +14 -0
  358. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +11 -0
  359. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +39 -0
  360. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
  361. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/class.rhtml +206 -0
  362. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/css/fonts.css +167 -0
  363. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/css/rdoc.css +668 -0
  364. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf +0 -0
  365. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf +0 -0
  366. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf +0 -0
  367. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf +0 -0
  368. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  369. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  370. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/add.png +0 -0
  371. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/arrow_up.png +0 -0
  372. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/brick.png +0 -0
  373. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/brick_link.png +0 -0
  374. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/bug.png +0 -0
  375. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/bullet_black.png +0 -0
  376. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png +0 -0
  377. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png +0 -0
  378. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/date.png +0 -0
  379. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/delete.png +0 -0
  380. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/find.png +0 -0
  381. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif +0 -0
  382. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/macFFBgHack.png +0 -0
  383. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/package.png +0 -0
  384. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/page_green.png +0 -0
  385. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/page_white_text.png +0 -0
  386. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/page_white_width.png +0 -0
  387. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/plugin.png +0 -0
  388. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/ruby.png +0 -0
  389. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/tag_blue.png +0 -0
  390. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/tag_green.png +0 -0
  391. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/transparent.png +0 -0
  392. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/wrench.png +0 -0
  393. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/wrench_orange.png +0 -0
  394. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/images/zoom.png +0 -0
  395. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/index.rhtml +23 -0
  396. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/js/darkfish.js +120 -0
  397. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/js/search.js +110 -0
  398. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/page.rhtml +18 -0
  399. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +20 -0
  400. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +65 -0
  401. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +70 -0
  402. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/json_index/js/navigation.js +105 -0
  403. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator/template/json_index/js/searcher.js +229 -0
  404. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/generator.rb +51 -0
  405. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/i18n/locale.rb +102 -0
  406. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/i18n/text.rb +126 -0
  407. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/i18n.rb +10 -0
  408. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/known_classes.rb +74 -0
  409. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markdown/entities.rb +2131 -0
  410. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markdown/literals.kpeg +21 -0
  411. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markdown/literals.rb +454 -0
  412. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markdown.kpeg +1244 -0
  413. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markdown.rb +16793 -0
  414. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/attr_changer.rb +22 -0
  415. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/attr_span.rb +35 -0
  416. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/attribute_manager.rb +405 -0
  417. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/attributes.rb +70 -0
  418. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/blank_line.rb +27 -0
  419. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/block_quote.rb +14 -0
  420. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/document.rb +164 -0
  421. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/formatter.rb +272 -0
  422. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/hard_break.rb +31 -0
  423. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/heading.rb +78 -0
  424. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/include.rb +42 -0
  425. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/indented_paragraph.rb +47 -0
  426. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/list.rb +101 -0
  427. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/list_item.rb +99 -0
  428. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/paragraph.rb +28 -0
  429. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/parser.rb +585 -0
  430. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/pre_process.rb +318 -0
  431. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/raw.rb +69 -0
  432. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/regexp_handling.rb +40 -0
  433. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/rule.rb +20 -0
  434. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/table.rb +56 -0
  435. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_ansi.rb +93 -0
  436. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_bs.rb +102 -0
  437. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_html.rb +452 -0
  438. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_html_crossref.rb +226 -0
  439. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_html_snippet.rb +287 -0
  440. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_joined_paragraph.rb +46 -0
  441. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_label.rb +74 -0
  442. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_markdown.rb +191 -0
  443. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_rdoc.rb +352 -0
  444. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_table_of_contents.rb +88 -0
  445. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_test.rb +69 -0
  446. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/to_tt_only.rb +120 -0
  447. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup/verbatim.rb +83 -0
  448. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/markup.rb +240 -0
  449. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/options.rb +1397 -0
  450. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/c.rb +1260 -0
  451. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/changelog.rb +350 -0
  452. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/markdown.rb +22 -0
  453. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/prism_ruby.rb +1099 -0
  454. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/rd.rb +22 -0
  455. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/ripper_state_lex.rb +302 -0
  456. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/ruby.rb +2381 -0
  457. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/ruby_tools.rb +165 -0
  458. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/simple.rb +61 -0
  459. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser/text.rb +11 -0
  460. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/parser.rb +297 -0
  461. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/rd/block_parser.rb +1706 -0
  462. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/rd/block_parser.ry +643 -0
  463. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/rd/inline.rb +71 -0
  464. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/rd/inline_parser.rb +1854 -0
  465. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/rd/inline_parser.ry +593 -0
  466. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/rd.rb +99 -0
  467. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/rdoc.rb +566 -0
  468. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/ri/driver.rb +1558 -0
  469. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/ri/formatter.rb +6 -0
  470. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/ri/paths.rb +171 -0
  471. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/ri/store.rb +6 -0
  472. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/ri/task.rb +71 -0
  473. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/ri.rb +20 -0
  474. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/rubygems_hook.rb +330 -0
  475. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/servlet.rb +451 -0
  476. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/stats/normal.rb +58 -0
  477. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/stats/quiet.rb +59 -0
  478. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/stats/verbose.rb +44 -0
  479. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/stats.rb +461 -0
  480. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/store.rb +1001 -0
  481. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/task.rb +354 -0
  482. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/text.rb +322 -0
  483. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/token_stream.rb +118 -0
  484. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/tom_doc.rb +257 -0
  485. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc/version.rb +10 -0
  486. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rdoc.rb +211 -0
  487. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/lib/rubygems_plugin.rb +23 -0
  488. data/vendor/bundle/ruby/3.3.0/gems/rdoc-6.12.0/man/ri.1 +247 -0
  489. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/BSDL +22 -0
  490. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/COPYING +56 -0
  491. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/README.md +94 -0
  492. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/config.rb +373 -0
  493. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/face.rb +199 -0
  494. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/history.rb +76 -0
  495. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/io/ansi.rb +325 -0
  496. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/io/dumb.rb +120 -0
  497. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/io/windows.rb +530 -0
  498. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/io.rb +55 -0
  499. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/key_actor/base.rb +37 -0
  500. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/key_actor/composite.rb +17 -0
  501. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/key_actor/emacs.rb +517 -0
  502. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/key_actor/vi_command.rb +518 -0
  503. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/key_actor/vi_insert.rb +517 -0
  504. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/key_actor.rb +8 -0
  505. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/key_stroke.rb +119 -0
  506. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/kill_ring.rb +125 -0
  507. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/line_editor.rb +2382 -0
  508. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/unicode/east_asian_width.rb +1267 -0
  509. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/unicode.rb +415 -0
  510. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline/version.rb +3 -0
  511. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/lib/reline.rb +519 -0
  512. data/vendor/bundle/ruby/3.3.0/gems/reline-0.6.0/license_of_rb-readline +25 -0
  513. data/vendor/bundle/ruby/3.3.0/plugins/rdoc_plugin.rb +1 -0
  514. data/vendor/bundle/ruby/3.3.0/specifications/ast-2.4.3.gemspec +29 -0
  515. data/vendor/bundle/ruby/3.3.0/specifications/debug-1.10.0.gemspec +32 -0
  516. data/vendor/bundle/ruby/3.3.0/specifications/io-console-0.8.0.gemspec +25 -0
  517. data/vendor/bundle/ruby/3.3.0/specifications/irb-1.15.1.gemspec +31 -0
  518. data/vendor/bundle/ruby/3.3.0/specifications/parser-3.3.7.2.gemspec +37 -0
  519. data/vendor/bundle/ruby/3.3.0/specifications/pp-0.6.2.gemspec +27 -0
  520. data/vendor/bundle/ruby/3.3.0/specifications/prettyprint-0.2.0.gemspec +23 -0
  521. data/vendor/bundle/ruby/3.3.0/specifications/rdoc-6.12.0.gemspec +31 -0
  522. data/vendor/bundle/ruby/3.3.0/specifications/reline-0.6.0.gemspec +26 -0
  523. metadata +499 -3
@@ -0,0 +1,1455 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'objspace'
4
+ require 'pp'
5
+
6
+ require_relative 'color'
7
+
8
+ class ::Thread
9
+ attr_accessor :debug_thread_client
10
+ end
11
+
12
+ module DEBUGGER__
13
+ M_INSTANCE_VARIABLES = method(:instance_variables).unbind
14
+ M_INSTANCE_VARIABLE_GET = method(:instance_variable_get).unbind
15
+ M_CLASS = method(:class).unbind
16
+ M_SINGLETON_CLASS = method(:singleton_class).unbind
17
+ M_KIND_OF_P = method(:kind_of?).unbind
18
+ M_RESPOND_TO_P = method(:respond_to?).unbind
19
+ M_METHOD = method(:method).unbind
20
+ M_OBJECT_ID = method(:object_id).unbind
21
+ M_NAME = method(:name).unbind
22
+
23
+ module SkipPathHelper
24
+ def skip_path?(path)
25
+ !path ||
26
+ DEBUGGER__.skip? ||
27
+ ThreadClient.current.management? ||
28
+ skip_internal_path?(path) ||
29
+ skip_config_skip_path?(path)
30
+ end
31
+
32
+ def skip_config_skip_path?(path)
33
+ (skip_paths = CONFIG[:skip_path]) && skip_paths.any?{|skip_path| path.match?(skip_path)}
34
+ end
35
+
36
+ def skip_internal_path?(path)
37
+ path.start_with?(__dir__) || path.delete_prefix('!eval:').start_with?('<internal:')
38
+ end
39
+
40
+ def skip_location?(loc)
41
+ loc_path = loc.absolute_path || "!eval:#{loc.path}"
42
+ skip_path?(loc_path)
43
+ end
44
+ end
45
+
46
+ module GlobalVariablesHelper
47
+ SKIP_GLOBAL_LIST = %i[$= $KCODE $-K $SAFE $FILENAME].freeze
48
+ def safe_global_variables
49
+ global_variables.reject{|name| SKIP_GLOBAL_LIST.include? name }
50
+ end
51
+ end
52
+
53
+ class ThreadClient
54
+ def self.current
55
+ Thread.current.debug_thread_client ||= SESSION.get_thread_client
56
+ end
57
+
58
+ include Color
59
+ include SkipPathHelper
60
+ include GlobalVariablesHelper
61
+
62
+ attr_reader :thread, :id, :recorder, :check_bp_fulfillment_map
63
+
64
+ def location
65
+ current_frame&.location
66
+ end
67
+
68
+ def assemble_arguments(args)
69
+ args.map do |arg|
70
+ "#{colorize_cyan(arg[:name])}=#{arg[:value]}"
71
+ end.join(", ")
72
+ end
73
+
74
+ def default_frame_formatter frame
75
+ call_identifier_str =
76
+ case frame.frame_type
77
+ when :block
78
+ level, block_loc = frame.block_identifier
79
+ args = frame.parameters_info
80
+
81
+ if !args.empty?
82
+ args_str = " {|#{assemble_arguments(args)}|}"
83
+ end
84
+
85
+ "#{colorize_blue("block")}#{args_str} in #{colorize_blue(block_loc + level)}"
86
+ when :method
87
+ ci = frame.method_identifier
88
+ args = frame.parameters_info
89
+
90
+ if !args.empty?
91
+ args_str = "(#{assemble_arguments(args)})"
92
+ end
93
+
94
+ "#{colorize_blue(ci)}#{args_str}"
95
+ when :c
96
+ colorize_blue(frame.c_identifier)
97
+ when :other
98
+ colorize_blue(frame.other_identifier)
99
+ end
100
+
101
+ location_str = colorize(frame.location_str, [:GREEN])
102
+ result = "#{call_identifier_str} at #{location_str}"
103
+
104
+ if return_str = frame.return_str
105
+ result += " #=> #{colorize_magenta(return_str)}"
106
+ end
107
+
108
+ result
109
+ end
110
+
111
+ def initialize id, q_evt, q_cmd, thr = Thread.current
112
+ @is_management = false
113
+ @id = id
114
+ @thread = thr
115
+ @target_frames = nil
116
+ @q_evt = q_evt
117
+ @q_cmd = q_cmd
118
+ @step_tp = nil
119
+ @output = []
120
+ @frame_formatter = method(:default_frame_formatter)
121
+ @var_map = {} # { thread_local_var_id => obj } for DAP
122
+ @obj_map = {} # { object_id => obj } for CDP
123
+ @recorder = nil
124
+ @mode = :waiting
125
+ @current_frame_index = 0
126
+ # every thread should maintain its own CheckBreakpoint fulfillment state
127
+ @check_bp_fulfillment_map = {} # { check_bp => boolean }
128
+ set_mode :running
129
+ thr.instance_variable_set(:@__thread_client_id, id)
130
+
131
+ ::DEBUGGER__.info("Thread \##{@id} is created.")
132
+ end
133
+
134
+ def deactivate
135
+ @step_tp.disable if @step_tp
136
+ end
137
+
138
+ def management?
139
+ @is_management
140
+ end
141
+
142
+ def mark_as_management
143
+ @is_management = true
144
+ end
145
+
146
+ def set_mode mode
147
+ debug_mode(@mode, mode)
148
+ # STDERR.puts "#{@mode} => #{mode} @ #{caller.inspect}"
149
+ # pp caller
150
+
151
+ # mode transition check
152
+ case mode
153
+ when :running
154
+ raise "#{mode} is given, but #{mode}" unless self.waiting?
155
+ when :waiting
156
+ # TODO: there is waiting -> waiting
157
+ # raise "#{mode} is given, but #{mode}" unless self.running?
158
+ else
159
+ raise "unknown mode: #{mode}"
160
+ end
161
+
162
+ # DEBUGGER__.warn "#{@mode} => #{mode} @ #{self.inspect}"
163
+ @mode = mode
164
+ end
165
+
166
+ def running?
167
+ @mode == :running
168
+ end
169
+
170
+ def waiting?
171
+ @mode == :waiting
172
+ end
173
+
174
+ def name
175
+ "##{@id} #{@thread.name || @thread.backtrace.last}"
176
+ end
177
+
178
+ def close
179
+ @q_cmd.close
180
+ end
181
+
182
+ def inspect
183
+ if bt = @thread.backtrace
184
+ "#<DBG:TC #{self.id}:#{@mode}@#{bt[-1]}>"
185
+ else # bt can be nil
186
+ "#<DBG:TC #{self.id}:#{@mode}>"
187
+ end
188
+ end
189
+
190
+ def to_s
191
+ str = "(#{@thread.name || @thread.status})@#{current_frame&.location || @thread.to_s}"
192
+ str += " (not under control)" unless self.waiting?
193
+ str
194
+ end
195
+
196
+ def puts str = ''
197
+ if @recorder&.replaying?
198
+ prefix = colorize_dim("[replay] ")
199
+ end
200
+ case str
201
+ when nil
202
+ @output << "\n"
203
+ when Array
204
+ str.each{|s| puts s}
205
+ else
206
+ @output << "#{prefix}#{str.chomp}\n"
207
+ end
208
+ end
209
+
210
+ def << req
211
+ debug_cmd(req)
212
+ @q_cmd << req
213
+ end
214
+
215
+ def generate_info
216
+ return unless current_frame
217
+
218
+ { location: current_frame.location_str, line: current_frame.location.lineno }
219
+ end
220
+
221
+ def event! ev, *args
222
+ debug_event(ev, args)
223
+ @q_evt << [self, @output, ev, generate_info, *args]
224
+ @output = []
225
+ end
226
+
227
+ ## events
228
+
229
+ def wait_reply event_arg
230
+ return if management?
231
+
232
+ set_mode :waiting
233
+
234
+ event!(*event_arg)
235
+ wait_next_action
236
+ end
237
+
238
+ def on_load iseq, eval_src
239
+ wait_reply [:load, iseq, eval_src]
240
+ end
241
+
242
+ def on_init name
243
+ wait_reply [:init, name]
244
+ end
245
+
246
+ def on_trace trace_id, msg
247
+ wait_reply [:trace, trace_id, msg]
248
+ end
249
+
250
+ def on_breakpoint tp, bp
251
+ suspend tp.event, tp, bp: bp
252
+ end
253
+
254
+ def on_trap sig
255
+ if waiting?
256
+ # raise Interrupt
257
+ else
258
+ suspend :trap, sig: sig
259
+ end
260
+ end
261
+
262
+ def on_pause
263
+ suspend :pause
264
+ end
265
+
266
+ def suspend event, tp = nil, bp: nil, sig: nil, postmortem_frames: nil, replay_frames: nil, postmortem_exc: nil
267
+ return if management?
268
+ debug_suspend(event)
269
+
270
+ @current_frame_index = 0
271
+
272
+ case
273
+ when postmortem_frames
274
+ @target_frames = postmortem_frames
275
+ @postmortem = true
276
+ when replay_frames
277
+ @target_frames = replay_frames
278
+ else
279
+ @target_frames = DEBUGGER__.capture_frames(__dir__)
280
+ end
281
+
282
+ cf = @target_frames.first
283
+ if cf
284
+ case event
285
+ when :return, :b_return, :c_return
286
+ cf.has_return_value = true
287
+ cf.return_value = tp.return_value
288
+ end
289
+
290
+ if CatchBreakpoint === bp
291
+ cf.has_raised_exception = true
292
+ cf.raised_exception = bp.last_exc
293
+ end
294
+
295
+ if postmortem_exc
296
+ cf.has_raised_exception = true
297
+ cf.raised_exception = postmortem_exc
298
+ end
299
+ end
300
+
301
+ if event != :pause
302
+ unless bp&.skip_src
303
+ show_src
304
+ show_frames CONFIG[:show_frames]
305
+ end
306
+
307
+ set_mode :waiting
308
+
309
+ if bp
310
+ event! :suspend, :breakpoint, bp.key
311
+ elsif sig
312
+ event! :suspend, :trap, sig
313
+ else
314
+ event! :suspend, event
315
+ end
316
+ else
317
+ set_mode :waiting
318
+ end
319
+
320
+ wait_next_action
321
+ end
322
+
323
+ def replay_suspend
324
+ # @recorder.current_position
325
+ suspend :replay, replay_frames: @recorder.current_frame
326
+ end
327
+
328
+ ## control all
329
+
330
+ begin
331
+ TracePoint.new(:raise){}.enable(target_thread: Thread.current)
332
+ SUPPORT_TARGET_THREAD = true
333
+ rescue ArgumentError
334
+ SUPPORT_TARGET_THREAD = false
335
+ end
336
+
337
+ def step_tp iter, events = [:line, :b_return, :return]
338
+ @step_tp.disable if @step_tp
339
+
340
+ thread = Thread.current
341
+ subsession_id = SESSION.subsession_id
342
+
343
+ if SUPPORT_TARGET_THREAD
344
+ @step_tp = TracePoint.new(*events){|tp|
345
+ if SESSION.stop_stepping? tp.path, tp.lineno, subsession_id
346
+ tp.disable
347
+ next
348
+ end
349
+ next if !yield(tp)
350
+ next if tp.path.start_with?(__dir__)
351
+ next if tp.path.start_with?('<internal:trace_point>')
352
+ next unless File.exist?(tp.path) if CONFIG[:skip_nosrc]
353
+ loc = caller_locations(1, 1).first
354
+ next if skip_location?(loc)
355
+ next if iter && (iter -= 1) > 0
356
+
357
+ tp.disable
358
+ suspend tp.event, tp
359
+ }
360
+ @step_tp.enable(target_thread: thread)
361
+ else
362
+ @step_tp = TracePoint.new(*events){|tp|
363
+ next if thread != Thread.current
364
+ if SESSION.stop_stepping? tp.path, tp.lineno, subsession_id
365
+ tp.disable
366
+ next
367
+ end
368
+ next if !yield(tp)
369
+ next if tp.path.start_with?(__dir__)
370
+ next if tp.path.start_with?('<internal:trace_point>')
371
+ next unless File.exist?(tp.path) if CONFIG[:skip_nosrc]
372
+ loc = caller_locations(1, 1).first
373
+ next if skip_location?(loc)
374
+ next if iter && (iter -= 1) > 0
375
+
376
+ tp.disable
377
+ suspend tp.event, tp
378
+ }
379
+ @step_tp.enable
380
+ end
381
+ end
382
+
383
+ ## cmd helpers
384
+
385
+ if TracePoint.respond_to? :allow_reentry
386
+ def tp_allow_reentry
387
+ TracePoint.allow_reentry do
388
+ yield
389
+ end
390
+ rescue RuntimeError => e
391
+ # on the postmortem mode, it is not stopped in TracePoint
392
+ if e.message == 'No need to allow reentrance.'
393
+ yield
394
+ else
395
+ raise
396
+ end
397
+ end
398
+ else
399
+ def tp_allow_reentry
400
+ yield
401
+ end
402
+ end
403
+
404
+ def frame_eval_core src, b, binding_location: false
405
+ saved_target_frames = @target_frames
406
+ saved_current_frame_index = @current_frame_index
407
+
408
+ if b
409
+ file, lineno = b.source_location
410
+
411
+ tp_allow_reentry do
412
+ if binding_location
413
+ b.eval(src, file, lineno)
414
+ else
415
+ b.eval(src, "(rdbg)/#{file}")
416
+ end
417
+ end
418
+ else
419
+ frame_self = current_frame.self
420
+
421
+ tp_allow_reentry do
422
+ frame_self.instance_eval(src)
423
+ end
424
+ end
425
+ ensure
426
+ @target_frames = saved_target_frames
427
+ @current_frame_index = saved_current_frame_index
428
+ end
429
+
430
+ SPECIAL_LOCAL_VARS = [
431
+ [:raised_exception, "_raised"],
432
+ [:return_value, "_return"],
433
+ ]
434
+
435
+ def frame_eval src, re_raise: false, binding_location: false
436
+ @success_last_eval = false
437
+
438
+ b = current_frame&.eval_binding || TOPLEVEL_BINDING
439
+
440
+ special_local_variables current_frame do |name, var|
441
+ b.local_variable_set(name, var) if /\%/ !~ name
442
+ end
443
+
444
+ result = frame_eval_core(src, b, binding_location: binding_location)
445
+
446
+ @success_last_eval = true
447
+ result
448
+
449
+ rescue SystemExit
450
+ raise
451
+ rescue Exception => e
452
+ return yield(e) if block_given?
453
+
454
+ puts "eval error: #{e}"
455
+
456
+ e.backtrace_locations&.each do |loc|
457
+ break if loc.path == __FILE__
458
+ puts " #{loc}"
459
+ end
460
+ raise if re_raise
461
+ end
462
+
463
+ def get_src(frame,
464
+ max_lines:,
465
+ start_line: nil,
466
+ end_line: nil,
467
+ dir: +1)
468
+ if file_lines = frame.file_lines
469
+ frame_line = frame.location.lineno - 1
470
+
471
+ if CONFIG[:no_lineno]
472
+ lines = file_lines
473
+ else
474
+ lines = file_lines.map.with_index do |e, i|
475
+ cur = i == frame_line ? '=>' : ' '
476
+ line = colorize_dim('%4d|' % (i+1))
477
+ "#{cur}#{line} #{e}"
478
+ end
479
+ end
480
+
481
+ unless start_line
482
+ if frame.show_line
483
+ if dir > 0
484
+ start_line = frame.show_line
485
+ else
486
+ end_line = frame.show_line - max_lines
487
+ start_line = [end_line - max_lines, 0].max
488
+ end
489
+ else
490
+ start_line = [frame_line - max_lines/2, 0].max
491
+ end
492
+ end
493
+
494
+ unless end_line
495
+ end_line = [start_line + max_lines, lines.size].min
496
+ end
497
+
498
+ if start_line != end_line && max_lines
499
+ [start_line, end_line, lines]
500
+ end
501
+ else # no file lines
502
+ nil
503
+ end
504
+ rescue Exception => e
505
+ p e
506
+ pp e.backtrace
507
+ exit!
508
+ end
509
+
510
+ def show_src(frame_index: @current_frame_index, update_line: false, ignore_show_line: false, max_lines: CONFIG[:show_src_lines], **options)
511
+ if frame = get_frame(frame_index)
512
+ begin
513
+ if ignore_show_line
514
+ prev_show_line = frame.show_line
515
+ frame.show_line = nil
516
+ end
517
+
518
+ start_line, end_line, lines = *get_src(frame, max_lines: max_lines, **options)
519
+
520
+ if start_line
521
+ if update_line
522
+ frame.show_line = end_line
523
+ end
524
+
525
+ puts "[#{start_line+1}, #{end_line}] in #{frame.pretty_path}" if !update_line && max_lines != 1
526
+ puts lines[start_line...end_line]
527
+ else
528
+ puts "# No sourcefile available for #{frame.path}"
529
+ end
530
+ ensure
531
+ frame.show_line = prev_show_line if prev_show_line
532
+ end
533
+ end
534
+ end
535
+
536
+ def current_frame
537
+ get_frame(@current_frame_index)
538
+ end
539
+
540
+ def get_frame(index)
541
+ if @target_frames
542
+ @target_frames[index]
543
+ else
544
+ nil
545
+ end
546
+ end
547
+
548
+ def collect_locals(frame)
549
+ locals = []
550
+
551
+ if s = frame&.self
552
+ locals << ["%self", s]
553
+ end
554
+ special_local_variables frame do |name, val|
555
+ locals << [name, val]
556
+ end
557
+
558
+ if vars = frame&.local_variables
559
+ vars.each{|var, val|
560
+ locals << [var, val]
561
+ }
562
+ end
563
+
564
+ locals
565
+ end
566
+
567
+ ## cmd: show
568
+
569
+ def special_local_variables frame
570
+ SPECIAL_LOCAL_VARS.each do |mid, name|
571
+ next unless frame&.send("has_#{mid}")
572
+ name = name.sub('_', '%') if frame.eval_binding.local_variable_defined?(name)
573
+ yield name, frame.send(mid)
574
+ end
575
+ end
576
+
577
+ def show_locals pat
578
+ collect_locals(current_frame).each do |var, val|
579
+ puts_variable_info(var, val, pat)
580
+ end
581
+ end
582
+
583
+ def show_ivars pat, expr = nil
584
+ if expr && !expr.empty?
585
+ _self = frame_eval(expr);
586
+ elsif _self = current_frame&.self
587
+ else
588
+ _self = nil
589
+ end
590
+
591
+ if _self
592
+ M_INSTANCE_VARIABLES.bind_call(_self).sort.each{|iv|
593
+ value = M_INSTANCE_VARIABLE_GET.bind_call(_self, iv)
594
+ puts_variable_info iv, value, pat
595
+ }
596
+ end
597
+ end
598
+
599
+ def iter_consts c, names = {}
600
+ c.constants(false).sort.each{|name|
601
+ next if names.has_key? name
602
+ names[name] = nil
603
+ begin
604
+ value = c.const_get(name)
605
+ rescue Exception => e
606
+ value = e
607
+ end
608
+ yield name, value
609
+ }
610
+ end
611
+
612
+ def get_consts expr = nil, only_self: false, &block
613
+ if expr && !expr.empty?
614
+ begin
615
+ _self = frame_eval(expr, re_raise: true)
616
+ rescue Exception
617
+ # ignore
618
+ else
619
+ if M_KIND_OF_P.bind_call(_self, Module)
620
+ iter_consts _self, &block
621
+ return
622
+ else
623
+ puts "#{_self.inspect} (by #{expr}) is not a Module."
624
+ end
625
+ end
626
+ elsif _self = current_frame&.self
627
+ cs = {}
628
+ if M_KIND_OF_P.bind_call(_self, Module)
629
+ cs[_self] = :self
630
+ else
631
+ _self = M_CLASS.bind_call(_self)
632
+ cs[_self] = :self unless only_self
633
+ end
634
+
635
+ unless only_self
636
+ _self.ancestors.each{|c| break if c == Object; cs[c] = :ancestors}
637
+ if b = current_frame&.binding
638
+ b.eval('::Module.nesting').each{|c| cs[c] = :nesting unless cs.has_key? c}
639
+ end
640
+ end
641
+
642
+ names = {}
643
+
644
+ cs.each{|c, _|
645
+ iter_consts c, names, &block
646
+ }
647
+ end
648
+ end
649
+
650
+ def show_consts pat, expr = nil, only_self: false
651
+ get_consts expr, only_self: only_self do |name, value|
652
+ puts_variable_info name, value, pat
653
+ end
654
+ end
655
+
656
+ def show_globals pat
657
+ safe_global_variables.sort.each{|name|
658
+ next if SKIP_GLOBAL_LIST.include? name
659
+
660
+ value = eval(name.to_s)
661
+ puts_variable_info name, value, pat
662
+ }
663
+ end
664
+
665
+ def puts_variable_info label, obj, pat
666
+ return if pat && pat !~ label
667
+
668
+ begin
669
+ inspected = DEBUGGER__.safe_inspect(obj)
670
+ rescue Exception => e
671
+ inspected = e.inspect
672
+ end
673
+ mono_info = "#{label} = #{inspected}"
674
+
675
+ w = SESSION::width
676
+
677
+ if mono_info.length >= w
678
+ maximum_value_width = w - "#{label} = ".length
679
+ valstr = truncate(inspected, width: maximum_value_width)
680
+ else
681
+ valstr = colored_inspect(obj, width: 2 ** 30)
682
+ valstr = inspected if valstr.lines.size > 1
683
+ end
684
+
685
+ info = "#{colorize_cyan(label)} = #{valstr}"
686
+
687
+ puts info
688
+ end
689
+
690
+ def truncate(string, width:)
691
+ if string.start_with?("#<")
692
+ string[0 .. (width-5)] + '...>'
693
+ else
694
+ string[0 .. (width-4)] + '...'
695
+ end
696
+ end
697
+
698
+ ### cmd: show edit
699
+
700
+ def show_by_editor path = nil
701
+ unless path
702
+ if current_frame
703
+ path = current_frame.path
704
+ else
705
+ return # can't get path
706
+ end
707
+ end
708
+
709
+ if File.exist?(path)
710
+ if editor = (ENV['RUBY_DEBUG_EDITOR'] || ENV['EDITOR'])
711
+ puts "command: #{editor}"
712
+ puts " path: #{path}"
713
+ require 'shellwords'
714
+ system(*Shellwords.split(editor), path)
715
+ else
716
+ puts "can not find editor setting: ENV['RUBY_DEBUG_EDITOR'] or ENV['EDITOR']"
717
+ end
718
+ else
719
+ puts "Can not find file: #{path}"
720
+ end
721
+ end
722
+
723
+ ### cmd: show frames
724
+
725
+ def show_frames max = nil, pattern = nil
726
+ if @target_frames && (max ||= @target_frames.size) > 0
727
+ frames = []
728
+ @target_frames.each_with_index{|f, i|
729
+ # we need to use FrameInfo#matchable_location because #location_str is for display
730
+ # and it may change based on configs (e.g. use_short_path)
731
+ next if pattern && !(f.name.match?(pattern) || f.matchable_location.match?(pattern))
732
+ # avoid using skip_path? because we still want to display internal frames
733
+ next if skip_config_skip_path?(f.matchable_location)
734
+
735
+ frames << [i, f]
736
+ }
737
+
738
+ size = frames.size
739
+ max.times{|i|
740
+ break unless frames[i]
741
+ index, frame = frames[i]
742
+ puts frame_str(index, frame: frame)
743
+ }
744
+ puts " # and #{size - max} frames (use `bt' command for all frames)" if max < size
745
+ end
746
+ end
747
+
748
+ def show_frame i=0
749
+ puts frame_str(i)
750
+ end
751
+
752
+ def frame_str(i, frame: @target_frames[i])
753
+ cur_str = (@current_frame_index == i ? '=>' : ' ')
754
+ prefix = "#{cur_str}##{i}"
755
+ frame_string = @frame_formatter.call(frame)
756
+ "#{prefix}\t#{frame_string}"
757
+ end
758
+
759
+ ### cmd: show outline
760
+
761
+ def show_outline expr
762
+ begin
763
+ obj = frame_eval(expr, re_raise: true)
764
+ rescue Exception
765
+ # ignore
766
+ else
767
+ o = Output.new(@output)
768
+
769
+ locals = current_frame&.local_variables
770
+
771
+ klass = M_CLASS.bind_call(obj)
772
+ klass = obj if Class == klass || Module == klass
773
+
774
+ o.dump("constants", obj.constants) if M_RESPOND_TO_P.bind_call(obj, :constants)
775
+ outline_method(o, klass, obj)
776
+ o.dump("instance variables", M_INSTANCE_VARIABLES.bind_call(obj))
777
+ o.dump("class variables", klass.class_variables)
778
+ o.dump("locals", locals.keys) if locals
779
+ end
780
+ end
781
+
782
+ def outline_method(o, klass, obj)
783
+ begin
784
+ singleton_class = M_SINGLETON_CLASS.bind_call(obj)
785
+ rescue TypeError
786
+ singleton_class = nil
787
+ end
788
+
789
+ maps = class_method_map((singleton_class || klass).ancestors)
790
+ maps.each do |mod, methods|
791
+ name = mod == singleton_class ? "#{klass}.methods" : "#{mod}#methods"
792
+ o.dump(name, methods)
793
+ end
794
+ end
795
+
796
+ def class_method_map(classes)
797
+ dumped = Array.new
798
+ classes.reject { |mod| mod >= Object }.map do |mod|
799
+ methods = mod.public_instance_methods(false).select do |m|
800
+ dumped.push(m) unless dumped.include?(m)
801
+ end
802
+ [mod, methods]
803
+ end.reverse
804
+ end
805
+
806
+ ## cmd: breakpoint
807
+
808
+ # TODO: support non-ASCII Constant name
809
+ def constant_name? name
810
+ case name
811
+ when /\A::\b/
812
+ constant_name? $~.post_match
813
+ when /\A[A-Z]\w*/
814
+ post = $~.post_match
815
+ if post.empty?
816
+ true
817
+ else
818
+ constant_name? post
819
+ end
820
+ else
821
+ false
822
+ end
823
+ end
824
+
825
+ def make_breakpoint args
826
+ case args.first
827
+ when :method
828
+ klass_name, op, method_name, cond, cmd, path = args[1..]
829
+ bp = MethodBreakpoint.new(current_frame&.eval_binding || TOPLEVEL_BINDING, klass_name, op, method_name, cond: cond, command: cmd, path: path)
830
+ begin
831
+ bp.enable
832
+ rescue NameError => e
833
+ if bp.klass
834
+ puts "Unknown method name: \"#{e.name}\""
835
+ else
836
+ # klass_name can not be evaluated
837
+ if constant_name? klass_name
838
+ puts "Unknown constant name: \"#{e.name}\""
839
+ else
840
+ # only Class name is allowed
841
+ puts "Not a constant name: \"#{klass_name}\""
842
+ bp = nil
843
+ end
844
+ end
845
+
846
+ Session.activate_method_added_trackers if bp
847
+ rescue Exception => e
848
+ puts e.inspect
849
+ bp = nil
850
+ end
851
+
852
+ bp
853
+ when :watch
854
+ ivar, object, result, cond, command, path = args[1..]
855
+ WatchIVarBreakpoint.new(ivar, object, result, cond: cond, command: command, path: path)
856
+ else
857
+ raise "unknown breakpoint: #{args}"
858
+ end
859
+ end
860
+
861
+ class SuspendReplay < Exception
862
+ end
863
+
864
+ if ::Fiber.respond_to?(:blocking)
865
+ private def fiber_blocking
866
+ ::Fiber.blocking{yield}
867
+ end
868
+ else
869
+ private def fiber_blocking
870
+ yield
871
+ end
872
+ end
873
+
874
+ def wait_next_action
875
+ fiber_blocking{wait_next_action_}
876
+ rescue SuspendReplay
877
+ replay_suspend
878
+ end
879
+
880
+ def wait_next_action_
881
+ # assertions
882
+ raise "@mode is #{@mode}" if !waiting?
883
+
884
+ unless SESSION.active?
885
+ pp caller
886
+ set_mode :running
887
+ return
888
+ end
889
+
890
+ while true
891
+ begin
892
+ set_mode :waiting if !waiting?
893
+ cmds = @q_cmd.pop
894
+ # pp [self, cmds: cmds]
895
+
896
+ break unless cmds
897
+ ensure
898
+ set_mode :running
899
+ end
900
+
901
+ cmd, *args = *cmds
902
+
903
+ case cmd
904
+ when :continue
905
+ break
906
+
907
+ when :step
908
+ step_type = args[0]
909
+ iter = args[1]
910
+
911
+ case step_type
912
+ when :in
913
+ iter = iter || 1
914
+ if @recorder&.replaying?
915
+ @recorder.step_forward iter
916
+ raise SuspendReplay
917
+ else
918
+ step_tp iter do
919
+ true
920
+ end
921
+ break
922
+ end
923
+
924
+ when :next
925
+ frame = @target_frames.first
926
+ path = frame.location.absolute_path || "!eval:#{frame.path}"
927
+ line = frame.location.lineno
928
+ label = frame.location.base_label
929
+
930
+ if frame.iseq
931
+ frame.iseq.traceable_lines_norec(lines = {})
932
+ next_line = lines.keys.bsearch{|e| e > line}
933
+ if !next_line && (last_line = frame.iseq.last_line) > line
934
+ next_line = last_line
935
+ end
936
+ end
937
+
938
+ depth = @target_frames.first.frame_depth
939
+
940
+ step_tp iter do |tp|
941
+ loc = caller_locations(2, 1).first
942
+ loc_path = loc.absolute_path || "!eval:#{loc.path}"
943
+ loc_label = loc.base_label
944
+ loc_depth = DEBUGGER__.frame_depth - 3
945
+
946
+ case
947
+ when loc_depth == depth && loc_label == label
948
+ true
949
+ when loc_depth < depth
950
+ # lower stack depth
951
+ true
952
+ when (next_line &&
953
+ loc_path == path &&
954
+ (loc_lineno = loc.lineno) > line &&
955
+ loc_lineno <= next_line)
956
+ # different frame (maybe block) but the line is before next_line
957
+ true
958
+ end
959
+ end
960
+ break
961
+
962
+ when :finish
963
+ finish_frames = (iter || 1) - 1
964
+ frame = @target_frames.first
965
+ goal_depth = frame.frame_depth - finish_frames - (frame.has_return_value ? 1 : 0)
966
+
967
+ step_tp nil, [:return, :b_return] do
968
+ DEBUGGER__.frame_depth - 3 <= goal_depth ? true : false
969
+ end
970
+ break
971
+
972
+ when :until
973
+ location = iter&.strip
974
+ frame = @target_frames.first
975
+ depth = frame.frame_depth - (frame.has_return_value ? 1 : 0)
976
+ target_location_label = frame.location.base_label
977
+
978
+ case location
979
+ when nil, /\A(?:(.+):)?(\d+)\z/
980
+ no_loc = !location
981
+ file = $1 || frame.location.path
982
+ line = ($2 || frame.location.lineno + 1).to_i
983
+
984
+ step_tp nil, [:line, :return] do |tp|
985
+ if tp.event == :line
986
+ next false if no_loc && depth < DEBUGGER__.frame_depth - 3
987
+ next false unless tp.path.end_with?(file)
988
+ next false unless tp.lineno >= line
989
+ true
990
+ else
991
+ true if depth >= DEBUGGER__.frame_depth - 3 &&
992
+ caller_locations(2, 1).first.base_label == target_location_label
993
+ # TODO: imcomplete condition
994
+ end
995
+ end
996
+ else
997
+ pat = location
998
+ if /\A\/(.+)\/\z/ =~ pat
999
+ pat = Regexp.new($1)
1000
+ end
1001
+
1002
+ step_tp nil, [:call, :c_call, :return] do |tp|
1003
+ case tp.event
1004
+ when :call, :c_call
1005
+ true if pat === tp.callee_id.to_s
1006
+ else # :return, :b_return
1007
+ true if depth >= DEBUGGER__.frame_depth - 3 &&
1008
+ caller_locations(2, 1).first.base_label == target_location_label
1009
+ # TODO: imcomplete condition
1010
+ end
1011
+ end
1012
+ end
1013
+
1014
+ break
1015
+
1016
+ when :back
1017
+ iter = iter || 1
1018
+ if @recorder&.can_step_back?
1019
+ unless @recorder.backup_frames
1020
+ @recorder.backup_frames = @target_frames
1021
+ end
1022
+ @recorder.step_back iter
1023
+ raise SuspendReplay
1024
+ else
1025
+ puts "Can not step back more."
1026
+ event! :result, nil
1027
+ end
1028
+
1029
+ when :reset
1030
+ if @recorder&.replaying?
1031
+ @recorder.step_reset
1032
+ raise SuspendReplay
1033
+ end
1034
+
1035
+ else
1036
+ raise "unknown: #{type}"
1037
+ end
1038
+
1039
+ when :eval
1040
+ eval_type, eval_src = *args
1041
+
1042
+ result_type = nil
1043
+
1044
+ case eval_type
1045
+ when :p
1046
+ result = frame_eval(eval_src)
1047
+ puts "=> " + color_pp(result, 2 ** 30)
1048
+ if alloc_path = ObjectSpace.allocation_sourcefile(result)
1049
+ puts "allocated at #{alloc_path}:#{ObjectSpace.allocation_sourceline(result)}"
1050
+ end
1051
+ when :pp
1052
+ result = frame_eval(eval_src)
1053
+ puts color_pp(result, SESSION.width)
1054
+ if alloc_path = ObjectSpace.allocation_sourcefile(result)
1055
+ puts "allocated at #{alloc_path}:#{ObjectSpace.allocation_sourceline(result)}"
1056
+ end
1057
+ when :call
1058
+ result = frame_eval(eval_src)
1059
+ when :display, :try_display
1060
+ failed_results = []
1061
+ eval_src.each_with_index{|src, i|
1062
+ result = frame_eval(src){|e|
1063
+ failed_results << [i, e.message]
1064
+ "<error: #{e.message}>"
1065
+ }
1066
+ puts "#{i}: #{src} = #{result}"
1067
+ }
1068
+
1069
+ result_type = eval_type
1070
+ result = failed_results
1071
+ else
1072
+ raise "unknown error option: #{args.inspect}"
1073
+ end
1074
+
1075
+ event! :result, result_type, result
1076
+ when :frame
1077
+ type, arg = *args
1078
+ case type
1079
+ when :up
1080
+ if @current_frame_index + 1 < @target_frames.size
1081
+ @current_frame_index += 1
1082
+ show_src max_lines: 1
1083
+ show_frame(@current_frame_index)
1084
+ end
1085
+ when :down
1086
+ if @current_frame_index > 0
1087
+ @current_frame_index -= 1
1088
+ show_src max_lines: 1
1089
+ show_frame(@current_frame_index)
1090
+ end
1091
+ when :set
1092
+ if arg
1093
+ index = arg.to_i
1094
+ if index >= 0 && index < @target_frames.size
1095
+ @current_frame_index = index
1096
+ else
1097
+ puts "out of frame index: #{index}"
1098
+ end
1099
+ end
1100
+ show_src max_lines: 1
1101
+ show_frame(@current_frame_index)
1102
+ else
1103
+ raise "unsupported frame operation: #{arg.inspect}"
1104
+ end
1105
+
1106
+ event! :result, nil
1107
+
1108
+ when :show
1109
+ type = args.shift
1110
+
1111
+ case type
1112
+ when :backtrace
1113
+ max_lines, pattern = *args
1114
+ show_frames max_lines, pattern
1115
+
1116
+ when :list
1117
+ show_src(update_line: true, **(args.first || {}))
1118
+
1119
+ when :whereami
1120
+ show_src ignore_show_line: true
1121
+ show_frames CONFIG[:show_frames]
1122
+
1123
+ when :edit
1124
+ show_by_editor(args.first)
1125
+
1126
+ when :default
1127
+ pat = args.shift
1128
+ show_locals pat
1129
+ show_ivars pat
1130
+ show_consts pat, only_self: true
1131
+
1132
+ when :locals
1133
+ pat = args.shift
1134
+ show_locals pat
1135
+
1136
+ when :ivars
1137
+ pat = args.shift
1138
+ expr = args.shift
1139
+ show_ivars pat, expr
1140
+
1141
+ when :consts
1142
+ pat = args.shift
1143
+ expr = args.shift
1144
+ show_consts pat, expr
1145
+
1146
+ when :globals
1147
+ pat = args.shift
1148
+ show_globals pat
1149
+
1150
+ when :outline
1151
+ show_outline args.first || 'self'
1152
+
1153
+ else
1154
+ raise "unknown show param: " + [type, *args].inspect
1155
+ end
1156
+
1157
+ event! :result, nil
1158
+
1159
+ when :breakpoint
1160
+ case args[0]
1161
+ when :method
1162
+ bp = make_breakpoint args
1163
+ event! :result, :method_breakpoint, bp
1164
+ when :watch
1165
+ ivar, cond, command, path = args[1..]
1166
+ result = frame_eval(ivar)
1167
+
1168
+ if @success_last_eval
1169
+ object =
1170
+ if b = current_frame.binding
1171
+ b.receiver
1172
+ else
1173
+ current_frame.self
1174
+ end
1175
+ bp = make_breakpoint [:watch, ivar, object, result, cond, command, path]
1176
+ event! :result, :watch_breakpoint, bp
1177
+ else
1178
+ event! :result, nil
1179
+ end
1180
+ end
1181
+
1182
+ when :trace
1183
+ case args.shift
1184
+ when :object
1185
+ begin
1186
+ obj = frame_eval args.shift, re_raise: true
1187
+ opt = args.shift
1188
+ obj_inspect = DEBUGGER__.safe_inspect(obj)
1189
+
1190
+ width = 50
1191
+
1192
+ if obj_inspect.length >= width
1193
+ obj_inspect = truncate(obj_inspect, width: width)
1194
+ end
1195
+
1196
+ event! :result, :trace_pass, M_OBJECT_ID.bind_call(obj), obj_inspect, opt
1197
+ rescue => e
1198
+ puts e.message
1199
+ event! :result, nil
1200
+ end
1201
+ else
1202
+ raise "unreachable"
1203
+ end
1204
+
1205
+ when :record
1206
+ case args[0]
1207
+ when nil
1208
+ # ok
1209
+ when :on
1210
+ # enable recording
1211
+ if !@recorder
1212
+ @recorder = Recorder.new
1213
+ end
1214
+ @recorder.enable
1215
+ when :off
1216
+ if @recorder&.enabled?
1217
+ @recorder.disable
1218
+ end
1219
+ else
1220
+ raise "unknown: #{args.inspect}"
1221
+ end
1222
+
1223
+ if @recorder&.enabled?
1224
+ puts "Recorder for #{Thread.current}: on (#{@recorder.log.size} records)"
1225
+ else
1226
+ puts "Recorder for #{Thread.current}: off"
1227
+ end
1228
+ event! :result, nil
1229
+
1230
+ when :quit
1231
+ sleep # wait for SystemExit
1232
+ when :dap
1233
+ process_dap args
1234
+ when :cdp
1235
+ process_cdp args
1236
+ else
1237
+ raise [cmd, *args].inspect
1238
+ end
1239
+ end
1240
+
1241
+ rescue SuspendReplay, SystemExit, Interrupt
1242
+ raise
1243
+ rescue Exception => e
1244
+ STDERR.puts e.cause.inspect
1245
+ STDERR.puts e.inspect
1246
+ Thread.list.each{|th|
1247
+ STDERR.puts "@@@ #{th}"
1248
+ th.backtrace.each{|b|
1249
+ STDERR.puts " > #{b}"
1250
+ }
1251
+ }
1252
+ p ["DEBUGGER Exception: #{__FILE__}:#{__LINE__}", e, e.backtrace]
1253
+ raise
1254
+ ensure
1255
+ @returning = false
1256
+ end
1257
+
1258
+ def debug_event(ev, args)
1259
+ DEBUGGER__.debug{
1260
+ args = args.map { |arg| DEBUGGER__.safe_inspect(arg) }
1261
+ "#{inspect} sends Event { type: #{ev.inspect}, args: #{args} } to Session"
1262
+ }
1263
+ end
1264
+
1265
+ def debug_mode(old_mode, new_mode)
1266
+ DEBUGGER__.debug{
1267
+ "#{inspect} changes mode (#{old_mode} -> #{new_mode})"
1268
+ }
1269
+ end
1270
+
1271
+ def debug_cmd(cmds)
1272
+ DEBUGGER__.debug{
1273
+ cmd, *args = *cmds
1274
+ args = args.map { |arg| DEBUGGER__.safe_inspect(arg) }
1275
+ "#{inspect} receives Cmd { type: #{cmd.inspect}, args: #{args} } from Session"
1276
+ }
1277
+ end
1278
+
1279
+ def debug_suspend(event)
1280
+ DEBUGGER__.debug{
1281
+ "#{inspect} is suspended for #{event.inspect}"
1282
+ }
1283
+ end
1284
+
1285
+ class Recorder
1286
+ attr_reader :log, :index
1287
+ attr_accessor :backup_frames
1288
+
1289
+ include SkipPathHelper
1290
+
1291
+ def initialize
1292
+ @log = []
1293
+ @index = 0
1294
+ @backup_frames = nil
1295
+ thread = Thread.current
1296
+
1297
+ @tp_recorder ||= TracePoint.new(:line){|tp|
1298
+ next unless Thread.current == thread
1299
+ # can't be replaced by skip_location
1300
+ next if skip_internal_path?(tp.path)
1301
+ loc = caller_locations(1, 1).first
1302
+ next if skip_location?(loc)
1303
+
1304
+ frames = DEBUGGER__.capture_frames(__dir__)
1305
+ frames.each{|frame|
1306
+ if b = frame.binding
1307
+ frame.binding = nil
1308
+ frame._local_variables = b.local_variables.map{|name|
1309
+ [name, b.local_variable_get(name)]
1310
+ }.to_h
1311
+ frame._callee = b.eval('__callee__')
1312
+ end
1313
+ }
1314
+ append(frames)
1315
+ }
1316
+ end
1317
+
1318
+ def append frames
1319
+ @log << frames
1320
+ end
1321
+
1322
+ def enable
1323
+ unless @tp_recorder.enabled?
1324
+ @log.clear
1325
+ @tp_recorder.enable
1326
+ end
1327
+ end
1328
+
1329
+ def disable
1330
+ if @tp_recorder.enabled?
1331
+ @log.clear
1332
+ @tp_recorder.disable
1333
+ end
1334
+ end
1335
+
1336
+ def enabled?
1337
+ @tp_recorder.enabled?
1338
+ end
1339
+
1340
+ def step_back iter
1341
+ @index += iter
1342
+ if @index > @log.size
1343
+ @index = @log.size
1344
+ end
1345
+ end
1346
+
1347
+ def step_forward iter
1348
+ @index -= iter
1349
+ if @index < 0
1350
+ @index = 0
1351
+ end
1352
+ end
1353
+
1354
+ def step_reset
1355
+ @index = 0
1356
+ @backup_frames = nil
1357
+ end
1358
+
1359
+ def replaying?
1360
+ @index > 0
1361
+ end
1362
+
1363
+ def can_step_back?
1364
+ log.size > @index
1365
+ end
1366
+
1367
+ def log_index
1368
+ @log.size - @index
1369
+ end
1370
+
1371
+ def current_frame
1372
+ if @index == 0
1373
+ f = @backup_frames
1374
+ @backup_frames = nil
1375
+ f
1376
+ else
1377
+ frames = @log[log_index]
1378
+ frames
1379
+ end
1380
+ end
1381
+
1382
+ # for debugging
1383
+ def current_position
1384
+ puts "INDEX: #{@index}"
1385
+ li = log_index
1386
+ @log.each_with_index{|frame, i|
1387
+ loc = frame.first&.location
1388
+ prefix = i == li ? "=> " : ' '
1389
+ puts "#{prefix} #{loc}"
1390
+ }
1391
+ end
1392
+ end
1393
+
1394
+ # copied from irb
1395
+ class Output
1396
+ include Color
1397
+
1398
+ MARGIN = " "
1399
+
1400
+ def initialize(output)
1401
+ @output = output
1402
+ @line_width = screen_width - MARGIN.length # right padding
1403
+ end
1404
+
1405
+ def dump(name, strs)
1406
+ strs = strs.sort
1407
+ return if strs.empty?
1408
+
1409
+ line = "#{colorize_blue(name)}: "
1410
+
1411
+ # Attempt a single line
1412
+ if fits_on_line?(strs, cols: strs.size, offset: "#{name}: ".length)
1413
+ line += strs.join(MARGIN)
1414
+ @output << line
1415
+ return
1416
+ end
1417
+
1418
+ # Multi-line
1419
+ @output << line
1420
+
1421
+ # Dump with the largest # of columns that fits on a line
1422
+ cols = strs.size
1423
+ until fits_on_line?(strs, cols: cols, offset: MARGIN.length) || cols == 1
1424
+ cols -= 1
1425
+ end
1426
+ widths = col_widths(strs, cols: cols)
1427
+ strs.each_slice(cols) do |ss|
1428
+ @output << ss.map.with_index { |s, i| "#{MARGIN}%-#{widths[i]}s" % s }.join
1429
+ end
1430
+ end
1431
+
1432
+ private
1433
+
1434
+ def fits_on_line?(strs, cols:, offset: 0)
1435
+ width = col_widths(strs, cols: cols).sum + MARGIN.length * (cols - 1)
1436
+ width <= @line_width - offset
1437
+ end
1438
+
1439
+ def col_widths(strs, cols:)
1440
+ cols.times.map do |col|
1441
+ (col...strs.size).step(cols).map do |i|
1442
+ strs[i].length
1443
+ end.max
1444
+ end
1445
+ end
1446
+
1447
+ def screen_width
1448
+ SESSION.width
1449
+ rescue Errno::EINVAL # in `winsize': Invalid argument - <STDIN>
1450
+ 80
1451
+ end
1452
+ end
1453
+ private_constant :Output
1454
+ end
1455
+ end