deg-yard 0.8.7.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 (558) hide show
  1. data/.travis.yml +39 -0
  2. data/.yardopts +25 -0
  3. data/.yardopts_guide +19 -0
  4. data/.yardopts_i18n +22 -0
  5. data/Gemfile +35 -0
  6. data/LEGAL +66 -0
  7. data/LICENSE +22 -0
  8. data/README.md +609 -0
  9. data/Rakefile +66 -0
  10. data/benchmarks/builtins_vs_eval.rb +23 -0
  11. data/benchmarks/concat_vs_join.rb +12 -0
  12. data/benchmarks/erb_vs_erubis.rb +53 -0
  13. data/benchmarks/format_args.rb +46 -0
  14. data/benchmarks/generation.rb +37 -0
  15. data/benchmarks/marshal_vs_dbm.rb +63 -0
  16. data/benchmarks/parsing.rb +46 -0
  17. data/benchmarks/pathname_vs_string.rb +50 -0
  18. data/benchmarks/rdoc_vs_yardoc.rb +10 -0
  19. data/benchmarks/registry_store_types.rb +48 -0
  20. data/benchmarks/ri_vs_yri.rb +18 -0
  21. data/benchmarks/ripper_parser.rb +12 -0
  22. data/benchmarks/splat_vs_flatten.rb +12 -0
  23. data/benchmarks/template_erb.rb +22 -0
  24. data/benchmarks/template_format.rb +6 -0
  25. data/benchmarks/template_profile.rb +17 -0
  26. data/benchmarks/yri_cache.rb +19 -0
  27. data/bin/yard +12 -0
  28. data/bin/yardoc +12 -0
  29. data/bin/yri +12 -0
  30. data/docs/CodeObjects.md +115 -0
  31. data/docs/GettingStarted.md +592 -0
  32. data/docs/Handlers.md +152 -0
  33. data/docs/Overview.md +61 -0
  34. data/docs/Parser.md +191 -0
  35. data/docs/Tags.md +282 -0
  36. data/docs/TagsArch.md +123 -0
  37. data/docs/Templates.md +496 -0
  38. data/docs/WhatsNew.md +1244 -0
  39. data/docs/images/code-objects-class-diagram.png +0 -0
  40. data/docs/images/handlers-class-diagram.png +0 -0
  41. data/docs/images/overview-class-diagram.png +0 -0
  42. data/docs/images/parser-class-diagram.png +0 -0
  43. data/docs/images/tags-class-diagram.png +0 -0
  44. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  45. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  46. data/docs/templates/default/layout/html/setup.rb +8 -0
  47. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  48. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  49. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  50. data/docs/templates/plugin.rb +65 -0
  51. data/lib/rubygems_plugin.rb +4 -0
  52. data/lib/yard/autoload.rb +290 -0
  53. data/lib/yard/cli/command.rb +84 -0
  54. data/lib/yard/cli/command_parser.rb +92 -0
  55. data/lib/yard/cli/config.rb +136 -0
  56. data/lib/yard/cli/diff.rb +270 -0
  57. data/lib/yard/cli/display.rb +68 -0
  58. data/lib/yard/cli/gems.rb +83 -0
  59. data/lib/yard/cli/graph.rb +126 -0
  60. data/lib/yard/cli/help.rb +18 -0
  61. data/lib/yard/cli/i18n.rb +69 -0
  62. data/lib/yard/cli/list.rb +22 -0
  63. data/lib/yard/cli/markup_types.rb +33 -0
  64. data/lib/yard/cli/server.rb +253 -0
  65. data/lib/yard/cli/stats.rb +213 -0
  66. data/lib/yard/cli/yardoc.rb +752 -0
  67. data/lib/yard/cli/yardopts_command.rb +109 -0
  68. data/lib/yard/cli/yri.rb +214 -0
  69. data/lib/yard/code_objects/base.rb +585 -0
  70. data/lib/yard/code_objects/class_object.rb +143 -0
  71. data/lib/yard/code_objects/class_variable_object.rb +8 -0
  72. data/lib/yard/code_objects/constant_object.rb +13 -0
  73. data/lib/yard/code_objects/extended_method_object.rb +23 -0
  74. data/lib/yard/code_objects/extra_file_object.rb +128 -0
  75. data/lib/yard/code_objects/macro_object.rb +172 -0
  76. data/lib/yard/code_objects/method_object.rb +191 -0
  77. data/lib/yard/code_objects/module_object.rb +18 -0
  78. data/lib/yard/code_objects/namespace_object.rb +200 -0
  79. data/lib/yard/code_objects/proxy.rb +258 -0
  80. data/lib/yard/code_objects/root_object.rb +17 -0
  81. data/lib/yard/config.rb +269 -0
  82. data/lib/yard/core_ext/array.rb +15 -0
  83. data/lib/yard/core_ext/file.rb +65 -0
  84. data/lib/yard/core_ext/hash.rb +15 -0
  85. data/lib/yard/core_ext/insertion.rb +60 -0
  86. data/lib/yard/core_ext/module.rb +19 -0
  87. data/lib/yard/core_ext/string.rb +67 -0
  88. data/lib/yard/core_ext/symbol_hash.rb +73 -0
  89. data/lib/yard/docstring.rb +362 -0
  90. data/lib/yard/docstring_parser.rb +321 -0
  91. data/lib/yard/globals.rb +18 -0
  92. data/lib/yard/handlers/base.rb +597 -0
  93. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  94. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  95. data/lib/yard/handlers/c/base.rb +110 -0
  96. data/lib/yard/handlers/c/class_handler.rb +26 -0
  97. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  98. data/lib/yard/handlers/c/handler_methods.rb +166 -0
  99. data/lib/yard/handlers/c/init_handler.rb +18 -0
  100. data/lib/yard/handlers/c/method_handler.rb +35 -0
  101. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  102. data/lib/yard/handlers/c/module_handler.rb +16 -0
  103. data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
  104. data/lib/yard/handlers/c/path_handler.rb +10 -0
  105. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  106. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  107. data/lib/yard/handlers/processor.rb +201 -0
  108. data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
  109. data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
  110. data/lib/yard/handlers/ruby/base.rb +164 -0
  111. data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
  112. data/lib/yard/handlers/ruby/class_handler.rb +121 -0
  113. data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  114. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  115. data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  116. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  117. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
  118. data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  119. data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  120. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
  121. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
  122. data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
  123. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  124. data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
  125. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  126. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  127. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  128. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  129. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  130. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  131. data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
  132. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  133. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  134. data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  139. data/lib/yard/handlers/ruby/method_handler.rb +92 -0
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  142. data/lib/yard/handlers/ruby/module_handler.rb +11 -0
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  146. data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  147. data/lib/yard/i18n/locale.rb +74 -0
  148. data/lib/yard/i18n/message.rb +56 -0
  149. data/lib/yard/i18n/messages.rb +55 -0
  150. data/lib/yard/i18n/pot_generator.rb +280 -0
  151. data/lib/yard/i18n/text.rb +173 -0
  152. data/lib/yard/logging.rb +190 -0
  153. data/lib/yard/options.rb +216 -0
  154. data/lib/yard/parser/base.rb +56 -0
  155. data/lib/yard/parser/c/c_parser.rb +231 -0
  156. data/lib/yard/parser/c/comment_parser.rb +131 -0
  157. data/lib/yard/parser/c/statement.rb +63 -0
  158. data/lib/yard/parser/ruby/ast_node.rb +496 -0
  159. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
  160. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
  161. data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
  162. data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
  163. data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
  164. data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
  165. data/lib/yard/parser/source_parser.rb +517 -0
  166. data/lib/yard/rake/yardoc_task.rb +74 -0
  167. data/lib/yard/registry.rb +438 -0
  168. data/lib/yard/registry_store.rb +319 -0
  169. data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/lib/yard/rubygems/backports/gem.rb +9 -0
  172. data/lib/yard/rubygems/backports/source_index.rb +370 -0
  173. data/lib/yard/rubygems/backports.rb +8 -0
  174. data/lib/yard/rubygems/doc_manager.rb +88 -0
  175. data/lib/yard/rubygems/specification.rb +41 -0
  176. data/lib/yard/serializers/base.rb +80 -0
  177. data/lib/yard/serializers/file_system_serializer.rb +90 -0
  178. data/lib/yard/serializers/process_serializer.rb +24 -0
  179. data/lib/yard/serializers/stdout_serializer.rb +32 -0
  180. data/lib/yard/serializers/yardoc_serializer.rb +124 -0
  181. data/lib/yard/server/adapter.rb +100 -0
  182. data/lib/yard/server/commands/base.rb +192 -0
  183. data/lib/yard/server/commands/display_file_command.rb +24 -0
  184. data/lib/yard/server/commands/display_object_command.rb +58 -0
  185. data/lib/yard/server/commands/frames_command.rb +15 -0
  186. data/lib/yard/server/commands/library_command.rb +148 -0
  187. data/lib/yard/server/commands/library_index_command.rb +24 -0
  188. data/lib/yard/server/commands/list_command.rb +24 -0
  189. data/lib/yard/server/commands/search_command.rb +78 -0
  190. data/lib/yard/server/commands/static_file_command.rb +57 -0
  191. data/lib/yard/server/doc_server_helper.rb +76 -0
  192. data/lib/yard/server/doc_server_serializer.rb +33 -0
  193. data/lib/yard/server/library_version.rb +227 -0
  194. data/lib/yard/server/rack_adapter.rb +88 -0
  195. data/lib/yard/server/router.rb +176 -0
  196. data/lib/yard/server/static_caching.rb +45 -0
  197. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  198. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  199. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  200. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  201. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  202. data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  203. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
  204. data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
  205. data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  206. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  207. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  208. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  209. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  210. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  211. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  212. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  213. data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  214. data/lib/yard/server/webrick_adapter.rb +43 -0
  215. data/lib/yard/server.rb +11 -0
  216. data/lib/yard/tags/default_factory.rb +176 -0
  217. data/lib/yard/tags/default_tag.rb +12 -0
  218. data/lib/yard/tags/directives.rb +599 -0
  219. data/lib/yard/tags/library.rb +630 -0
  220. data/lib/yard/tags/option_tag.rb +12 -0
  221. data/lib/yard/tags/overload_tag.rb +66 -0
  222. data/lib/yard/tags/ref_tag.rb +7 -0
  223. data/lib/yard/tags/ref_tag_list.rb +27 -0
  224. data/lib/yard/tags/tag.rb +57 -0
  225. data/lib/yard/tags/tag_format_error.rb +6 -0
  226. data/lib/yard/templates/engine.rb +185 -0
  227. data/lib/yard/templates/erb_cache.rb +22 -0
  228. data/lib/yard/templates/helpers/base_helper.rb +212 -0
  229. data/lib/yard/templates/helpers/filter_helper.rb +26 -0
  230. data/lib/yard/templates/helpers/html_helper.rb +599 -0
  231. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  232. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
  233. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
  234. data/lib/yard/templates/helpers/markup_helper.rb +169 -0
  235. data/lib/yard/templates/helpers/method_helper.rb +74 -0
  236. data/lib/yard/templates/helpers/module_helper.rb +19 -0
  237. data/lib/yard/templates/helpers/text_helper.rb +95 -0
  238. data/lib/yard/templates/helpers/uml_helper.rb +46 -0
  239. data/lib/yard/templates/section.rb +106 -0
  240. data/lib/yard/templates/template.rb +407 -0
  241. data/lib/yard/templates/template_options.rb +88 -0
  242. data/lib/yard/verifier.rb +148 -0
  243. data/lib/yard/version.rb +3 -0
  244. data/lib/yard.rb +71 -0
  245. data/po/ja.po +31118 -0
  246. data/spec/cli/command_parser_spec.rb +43 -0
  247. data/spec/cli/command_spec.rb +36 -0
  248. data/spec/cli/config_spec.rb +92 -0
  249. data/spec/cli/diff_spec.rb +260 -0
  250. data/spec/cli/display_spec.rb +30 -0
  251. data/spec/cli/gems_spec.rb +81 -0
  252. data/spec/cli/graph_spec.rb +17 -0
  253. data/spec/cli/help_spec.rb +22 -0
  254. data/spec/cli/i18n_spec.rb +111 -0
  255. data/spec/cli/list_spec.rb +8 -0
  256. data/spec/cli/markup_types_spec.rb +22 -0
  257. data/spec/cli/server_spec.rb +327 -0
  258. data/spec/cli/stats_spec.rb +90 -0
  259. data/spec/cli/yardoc_spec.rb +804 -0
  260. data/spec/cli/yri_spec.rb +99 -0
  261. data/spec/code_objects/base_spec.rb +438 -0
  262. data/spec/code_objects/class_object_spec.rb +225 -0
  263. data/spec/code_objects/code_object_list_spec.rb +33 -0
  264. data/spec/code_objects/constants_spec.rb +82 -0
  265. data/spec/code_objects/extra_file_object_spec.rb +147 -0
  266. data/spec/code_objects/macro_object_spec.rb +148 -0
  267. data/spec/code_objects/method_object_spec.rb +175 -0
  268. data/spec/code_objects/module_object_spec.rb +141 -0
  269. data/spec/code_objects/namespace_object_spec.rb +170 -0
  270. data/spec/code_objects/proxy_spec.rb +140 -0
  271. data/spec/code_objects/spec_helper.rb +3 -0
  272. data/spec/config_spec.rb +176 -0
  273. data/spec/core_ext/array_spec.rb +14 -0
  274. data/spec/core_ext/file_spec.rb +68 -0
  275. data/spec/core_ext/hash_spec.rb +14 -0
  276. data/spec/core_ext/insertion_spec.rb +37 -0
  277. data/spec/core_ext/module_spec.rb +15 -0
  278. data/spec/core_ext/string_spec.rb +42 -0
  279. data/spec/core_ext/symbol_hash_spec.rb +86 -0
  280. data/spec/docstring_parser_spec.rb +228 -0
  281. data/spec/docstring_spec.rb +335 -0
  282. data/spec/handlers/alias_handler_spec.rb +80 -0
  283. data/spec/handlers/attribute_handler_spec.rb +94 -0
  284. data/spec/handlers/base_spec.rb +206 -0
  285. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  286. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  287. data/spec/handlers/c/class_handler_spec.rb +63 -0
  288. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  289. data/spec/handlers/c/init_handler_spec.rb +47 -0
  290. data/spec/handlers/c/method_handler_spec.rb +229 -0
  291. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  292. data/spec/handlers/c/module_handler_spec.rb +38 -0
  293. data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
  294. data/spec/handlers/c/path_handler_spec.rb +35 -0
  295. data/spec/handlers/c/spec_helper.rb +13 -0
  296. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  297. data/spec/handlers/class_condition_handler_spec.rb +67 -0
  298. data/spec/handlers/class_handler_spec.rb +246 -0
  299. data/spec/handlers/class_variable_handler_spec.rb +11 -0
  300. data/spec/handlers/constant_handler_spec.rb +64 -0
  301. data/spec/handlers/dsl_handler_spec.rb +197 -0
  302. data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  303. data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  304. data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
  305. data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  306. data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  307. data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  308. data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
  309. data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  310. data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  311. data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  312. data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
  313. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
  314. data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  315. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  316. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  317. data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
  318. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
  319. data/spec/handlers/exception_handler_spec.rb +48 -0
  320. data/spec/handlers/extend_handler_spec.rb +23 -0
  321. data/spec/handlers/legacy_base_spec.rb +128 -0
  322. data/spec/handlers/method_condition_handler_spec.rb +14 -0
  323. data/spec/handlers/method_handler_spec.rb +184 -0
  324. data/spec/handlers/mixin_handler_spec.rb +55 -0
  325. data/spec/handlers/module_function_handler_spec.rb +105 -0
  326. data/spec/handlers/module_handler_spec.rb +34 -0
  327. data/spec/handlers/private_constant_handler_spec.rb +24 -0
  328. data/spec/handlers/processor_spec.rb +34 -0
  329. data/spec/handlers/ruby/base_spec.rb +94 -0
  330. data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
  331. data/spec/handlers/spec_helper.rb +33 -0
  332. data/spec/handlers/visibility_handler_spec.rb +39 -0
  333. data/spec/handlers/yield_handler_spec.rb +51 -0
  334. data/spec/i18n/locale_spec.rb +68 -0
  335. data/spec/i18n/message_spec.rb +52 -0
  336. data/spec/i18n/messages_spec.rb +67 -0
  337. data/spec/i18n/pot_generator_spec.rb +262 -0
  338. data/spec/i18n/text_spec.rb +180 -0
  339. data/spec/logging_spec.rb +35 -0
  340. data/spec/options_spec.rb +171 -0
  341. data/spec/parser/base_spec.rb +24 -0
  342. data/spec/parser/c_parser_spec.rb +171 -0
  343. data/spec/parser/examples/array.c.txt +3887 -0
  344. data/spec/parser/examples/example1.rb.txt +8 -0
  345. data/spec/parser/examples/extrafile.c.txt +8 -0
  346. data/spec/parser/examples/multifile.c.txt +22 -0
  347. data/spec/parser/examples/override.c.txt +424 -0
  348. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  349. data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  350. data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  351. data/spec/parser/ruby/ast_node_spec.rb +33 -0
  352. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  353. data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
  354. data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
  355. data/spec/parser/source_parser_spec.rb +717 -0
  356. data/spec/parser/tag_parsing_spec.rb +18 -0
  357. data/spec/rake/yardoc_task_spec.rb +101 -0
  358. data/spec/registry_spec.rb +393 -0
  359. data/spec/registry_store_spec.rb +315 -0
  360. data/spec/rubygems/doc_manager_spec.rb +112 -0
  361. data/spec/serializers/data/serialized_yardoc/checksums +1 -0
  362. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  363. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  364. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  365. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  366. data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  367. data/spec/serializers/file_system_serializer_spec.rb +124 -0
  368. data/spec/serializers/spec_helper.rb +2 -0
  369. data/spec/serializers/yardoc_serializer_spec.rb +46 -0
  370. data/spec/server/adapter_spec.rb +38 -0
  371. data/spec/server/commands/base_spec.rb +87 -0
  372. data/spec/server/commands/library_command_spec.rb +39 -0
  373. data/spec/server/commands/static_file_command_spec.rb +84 -0
  374. data/spec/server/doc_server_helper_spec.rb +53 -0
  375. data/spec/server/doc_server_serializer_spec.rb +45 -0
  376. data/spec/server/rack_adapter_spec.rb +20 -0
  377. data/spec/server/router_spec.rb +122 -0
  378. data/spec/server/spec_helper.rb +17 -0
  379. data/spec/server/static_caching_spec.rb +39 -0
  380. data/spec/server/webrick_servlet_spec.rb +20 -0
  381. data/spec/server_spec.rb +10 -0
  382. data/spec/spec_helper.rb +128 -0
  383. data/spec/tags/default_factory_spec.rb +152 -0
  384. data/spec/tags/default_tag_spec.rb +11 -0
  385. data/spec/tags/directives_spec.rb +453 -0
  386. data/spec/tags/library_spec.rb +34 -0
  387. data/spec/tags/overload_tag_spec.rb +53 -0
  388. data/spec/tags/ref_tag_list_spec.rb +53 -0
  389. data/spec/templates/class_spec.rb +44 -0
  390. data/spec/templates/constant_spec.rb +40 -0
  391. data/spec/templates/engine_spec.rb +121 -0
  392. data/spec/templates/examples/class001.html +280 -0
  393. data/spec/templates/examples/class001.txt +36 -0
  394. data/spec/templates/examples/class002.html +35 -0
  395. data/spec/templates/examples/constant001.txt +25 -0
  396. data/spec/templates/examples/constant002.txt +7 -0
  397. data/spec/templates/examples/constant003.txt +11 -0
  398. data/spec/templates/examples/method001.html +130 -0
  399. data/spec/templates/examples/method001.txt +35 -0
  400. data/spec/templates/examples/method002.html +86 -0
  401. data/spec/templates/examples/method002.txt +20 -0
  402. data/spec/templates/examples/method003.html +159 -0
  403. data/spec/templates/examples/method003.txt +45 -0
  404. data/spec/templates/examples/method004.html +44 -0
  405. data/spec/templates/examples/method004.txt +10 -0
  406. data/spec/templates/examples/method005.html +99 -0
  407. data/spec/templates/examples/method005.txt +33 -0
  408. data/spec/templates/examples/module001.dot +33 -0
  409. data/spec/templates/examples/module001.html +825 -0
  410. data/spec/templates/examples/module001.txt +33 -0
  411. data/spec/templates/examples/module002.html +318 -0
  412. data/spec/templates/examples/module003.html +185 -0
  413. data/spec/templates/examples/module004.html +387 -0
  414. data/spec/templates/examples/tag001.txt +82 -0
  415. data/spec/templates/helpers/base_helper_spec.rb +175 -0
  416. data/spec/templates/helpers/html_helper_spec.rb +612 -0
  417. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  418. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
  419. data/spec/templates/helpers/markup_helper_spec.rb +135 -0
  420. data/spec/templates/helpers/method_helper_spec.rb +82 -0
  421. data/spec/templates/helpers/shared_signature_examples.rb +123 -0
  422. data/spec/templates/helpers/text_helper_spec.rb +44 -0
  423. data/spec/templates/method_spec.rb +102 -0
  424. data/spec/templates/module_spec.rb +181 -0
  425. data/spec/templates/onefile_spec.rb +64 -0
  426. data/spec/templates/section_spec.rb +146 -0
  427. data/spec/templates/spec_helper.rb +73 -0
  428. data/spec/templates/tag_spec.rb +51 -0
  429. data/spec/templates/template_spec.rb +409 -0
  430. data/spec/verifier_spec.rb +106 -0
  431. data/templates/default/class/dot/setup.rb +6 -0
  432. data/templates/default/class/dot/superklass.erb +3 -0
  433. data/templates/default/class/html/constructor_details.erb +8 -0
  434. data/templates/default/class/html/setup.rb +1 -0
  435. data/templates/default/class/html/subclasses.erb +4 -0
  436. data/templates/default/class/setup.rb +36 -0
  437. data/templates/default/class/text/setup.rb +11 -0
  438. data/templates/default/class/text/subclasses.erb +5 -0
  439. data/templates/default/constant/text/header.erb +11 -0
  440. data/templates/default/constant/text/setup.rb +3 -0
  441. data/templates/default/docstring/html/abstract.erb +4 -0
  442. data/templates/default/docstring/html/deprecated.erb +1 -0
  443. data/templates/default/docstring/html/index.erb +5 -0
  444. data/templates/default/docstring/html/note.erb +6 -0
  445. data/templates/default/docstring/html/private.erb +4 -0
  446. data/templates/default/docstring/html/returns_void.erb +1 -0
  447. data/templates/default/docstring/html/text.erb +1 -0
  448. data/templates/default/docstring/html/todo.erb +6 -0
  449. data/templates/default/docstring/setup.rb +51 -0
  450. data/templates/default/docstring/text/abstract.erb +2 -0
  451. data/templates/default/docstring/text/deprecated.erb +2 -0
  452. data/templates/default/docstring/text/index.erb +2 -0
  453. data/templates/default/docstring/text/note.erb +4 -0
  454. data/templates/default/docstring/text/private.erb +2 -0
  455. data/templates/default/docstring/text/returns_void.erb +1 -0
  456. data/templates/default/docstring/text/text.erb +1 -0
  457. data/templates/default/docstring/text/todo.erb +4 -0
  458. data/templates/default/fulldoc/html/css/common.css +1 -0
  459. data/templates/default/fulldoc/html/css/full_list.css +57 -0
  460. data/templates/default/fulldoc/html/css/style.css +338 -0
  461. data/templates/default/fulldoc/html/frames.erb +28 -0
  462. data/templates/default/fulldoc/html/full_list.erb +40 -0
  463. data/templates/default/fulldoc/html/full_list_class.erb +2 -0
  464. data/templates/default/fulldoc/html/full_list_file.erb +5 -0
  465. data/templates/default/fulldoc/html/full_list_method.erb +8 -0
  466. data/templates/default/fulldoc/html/js/app.js +214 -0
  467. data/templates/default/fulldoc/html/js/full_list.js +178 -0
  468. data/templates/default/fulldoc/html/js/jquery.js +4 -0
  469. data/templates/default/fulldoc/html/setup.rb +199 -0
  470. data/templates/default/layout/dot/header.erb +6 -0
  471. data/templates/default/layout/dot/setup.rb +14 -0
  472. data/templates/default/layout/html/breadcrumb.erb +13 -0
  473. data/templates/default/layout/html/files.erb +11 -0
  474. data/templates/default/layout/html/footer.erb +5 -0
  475. data/templates/default/layout/html/headers.erb +14 -0
  476. data/templates/default/layout/html/index.erb +2 -0
  477. data/templates/default/layout/html/layout.erb +20 -0
  478. data/templates/default/layout/html/listing.erb +4 -0
  479. data/templates/default/layout/html/objects.erb +32 -0
  480. data/templates/default/layout/html/script_setup.erb +5 -0
  481. data/templates/default/layout/html/search.erb +8 -0
  482. data/templates/default/layout/html/setup.rb +71 -0
  483. data/templates/default/method/html/header.erb +16 -0
  484. data/templates/default/method/setup.rb +3 -0
  485. data/templates/default/method/text/header.erb +1 -0
  486. data/templates/default/method_details/html/header.erb +3 -0
  487. data/templates/default/method_details/html/method_signature.erb +25 -0
  488. data/templates/default/method_details/html/source.erb +10 -0
  489. data/templates/default/method_details/setup.rb +10 -0
  490. data/templates/default/method_details/text/header.erb +10 -0
  491. data/templates/default/method_details/text/method_signature.erb +12 -0
  492. data/templates/default/method_details/text/setup.rb +10 -0
  493. data/templates/default/module/dot/child.erb +1 -0
  494. data/templates/default/module/dot/dependencies.erb +3 -0
  495. data/templates/default/module/dot/header.erb +6 -0
  496. data/templates/default/module/dot/info.erb +14 -0
  497. data/templates/default/module/dot/setup.rb +14 -0
  498. data/templates/default/module/html/attribute_details.erb +10 -0
  499. data/templates/default/module/html/attribute_summary.erb +8 -0
  500. data/templates/default/module/html/box_info.erb +37 -0
  501. data/templates/default/module/html/children.erb +8 -0
  502. data/templates/default/module/html/constant_summary.erb +13 -0
  503. data/templates/default/module/html/defines.erb +3 -0
  504. data/templates/default/module/html/header.erb +5 -0
  505. data/templates/default/module/html/inherited_attributes.erb +14 -0
  506. data/templates/default/module/html/inherited_constants.erb +8 -0
  507. data/templates/default/module/html/inherited_methods.erb +19 -0
  508. data/templates/default/module/html/item_summary.erb +40 -0
  509. data/templates/default/module/html/method_details_list.erb +9 -0
  510. data/templates/default/module/html/method_summary.erb +14 -0
  511. data/templates/default/module/html/methodmissing.erb +12 -0
  512. data/templates/default/module/html/pre_docstring.erb +1 -0
  513. data/templates/default/module/setup.rb +164 -0
  514. data/templates/default/module/text/children.erb +10 -0
  515. data/templates/default/module/text/class_meths_list.erb +8 -0
  516. data/templates/default/module/text/extends.erb +8 -0
  517. data/templates/default/module/text/header.erb +7 -0
  518. data/templates/default/module/text/includes.erb +8 -0
  519. data/templates/default/module/text/instance_meths_list.erb +8 -0
  520. data/templates/default/module/text/setup.rb +12 -0
  521. data/templates/default/onefile/html/files.erb +5 -0
  522. data/templates/default/onefile/html/headers.erb +6 -0
  523. data/templates/default/onefile/html/layout.erb +17 -0
  524. data/templates/default/onefile/html/readme.erb +3 -0
  525. data/templates/default/onefile/html/setup.rb +61 -0
  526. data/templates/default/root/dot/child.erb +3 -0
  527. data/templates/default/root/dot/setup.rb +5 -0
  528. data/templates/default/root/html/setup.rb +1 -0
  529. data/templates/default/tags/html/example.erb +11 -0
  530. data/templates/default/tags/html/index.erb +3 -0
  531. data/templates/default/tags/html/option.erb +24 -0
  532. data/templates/default/tags/html/overload.erb +14 -0
  533. data/templates/default/tags/html/see.erb +8 -0
  534. data/templates/default/tags/html/tag.erb +20 -0
  535. data/templates/default/tags/setup.rb +55 -0
  536. data/templates/default/tags/text/example.erb +12 -0
  537. data/templates/default/tags/text/index.erb +1 -0
  538. data/templates/default/tags/text/option.erb +20 -0
  539. data/templates/default/tags/text/overload.erb +19 -0
  540. data/templates/default/tags/text/see.erb +11 -0
  541. data/templates/default/tags/text/tag.erb +13 -0
  542. data/templates/guide/class/html/setup.rb +1 -0
  543. data/templates/guide/docstring/html/setup.rb +1 -0
  544. data/templates/guide/fulldoc/html/css/style.css +108 -0
  545. data/templates/guide/fulldoc/html/js/app.js +33 -0
  546. data/templates/guide/fulldoc/html/setup.rb +73 -0
  547. data/templates/guide/layout/html/layout.erb +81 -0
  548. data/templates/guide/layout/html/setup.rb +28 -0
  549. data/templates/guide/method/html/header.erb +18 -0
  550. data/templates/guide/method/html/setup.rb +21 -0
  551. data/templates/guide/module/html/header.erb +7 -0
  552. data/templates/guide/module/html/method_list.erb +5 -0
  553. data/templates/guide/module/html/setup.rb +26 -0
  554. data/templates/guide/onefile/html/files.erb +4 -0
  555. data/templates/guide/onefile/html/setup.rb +5 -0
  556. data/templates/guide/onefile/html/toc.erb +3 -0
  557. data/templates/guide/tags/html/setup.rb +8 -0
  558. metadata +689 -0
@@ -0,0 +1,110 @@
1
+ module YARD
2
+ module Handlers
3
+ module C
4
+ class Base < Handlers::Base
5
+ include YARD::Parser::C
6
+ include HandlerMethods
7
+
8
+ # @return [Boolean] whether the handler handles this statement
9
+ def self.handles?(statement, processor)
10
+ processor.globals.cruby_processed_files ||= {}
11
+ processor.globals.cruby_processed_files[processor.file] = true
12
+
13
+ if statement.respond_to? :declaration
14
+ src = statement.declaration
15
+ else
16
+ src = statement.source
17
+ end
18
+
19
+ handlers.any? do |a_handler|
20
+ statement_class >= statement.class &&
21
+ case a_handler
22
+ when String
23
+ src == a_handler
24
+ when Regexp
25
+ src =~ a_handler
26
+ end
27
+ end
28
+ end
29
+
30
+ def self.statement_class(type = nil)
31
+ type ? @statement_class = type : (@statement_class || Statement)
32
+ end
33
+
34
+ # @group Registering objects
35
+
36
+ def register_docstring(object, docstring = nil, stmt = nil)
37
+ super(object, docstring, stmt) if docstring
38
+ end
39
+
40
+ def register_file_info(object, file = nil, line = nil, comments = nil)
41
+ super(object, file, line, comments) if file
42
+ end
43
+
44
+ def register_source(object, source = nil, type = nil)
45
+ super(object, source, type) if source
46
+ end
47
+
48
+ def register_visibility(object, visibility = nil)
49
+ super(object, visibility) if visibility
50
+ end
51
+
52
+ # @group Looking up Symbol and Var Values
53
+
54
+ def symbols
55
+ globals.cruby_symbols ||= {}
56
+ end
57
+
58
+ def override_comments
59
+ globals.cruby_override_comments ||= []
60
+ end
61
+
62
+ def namespace_for_variable(var)
63
+ return namespaces[var] if namespaces[var]
64
+ var = remove_var_prefix(var)
65
+ var.empty? ? nil : P(var)
66
+ end
67
+
68
+ def namespaces
69
+ globals.cruby_namespaces ||= {}
70
+ end
71
+
72
+ def processed_files
73
+ globals.cruby_processed_files ||= {}
74
+ end
75
+
76
+ # @group Parsing an Inner Block
77
+
78
+ def parse_block(opts = {})
79
+ return if !statement.block || statement.block.empty?
80
+ push_state(opts) do
81
+ parser.process(statement.block)
82
+ end
83
+ end
84
+
85
+ # @group Processing other files
86
+
87
+ def process_file(file, object)
88
+ file = File.cleanpath(file)
89
+ return if processed_files[file]
90
+ processed_files[file] = file
91
+ begin
92
+ log.debug "Processing embedded call to C source #{file}..."
93
+ globals.ordered_parser.files.delete(file) if globals.ordered_parser
94
+ parser.process(Parser::C::CParser.new(File.read(file), file).parse)
95
+ rescue Errno::ENOENT
96
+ log.warn "Missing source file `#{file}' when parsing #{object}"
97
+ end
98
+ end
99
+
100
+ # @endgroup
101
+
102
+ private
103
+
104
+ def remove_var_prefix(var)
105
+ var.gsub(/^rb_[mc]|^[a-z_]+/, '')
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,26 @@
1
+ class YARD::Handlers::C::ClassHandler < YARD::Handlers::C::Base
2
+ MATCH1 = /([\w\.]+)\s* = \s*(?:rb_define_class|boot_defclass)\s*
3
+ \(
4
+ \s*"([\w:]+)",
5
+ \s*(\w+|0)\s*
6
+ \)/mx
7
+
8
+ MATCH2 = /([\w\.]+)\s* = \s*rb_define_class_under\s*
9
+ \(
10
+ \s*(\w+),
11
+ \s*"(\w+)"(?:,
12
+ \s*([\w\*\s\(\)\.\->]+)\s*)? # for SWIG
13
+ \s*\)/mx
14
+ handles MATCH1
15
+ handles MATCH2
16
+ statement_class BodyStatement
17
+
18
+ process do
19
+ statement.source.scan(MATCH1) do |var_name, class_name, parent|
20
+ handle_class(var_name, class_name, parent)
21
+ end
22
+ statement.source.scan(MATCH2) do |var_name, in_module, class_name, parent|
23
+ handle_class(var_name, class_name, parent, in_module)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,12 @@
1
+ class YARD::Handlers::C::ConstantHandler < YARD::Handlers::C::Base
2
+ MATCH = %r{\brb_define_((?:readonly_)?variable|(?:global_)?const)
3
+ \s*\((?:\s*(\w+),)?\s*"(\w+)",\s*(.*?)\s*\)\s*;}xm
4
+ handles MATCH
5
+ statement_class BodyStatement
6
+
7
+ process do
8
+ statement.source.scan(MATCH) do |type, var_name, const_name, value|
9
+ handle_constants(type, var_name, const_name, value)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,166 @@
1
+ module YARD
2
+ module Handlers
3
+ module C
4
+ module HandlerMethods
5
+ include Parser::C
6
+ include CodeObjects
7
+
8
+ def handle_class(var_name, class_name, parent, in_module = nil)
9
+ parent = nil if parent == "0"
10
+ namespace = in_module ? namespace_for_variable(in_module) : Registry.root
11
+ register ClassObject.new(namespace, class_name) do |obj|
12
+ if parent
13
+ parent_class = namespace_for_variable(parent)
14
+ if parent_class.is_a?(Proxy)
15
+ obj.superclass = "::#{parent_class.path}"
16
+ obj.superclass.type = :class
17
+ else
18
+ obj.superclass = parent_class
19
+ end
20
+ end
21
+ namespaces[var_name] = obj
22
+ register_file_info(obj, statement.file, statement.line)
23
+ end
24
+ end
25
+
26
+ def handle_module(var_name, module_name, in_module = nil)
27
+ namespace = in_module ? namespace_for_variable(in_module) : Registry.root
28
+ register ModuleObject.new(namespace, module_name) do |obj|
29
+ namespaces[var_name] = obj
30
+ register_file_info(obj, statement.file, statement.line)
31
+ end
32
+ end
33
+
34
+ def handle_method(scope, var_name, name, func_name, source_file = nil)
35
+ visibility = :public
36
+ case scope
37
+ when "singleton_method"; scope = :class
38
+ when "module_function"; scope = :module
39
+ when "private_method"; scope = :instance; visibility = :private
40
+ else; scope = :instance
41
+ end
42
+
43
+ namespace = namespace_for_variable(var_name)
44
+ return if namespace.nil? # XXX: raise UndocumentableError might be too noisy.
45
+ register MethodObject.new(namespace, name, scope) do |obj|
46
+ register_visibility(obj, visibility)
47
+ find_method_body(obj, func_name)
48
+ obj.add_tag(Tags::Tag.new(:return, '', 'Boolean')) if name =~ /\?$/
49
+ end
50
+ end
51
+
52
+ def handle_attribute(var_name, name, read, write)
53
+ values = {:read => read.to_i, :write => write.to_i}
54
+ {:read => name, :write => "#{name}="}.each do |type, meth_name|
55
+ next unless values[type] > 0
56
+ obj = handle_method(:instance, var_name, meth_name, nil)
57
+ obj.namespace.attributes[:instance][name] ||= SymbolHash[:read => nil, :write => nil]
58
+ obj.namespace.attributes[:instance][name][type] = obj
59
+ end
60
+ end
61
+
62
+ def handle_alias(var_name, new_name, old_name)
63
+ namespace = namespace_for_variable(var_name)
64
+ return if namespace.nil?
65
+ new_meth, old_meth = new_name.to_sym, old_name.to_sym
66
+ old_obj = namespace.child(:name => old_meth, :scope => :instance)
67
+ new_obj = register MethodObject.new(namespace, new_meth, :instance) do |o|
68
+ register_visibility(o, visibility)
69
+ register_file_info(o, statement.file, statement.line)
70
+ end
71
+
72
+ if old_obj
73
+ new_obj.signature = old_obj.signature
74
+ new_obj.source = old_obj.source
75
+ new_obj.docstring = old_obj.docstring
76
+ new_obj.docstring.object = new_obj
77
+ else
78
+ new_obj.signature = "def #{new_meth}" # this is all we know.
79
+ end
80
+
81
+ namespace.aliases[new_obj] = old_meth
82
+ end
83
+
84
+ def handle_constants(type, var_name, const_name, value)
85
+ return unless type == 'const'
86
+ namespace = namespace_for_variable(var_name)
87
+ register ConstantObject.new(namespace, const_name) do |obj|
88
+ obj.source_type = :c
89
+ obj.value = value
90
+ register_file_info(obj, statement.file, statement.line)
91
+ find_constant_docstring(obj)
92
+ end
93
+ end
94
+
95
+ private
96
+
97
+ def find_constant_docstring(object)
98
+ comment = nil
99
+
100
+ # look inside overrides for declaration value
101
+ override_comments.each do |name, override_comment|
102
+ next unless override_comment.file == statement.file
103
+ just_const_name = name.gsub(/\A.+::/, '')
104
+ if object.path == name || object.name.to_s == just_const_name
105
+ comment = override_comment.source
106
+ stmt = override_comment
107
+ break
108
+ end
109
+ end
110
+
111
+ # use any comments on this statement as a last resort
112
+ if comment.nil? && statement.comments && statement.comments.source =~ /\S/
113
+ comment = statement.comments.source
114
+ stmt = statement.comments
115
+ end
116
+
117
+ # In the case of rb_define_const, the definition and comment are in
118
+ # "/* definition: comment */" form. The literal ':' and '\' characters
119
+ # can be escaped with a backslash.
120
+ if comment
121
+ comment.scan(/\A\s*(.*?[^\s\\]):\s*(.+)/m) do |new_value, new_comment|
122
+ object.value = new_value.gsub(/\\:/, ':')
123
+ comment = new_comment
124
+ end
125
+ register_docstring(object, comment, stmt)
126
+ end
127
+ end
128
+
129
+ def find_method_body(object, symbol)
130
+ file, in_file = statement.file, false
131
+ if statement.comments && statement.comments.source =~ /\A\s*in (\S+)\Z/
132
+ file, in_file = $1, true
133
+ process_file(file, object)
134
+ end
135
+
136
+ if src_stmt = symbols[symbol]
137
+ register_file_info(object, src_stmt.file, src_stmt.line, true)
138
+ register_source(object, src_stmt)
139
+ unless src_stmt.comments.nil? || src_stmt.comments.source.empty?
140
+ register_docstring(object, src_stmt.comments.source, src_stmt)
141
+ return # found docstring
142
+ end
143
+ end
144
+
145
+ # found source (possibly) but no docstring
146
+ # so look in overrides
147
+ override_comments.each do |name, override_comment|
148
+ next unless override_comment.file == file
149
+ name = name.gsub(/::([^:]+?)\Z/, '.\1')
150
+ just_method_name = name.gsub(/\A.+(#|::|\.)/, '')
151
+ just_method_name = 'initialize' if just_method_name == 'new'
152
+ if object.path == name || object.name.to_s == just_method_name
153
+ register_docstring(object, override_comment.source, override_comment)
154
+ return
155
+ end
156
+ end
157
+
158
+ # use any comments on this statement as a last resort
159
+ if !in_file && statement.comments && statement.comments.source =~ /\S/
160
+ register_docstring(object, statement.comments.source, statement)
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,18 @@
1
+ # Handles the Init_Libname() method
2
+ class YARD::Handlers::C::InitHandler < YARD::Handlers::C::Base
3
+ MATCH = %r{\A\s*(?:static\s+)?void\s+(?:[Ii]nit_)?(\w+)\s*}
4
+ handles MATCH
5
+ statement_class ToplevelStatement
6
+
7
+ process do
8
+ parse_block
9
+ if decl = statement.declaration[MATCH, 1]
10
+ ns = namespace_for_variable(decl)
11
+ if ns.is_a?(YARD::CodeObjects::NamespaceObject) && ns.docstring.blank?
12
+ if statement.comments
13
+ register_docstring(ns, statement.comments.source, statement)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,35 @@
1
+ class YARD::Handlers::C::MethodHandler < YARD::Handlers::C::Base
2
+ MATCH1 = %r{rb_define_
3
+ (
4
+ singleton_method |
5
+ method |
6
+ module_function |
7
+ private_method
8
+ )
9
+ \s*\(\s*([\w\.]+),
10
+ \s*"([^"]+)",
11
+ \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,
12
+ \s*(-?\w+)\s*\)}xm
13
+ MATCH2 = %r{rb_define_global_function\s*\(
14
+ \s*"([^"]+)",
15
+ \s*(?:RUBY_METHOD_FUNC\(|VALUEFUNC\()?(\w+)\)?,
16
+ \s*(-?\w+)\s*\)}xm
17
+ handles MATCH1
18
+ handles MATCH2
19
+ statement_class BodyStatement
20
+
21
+ process do
22
+ statement.source.scan(MATCH1) do |type, var_name, name, func_name, param_count|
23
+ break if var_name == "ruby_top_self"
24
+ break if var_name == "nstr"
25
+ break if var_name == "envtbl"
26
+
27
+ var_name = "rb_cObject" if var_name == "rb_mKernel"
28
+ handle_method(type, var_name, name, func_name)
29
+ end
30
+
31
+ statement.source.scan(MATCH2) do |name, func_name, param_count|
32
+ handle_method("method", "rb_mKernel", name, func_name)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ class YARD::Handlers::C::MixinHandler < YARD::Handlers::C::Base
2
+ MATCH = /rb_include_module\s*\(\s*(\w+?),\s*(\w+?)\s*\)/
3
+ handles MATCH
4
+ statement_class BodyStatement
5
+
6
+ process do
7
+ statement.source.scan(MATCH) do |klass_var, mixin_var|
8
+ namespace = namespace_for_variable(klass_var)
9
+ ensure_loaded!(namespace)
10
+ namespace.mixins(:instance) << namespace_for_variable(mixin_var)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,16 @@
1
+ class YARD::Handlers::C::ModuleHandler < YARD::Handlers::C::Base
2
+ MATCH1 = /([\w\.]+)\s* = \s*rb_define_module\s*\(\s*"([\w:]+)"\s*\)/mx
3
+ MATCH2 = /([\w\.]+)\s* = \s*rb_define_module_under\s*\(\s*(\w+),\s*"(\w+)"\s*\)/mx
4
+ handles MATCH1
5
+ handles MATCH2
6
+ statement_class BodyStatement
7
+
8
+ process do
9
+ statement.source.scan(MATCH1) do |var_name, module_name|
10
+ handle_module(var_name, module_name)
11
+ end
12
+ statement.source.scan(MATCH2) do |var_name, in_module, module_name|
13
+ handle_module(var_name, module_name, in_module)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,30 @@
1
+ # Parses comments
2
+ class YARD::Handlers::C::OverrideCommentHandler < YARD::Handlers::C::Base
3
+ handles %r{.}
4
+ statement_class Comment
5
+
6
+ process do
7
+ return if statement.overrides.empty?
8
+ statement.overrides.each do |type, name|
9
+ override_comments << [name, statement]
10
+ obj = nil
11
+ case type
12
+ when :class
13
+ name, superclass = *name.split(/\s*<\s*/)
14
+ obj = YARD::CodeObjects::ClassObject.new(:root, name)
15
+ obj.superclass = "::#{superclass}" if superclass
16
+ when :module
17
+ obj = YARD::CodeObjects::ModuleObject.new(:root, name)
18
+ end
19
+ register(obj)
20
+ end
21
+ end
22
+
23
+ def register_docstring(object, docstring = statement.source, stmt = statement)
24
+ super
25
+ end
26
+
27
+ def register_file_info(object, file = parser.file, line = statement.line, comments = statement.comments)
28
+ super
29
+ end
30
+ end
@@ -0,0 +1,10 @@
1
+ class YARD::Handlers::C::PathHandler < YARD::Handlers::C::Base
2
+ MATCH = /([\w\.]+)\s* = \s*rb_path2class\s*\(\s*"([\w:]+)"\)/mx
3
+ handles MATCH
4
+
5
+ process do
6
+ statement.source.scan(MATCH) do |var_name, path|
7
+ namespaces[var_name] = P(path)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ class YARD::Handlers::C::StructHandler < YARD::Handlers::C::Base
2
+ MATCH = /([\w\.]+)\s*=\s*(?:rb_struct_define_without_accessor)\s*
3
+ \(\s*"([\w:]+)"\s*,\s*(\w+)\s*/mx
4
+ handles MATCH
5
+ statement_class BodyStatement
6
+
7
+ process do
8
+ statement.source.scan(MATCH) do |var_name, class_name, parent|
9
+ handle_class(var_name, class_name, parent)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,7 @@
1
+ # Keeps track of function bodies for symbol lookup during Ruby method declarations
2
+ class YARD::Handlers::C::SymbolHandler < YARD::Handlers::C::Base
3
+ MATCH = %r{\A\s*(?:(?:static|SWIGINTERN)\s+)?(?:intern\s+)?VALUE\s+(\w+)\s*\(}
4
+ handles MATCH
5
+ statement_class ToplevelStatement
6
+ process { symbols[statement.source[MATCH, 1]] = statement }
7
+ end
@@ -0,0 +1,201 @@
1
+ require 'ostruct'
2
+
3
+ module YARD
4
+ module Handlers
5
+ # Iterates over all statements in a file and delegates them to the
6
+ # {Handlers::Base} objects that are registered to handle the statement.
7
+ #
8
+ # This class is passed to each handler and keeps overall processing state.
9
+ # For example, if the {#visibility} is set in a handler, all following
10
+ # statements will have access to this state. This allows "public",
11
+ # "protected" and "private" statements to be handled in classes and modules.
12
+ # In addition, the {#namespace} can be set during parsing to control
13
+ # where objects are being created from. You can also access extra stateful
14
+ # properties that any handler can set during the duration of the post
15
+ # processing of a file from {#extra_state}. If you need to access state
16
+ # across different files, look at {#globals}.
17
+ #
18
+ # @see Handlers::Base
19
+ class Processor
20
+
21
+ class << self
22
+ # Registers a new namespace for handlers of the given type.
23
+ # @since 0.6.0
24
+ def register_handler_namespace(type, ns)
25
+ namespace_for_handler[type] = ns
26
+ end
27
+
28
+ # @return [Hash] a list of registered parser type extensions
29
+ # @private
30
+ # @since 0.6.0
31
+ attr_reader :namespace_for_handler
32
+ undef namespace_for_handler
33
+ def namespace_for_handler; @@parser_type_extensions ||= {} end
34
+ end
35
+
36
+ register_handler_namespace :ruby, Ruby
37
+ register_handler_namespace :ruby18, Ruby::Legacy
38
+ register_handler_namespace :c, C
39
+
40
+ # @return [String] the filename
41
+ attr_accessor :file
42
+
43
+ # @return [CodeObjects::NamespaceObject] the current namespace
44
+ attr_accessor :namespace
45
+
46
+ # @return [Symbol] the current visibility (public, private, protected)
47
+ attr_accessor :visibility
48
+
49
+ # @return [Symbol] the current scope (class, instance)
50
+ attr_accessor :scope
51
+
52
+ # @return [CodeObjects::Base, nil] unlike the namespace, the owner
53
+ # is a non-namespace object that should be stored between statements.
54
+ # For instance, when parsing a method body, the {CodeObjects::MethodObject}
55
+ # is set as the owner, in case any extra method information is processed.
56
+ attr_accessor :owner
57
+
58
+ # @return [Symbol] the parser type (:ruby, :ruby18, :c)
59
+ attr_accessor :parser_type
60
+
61
+ # Handlers can share state for the entire post processing stage through
62
+ # this attribute. Note that post processing stage spans multiple files.
63
+ # To share state only within a single file, use {#extra_state}
64
+ #
65
+ # @example Sharing state among two handlers
66
+ # class Handler1 < YARD::Handlers::Ruby::Base
67
+ # handles :class
68
+ # process { globals.foo = :bar }
69
+ # end
70
+ #
71
+ # class Handler2 < YARD::Handlers::Ruby::Base
72
+ # handles :method
73
+ # process { puts globals.foo }
74
+ # end
75
+ # @return [OpenStruct] global shared state for post-processing stage
76
+ # @see #extra_state
77
+ attr_accessor :globals
78
+
79
+ # Share state across different handlers inside of a file.
80
+ # This attribute is similar to {#visibility}, {#scope}, {#namespace}
81
+ # and {#owner}, in that they all maintain state across all handlers
82
+ # for the entire source file. Use this attribute to store any data
83
+ # your handler might need to save during the parsing of a file. If
84
+ # you need to save state across files, see {#globals}.
85
+ #
86
+ # @return [OpenStruct] an open structure that can store arbitrary data
87
+ # @see #globals
88
+ attr_accessor :extra_state
89
+
90
+ # Creates a new Processor for a +file+.
91
+ # @param [SourceParser] parser the parser used to initialize the processor
92
+ def initialize(parser)
93
+ @file = parser.file || "(stdin)"
94
+ @namespace = YARD::Registry.root
95
+ @visibility = :public
96
+ @scope = :instance
97
+ @owner = @namespace
98
+ @parser_type = parser.parser_type
99
+ @handlers_loaded = {}
100
+ @globals = parser.globals || OpenStruct.new
101
+ @extra_state = OpenStruct.new
102
+ load_handlers
103
+ end
104
+
105
+ # Processes a list of statements by finding handlers to process each
106
+ # one.
107
+ #
108
+ # @param [Array] statements a list of statements
109
+ # @return [void]
110
+ def process(statements)
111
+ statements.each_with_index do |stmt, index|
112
+ find_handlers(stmt).each do |handler|
113
+ begin
114
+ handler.new(self, stmt).process
115
+ rescue HandlerAborted => abort
116
+ log.debug "#{handler.to_s} cancelled from #{caller.last}"
117
+ log.debug "\tin file '#{file}':#{stmt.line}:\n\n" + stmt.show + "\n"
118
+ rescue NamespaceMissingError => missingerr
119
+ log.warn "The #{missingerr.object.type} #{missingerr.object.path} has not yet been recognized."
120
+ log.warn "If this class/method is part of your source tree, this will affect your documentation results."
121
+ log.warn "You can correct this issue by loading the source file for this object before `#{file}'"
122
+ log.warn
123
+ rescue Parser::UndocumentableError => undocerr
124
+ log.warn "in #{handler.to_s}: Undocumentable #{undocerr.message}"
125
+ log.warn "\tin file '#{file}':#{stmt.line}:\n\n" + stmt.show + "\n"
126
+ rescue => e
127
+ log.error "Unhandled exception in #{handler.to_s}:"
128
+ log.error " in `#{file}`:#{stmt.line}:\n\n#{stmt.show}\n"
129
+ log.backtrace(e)
130
+ end
131
+ end
132
+ end
133
+ end
134
+
135
+ # Continue parsing the remainder of the files in the +globals.ordered_parser+
136
+ # object. After the remainder of files are parsed, processing will continue
137
+ # on the current file.
138
+ #
139
+ # @return [void]
140
+ # @see Parser::OrderedParser
141
+ def parse_remaining_files
142
+ if globals.ordered_parser
143
+ globals.ordered_parser.parse
144
+ log.debug("Re-processing #{@file}...")
145
+ end
146
+ end
147
+
148
+ # Searches for all handlers in {Base.subclasses} that match the +statement+
149
+ #
150
+ # @param statement the statement object to match.
151
+ # @return [Array<Base>] a list of handlers to process the statement with.
152
+ def find_handlers(statement)
153
+ Base.subclasses.find_all do |handler|
154
+ handler_base_class > handler &&
155
+ (handler.namespace_only? ? owner.is_a?(CodeObjects::NamespaceObject) : true) &&
156
+ handles?(handler, statement)
157
+ end
158
+ end
159
+
160
+ private
161
+
162
+ def handles?(handler, statement)
163
+ return false unless handler.matches_file?(file)
164
+ if handler.method(:handles?).arity == 1
165
+ handler.handles?(statement)
166
+ elsif [-1, 2].include?(handler.method(:handles?).arity)
167
+ handler.handles?(statement, self)
168
+ end
169
+ end
170
+
171
+ # Returns the handler base class
172
+ # @return [Base] the base class
173
+ def handler_base_class
174
+ handler_base_namespace.const_get(:Base)
175
+ end
176
+
177
+ # The module holding the handlers to be loaded
178
+ #
179
+ # @return [Module] the module containing the handlers depending on
180
+ # {#parser_type}.
181
+ def handler_base_namespace
182
+ self.class.namespace_for_handler[parser_type]
183
+ end
184
+
185
+ # Loads handlers from {#handler_base_namespace}. This ensures that
186
+ # Ruby1.9 handlers are never loaded into 1.8; also lowers the amount
187
+ # of modules that are loaded
188
+ # @return [void]
189
+ def load_handlers
190
+ return if @handlers_loaded[parser_type]
191
+ handler_base_namespace.constants.each do |c|
192
+ const = handler_base_namespace.const_get(c)
193
+ unless Handlers::Base.subclasses.include?(const)
194
+ Handlers::Base.subclasses << const
195
+ end
196
+ end
197
+ @handlers_loaded[parser_type] = true
198
+ end
199
+ end
200
+ end
201
+ end