hyper-pro-gem 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. checksums.yaml +7 -0
  2. data/hyper-pro-gem.gemspec +12 -0
  3. data/yard-0.9.44/CHANGELOG.md +983 -0
  4. data/yard-0.9.44/LEGAL +94 -0
  5. data/yard-0.9.44/LICENSE +22 -0
  6. data/yard-0.9.44/README.md +329 -0
  7. data/yard-0.9.44/bin/yard +13 -0
  8. data/yard-0.9.44/bin/yardoc +13 -0
  9. data/yard-0.9.44/bin/yri +13 -0
  10. data/yard-0.9.44/docs/CodeObjects.md +115 -0
  11. data/yard-0.9.44/docs/GettingStarted.md +705 -0
  12. data/yard-0.9.44/docs/Handlers.md +152 -0
  13. data/yard-0.9.44/docs/Overview.md +61 -0
  14. data/yard-0.9.44/docs/Parser.md +166 -0
  15. data/yard-0.9.44/docs/Tags.md +304 -0
  16. data/yard-0.9.44/docs/TagsArch.md +123 -0
  17. data/yard-0.9.44/docs/Templates.md +497 -0
  18. data/yard-0.9.44/docs/WhatsNew.md +1297 -0
  19. data/yard-0.9.44/docs/images/code-objects-class-diagram.png +0 -0
  20. data/yard-0.9.44/docs/images/handlers-class-diagram.png +0 -0
  21. data/yard-0.9.44/docs/images/overview-class-diagram.png +0 -0
  22. data/yard-0.9.44/docs/images/parser-class-diagram.png +0 -0
  23. data/yard-0.9.44/docs/images/tags-class-diagram.png +0 -0
  24. data/yard-0.9.44/docs/templates/default/fulldoc/html/full_list_tag.erb +9 -0
  25. data/yard-0.9.44/docs/templates/default/fulldoc/html/setup.rb +6 -0
  26. data/yard-0.9.44/docs/templates/default/layout/html/setup.rb +9 -0
  27. data/yard-0.9.44/docs/templates/default/layout/html/tag_list.erb +11 -0
  28. data/yard-0.9.44/docs/templates/default/yard_tags/html/list.erb +18 -0
  29. data/yard-0.9.44/docs/templates/default/yard_tags/html/setup.rb +26 -0
  30. data/yard-0.9.44/docs/templates/plugin.rb +70 -0
  31. data/yard-0.9.44/lib/rubygems_plugin.rb +9 -0
  32. data/yard-0.9.44/lib/yard/autoload.rb +328 -0
  33. data/yard-0.9.44/lib/yard/cli/command.rb +85 -0
  34. data/yard-0.9.44/lib/yard/cli/command_parser.rb +93 -0
  35. data/yard-0.9.44/lib/yard/cli/config.rb +198 -0
  36. data/yard-0.9.44/lib/yard/cli/diff.rb +278 -0
  37. data/yard-0.9.44/lib/yard/cli/display.rb +69 -0
  38. data/yard-0.9.44/lib/yard/cli/gems.rb +84 -0
  39. data/yard-0.9.44/lib/yard/cli/graph.rb +125 -0
  40. data/yard-0.9.44/lib/yard/cli/help.rb +20 -0
  41. data/yard-0.9.44/lib/yard/cli/i18n.rb +70 -0
  42. data/yard-0.9.44/lib/yard/cli/list.rb +23 -0
  43. data/yard-0.9.44/lib/yard/cli/markup_types.rb +32 -0
  44. data/yard-0.9.44/lib/yard/cli/server.rb +266 -0
  45. data/yard-0.9.44/lib/yard/cli/stats.rb +234 -0
  46. data/yard-0.9.44/lib/yard/cli/yardoc.rb +791 -0
  47. data/yard-0.9.44/lib/yard/cli/yardopts_command.rb +110 -0
  48. data/yard-0.9.44/lib/yard/cli/yri.rb +215 -0
  49. data/yard-0.9.44/lib/yard/code_objects/base.rb +626 -0
  50. data/yard-0.9.44/lib/yard/code_objects/class_object.rb +146 -0
  51. data/yard-0.9.44/lib/yard/code_objects/class_variable_object.rb +11 -0
  52. data/yard-0.9.44/lib/yard/code_objects/constant_object.rb +16 -0
  53. data/yard-0.9.44/lib/yard/code_objects/extended_method_object.rb +24 -0
  54. data/yard-0.9.44/lib/yard/code_objects/extra_file_object.rb +135 -0
  55. data/yard-0.9.44/lib/yard/code_objects/macro_object.rb +171 -0
  56. data/yard-0.9.44/lib/yard/code_objects/method_object.rb +196 -0
  57. data/yard-0.9.44/lib/yard/code_objects/module_object.rb +21 -0
  58. data/yard-0.9.44/lib/yard/code_objects/namespace_mapper.rb +141 -0
  59. data/yard-0.9.44/lib/yard/code_objects/namespace_object.rb +200 -0
  60. data/yard-0.9.44/lib/yard/code_objects/proxy.rb +245 -0
  61. data/yard-0.9.44/lib/yard/code_objects/root_object.rb +19 -0
  62. data/yard-0.9.44/lib/yard/config.rb +274 -0
  63. data/yard-0.9.44/lib/yard/core_ext/array.rb +16 -0
  64. data/yard-0.9.44/lib/yard/core_ext/file.rb +69 -0
  65. data/yard-0.9.44/lib/yard/core_ext/hash.rb +16 -0
  66. data/yard-0.9.44/lib/yard/core_ext/insertion.rb +63 -0
  67. data/yard-0.9.44/lib/yard/core_ext/module.rb +11 -0
  68. data/yard-0.9.44/lib/yard/core_ext/string.rb +68 -0
  69. data/yard-0.9.44/lib/yard/core_ext/symbol_hash.rb +75 -0
  70. data/yard-0.9.44/lib/yard/docstring.rb +386 -0
  71. data/yard-0.9.44/lib/yard/docstring_parser.rb +344 -0
  72. data/yard-0.9.44/lib/yard/gem_index.rb +29 -0
  73. data/yard-0.9.44/lib/yard/globals.rb +22 -0
  74. data/yard-0.9.44/lib/yard/handlers/base.rb +617 -0
  75. data/yard-0.9.44/lib/yard/handlers/c/alias_handler.rb +16 -0
  76. data/yard-0.9.44/lib/yard/handlers/c/attribute_handler.rb +13 -0
  77. data/yard-0.9.44/lib/yard/handlers/c/base.rb +164 -0
  78. data/yard-0.9.44/lib/yard/handlers/c/class_handler.rb +27 -0
  79. data/yard-0.9.44/lib/yard/handlers/c/constant_handler.rb +13 -0
  80. data/yard-0.9.44/lib/yard/handlers/c/handler_methods.rb +212 -0
  81. data/yard-0.9.44/lib/yard/handlers/c/init_handler.rb +20 -0
  82. data/yard-0.9.44/lib/yard/handlers/c/method_handler.rb +45 -0
  83. data/yard-0.9.44/lib/yard/handlers/c/mixin_handler.rb +21 -0
  84. data/yard-0.9.44/lib/yard/handlers/c/module_handler.rb +17 -0
  85. data/yard-0.9.44/lib/yard/handlers/c/override_comment_handler.rb +31 -0
  86. data/yard-0.9.44/lib/yard/handlers/c/path_handler.rb +11 -0
  87. data/yard-0.9.44/lib/yard/handlers/c/struct_handler.rb +13 -0
  88. data/yard-0.9.44/lib/yard/handlers/c/symbol_handler.rb +8 -0
  89. data/yard-0.9.44/lib/yard/handlers/common/method_handler.rb +19 -0
  90. data/yard-0.9.44/lib/yard/handlers/processor.rb +200 -0
  91. data/yard-0.9.44/lib/yard/handlers/rbs/attribute_handler.rb +79 -0
  92. data/yard-0.9.44/lib/yard/handlers/rbs/base.rb +38 -0
  93. data/yard-0.9.44/lib/yard/handlers/rbs/constant_handler.rb +18 -0
  94. data/yard-0.9.44/lib/yard/handlers/rbs/method_handler.rb +327 -0
  95. data/yard-0.9.44/lib/yard/handlers/rbs/mixin_handler.rb +20 -0
  96. data/yard-0.9.44/lib/yard/handlers/rbs/namespace_handler.rb +26 -0
  97. data/yard-0.9.44/lib/yard/handlers/ruby/alias_handler.rb +45 -0
  98. data/yard-0.9.44/lib/yard/handlers/ruby/attribute_handler.rb +90 -0
  99. data/yard-0.9.44/lib/yard/handlers/ruby/base.rb +165 -0
  100. data/yard-0.9.44/lib/yard/handlers/ruby/class_condition_handler.rb +92 -0
  101. data/yard-0.9.44/lib/yard/handlers/ruby/class_handler.rb +119 -0
  102. data/yard-0.9.44/lib/yard/handlers/ruby/class_variable_handler.rb +17 -0
  103. data/yard-0.9.44/lib/yard/handlers/ruby/comment_handler.rb +10 -0
  104. data/yard-0.9.44/lib/yard/handlers/ruby/constant_handler.rb +73 -0
  105. data/yard-0.9.44/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -0
  106. data/yard-0.9.44/lib/yard/handlers/ruby/dsl_handler.rb +15 -0
  107. data/yard-0.9.44/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -0
  108. data/yard-0.9.44/lib/yard/handlers/ruby/exception_handler.rb +27 -0
  109. data/yard-0.9.44/lib/yard/handlers/ruby/extend_handler.rb +22 -0
  110. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -0
  111. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -0
  112. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/base.rb +245 -0
  113. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  114. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -0
  115. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -0
  116. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -0
  117. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -0
  118. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -0
  119. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -0
  120. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -0
  121. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -0
  122. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  123. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -0
  124. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -0
  125. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -0
  126. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -0
  127. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/visibility_handler.rb +18 -0
  128. data/yard-0.9.44/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -0
  129. data/yard-0.9.44/lib/yard/handlers/ruby/method_condition_handler.rb +9 -0
  130. data/yard-0.9.44/lib/yard/handlers/ruby/method_handler.rb +104 -0
  131. data/yard-0.9.44/lib/yard/handlers/ruby/mixin_handler.rb +61 -0
  132. data/yard-0.9.44/lib/yard/handlers/ruby/module_function_handler.rb +39 -0
  133. data/yard-0.9.44/lib/yard/handlers/ruby/module_handler.rb +12 -0
  134. data/yard-0.9.44/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -0
  135. data/yard-0.9.44/lib/yard/handlers/ruby/private_constant_handler.rb +43 -0
  136. data/yard-0.9.44/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -0
  137. data/yard-0.9.44/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -0
  138. data/yard-0.9.44/lib/yard/handlers/ruby/visibility_handler.rb +35 -0
  139. data/yard-0.9.44/lib/yard/handlers/ruby/yield_handler.rb +31 -0
  140. data/yard-0.9.44/lib/yard/i18n/locale.rb +67 -0
  141. data/yard-0.9.44/lib/yard/i18n/message.rb +57 -0
  142. data/yard-0.9.44/lib/yard/i18n/messages.rb +56 -0
  143. data/yard-0.9.44/lib/yard/i18n/po_parser.rb +61 -0
  144. data/yard-0.9.44/lib/yard/i18n/pot_generator.rb +290 -0
  145. data/yard-0.9.44/lib/yard/i18n/text.rb +173 -0
  146. data/yard-0.9.44/lib/yard/logging.rb +260 -0
  147. data/yard-0.9.44/lib/yard/open_struct.rb +67 -0
  148. data/yard-0.9.44/lib/yard/options.rb +217 -0
  149. data/yard-0.9.44/lib/yard/parser/base.rb +57 -0
  150. data/yard-0.9.44/lib/yard/parser/c/c_parser.rb +235 -0
  151. data/yard-0.9.44/lib/yard/parser/c/comment_parser.rb +134 -0
  152. data/yard-0.9.44/lib/yard/parser/c/statement.rb +66 -0
  153. data/yard-0.9.44/lib/yard/parser/rbs/rbs_parser.rb +325 -0
  154. data/yard-0.9.44/lib/yard/parser/rbs/statement.rb +75 -0
  155. data/yard-0.9.44/lib/yard/parser/ruby/ast_node.rb +559 -0
  156. data/yard-0.9.44/lib/yard/parser/ruby/legacy/irb/slex.rb +294 -0
  157. data/yard-0.9.44/lib/yard/parser/ruby/legacy/ruby_lex.rb +1360 -0
  158. data/yard-0.9.44/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -0
  159. data/yard-0.9.44/lib/yard/parser/ruby/legacy/statement.rb +68 -0
  160. data/yard-0.9.44/lib/yard/parser/ruby/legacy/statement_list.rb +394 -0
  161. data/yard-0.9.44/lib/yard/parser/ruby/legacy/token_list.rb +74 -0
  162. data/yard-0.9.44/lib/yard/parser/ruby/ruby_parser.rb +792 -0
  163. data/yard-0.9.44/lib/yard/parser/ruby/token_resolver.rb +158 -0
  164. data/yard-0.9.44/lib/yard/parser/source_parser.rb +526 -0
  165. data/yard-0.9.44/lib/yard/rake/yardoc_task.rb +81 -0
  166. data/yard-0.9.44/lib/yard/registry.rb +439 -0
  167. data/yard-0.9.44/lib/yard/registry_resolver.rb +225 -0
  168. data/yard-0.9.44/lib/yard/registry_store.rb +342 -0
  169. data/yard-0.9.44/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/yard-0.9.44/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/yard-0.9.44/lib/yard/rubygems/backports/gem.rb +10 -0
  172. data/yard-0.9.44/lib/yard/rubygems/backports/source_index.rb +365 -0
  173. data/yard-0.9.44/lib/yard/rubygems/backports.rb +10 -0
  174. data/yard-0.9.44/lib/yard/rubygems/doc_manager.rb +90 -0
  175. data/yard-0.9.44/lib/yard/rubygems/hook.rb +197 -0
  176. data/yard-0.9.44/lib/yard/rubygems/specification.rb +50 -0
  177. data/yard-0.9.44/lib/yard/serializers/base.rb +83 -0
  178. data/yard-0.9.44/lib/yard/serializers/file_system_serializer.rb +123 -0
  179. data/yard-0.9.44/lib/yard/serializers/process_serializer.rb +24 -0
  180. data/yard-0.9.44/lib/yard/serializers/stdout_serializer.rb +34 -0
  181. data/yard-0.9.44/lib/yard/serializers/yardoc_serializer.rb +152 -0
  182. data/yard-0.9.44/lib/yard/server/adapter.rb +100 -0
  183. data/yard-0.9.44/lib/yard/server/commands/base.rb +203 -0
  184. data/yard-0.9.44/lib/yard/server/commands/display_file_command.rb +29 -0
  185. data/yard-0.9.44/lib/yard/server/commands/display_object_command.rb +65 -0
  186. data/yard-0.9.44/lib/yard/server/commands/frames_command.rb +16 -0
  187. data/yard-0.9.44/lib/yard/server/commands/library_command.rb +187 -0
  188. data/yard-0.9.44/lib/yard/server/commands/library_index_command.rb +28 -0
  189. data/yard-0.9.44/lib/yard/server/commands/list_command.rb +25 -0
  190. data/yard-0.9.44/lib/yard/server/commands/root_request_command.rb +15 -0
  191. data/yard-0.9.44/lib/yard/server/commands/search_command.rb +79 -0
  192. data/yard-0.9.44/lib/yard/server/commands/static_file_command.rb +23 -0
  193. data/yard-0.9.44/lib/yard/server/commands/static_file_helpers.rb +60 -0
  194. data/yard-0.9.44/lib/yard/server/doc_server_helper.rb +91 -0
  195. data/yard-0.9.44/lib/yard/server/doc_server_serializer.rb +39 -0
  196. data/yard-0.9.44/lib/yard/server/http_utils.rb +512 -0
  197. data/yard-0.9.44/lib/yard/server/library_version.rb +277 -0
  198. data/yard-0.9.44/lib/yard/server/rack_adapter.rb +97 -0
  199. data/yard-0.9.44/lib/yard/server/router.rb +187 -0
  200. data/yard-0.9.44/lib/yard/server/static_caching.rb +77 -0
  201. data/yard-0.9.44/lib/yard/server/templates/default/fulldoc/html/css/custom.css +207 -0
  202. data/yard-0.9.44/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  203. data/yard-0.9.44/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +203 -0
  204. data/yard-0.9.44/lib/yard/server/templates/default/layout/html/breadcrumb.erb +21 -0
  205. data/yard-0.9.44/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -0
  206. data/yard-0.9.44/lib/yard/server/templates/default/layout/html/setup.rb +8 -0
  207. data/yard-0.9.44/lib/yard/server/templates/default/method_details/html/permalink.erb +6 -0
  208. data/yard-0.9.44/lib/yard/server/templates/default/method_details/html/setup.rb +5 -0
  209. data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -0
  210. data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +13 -0
  211. data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -0
  212. data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -0
  213. data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  214. data/yard-0.9.44/lib/yard/server/templates/doc_server/processing/html/processing.erb +58 -0
  215. data/yard-0.9.44/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -0
  216. data/yard-0.9.44/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  217. data/yard-0.9.44/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -0
  218. data/yard-0.9.44/lib/yard/server/webrick_adapter.rb +45 -0
  219. data/yard-0.9.44/lib/yard/server.rb +13 -0
  220. data/yard-0.9.44/lib/yard/tags/default_factory.rb +192 -0
  221. data/yard-0.9.44/lib/yard/tags/default_tag.rb +13 -0
  222. data/yard-0.9.44/lib/yard/tags/directives.rb +631 -0
  223. data/yard-0.9.44/lib/yard/tags/library.rb +633 -0
  224. data/yard-0.9.44/lib/yard/tags/option_tag.rb +13 -0
  225. data/yard-0.9.44/lib/yard/tags/overload_tag.rb +72 -0
  226. data/yard-0.9.44/lib/yard/tags/ref_tag.rb +8 -0
  227. data/yard-0.9.44/lib/yard/tags/ref_tag_list.rb +28 -0
  228. data/yard-0.9.44/lib/yard/tags/tag.rb +72 -0
  229. data/yard-0.9.44/lib/yard/tags/tag_format_error.rb +7 -0
  230. data/yard-0.9.44/lib/yard/tags/types_explainer.rb +288 -0
  231. data/yard-0.9.44/lib/yard/templates/engine.rb +185 -0
  232. data/yard-0.9.44/lib/yard/templates/erb_cache.rb +23 -0
  233. data/yard-0.9.44/lib/yard/templates/helpers/base_helper.rb +215 -0
  234. data/yard-0.9.44/lib/yard/templates/helpers/filter_helper.rb +27 -0
  235. data/yard-0.9.44/lib/yard/templates/helpers/html_helper.rb +688 -0
  236. data/yard-0.9.44/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +83 -0
  237. data/yard-0.9.44/lib/yard/templates/helpers/markup/html_entities.rb +2140 -0
  238. data/yard-0.9.44/lib/yard/templates/helpers/markup/hybrid_markdown.rb +2131 -0
  239. data/yard-0.9.44/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -0
  240. data/yard-0.9.44/lib/yard/templates/helpers/markup/rdoc_markup.rb +112 -0
  241. data/yard-0.9.44/lib/yard/templates/helpers/markup_helper.rb +175 -0
  242. data/yard-0.9.44/lib/yard/templates/helpers/method_helper.rb +77 -0
  243. data/yard-0.9.44/lib/yard/templates/helpers/module_helper.rb +21 -0
  244. data/yard-0.9.44/lib/yard/templates/helpers/text_helper.rb +112 -0
  245. data/yard-0.9.44/lib/yard/templates/helpers/uml_helper.rb +47 -0
  246. data/yard-0.9.44/lib/yard/templates/section.rb +103 -0
  247. data/yard-0.9.44/lib/yard/templates/template.rb +420 -0
  248. data/yard-0.9.44/lib/yard/templates/template_options.rb +91 -0
  249. data/yard-0.9.44/lib/yard/verifier.rb +151 -0
  250. data/yard-0.9.44/lib/yard/version.rb +6 -0
  251. data/yard-0.9.44/lib/yard.rb +75 -0
  252. data/yard-0.9.44/po/ja.po +31108 -0
  253. data/yard-0.9.44/templates/default/class/dot/setup.rb +7 -0
  254. data/yard-0.9.44/templates/default/class/dot/superklass.erb +3 -0
  255. data/yard-0.9.44/templates/default/class/html/constructor_details.erb +8 -0
  256. data/yard-0.9.44/templates/default/class/html/setup.rb +2 -0
  257. data/yard-0.9.44/templates/default/class/html/subclasses.erb +4 -0
  258. data/yard-0.9.44/templates/default/class/setup.rb +36 -0
  259. data/yard-0.9.44/templates/default/class/text/setup.rb +12 -0
  260. data/yard-0.9.44/templates/default/class/text/subclasses.erb +5 -0
  261. data/yard-0.9.44/templates/default/constant/text/header.erb +11 -0
  262. data/yard-0.9.44/templates/default/constant/text/setup.rb +4 -0
  263. data/yard-0.9.44/templates/default/docstring/html/abstract.erb +4 -0
  264. data/yard-0.9.44/templates/default/docstring/html/deprecated.erb +1 -0
  265. data/yard-0.9.44/templates/default/docstring/html/index.erb +5 -0
  266. data/yard-0.9.44/templates/default/docstring/html/note.erb +6 -0
  267. data/yard-0.9.44/templates/default/docstring/html/private.erb +4 -0
  268. data/yard-0.9.44/templates/default/docstring/html/returns_void.erb +1 -0
  269. data/yard-0.9.44/templates/default/docstring/html/text.erb +1 -0
  270. data/yard-0.9.44/templates/default/docstring/html/todo.erb +6 -0
  271. data/yard-0.9.44/templates/default/docstring/setup.rb +52 -0
  272. data/yard-0.9.44/templates/default/docstring/text/abstract.erb +2 -0
  273. data/yard-0.9.44/templates/default/docstring/text/deprecated.erb +2 -0
  274. data/yard-0.9.44/templates/default/docstring/text/index.erb +2 -0
  275. data/yard-0.9.44/templates/default/docstring/text/note.erb +4 -0
  276. data/yard-0.9.44/templates/default/docstring/text/private.erb +2 -0
  277. data/yard-0.9.44/templates/default/docstring/text/returns_void.erb +1 -0
  278. data/yard-0.9.44/templates/default/docstring/text/text.erb +1 -0
  279. data/yard-0.9.44/templates/default/docstring/text/todo.erb +4 -0
  280. data/yard-0.9.44/templates/default/fulldoc/html/css/common.css +1 -0
  281. data/yard-0.9.44/templates/default/fulldoc/html/css/full_list.css +206 -0
  282. data/yard-0.9.44/templates/default/fulldoc/html/css/style.css +1089 -0
  283. data/yard-0.9.44/templates/default/fulldoc/html/frames.erb +22 -0
  284. data/yard-0.9.44/templates/default/fulldoc/html/full_list.erb +40 -0
  285. data/yard-0.9.44/templates/default/fulldoc/html/full_list_class.erb +2 -0
  286. data/yard-0.9.44/templates/default/fulldoc/html/full_list_file.erb +7 -0
  287. data/yard-0.9.44/templates/default/fulldoc/html/full_list_method.erb +10 -0
  288. data/yard-0.9.44/templates/default/fulldoc/html/js/app.js +801 -0
  289. data/yard-0.9.44/templates/default/fulldoc/html/js/full_list.js +334 -0
  290. data/yard-0.9.44/templates/default/fulldoc/html/js/jquery.js +4 -0
  291. data/yard-0.9.44/templates/default/fulldoc/html/setup.rb +249 -0
  292. data/yard-0.9.44/templates/default/layout/dot/header.erb +6 -0
  293. data/yard-0.9.44/templates/default/layout/dot/setup.rb +15 -0
  294. data/yard-0.9.44/templates/default/layout/html/breadcrumb.erb +11 -0
  295. data/yard-0.9.44/templates/default/layout/html/files.erb +11 -0
  296. data/yard-0.9.44/templates/default/layout/html/footer.erb +5 -0
  297. data/yard-0.9.44/templates/default/layout/html/headers.erb +15 -0
  298. data/yard-0.9.44/templates/default/layout/html/index.erb +2 -0
  299. data/yard-0.9.44/templates/default/layout/html/layout.erb +26 -0
  300. data/yard-0.9.44/templates/default/layout/html/listing.erb +4 -0
  301. data/yard-0.9.44/templates/default/layout/html/objects.erb +32 -0
  302. data/yard-0.9.44/templates/default/layout/html/script_setup.erb +4 -0
  303. data/yard-0.9.44/templates/default/layout/html/search.erb +13 -0
  304. data/yard-0.9.44/templates/default/layout/html/setup.rb +89 -0
  305. data/yard-0.9.44/templates/default/method/html/header.erb +17 -0
  306. data/yard-0.9.44/templates/default/method/setup.rb +4 -0
  307. data/yard-0.9.44/templates/default/method/text/header.erb +1 -0
  308. data/yard-0.9.44/templates/default/method_details/html/header.erb +3 -0
  309. data/yard-0.9.44/templates/default/method_details/html/method_signature.erb +25 -0
  310. data/yard-0.9.44/templates/default/method_details/html/source.erb +10 -0
  311. data/yard-0.9.44/templates/default/method_details/setup.rb +11 -0
  312. data/yard-0.9.44/templates/default/method_details/text/header.erb +10 -0
  313. data/yard-0.9.44/templates/default/method_details/text/method_signature.erb +12 -0
  314. data/yard-0.9.44/templates/default/method_details/text/setup.rb +11 -0
  315. data/yard-0.9.44/templates/default/module/dot/child.erb +1 -0
  316. data/yard-0.9.44/templates/default/module/dot/dependencies.erb +3 -0
  317. data/yard-0.9.44/templates/default/module/dot/header.erb +6 -0
  318. data/yard-0.9.44/templates/default/module/dot/info.erb +14 -0
  319. data/yard-0.9.44/templates/default/module/dot/setup.rb +15 -0
  320. data/yard-0.9.44/templates/default/module/html/attribute_details.erb +10 -0
  321. data/yard-0.9.44/templates/default/module/html/attribute_summary.erb +8 -0
  322. data/yard-0.9.44/templates/default/module/html/box_info.erb +43 -0
  323. data/yard-0.9.44/templates/default/module/html/children.erb +8 -0
  324. data/yard-0.9.44/templates/default/module/html/constant_summary.erb +17 -0
  325. data/yard-0.9.44/templates/default/module/html/defines.erb +3 -0
  326. data/yard-0.9.44/templates/default/module/html/header.erb +5 -0
  327. data/yard-0.9.44/templates/default/module/html/inherited_attributes.erb +14 -0
  328. data/yard-0.9.44/templates/default/module/html/inherited_constants.erb +8 -0
  329. data/yard-0.9.44/templates/default/module/html/inherited_methods.erb +20 -0
  330. data/yard-0.9.44/templates/default/module/html/item_summary.erb +40 -0
  331. data/yard-0.9.44/templates/default/module/html/method_details_list.erb +9 -0
  332. data/yard-0.9.44/templates/default/module/html/method_summary.erb +22 -0
  333. data/yard-0.9.44/templates/default/module/html/methodmissing.erb +12 -0
  334. data/yard-0.9.44/templates/default/module/html/pre_docstring.erb +1 -0
  335. data/yard-0.9.44/templates/default/module/setup.rb +187 -0
  336. data/yard-0.9.44/templates/default/module/text/children.erb +10 -0
  337. data/yard-0.9.44/templates/default/module/text/class_meths_list.erb +8 -0
  338. data/yard-0.9.44/templates/default/module/text/extends.erb +8 -0
  339. data/yard-0.9.44/templates/default/module/text/header.erb +7 -0
  340. data/yard-0.9.44/templates/default/module/text/includes.erb +8 -0
  341. data/yard-0.9.44/templates/default/module/text/instance_meths_list.erb +8 -0
  342. data/yard-0.9.44/templates/default/module/text/setup.rb +13 -0
  343. data/yard-0.9.44/templates/default/onefile/html/files.erb +5 -0
  344. data/yard-0.9.44/templates/default/onefile/html/headers.erb +8 -0
  345. data/yard-0.9.44/templates/default/onefile/html/layout.erb +16 -0
  346. data/yard-0.9.44/templates/default/onefile/html/readme.erb +3 -0
  347. data/yard-0.9.44/templates/default/onefile/html/setup.rb +62 -0
  348. data/yard-0.9.44/templates/default/root/dot/child.erb +3 -0
  349. data/yard-0.9.44/templates/default/root/dot/setup.rb +6 -0
  350. data/yard-0.9.44/templates/default/root/html/setup.rb +2 -0
  351. data/yard-0.9.44/templates/default/tags/html/example.erb +11 -0
  352. data/yard-0.9.44/templates/default/tags/html/index.erb +3 -0
  353. data/yard-0.9.44/templates/default/tags/html/option.erb +24 -0
  354. data/yard-0.9.44/templates/default/tags/html/overload.erb +14 -0
  355. data/yard-0.9.44/templates/default/tags/html/see.erb +8 -0
  356. data/yard-0.9.44/templates/default/tags/html/tag.erb +20 -0
  357. data/yard-0.9.44/templates/default/tags/setup.rb +57 -0
  358. data/yard-0.9.44/templates/default/tags/text/example.erb +12 -0
  359. data/yard-0.9.44/templates/default/tags/text/index.erb +1 -0
  360. data/yard-0.9.44/templates/default/tags/text/option.erb +20 -0
  361. data/yard-0.9.44/templates/default/tags/text/overload.erb +19 -0
  362. data/yard-0.9.44/templates/default/tags/text/see.erb +11 -0
  363. data/yard-0.9.44/templates/default/tags/text/tag.erb +13 -0
  364. data/yard-0.9.44/templates/guide/class/html/setup.rb +2 -0
  365. data/yard-0.9.44/templates/guide/docstring/html/setup.rb +2 -0
  366. data/yard-0.9.44/templates/guide/fulldoc/html/css/style.css +358 -0
  367. data/yard-0.9.44/templates/guide/fulldoc/html/js/app.js +61 -0
  368. data/yard-0.9.44/templates/guide/fulldoc/html/setup.rb +74 -0
  369. data/yard-0.9.44/templates/guide/layout/html/layout.erb +78 -0
  370. data/yard-0.9.44/templates/guide/layout/html/setup.rb +25 -0
  371. data/yard-0.9.44/templates/guide/method/html/header.erb +18 -0
  372. data/yard-0.9.44/templates/guide/method/html/setup.rb +22 -0
  373. data/yard-0.9.44/templates/guide/module/html/header.erb +7 -0
  374. data/yard-0.9.44/templates/guide/module/html/method_list.erb +5 -0
  375. data/yard-0.9.44/templates/guide/module/html/setup.rb +27 -0
  376. data/yard-0.9.44/templates/guide/onefile/html/files.erb +4 -0
  377. data/yard-0.9.44/templates/guide/onefile/html/setup.rb +6 -0
  378. data/yard-0.9.44/templates/guide/onefile/html/toc.erb +3 -0
  379. data/yard-0.9.44/templates/guide/tags/html/setup.rb +9 -0
  380. metadata +419 -0
@@ -0,0 +1,792 @@
1
+ # frozen_string_literal: true
2
+ begin require 'ripper'; rescue LoadError; nil end
3
+
4
+ module YARD
5
+ module Parser
6
+ module Ruby
7
+ # Ruby 1.9 parser
8
+ # @!attribute [r] encoding_line
9
+ # @!attribute [r] frozen_string_line
10
+ # @!attribute [r] shebang_line
11
+ # @!attribute [r] enumerator
12
+ class RubyParser < Parser::Base
13
+ def initialize(source, filename)
14
+ @parser = RipperParser.new(source, filename)
15
+ end
16
+
17
+ def parse; @parser.parse end
18
+ def tokenize; @parser.tokens end
19
+ def enumerator; @parser.enumerator end
20
+ def shebang_line; @parser.shebang_line end
21
+ def encoding_line; @parser.encoding_line end
22
+ def frozen_string_line; @parser.frozen_string_line end
23
+ end
24
+
25
+ # Internal parser class
26
+ # @since 0.5.6
27
+ class RipperParser < Ripper
28
+ attr_reader :ast, :charno, :comments, :file, :tokens
29
+ attr_reader :shebang_line, :encoding_line, :frozen_string_line
30
+ alias root ast
31
+
32
+ def initialize(source, filename, *args)
33
+ super
34
+ @last_ns_token = nil
35
+ @file = filename
36
+ @source = source
37
+ @tokens = []
38
+ @comments = {}
39
+ @comments_range = {}
40
+ @comments_flags = {}
41
+ @heredoc_tokens = nil
42
+ @heredoc_state = nil
43
+ @map = {}
44
+ @ns_charno = 0
45
+ @list = []
46
+ @charno = 0
47
+ @shebang_line = nil
48
+ @encoding_line = nil
49
+ @frozen_string_line = nil
50
+ @file_encoding = nil
51
+ @newline = true
52
+ @percent_ary = nil
53
+ end
54
+
55
+ def parse
56
+ @ast = super
57
+ @ast.full_source = @source
58
+ @ast.file = @file
59
+ freeze_tree
60
+ insert_comments
61
+ self
62
+ end
63
+
64
+ def enumerator
65
+ ast.children
66
+ end
67
+
68
+ def file_encoding
69
+ return nil unless defined?(::Encoding)
70
+ return @file_encoding if @file_encoding
71
+ return Encoding.default_internal unless @encoding_line
72
+ match = @encoding_line.match(SourceParser::ENCODING_LINE)
73
+ @file_encoding = match.captures.last if match
74
+ end
75
+
76
+ private
77
+
78
+ MAPPINGS = {
79
+ :BEGIN => "BEGIN",
80
+ :END => "END",
81
+ :alias => "alias",
82
+ :array => :lbracket,
83
+ :arg_paren => :lparen,
84
+ :begin => "begin",
85
+ :blockarg => "&",
86
+ :brace_block => :lbrace,
87
+ :break => "break",
88
+ :case => "case",
89
+ :class => "class",
90
+ :def => "def",
91
+ :defined => "defined?",
92
+ :defs => "def",
93
+ :do_block => "do",
94
+ :else => "else",
95
+ :elsif => "elsif",
96
+ :ensure => "ensure",
97
+ :for => "for",
98
+ :hash => :lbrace,
99
+ :if => "if",
100
+ :lambda => [:tlambda, "lambda"],
101
+ :module => "module",
102
+ :next => "next",
103
+ :paren => :lparen,
104
+ :qwords_literal => :qwords_beg,
105
+ :words_literal => :words_beg,
106
+ :qsymbols_literal => :qsymbols_beg,
107
+ :symbols_literal => :symbols_beg,
108
+ :redo => "redo",
109
+ :regexp_literal => :regexp_beg,
110
+ :rescue => "rescue",
111
+ :rest_param => "*",
112
+ :retry => "retry",
113
+ :return => "return",
114
+ :return0 => "return",
115
+ :sclass => "class",
116
+ :string_embexpr => :embexpr_beg,
117
+ :string_literal => [:tstring_beg, :heredoc_beg],
118
+ :super => "super",
119
+ :symbol => :symbeg,
120
+ :top_const_ref => "::",
121
+ :undef => "undef",
122
+ :unless => "unless",
123
+ :until => "until",
124
+ :when => "when",
125
+ :while => "while",
126
+ :xstring_literal => :backtick,
127
+ :yield => "yield",
128
+ :yield0 => "yield",
129
+ :zsuper => "super"
130
+ }
131
+ REV_MAPPINGS = {}
132
+
133
+ AST_TOKENS = [:CHAR, :backref, :const, :cvar, :gvar, :heredoc_end, :ident,
134
+ :int, :float, :ivar, :label, :period, :regexp_end, :tstring_content, :backtick]
135
+
136
+ COMMENT_SKIP_NODE_TYPES = [
137
+ :comment,
138
+ :void_stmt,
139
+ :list
140
+ ].freeze
141
+
142
+ MAPPINGS.each do |k, v|
143
+ if Array === v
144
+ v.each {|vv| (REV_MAPPINGS[vv] ||= []) << k }
145
+ else
146
+ (REV_MAPPINGS[v] ||= []) << k
147
+ end
148
+ end
149
+
150
+ PARSER_EVENT_TABLE.each do |event, arity|
151
+ node_class = AstNode.node_class_for(event)
152
+
153
+ if arity == 0 && /_new\z/ =~ event.to_s
154
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
155
+ def on_#{event}(*args)
156
+ #{node_class}.new(:list, args, :listchar => charno...charno, :listline => lineno..lineno)
157
+ end
158
+ eof
159
+ elsif /_add(_.+)?\z/ =~ event.to_s
160
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
161
+ begin; undef on_#{event}; rescue NameError; end
162
+ def on_#{event}(list, item)
163
+ list.push(item)
164
+ list
165
+ end
166
+ eof
167
+ elsif MAPPINGS.key?(event)
168
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
169
+ begin; undef on_#{event}; rescue NameError; end
170
+ def on_#{event}(*args)
171
+ visit_event #{node_class}.new(:#{event}, args)
172
+ end
173
+ eof
174
+ else
175
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
176
+ begin; undef on_#{event}; rescue NameError; end
177
+ def on_#{event}(*args)
178
+ #{node_class}.new(:#{event}, args, :listline => lineno..lineno, :listchar => charno...charno)
179
+ end
180
+ eof
181
+ end
182
+ end
183
+
184
+ SCANNER_EVENTS.each do |event|
185
+ ast_token = AST_TOKENS.include?(event)
186
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
187
+ begin; undef on_#{event}; rescue NameError; end
188
+ def on_#{event}(tok)
189
+ visit_ns_token(:#{event}, tok, #{ast_token.inspect})
190
+ end
191
+ eof
192
+ end
193
+
194
+ REV_MAPPINGS.select {|k, _v| k.is_a?(Symbol) }.each do |pair|
195
+ event = pair.first
196
+ ast_token = AST_TOKENS.include?(event)
197
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
198
+ begin; undef on_#{event}; rescue NameError; end
199
+ def on_#{event}(tok)
200
+ (@map[:#{event}] ||= []) << [lineno, charno]
201
+ visit_ns_token(:#{event}, tok, #{ast_token.inspect})
202
+ end
203
+ eof
204
+ end
205
+
206
+ [:kw, :op].each do |event|
207
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
208
+ begin; undef on_#{event}; rescue NameError; end
209
+ def on_#{event}(tok)
210
+ unless @last_ns_token == [:kw, "def"] ||
211
+ (@tokens.last && @tokens.last[0] == :symbeg)
212
+ (@map[tok] ||= []) << [lineno, charno]
213
+ end
214
+ visit_ns_token(:#{event}, tok, true)
215
+ end
216
+ eof
217
+ end
218
+
219
+ [:nl, :ignored_nl].each do |event|
220
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
221
+ begin; undef on_#{event}; rescue NameError; end
222
+ def on_#{event}(tok)
223
+ add_token(:#{event}, tok)
224
+ @newline = true
225
+ @charno += tok ? tok.length : 0
226
+ end
227
+ eof
228
+ end
229
+
230
+ undef on_sp
231
+
232
+ def on_sp(tok)
233
+ add_token(:sp, tok)
234
+ @charno += tok.length
235
+ end
236
+
237
+ def visit_event(node)
238
+ map = @map[MAPPINGS[node.type]]
239
+
240
+ # Pattern matching and `in` syntax creates :case nodes without 'case' tokens,
241
+ # fall back to the first child node.
242
+ if node.type == :case && (!map || map.empty?) && (child_node = node[0])
243
+ lstart = child_node.line_range.first
244
+ sstart = child_node.source_range.first
245
+ else
246
+ lstart, sstart = *(map ? map.pop : [lineno, @ns_charno - 1])
247
+ (@map[:rbrace] ||= []).shift if map && MAPPINGS[node.type] == :lbrace
248
+ end
249
+
250
+ raise "Cannot determine start of node #{node} around #{file}:#{lineno}" if lstart.nil? || sstart.nil?
251
+
252
+ node.source_range = Range.new(sstart, @ns_charno - 1)
253
+ node.line_range = Range.new(lstart, lineno)
254
+ if node.respond_to?(:block)
255
+ sr = node.block.source_range
256
+ lr = node.block.line_range
257
+ node.block.source_range = Range.new(sr.begin, @tokens.last[2][1] - 1)
258
+ node.block.line_range = Range.new(lr.begin, @tokens.last[2][0])
259
+ end
260
+ node
261
+ end
262
+
263
+ def visit_event_arr(node)
264
+ mapping = MAPPINGS[node.type].find {|k| @map[k] && !@map[k].empty? }
265
+ lstart, sstart = *@map[mapping].pop
266
+ node.source_range = Range.new(sstart, @ns_charno - 1)
267
+ node.line_range = Range.new(lstart, lineno)
268
+ node
269
+ end
270
+
271
+ def visit_ns_token(token, data, ast_token = false)
272
+ add_token(token, data)
273
+ ch = charno
274
+
275
+ # For purposes of tracking parsing state, don't treat keywords as such
276
+ # where used as a symbol identifier.
277
+ @last_ns_token = [@last_ns_token && @last_ns_token.first == :symbeg ? :symbol : token, data]
278
+ @charno += data.length
279
+ @ns_charno = charno
280
+ @newline = [:semicolon, :comment, :kw, :op, :lparen, :lbrace].include?(token)
281
+ if ast_token
282
+ AstNode.new(token, [data], :line => lineno..lineno, :char => ch..charno - 1, :token => true)
283
+ end
284
+ end
285
+
286
+ def add_token(token, data)
287
+ if @percent_ary
288
+ if token == :words_sep && data !~ /\s\z/
289
+ rng = @percent_ary.source_range
290
+ rng = Range.new(rng.begin, rng.end.to_i + data.length)
291
+ @percent_ary.source_range = rng
292
+ @tokens << [token, data, [lineno, charno]]
293
+ @percent_ary = nil
294
+ return
295
+ elsif token == :tstring_end && data =~ /\A\s/
296
+ rng = @percent_ary.source_range
297
+ rng = Range.new(rng.begin, rng.end.to_i + data.length)
298
+ @percent_ary.source_range = rng
299
+ @tokens << [token, data, [lineno, charno]]
300
+ @percent_ary = nil
301
+ return
302
+ end
303
+ end
304
+
305
+ if @tokens.last && (@tokens.last[0] == :symbeg ||
306
+ (@tokens.last[0] == :symbol && token.to_s =~ /^tstring/))
307
+ @tokens[-1] = [:symbol, @tokens.last[1] + data, @tokens.last[2]]
308
+ elsif @heredoc_state == :started
309
+ @heredoc_tokens << [token, data, [lineno, charno]]
310
+
311
+ # fix ripper encoding of heredoc bug
312
+ # (see https://bugs.ruby-lang.org/issues/6200)
313
+ data.force_encoding(file_encoding) if file_encoding
314
+
315
+ @heredoc_state = :ended if token == :heredoc_end
316
+ elsif (token == :nl || token == :comment) && @heredoc_state == :ended
317
+ @heredoc_tokens.unshift([token, data, [lineno, charno]])
318
+ @tokens += @heredoc_tokens
319
+ @heredoc_tokens = nil
320
+ @heredoc_state = nil
321
+ else
322
+ @tokens << [token, data, [lineno, charno]]
323
+ if token == :heredoc_beg
324
+ @heredoc_state = :started
325
+ @heredoc_tokens = []
326
+ end
327
+ end
328
+ end
329
+
330
+ undef on_program
331
+ undef on_assoc_new
332
+ undef on_array
333
+ undef on_hash
334
+ undef on_bare_assoc_hash
335
+ undef on_assoclist_from_args
336
+ undef on_aref
337
+ undef on_aref_field
338
+ undef on_lbracket
339
+ undef on_rbracket
340
+ undef on_rbrace
341
+ undef on_string_literal
342
+ undef on_lambda
343
+ undef on_unary
344
+ undef on_string_content
345
+ undef on_rescue
346
+ undef on_void_stmt
347
+ undef on_params
348
+ undef on_label
349
+ undef on_comment
350
+ undef on_embdoc_beg
351
+ undef on_embdoc
352
+ undef on_embdoc_end
353
+ undef on_parse_error
354
+ undef on_bodystmt
355
+ undef on_top_const_ref
356
+ undef on_const_path_ref
357
+ undef on_dyna_symbol
358
+
359
+ def on_program(*args)
360
+ args.first
361
+ end
362
+
363
+ def on_body_stmt(*args)
364
+ args.compact.size == 1 ? args.first : AstNode.new(:list, args)
365
+ end
366
+ alias on_bodystmt on_body_stmt
367
+
368
+ def on_assoc_new(*args)
369
+ AstNode.new(:assoc, args)
370
+ end
371
+
372
+ def on_hash(*args)
373
+ visit_event AstNode.new(:hash, args.first || [])
374
+ end
375
+
376
+ # Ruby 3.0+ pattern matching: braced hash patterns ({key: val} syntax) fire
377
+ # on_lbrace and on_rbrace scanner events. The corresponding parser event is
378
+ # on_hshptn (not on_hash), so we must clean up the brace maps to prevent stale
379
+ # entries from corrupting source ranges of later hash literals and brace blocks.
380
+ # Bare hash patterns (key: val without braces) fire no brace scanner events, so
381
+ # we only clean up when @map[:rbrace] confirms a closing brace was scanned.
382
+ def on_hshptn(*args)
383
+ if (@map[:rbrace] ||= []).any?
384
+ (@map[:lbrace] ||= []).pop
385
+ @map[:rbrace].shift
386
+ end
387
+ AstNode.new(:hshptn, args)
388
+ end
389
+
390
+ def on_bare_assoc_hash(*args)
391
+ AstNode.new(:list, args.first)
392
+ end
393
+
394
+ def on_assoclist_from_args(*args)
395
+ args.first
396
+ end
397
+
398
+ def on_unary(op, val)
399
+ map = @map[op.to_s[0, 1]]
400
+ lstart, sstart = *(map ? map.pop : [lineno, @ns_charno - 1])
401
+ node = AstNode.node_class_for(:unary).new(:unary, [op, val])
402
+ node.source_range = Range.new(sstart, @ns_charno - 1)
403
+ node.line_range = Range.new(lstart, lineno)
404
+ node
405
+ end
406
+
407
+ def on_aref(*args)
408
+ @map[:lbracket].pop
409
+ ll, lc = *@map[:aref].shift
410
+ sr = args.first.source_range.begin..lc
411
+ lr = args.first.line_range.begin..ll
412
+ AstNode.new(:aref, args, :char => sr, :line => lr)
413
+ end
414
+
415
+ def on_aref_field(*args)
416
+ @map[:lbracket].pop
417
+ ll, lc = *@map[:aref].shift
418
+ sr = args.first.source_range.begin..lc
419
+ lr = args.first.line_range.begin..ll
420
+ AstNode.new(:aref_field, args, :char => sr, :line => lr)
421
+ end
422
+
423
+ def on_array(other)
424
+ node = AstNode.node_class_for(:array).new(:array, [other])
425
+ map = @map[MAPPINGS[node.type]] if other.nil? || other.type == :list
426
+ if map && !map.empty?
427
+ lstart, sstart = *map.pop
428
+ node.source_range = Range.new(sstart, @ns_charno - 1)
429
+ node.line_range = Range.new(lstart, lineno)
430
+ else
431
+ sstart = other.source_range.begin
432
+ lstart = other.line_range.begin
433
+ node.source_range = Range.new(sstart, @ns_charno - 1)
434
+ node.line_range = Range.new(lstart, lineno)
435
+ node.source_range = other.source_range
436
+ node.line_range = other.line_range
437
+ end
438
+ node
439
+ end
440
+
441
+ # Ruby 3.0+ pattern matching: array patterns (SomeClass[a, b]) and find patterns
442
+ # (SomeClass[*pre, val, *post]) use [...] brackets, which fire on_lbracket and
443
+ # on_rbracket scanner events. The corresponding parser events are on_aryptn/on_fndptn
444
+ # (not on_aref), so we must clean up the bracket maps to prevent stale entries from
445
+ # corrupting source ranges of later array indexing expressions.
446
+ def on_aryptn(*args)
447
+ (@map[:lbracket] ||= []).pop
448
+ (@map[:aref] ||= []).shift
449
+ # Source range is intentionally not set; no handler is registered for
450
+ # pattern-match nodes, so they produce no documentation output.
451
+ AstNode.new(:aryptn, args)
452
+ end
453
+
454
+ def on_fndptn(*args)
455
+ (@map[:lbracket] ||= []).pop
456
+ (@map[:aref] ||= []).shift
457
+ # Source range is intentionally not set; no handler is registered for
458
+ # pattern-match nodes, so they produce no documentation output.
459
+ AstNode.new(:fndptn, args)
460
+ end
461
+
462
+ def on_lbracket(tok)
463
+ (@map[:lbracket] ||= []) << [lineno, charno]
464
+ visit_ns_token(:lbracket, tok, false)
465
+ end
466
+
467
+ def on_rbracket(tok)
468
+ (@map[:aref] ||= []) << [lineno, charno]
469
+ visit_ns_token(:rbracket, tok, false)
470
+ end
471
+
472
+ # Maintained explicitly (unlike on_lbracket/on_rbracket) so on_hshptn can
473
+ # distinguish braced from bare hash patterns in Ruby 3.0+ pattern matching.
474
+ def on_rbrace(tok)
475
+ (@map[:rbrace] ||= []) << [lineno, charno]
476
+ visit_ns_token(:rbrace, tok, false)
477
+ end
478
+
479
+ def on_dyna_symbol(sym)
480
+ rng = if sym.source_range.to_a.size == 0 # rubocop:disable Style/ZeroLengthPredicate
481
+ (sym.source_range.begin - 3)...sym.source_range.end
482
+ else
483
+ (sym.source_range.begin - 2)..(sym.source_range.end + 1)
484
+ end
485
+ AstNode.new(:dyna_symbol, [sym], :line => lineno..lineno,
486
+ :listline => lineno..lineno, :listchar => rng, :char => rng)
487
+ end
488
+
489
+ def on_top_const_ref(*args)
490
+ type = :top_const_ref
491
+ node = AstNode.node_class_for(type).new(type, args)
492
+ mapping = @map[MAPPINGS[type]]
493
+ extra_op = mapping.last[1] + 2 == charno ? mapping.pop : nil
494
+ lstart, sstart = *mapping.pop
495
+ node.source_range = Range.new(sstart, args.last.source_range.last)
496
+ node.line_range = Range.new(lstart, args.last.line_range.last)
497
+ mapping.push(extra_op) if extra_op
498
+ node
499
+ end
500
+
501
+ def on_const_path_ref(*args)
502
+ ReferenceNode.new(:const_path_ref, args, :listline => lineno..lineno, :listchar => charno..charno)
503
+ end
504
+
505
+ [:if_mod, :unless_mod, :while_mod, :until_mod].each do |kw|
506
+ node_class = AstNode.node_class_for(kw)
507
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
508
+ begin; undef on_#{kw}; rescue NameError; end
509
+ def on_#{kw}(*args)
510
+ mapping = @map[#{kw.to_s.sub(/_mod$/, '').inspect}]
511
+ mapping.pop if mapping
512
+ sr = args.last.source_range.begin..args.first.source_range.end
513
+ lr = args.last.line_range.begin..args.first.line_range.end
514
+ #{node_class}.new(:#{kw}, args, :line => lr, :char => sr)
515
+ end
516
+ eof
517
+ end
518
+
519
+ %w(symbols qsymbols words qwords).each do |kw|
520
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
521
+ begin; undef on_#{kw}_new; rescue NameError; end
522
+ def on_#{kw}_new(*args)
523
+ node = LiteralNode.new(:#{kw}_literal, args)
524
+ @percent_ary = node
525
+ if @map[:#{kw}_beg]
526
+ lstart, sstart = *@map[:#{kw}_beg].pop
527
+ node.source_range = Range.new(sstart, @ns_charno-1)
528
+ node.line_range = Range.new(lstart, lineno)
529
+ end
530
+ node
531
+ end
532
+
533
+ begin; undef on_#{kw}_add; rescue NameError; end
534
+ def on_#{kw}_add(list, item)
535
+ last = @source[@ns_charno,1] == "\n" ? @ns_charno - 1 : @ns_charno
536
+ list.source_range = (list.source_range.begin..last)
537
+ list.line_range = (list.line_range.begin..lineno)
538
+ list.push(item)
539
+ list
540
+ end
541
+ eof
542
+ end
543
+
544
+ def on_string_literal(*args)
545
+ node = visit_event_arr(LiteralNode.new(:string_literal, args))
546
+ if args.size == 1
547
+ r = args[0].source_range
548
+ if node.source_range != Range.new(r.begin - 1, r.end + 1)
549
+ klass = AstNode.node_class_for(node[0].type)
550
+ r = Range.new(node.source_range.begin + 1, node.source_range.end - 1)
551
+ node[0] = klass.new(node[0].type, [@source[r]], :line => node.line_range, :char => r)
552
+ end
553
+ end
554
+ node
555
+ end
556
+
557
+ def on_lambda(*args)
558
+ visit_event_arr AstNode.new(:lambda, args)
559
+ end
560
+
561
+ def on_string_content(*args)
562
+ chr_rng = args.empty? ? charno...charno : charno..charno
563
+ AstNode.new(:string_content, args, :listline => lineno..lineno, :listchar => chr_rng)
564
+ end
565
+
566
+ def on_rescue(exc, *args)
567
+ exc = AstNode.new(:list, exc) if exc
568
+ visit_event AstNode.new(:rescue, [exc, *args])
569
+ end
570
+
571
+ def on_void_stmt
572
+ AstNode.new(:void_stmt, [], :line => lineno..lineno, :char => charno...charno)
573
+ end
574
+
575
+ def on_params(*args)
576
+ args.map! do |arg|
577
+ next arg unless arg.class == Array
578
+
579
+ if arg.first.class == Array
580
+ arg.map! do |sub_arg|
581
+ next sub_arg unless sub_arg.class == Array
582
+ type = sub_arg[0].type == :label ?
583
+ :named_arg : :unnamed_optional_arg
584
+ AstNode.new(type, sub_arg, :listline => lineno..lineno, :listchar => charno..charno)
585
+ end
586
+ end
587
+
588
+ AstNode.new(:list, arg, :listline => lineno..lineno, :listchar => charno..charno)
589
+ end
590
+
591
+ ParameterNode.new(:params, args, :listline => lineno..lineno, :listchar => charno..charno)
592
+ end
593
+
594
+ def on_label(data)
595
+ add_token(:label, data)
596
+ ch = charno
597
+ @charno += data.length
598
+ @ns_charno = charno
599
+ AstNode.new(:label, [data[0...-1]], :line => lineno..lineno, :char => ch..charno - 1, :token => true)
600
+ end
601
+
602
+ def on_comment(comment)
603
+ not_comment = false
604
+ if @last_ns_token.nil? || @last_ns_token.empty?
605
+ if comment =~ SourceParser::SHEBANG_LINE && !@encoding_line
606
+ @shebang_line = comment
607
+ not_comment = true
608
+ elsif comment =~ SourceParser::ENCODING_LINE
609
+ @encoding_line = comment
610
+ not_comment = true
611
+ elsif comment =~ SourceParser::FROZEN_STRING_LINE
612
+ @frozen_string_line = comment
613
+ not_comment = true
614
+ end
615
+ end
616
+
617
+ ch = charno
618
+ visit_ns_token(:comment, comment)
619
+ if not_comment
620
+ @last_ns_token = nil
621
+ return
622
+ end
623
+
624
+ source_range = ch..(charno - 1)
625
+ comment = comment.gsub(/^(\#+)\s{0,1}/, '').chomp
626
+ append_comment = @comments[lineno - 1]
627
+
628
+ hash_flag = $1 == '##' ? true : false
629
+
630
+ if append_comment && @comments_last_column &&
631
+ @comments_last_column == column && comment_starts_line?(ch)
632
+ @comments.delete(lineno - 1)
633
+ @comments_flags[lineno] = @comments_flags[lineno - 1]
634
+ @comments_flags.delete(lineno - 1)
635
+ range = @comments_range.delete(lineno - 1)
636
+ source_range = range.begin..source_range.end
637
+ comment = append_comment + "\n" + comment
638
+ end
639
+
640
+ @comments[lineno] = comment
641
+ @comments_range[lineno] = source_range
642
+ @comments_flags[lineno] = hash_flag unless append_comment
643
+ @comments_last_column = column
644
+ end
645
+
646
+ def on_embdoc_beg(text)
647
+ visit_ns_token(:embdoc_beg, text)
648
+ @embdoc_start = charno - text.length
649
+ @embdoc = String.new("")
650
+ end
651
+
652
+ def on_embdoc(text)
653
+ visit_ns_token(:embdoc, text)
654
+ @embdoc << text
655
+ end
656
+
657
+ def on_embdoc_end(text)
658
+ visit_ns_token(:embdoc_end, text)
659
+ @comments_last_column = nil
660
+ @comments[lineno] = @embdoc
661
+ @comments_range[lineno] = @embdoc_start...charno
662
+ @embdoc_start = nil
663
+ @embdoc = nil
664
+ end
665
+
666
+ def on_parse_error(msg)
667
+ raise ParserSyntaxError, "syntax error in `#{file}`:(#{lineno},#{column}): #{msg}"
668
+ end
669
+ alias compile_error on_parse_error
670
+
671
+ def comment_starts_line?(charno)
672
+ return true if @source[charno] == "\n"
673
+ (charno - 1).downto(0) do |i|
674
+ ch = @source[i]
675
+ break if ch == "\n"
676
+ return false if ch != " " && ch != "\t"
677
+ end
678
+ true
679
+ end
680
+
681
+ def insert_comments
682
+ root.traverse do |node|
683
+ next if COMMENT_SKIP_NODE_TYPES.include?(node.type) || node.parent.type != :list
684
+
685
+ # never attach comments to if/unless mod nodes
686
+ if node.type == :if_mod || node.type == :unless_mod
687
+ node = node.then_block
688
+ end
689
+
690
+ # check upwards from line before node; check node's line at the end
691
+ if (n_l = node.line)
692
+ ((n_l - 1).downto(n_l - 2).to_a + [n_l]).each do |line|
693
+ comment = @comments[line]
694
+ if comment && !comment.empty?
695
+ add_comment(line, node)
696
+ break
697
+ end
698
+ end
699
+ end
700
+
701
+ @comments.keys.each do |line|
702
+ add_comment(line, nil, node) if node.line > line
703
+ end
704
+ end
705
+
706
+ # insert any lone unadded comments before node
707
+ root.traverse do |node|
708
+ next if node.type == :list || node.parent.type != :list
709
+ @comments.keys.each do |line|
710
+ next unless node.line_range.include?(line)
711
+ pick = nil
712
+ node.traverse do |subnode|
713
+ next unless subnode.type == :list
714
+ pick ||= subnode
715
+ next unless subnode.line_range.include?(line)
716
+ pick = subnode
717
+ end
718
+ add_comment(line, nil, pick, true) if pick
719
+ end
720
+ end unless @comments.empty?
721
+
722
+ # Attach comments that fall within an otherwise empty
723
+ # class or module body. Without this step, a comment used
724
+ # solely for directives (like @!method) would be treated as
725
+ # a top-level comment and its directives would not be scoped
726
+ # to the namespace.
727
+ unless @comments.empty?
728
+ root.traverse do |node|
729
+ next unless [:class, :module, :sclass].include?(node.type)
730
+ body = node.children.last
731
+ next unless body && body.type == :list && body.empty?
732
+ @comments.keys.each do |line|
733
+ next unless node.line_range.include?(line)
734
+ add_comment(line, nil, body, true)
735
+ end
736
+ end
737
+ end
738
+
739
+ # insert all remaining comments
740
+ @comments.each do |line, _comment|
741
+ add_comment(line, nil, root, true)
742
+ end
743
+
744
+ @comments = {}
745
+ end
746
+
747
+ def add_comment(line, node = nil, before_node = nil, into = false)
748
+ comment = @comments[line]
749
+ source_range = @comments_range[line]
750
+ if comment && source_range
751
+ source = @source[source_range]
752
+ last_line = source.lines.to_a.last
753
+ return if last_line && last_line =~ /^\s*\#-\s*$/
754
+ end
755
+ line_range = ((line - comment.count("\n"))..line)
756
+ if node.nil?
757
+ node = CommentNode.new(:comment, [comment], :line => line_range, :char => source_range)
758
+ if into
759
+ before_node.push(node)
760
+ before_node.unfreeze
761
+ node.parent = before_node
762
+ elsif before_node
763
+ parent_node = before_node.parent
764
+ idx = parent_node.index(before_node)
765
+ parent_node.insert(idx, node)
766
+ parent_node.unfreeze
767
+ node.parent = parent_node
768
+ end
769
+ end
770
+ node.docstring = comment
771
+ node.docstring_hash_flag = @comments_flags[line]
772
+ node.docstring_range = line_range
773
+ @comments.delete(line)
774
+ @comments_range.delete(line)
775
+ @comments_flags.delete(line)
776
+ end
777
+
778
+ def freeze_tree(node = nil)
779
+ @tokens = @tokens.sort_by {|t| t.last }
780
+ nodes = [node || root]
781
+ until nodes.empty?
782
+ p_node = nodes.shift
783
+ p_node.children.each do |child|
784
+ child.parent = p_node
785
+ nodes << child
786
+ end
787
+ end
788
+ end
789
+ end if defined?(::Ripper)
790
+ end
791
+ end
792
+ end