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,158 @@
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module Parser
4
+ module Ruby
5
+ # Supports {#each} enumeration over a source's tokens, yielding
6
+ # the token and a possible {CodeObjects::Base} associated with the
7
+ # constant or identifier token.
8
+ class TokenResolver
9
+ include Enumerable
10
+ include CodeObjects::NamespaceMapper
11
+
12
+ # Creates a token resolver for given source.
13
+ #
14
+ # @param source [String] the source code to tokenize
15
+ # @param namespace [CodeObjects::Base] the object/namespace to resolve from
16
+ def initialize(source, namespace = Registry.root)
17
+ @tokens = RubyParser.parse(source, '(tokenize)').tokens
18
+ raise ParserSyntaxError if @tokens.empty? && !source.empty?
19
+ @default_namespace = namespace
20
+ end
21
+
22
+ # Iterates over each token, yielding the token and a possible code
23
+ # object that is associated with the token.
24
+ #
25
+ # @yieldparam token [Array(Symbol,String,Array(Integer,Integer))] the
26
+ # current token object being iterated
27
+ # @yieldparam object [CodeObjects::Base, nil] the fully qualified code
28
+ # object associated with the current token, or nil if there is no object
29
+ # for the yielded token.
30
+ # @example Yielding code objects
31
+ # r = TokenResolver.new("A::B::C")
32
+ # r.each do |tok, obj|
33
+ # if obj
34
+ # puts "#{tok[0]} -> #{obj.path.inspect}"
35
+ # else
36
+ # puts "No object: #{tok.inspect}"
37
+ # end
38
+ # end
39
+ #
40
+ # # Prints:
41
+ # # :const -> "A"
42
+ # # No object: [:op, "::"]
43
+ # # :const -> "A::B"
44
+ # # No object: [:op, "::"]
45
+ # # :const -> "A::B::C"
46
+ def each
47
+ @states = []
48
+ push_state
49
+ @tokens.each do |token|
50
+ yield_obj = false
51
+
52
+ if skip_group && [:const, :ident, :op, :period].include?(token[0])
53
+ yield token, nil
54
+ next
55
+ else
56
+ self.skip_group = false
57
+ end
58
+
59
+ case token[0]
60
+ when :const
61
+ lookup(token[0], token[1])
62
+ yield_obj = true
63
+ self.last_sep = nil
64
+ when :ident
65
+ lookup(token[0], token[1])
66
+ yield_obj = true
67
+ self.last_sep = nil
68
+ when :op, :period
69
+ self.last_sep = token[1]
70
+ unless CodeObjects.types_for_separator(token[1])
71
+ self.object = nil
72
+ self.last_sep = nil
73
+ end
74
+ when :lparen
75
+ push_state
76
+ when :rparen
77
+ pop_state
78
+ else
79
+ self.object = nil
80
+ end
81
+
82
+ yield token, (yield_obj ? object : nil)
83
+
84
+ if next_object
85
+ self.object = next_object
86
+ self.next_object = nil
87
+ end
88
+ self.skip_group = true if yield_obj && object.nil?
89
+ end
90
+ end
91
+
92
+ def self.state_attr(*attrs)
93
+ attrs.each do |attr|
94
+ define_method(attr) { @states.last[attr.to_sym] }
95
+ define_method("#{attr}=") {|v| @states.last[attr.to_sym] = v }
96
+ protected attr, :"#{attr}="
97
+ end
98
+ end
99
+
100
+ private
101
+
102
+ def push_state
103
+ @states.push :object => nil, :skip_group => false, :last_sep => nil
104
+ end
105
+
106
+ def pop_state
107
+ @states.pop
108
+ end
109
+
110
+ state_attr :object, :next_object, :skip_group, :last_sep
111
+
112
+ def lookup(toktype, name)
113
+ types = object_resolved_types
114
+ return self.object = nil if types.empty?
115
+
116
+ if toktype == :const
117
+ types.any? do |type|
118
+ prefix = type ? type.path : ""
119
+ prefix += last_sep.to_s if separators.include?(last_sep.to_s)
120
+ self.object = Registry.resolve(@default_namespace, "#{prefix}#{name}", true)
121
+ end
122
+ else # ident
123
+ types.any? do |type|
124
+ obj = Registry.resolve(type, name, true)
125
+ if obj.nil? && name == "new"
126
+ obj = Registry.resolve(object, "#initialize", true)
127
+ self.next_object = object if obj.nil?
128
+ end
129
+ self.object = obj
130
+ end
131
+ end
132
+ end
133
+
134
+ def object_resolved_types(obj = object)
135
+ return [obj] unless obj.is_a?(CodeObjects::MethodObject)
136
+
137
+ resolved_types = []
138
+ tags = obj.tags(:return)
139
+ tags += obj.tags(:overload).map {|o| o.tags(:return) }.flatten
140
+ tags.each do |tag|
141
+ next if tag.types.nil?
142
+ tag.types.each do |type|
143
+ type = type.sub(/<.+>/, '')
144
+ if type == "self"
145
+ resolved_types << obj.parent
146
+ else
147
+ type_obj = Registry.resolve(obj, type, true)
148
+ resolved_types << type_obj if type_obj
149
+ end
150
+ end
151
+ end
152
+
153
+ resolved_types
154
+ end
155
+ end
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,526 @@
1
+ # frozen_string_literal: true
2
+ require 'stringio'
3
+
4
+ module YARD
5
+ module Parser
6
+ # Raised when an object is recognized but cannot be documented. This
7
+ # generally occurs when the Ruby syntax used to declare an object is
8
+ # too dynamic in nature.
9
+ class UndocumentableError < RuntimeError; end
10
+
11
+ # Raised when the parser sees a Ruby syntax error
12
+ class ParserSyntaxError < UndocumentableError; end
13
+
14
+ # Responsible for parsing a list of files in order. The
15
+ # {#parse} method of this class can be called from the
16
+ # {SourceParser#globals} globals state list to re-enter
17
+ # parsing for the remainder of files in the list recursively.
18
+ #
19
+ # @see Processor#parse_remaining_files
20
+ class OrderedParser
21
+ # @return [Array<String>] the list of remaining files to parse
22
+ attr_accessor :files
23
+
24
+ # Creates a new OrderedParser with the global state and a list
25
+ # of files to parse.
26
+ #
27
+ # @note OrderedParser sets itself as the +ordered_parser+ key on
28
+ # global_state for later use in {Handlers::Processor}.
29
+ # @param [OpenStruct] global_state a structure containing all global
30
+ # state during parsing
31
+ # @param [Array<String>] files the list of files to parse
32
+ def initialize(global_state, files)
33
+ @global_state = global_state
34
+ @files = files.dup
35
+ @global_state.ordered_parser = self
36
+ end
37
+
38
+ # Parses the remainder of the {#files} list.
39
+ #
40
+ # @see Processor#parse_remaining_files
41
+ def parse
42
+ until files.empty?
43
+ file = files.shift
44
+ log.capture("Parsing #{file}") do
45
+ SourceParser.new(SourceParser.parser_type, @global_state).parse(file)
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ # Responsible for parsing a source file into the namespace. Parsing
52
+ # also invokes handlers to process the parsed statements and generate
53
+ # any code objects that may be recognized.
54
+ #
55
+ # == Custom Parsers
56
+ # SourceParser allows custom parsers to be registered and called when
57
+ # a certain filetype is recognized. To register a parser and hook it
58
+ # up to a set of file extensions, call {register_parser_type}
59
+ #
60
+ # @see register_parser_type
61
+ # @see Handlers::Base
62
+ # @see CodeObjects::Base
63
+ class SourceParser
64
+ SHEBANG_LINE = /\A\s*#!\S+/
65
+ ENCODING_LINE = %r{\A(?:\s*#*!.*\r?\n)?\s*(?:#+|/\*+|//+).*coding\s*[:=]{1,2}\s*([a-z\d_\-]+)}i
66
+ FROZEN_STRING_LINE = /frozen(-|_)string(-|_)literal:\s+(true|false)/i
67
+
68
+ # The default glob of files to be parsed.
69
+ # @since 0.9.0
70
+ DEFAULT_PATH_GLOB = ["{lib,app}/**/*.{rb,rbs}", "sig/**/*.rbs", "ext/**/*.{c,cc,cxx,cpp,rb}"]
71
+
72
+ # Byte order marks for various encodings
73
+ # @since 0.7.0
74
+ ENCODING_BYTE_ORDER_MARKS = {
75
+ 'utf-8' => String.new("\xEF\xBB\xBF"),
76
+ # Not yet supported
77
+ # 'utf-16be' => "\xFE\xFF",
78
+ # 'utf-16le' => "\xFF\xFE",
79
+ # 'utf-32be' => "\x00\x00\xFF\xFE",
80
+ # 'utf-32le' => "\xFF\xFE",
81
+ }
82
+
83
+ class << self
84
+ # @return [Symbol] the default parser type (defaults to :ruby)
85
+ attr_reader :parser_type
86
+
87
+ def parser_type=(value)
88
+ @parser_type = validated_parser_type(value)
89
+ end
90
+
91
+ # Parses a path or set of paths
92
+ #
93
+ # @param [String, Array<String>] paths a path, glob, or list of paths to
94
+ # parse
95
+ # @param [Array<String, Regexp>] excluded a list of excluded path matchers
96
+ # @param [Fixnum] level the logger level to use during parsing. See
97
+ # {YARD::Logger}
98
+ # @return [void]
99
+ def parse(paths = DEFAULT_PATH_GLOB, excluded = [], level = log.level)
100
+ log.debug("Parsing #{paths.inspect} with `#{parser_type}` parser")
101
+ excluded = excluded.map do |path|
102
+ case path
103
+ when Regexp; path
104
+ else Regexp.new(path.to_s, Regexp::IGNORECASE)
105
+ end
106
+ end
107
+ files = [paths].flatten.
108
+ map {|p| File.directory?(p) ? "#{p}/**/*.{rb,rbs,c,cc,cxx,cpp}" : p }.
109
+ map {|p| p.include?("*") ? Dir[p].sort_by {|d| [d.length, d] } : p }.flatten.
110
+ reject {|p| !File.file?(p) || excluded.any? {|re| p =~ re } }.
111
+ map {|p| p.encoding == Encoding.default_external ? p : p.dup.force_encoding(Encoding.default_external) }
112
+
113
+ log.enter_level(level) do
114
+ parse_in_order(*files.uniq)
115
+ end
116
+ end
117
+
118
+ # Parses a string +content+
119
+ #
120
+ # @param [String] content the block of code to parse
121
+ # @param [Symbol] ptype the parser type to use. See {parser_type}.
122
+ # @return the parser object that was used to parse +content+
123
+ def parse_string(content, ptype = parser_type)
124
+ new(ptype).parse(StringIO.new(content))
125
+ end
126
+
127
+ # Tokenizes but does not parse the block of code
128
+ #
129
+ # @param [String] content the block of code to tokenize
130
+ # @param [Symbol] ptype the parser type to use. See {parser_type}.
131
+ # @return [Array] a list of tokens
132
+ def tokenize(content, ptype = parser_type)
133
+ new(ptype).tokenize(content)
134
+ end
135
+
136
+ # Registers a new parser type.
137
+ #
138
+ # @example Registering a parser for "java" files
139
+ # SourceParser.register_parser_type :java, JavaParser, 'java'
140
+ # @param [Symbol] type a symbolic name for the parser type
141
+ # @param [Base] parser_klass a class that implements parsing and tokenization
142
+ # @param [Array<String>, String, Regexp] extensions a list of extensions or a
143
+ # regex to match against the file extension
144
+ # @return [void]
145
+ # @see Parser::Base
146
+ def register_parser_type(type, parser_klass, extensions = nil)
147
+ unless Base > parser_klass
148
+ raise ArgumentError, "expecting parser_klass to be a subclass of YARD::Parser::Base"
149
+ end
150
+ parser_type_extensions[type.to_sym] = extensions if extensions
151
+ parser_types[type.to_sym] = parser_klass
152
+ end
153
+
154
+ # @return [Hash{Symbol=>Object}] a list of registered parser types
155
+ # @private
156
+ # @since 0.5.6
157
+ def parser_types; @@parser_types ||= {} end
158
+ def parser_types=(value) @@parser_types = value end
159
+
160
+ # @return [Hash] a list of registered parser type extensions
161
+ # @private
162
+ # @since 0.5.6
163
+ def parser_type_extensions; @@parser_type_extensions ||= {} end
164
+ def parser_type_extensions=(value) @@parser_type_extensions = value end
165
+
166
+ # Finds a parser type that is registered for the extension. If no
167
+ # type is found, the default Ruby type is returned.
168
+ #
169
+ # @return [Symbol] the parser type to be used for the extension
170
+ # @since 0.5.6
171
+ def parser_type_for_extension(extension)
172
+ type = parser_type_extensions.find do |_t, exts|
173
+ [exts].flatten.any? {|ext| ext === extension }
174
+ end
175
+ validated_parser_type(type ? type.first : :ruby)
176
+ end
177
+
178
+ # Returns the validated parser type. Basically, enforces that :ruby
179
+ # type is never set if the Ripper library is not available
180
+ #
181
+ # @param [Symbol] type the parser type to set
182
+ # @return [Symbol] the validated parser type
183
+ # @private
184
+ def validated_parser_type(type)
185
+ !defined?(::Ripper) && type == :ruby ? :ruby18 : type
186
+ end
187
+
188
+ # @group Parser Callbacks
189
+
190
+ # Registers a callback to be called before a list of files is parsed
191
+ # via {parse}. The block passed to this method will be called on
192
+ # subsequent parse calls.
193
+ #
194
+ # @example Installing a simple callback
195
+ # SourceParser.before_parse_list do |files, globals|
196
+ # puts "Starting to parse..."
197
+ # end
198
+ # YARD.parse('lib/**/*.rb')
199
+ # # prints "Starting to parse..."
200
+ #
201
+ # @example Setting global state
202
+ # SourceParser.before_parse_list do |files, globals|
203
+ # globals.method_count = 0
204
+ # end
205
+ # SourceParser.after_parse_list do |files, globals|
206
+ # puts "Found #{globals.method_count} methods"
207
+ # end
208
+ # class MyCountHandler < Handlers::Ruby::Base
209
+ # handles :def, :defs
210
+ # process { globals.method_count += 1 }
211
+ # end
212
+ # YARD.parse
213
+ # # Prints: "Found 37 methods"
214
+ #
215
+ # @example Using a global callback to cancel parsing
216
+ # SourceParser.before_parse_list do |files, globals|
217
+ # return false if files.include?('foo.rb')
218
+ # end
219
+ #
220
+ # YARD.parse(['foo.rb', 'bar.rb']) # callback cancels this method
221
+ # YARD.parse('bar.rb') # parses normally
222
+ #
223
+ # @yield [files, globals] the yielded block is called once before
224
+ # parsing all files
225
+ # @yieldparam [Array<String>] files the list of files that will be parsed.
226
+ # @yieldparam [OpenStruct] globals a global structure to store arbitrary
227
+ # state for post processing (see {Handlers::Processor#globals})
228
+ # @yieldreturn [Boolean] if the block returns +false+, parsing is
229
+ # cancelled.
230
+ # @return [Proc] the yielded block
231
+ # @see after_parse_list
232
+ # @see before_parse_file
233
+ # @since 0.7.0
234
+ def before_parse_list(&block)
235
+ before_parse_list_callbacks << block
236
+ end
237
+
238
+ # Registers a callback to be called after a list of files is parsed
239
+ # via {parse}. The block passed to this method will be called on
240
+ # subsequent parse calls.
241
+ #
242
+ # @example Printing results after parsing occurs
243
+ # SourceParser.after_parse_list do
244
+ # puts "Finished parsing!"
245
+ # end
246
+ # YARD.parse
247
+ # # Prints "Finished parsing!" after parsing files
248
+ # @yield [files, globals] the yielded block is called once before
249
+ # parsing all files
250
+ # @yieldparam [Array<String>] files the list of files that will be parsed.
251
+ # @yieldparam [OpenStruct] globals a global structure to store arbitrary
252
+ # state for post processing (see {Handlers::Processor#globals})
253
+ # @yieldreturn [void] the return value for the block is ignored.
254
+ # @return [Proc] the yielded block
255
+ # @see before_parse_list
256
+ # @see before_parse_file
257
+ # @since 0.7.0
258
+ def after_parse_list(&block)
259
+ after_parse_list_callbacks << block
260
+ end
261
+
262
+ # Registers a callback to be called before an individual file is parsed.
263
+ # The block passed to this method will be called on subsequent parse
264
+ # calls.
265
+ #
266
+ # To register a callback that is called before the entire list of files
267
+ # is processed, see {before_parse_list}.
268
+ #
269
+ # @example Installing a simple callback
270
+ # SourceParser.before_parse_file do |parser|
271
+ # puts "I'm parsing #{parser.file}"
272
+ # end
273
+ # YARD.parse('lib/**/*.rb')
274
+ # # prints:
275
+ # "I'm parsing lib/foo.rb"
276
+ # "I'm parsing lib/foo_bar.rb"
277
+ # "I'm parsing lib/last_file.rb"
278
+ #
279
+ # @example Cancel parsing of any test_*.rb files
280
+ # SourceParser.before_parse_file do |parser|
281
+ # return false if parser.file =~ /^test_.+\.rb$/
282
+ # end
283
+ #
284
+ # @yield [parser] the yielded block is called once before each
285
+ # file that is parsed. This might happen many times for a single
286
+ # codebase.
287
+ # @yieldparam [SourceParser] parser the parser object that will {#parse}
288
+ # the file.
289
+ # @yieldreturn [Boolean] if the block returns +false+, parsing for
290
+ # the file is cancelled.
291
+ # @return [Proc] the yielded block
292
+ # @see after_parse_file
293
+ # @see before_parse_list
294
+ # @since 0.7.0
295
+ def before_parse_file(&block)
296
+ before_parse_file_callbacks << block
297
+ end
298
+
299
+ # Registers a callback to be called after an individual file is parsed.
300
+ # The block passed to this method will be called on subsequent parse
301
+ # calls.
302
+ #
303
+ # To register a callback that is called after the entire list of files
304
+ # is processed, see {after_parse_list}.
305
+ #
306
+ # @example Printing the length of each file after it is parsed
307
+ # SourceParser.after_parse_file do |parser|
308
+ # puts "#{parser.file} is #{parser.contents.size} characters"
309
+ # end
310
+ # YARD.parse('lib/**/*.rb')
311
+ # # prints:
312
+ # "lib/foo.rb is 1240 characters"
313
+ # "lib/foo_bar.rb is 248 characters"
314
+ #
315
+ # @yield [parser] the yielded block is called once after each file
316
+ # that is parsed. This might happen many times for a single codebase.
317
+ # @yieldparam [SourceParser] parser the parser object that parsed
318
+ # the file.
319
+ # @yieldreturn [void] the return value for the block is ignored.
320
+ # @return [Proc] the yielded block
321
+ # @see before_parse_file
322
+ # @see after_parse_list
323
+ # @since 0.7.0
324
+ def after_parse_file(&block)
325
+ after_parse_file_callbacks << block
326
+ end
327
+
328
+ # @return [Array<Proc>] the list of callbacks to be called before
329
+ # parsing a list of files. Should only be used for testing.
330
+ # @since 0.7.0
331
+ def before_parse_list_callbacks
332
+ @before_parse_list_callbacks ||= []
333
+ end
334
+
335
+ # @return [Array<Proc>] the list of callbacks to be called after
336
+ # parsing a list of files. Should only be used for testing.
337
+ # @since 0.7.0
338
+ def after_parse_list_callbacks
339
+ @after_parse_list_callbacks ||= []
340
+ end
341
+
342
+ # @return [Array<Proc>] the list of callbacks to be called before
343
+ # parsing a file. Should only be used for testing.
344
+ # @since 0.7.0
345
+ def before_parse_file_callbacks
346
+ @before_parse_file_callbacks ||= []
347
+ end
348
+
349
+ # @return [Array<Proc>] the list of callbacks to be called after
350
+ # parsing a file. Should only be used for testing.
351
+ # @since 0.7.0
352
+ def after_parse_file_callbacks
353
+ @after_parse_file_callbacks ||= []
354
+ end
355
+
356
+ # @endgroup
357
+
358
+ private
359
+
360
+ # Parses a list of files in a queue.
361
+ #
362
+ # @param [Array<String>] files a list of files to queue for parsing
363
+ # @return [void]
364
+ def parse_in_order(*files)
365
+ global_state = OpenStruct.new
366
+
367
+ return if before_parse_list_callbacks.any? do |cb|
368
+ cb.call(files, global_state) == false
369
+ end
370
+
371
+ OrderedParser.new(global_state, files).parse
372
+
373
+ after_parse_list_callbacks.each do |cb|
374
+ cb.call(files, global_state)
375
+ end
376
+ end
377
+ end
378
+
379
+ register_parser_type :ruby, Ruby::RubyParser
380
+ register_parser_type :ruby18, Ruby::Legacy::RubyParser
381
+ register_parser_type :c, C::CParser, ['c', 'cc', 'cxx', 'cpp']
382
+ register_parser_type :rbs, RBS::RbsParser, ['rbs']
383
+
384
+ self.parser_type = :ruby
385
+
386
+ # @return [String] the filename being parsed by the parser.
387
+ attr_accessor :file
388
+
389
+ # @return [Symbol] the parser type associated with the parser instance.
390
+ # This should be set by the {#initialize constructor}.
391
+ attr_reader :parser_type
392
+
393
+ # @return [OpenStruct] an open struct containing arbitrary global state
394
+ # shared between files and handlers.
395
+ # @since 0.7.0
396
+ attr_reader :globals
397
+
398
+ # @return [String] the contents of the file to be parsed
399
+ # @since 0.7.0
400
+ attr_reader :contents
401
+
402
+ # @overload initialize(parser_type = SourceParser.parser_type, globals = nil)
403
+ # Creates a new parser object for code parsing with a specific parser type.
404
+ #
405
+ # @param [Symbol] parser_type the parser type to use
406
+ # @param [OpenStruct] globals global state to be re-used across separate source files
407
+ def initialize(parser_type = SourceParser.parser_type, globals1 = nil, globals2 = nil)
408
+ globals = [true, false].include?(globals1) ? globals2 : globals1
409
+ @file = '(stdin)'
410
+ @globals = globals || OpenStruct.new
411
+ self.parser_type = parser_type
412
+ end
413
+
414
+ # The main parser method. This should not be called directly. Instead,
415
+ # use the class methods {parse} and {parse_string}.
416
+ #
417
+ # @param [String, #read, Object] content the source file to parse
418
+ # @return [Object, nil] the parser object used to parse the source
419
+ def parse(content = __FILE__)
420
+ case content
421
+ when String
422
+ @file = File.cleanpath(content)
423
+ content = convert_encoding(String.new(File.read_binary(file)))
424
+ checksum = Registry.checksum_for(content)
425
+ return if Registry.checksums[file] == checksum
426
+
427
+ if Registry.checksums.key?(file)
428
+ log.info "File '#{file}' was modified, re-processing..."
429
+ end
430
+ Registry.checksums[@file] = checksum
431
+ self.parser_type = parser_type_for_filename(file)
432
+ else
433
+ content = content.read if content.respond_to? :read
434
+ end
435
+
436
+ @contents = content
437
+ @parser = parser_class.new(content, file)
438
+
439
+ self.class.before_parse_file_callbacks.each do |cb|
440
+ return @parser if cb.call(self) == false
441
+ end
442
+
443
+ @parser.parse
444
+ post_process
445
+
446
+ self.class.after_parse_file_callbacks.each do |cb|
447
+ cb.call(self)
448
+ end
449
+
450
+ @parser
451
+ rescue ArgumentError, NotImplementedError => e
452
+ log.warn("Cannot parse `#{file}': #{e.message}")
453
+ log.backtrace(e, :warn)
454
+ rescue ParserSyntaxError => e
455
+ log.warn(e.message.capitalize)
456
+ log.backtrace(e, :warn)
457
+ end
458
+
459
+ # Tokenizes but does not parse the block of code using the current {#parser_type}
460
+ #
461
+ # @param [String] content the block of code to tokenize
462
+ # @return [Array] a list of tokens
463
+ def tokenize(content)
464
+ @parser = parser_class.new(content, file)
465
+ @parser.tokenize
466
+ end
467
+
468
+ private
469
+
470
+ # Searches for encoding line and forces encoding
471
+ # @since 0.5.3
472
+ def convert_encoding(content)
473
+ return content unless content.respond_to?(:force_encoding)
474
+ if content =~ ENCODING_LINE
475
+ content.force_encoding($1)
476
+ else
477
+ content.force_encoding('binary')
478
+ ENCODING_BYTE_ORDER_MARKS.each do |encoding, bom|
479
+ bom.force_encoding('binary')
480
+ if content.start_with?(bom)
481
+ return content.sub(bom, '').force_encoding(encoding)
482
+ end
483
+ end
484
+ content.force_encoding('utf-8') # UTF-8 is default encoding
485
+ content
486
+ end
487
+ end
488
+
489
+ # Runs a {Handlers::Processor} object to post process the parsed statements.
490
+ # @return [void]
491
+ def post_process
492
+ return unless @parser.respond_to?(:enumerator)
493
+
494
+ enumerator = @parser.enumerator
495
+ if enumerator
496
+ post = Handlers::Processor.new(self)
497
+ post.process(enumerator)
498
+ end
499
+ end
500
+
501
+ def parser_type=(value)
502
+ @parser_type = self.class.validated_parser_type(value)
503
+ end
504
+
505
+ # Guesses the parser type to use depending on the file extension.
506
+ #
507
+ # @param [String] filename the filename to use to guess the parser type
508
+ # @return [Symbol] a parser type that matches the filename
509
+ def parser_type_for_filename(filename)
510
+ ext = (File.extname(filename)[1..-1] || "").downcase
511
+ type = self.class.parser_type_for_extension(ext)
512
+ parser_type == :ruby18 && type == :ruby ? :ruby18 : type
513
+ end
514
+
515
+ # @since 0.5.6
516
+ def parser_class
517
+ klass = self.class.parser_types[parser_type]
518
+ unless klass
519
+ raise ArgumentError, "invalid parser type '#{parser_type}' or unrecognized file", caller[1..-1]
520
+ end
521
+
522
+ klass
523
+ end
524
+ end
525
+ end
526
+ end