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,85 @@
1
+ # (see Ruby::MethodHandler)
2
+ class YARD::Handlers::Ruby::Legacy::MethodHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles TkDEF
4
+
5
+ process do
6
+ nobj = namespace
7
+ mscope = scope
8
+
9
+ if statement.tokens.to_s =~ /^def\s+(#{METHODMATCH})(?:(?:\s+|\s*\()(.*)(?:\)\s*$)?)?/m
10
+ meth, args = $1, $2
11
+ meth.gsub!(/\s+/,'')
12
+ args = tokval_list(YARD::Parser::Ruby::Legacy::TokenList.new(args), :all)
13
+ args.map! do |a|
14
+ k, v, r = *a.split(/(:)|=/, 2)
15
+ if r
16
+ k += v
17
+ v = r
18
+ end
19
+ [k.strip, (v ? v.strip : nil)]
20
+ end if args
21
+ else
22
+ raise YARD::Parser::UndocumentableError, "method: invalid name"
23
+ end
24
+
25
+ # Class method if prefixed by self(::|.) or Module(::|.)
26
+ if meth =~ /(?:#{NSEPQ}|#{CSEPQ})([^#{NSEP}#{CSEPQ}]+)$/
27
+ mscope, meth, prefix = :class, $1, $`
28
+ if prefix =~ /^[a-z]/ && prefix != "self"
29
+ raise YARD::Parser::UndocumentableError, 'method defined on object instance'
30
+ end
31
+ nobj = P(namespace, prefix) unless prefix == "self"
32
+ end
33
+
34
+ nobj = P(namespace, nobj.value) while nobj.type == :constant
35
+ obj = register MethodObject.new(nobj, meth, mscope) do |o|
36
+ o.explicit = true
37
+ o.parameters = args
38
+ end
39
+
40
+ # delete any aliases referencing old method
41
+ nobj.aliases.each do |aobj, name|
42
+ next unless name == obj.name
43
+ nobj.aliases.delete(aobj)
44
+ end if nobj.is_a?(NamespaceObject)
45
+
46
+ if mscope == :instance && meth == "initialize"
47
+ unless obj.has_tag?(:return)
48
+ obj.add_tag(YARD::Tags::Tag.new(:return,
49
+ "a new instance of #{namespace.name}", namespace.name.to_s))
50
+ end
51
+ elsif mscope == :class && obj.docstring.blank? && %w(inherited included
52
+ extended method_added method_removed method_undefined).include?(meth)
53
+ obj.add_tag(YARD::Tags::Tag.new(:private, nil))
54
+ elsif meth.to_s =~ /\?$/
55
+ if obj.tag(:return) && (obj.tag(:return).types || []).empty?
56
+ obj.tag(:return).types = ['Boolean']
57
+ elsif obj.tag(:return).nil?
58
+ unless obj.tags(:overload).any? {|overload| overload.tag(:return) }
59
+ obj.add_tag(YARD::Tags::Tag.new(:return, "", "Boolean"))
60
+ end
61
+ end
62
+ end
63
+
64
+ if obj.has_tag?(:option)
65
+ # create the options parameter if its missing
66
+ obj.tags(:option).each do |option|
67
+ expected_param = option.name
68
+ unless obj.tags(:param).find {|x| x.name == expected_param }
69
+ new_tag = YARD::Tags::Tag.new(:param, "a customizable set of options", "Hash", expected_param)
70
+ obj.add_tag(new_tag)
71
+ end
72
+ end
73
+ end
74
+
75
+ if info = obj.attr_info
76
+ if meth.to_s =~ /=$/ # writer
77
+ info[:write] = obj if info[:read]
78
+ else
79
+ info[:read] = obj if info[:write]
80
+ end
81
+ end
82
+
83
+ parse_block(:owner => obj) # mainly for yield/exceptions
84
+ end
85
+ end
@@ -0,0 +1,39 @@
1
+ # (see Ruby::MixinHandler)
2
+ class YARD::Handlers::Ruby::Legacy::MixinHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles /\Ainclude(\s|\()/
4
+ namespace_only
5
+
6
+ process do
7
+ errors = []
8
+ statement.tokens[1..-1].to_s.split(/\s*,\s*/).reverse.each do |mixin|
9
+ mixin = mixin.strip
10
+ begin
11
+ process_mixin(mixin)
12
+ rescue YARD::Parser::UndocumentableError => err
13
+ errors << err.message
14
+ end
15
+ end
16
+
17
+ if errors.size > 0
18
+ msg = errors.size == 1 ? ": #{errors[0]}" : "s: #{errors.join(", ")}"
19
+ raise YARD::Parser::UndocumentableError, "mixin#{msg} for class #{namespace.path}"
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def process_mixin(mixin)
26
+ unless mixmatch = mixin[/\A(#{NAMESPACEMATCH})/, 1]
27
+ raise YARD::Parser::UndocumentableError
28
+ end
29
+
30
+ case obj = Proxy.new(namespace, mixmatch)
31
+ when ConstantObject # If a constant is included, use its value as the real object
32
+ obj = Proxy.new(namespace, obj.value, :module)
33
+ else
34
+ obj = Proxy.new(namespace, mixmatch, :module)
35
+ end
36
+
37
+ namespace.mixins(scope).unshift(obj) unless namespace.mixins(scope).include?(obj)
38
+ end
39
+ end
@@ -0,0 +1,18 @@
1
+ # (see Ruby::ModuleFunctionHandler)
2
+ class YARD::Handlers::Ruby::Legacy::ModuleFunctionHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles /\A(module_function)(\s|\(|$)/
4
+ namespace_only
5
+
6
+ process do
7
+ if statement.tokens.size == 1
8
+ self.scope = :module
9
+ else
10
+ tokval_list(statement.tokens[2..-1], :attr).each do |name|
11
+ instance_method = MethodObject.new(namespace, name)
12
+ class_method = MethodObject.new(namespace, name, :module)
13
+ instance_method.copy_to(class_method)
14
+ class_method.visibility = :public
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ # (see Ruby::ModuleHandler)
2
+ class YARD::Handlers::Ruby::Legacy::ModuleHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles TkMODULE
4
+ namespace_only
5
+
6
+ process do
7
+ modname = statement.tokens.to_s[/^module\s+(#{NAMESPACEMATCH})/, 1]
8
+ mod = register ModuleObject.new(namespace, modname)
9
+ parse_block(:namespace => mod)
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ # (see Ruby::PrivateConstantHandler)
2
+ class YARD::Handlers::Ruby::Legacy::PrivateConstantHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles /\Aprivate_constant(\s|\(|$)/
4
+ namespace_only
5
+
6
+ process do
7
+ tokval_list(statement.tokens[2..-1], :attr, TkCONSTANT).each do |name|
8
+ privatize_constant name
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def privatize_constant(name)
15
+ const = Proxy.new(namespace, name)
16
+ ensure_loaded!(const)
17
+ const.visibility = :private
18
+ rescue NamespaceMissingError
19
+ raise UndocumentableError, "private visibility set on unrecognized constant: #{name}"
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ # (see Ruby::VisibilityHandler)
2
+ class YARD::Handlers::Ruby::Legacy::VisibilityHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles /\A(protected|private|public)(\s|\(|$)/
4
+ namespace_only
5
+
6
+ process do
7
+ vis = statement.tokens.first.text
8
+ if statement.tokens.size == 1
9
+ self.visibility = vis
10
+ else
11
+ tokval_list(statement.tokens[2..-1], :attr).each do |name|
12
+ MethodObject.new(namespace, name, scope) {|o| o.visibility = vis }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ # (see Ruby::YieldHandler)
2
+ class YARD::Handlers::Ruby::Legacy::YieldHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles TkYIELD
4
+
5
+ process do
6
+ return unless owner.is_a?(MethodObject) # Only methods yield
7
+ return if owner.has_tag? :yield # Don't override yield tags
8
+ return if owner.has_tag? :yieldparam # Same thing.
9
+
10
+ yieldtag = YARD::Tags::Tag.new(:yield, "", [])
11
+ tokval_list(statement.tokens[2..-1], Token).each do |item|
12
+ item = item.inspect unless item.is_a?(String)
13
+ if item == "self"
14
+ yieldtag.types << '_self'
15
+ owner.add_tag YARD::Tags::Tag.new(:yieldparam,
16
+ "the object that the method was called on", owner.namespace.path, '_self')
17
+ elsif item == "super"
18
+ yieldtag.types << '_super'
19
+ owner.add_tag YARD::Tags::Tag.new(:yieldparam,
20
+ "the result of the method from the superclass", nil, '_super')
21
+ else
22
+ yieldtag.types << item
23
+ end
24
+ end
25
+
26
+ owner.add_tag(yieldtag) unless yieldtag.types.empty?
27
+ end
28
+ end
@@ -0,0 +1,8 @@
1
+ # Handles a conditional inside a method
2
+ class YARD::Handlers::Ruby::MethodConditionHandler < YARD::Handlers::Ruby::Base
3
+ handles :if_mod, :unless_mod
4
+
5
+ process do
6
+ parse_block(statement.then_block, :owner => owner)
7
+ end
8
+ end
@@ -0,0 +1,92 @@
1
+ # Handles a method definition
2
+ class YARD::Handlers::Ruby::MethodHandler < YARD::Handlers::Ruby::Base
3
+ handles :def, :defs
4
+
5
+ process do
6
+ meth = statement.method_name(true).to_s
7
+ args = format_args
8
+ blk = statement.block
9
+ nobj = namespace
10
+ mscope = scope
11
+ if statement.type == :defs
12
+ if statement[0][0].type == :ident
13
+ raise YARD::Parser::UndocumentableError, 'method defined on object instance'
14
+ end
15
+ nobj = P(namespace, statement[0].source) if statement[0][0].type == :const
16
+ mscope = :class
17
+ end
18
+
19
+ nobj = P(namespace, nobj.value) while nobj.type == :constant
20
+ obj = register MethodObject.new(nobj, meth, mscope) do |o|
21
+ o.signature = method_signature
22
+ o.explicit = true
23
+ o.parameters = args
24
+ end
25
+
26
+ # delete any aliases referencing old method
27
+ nobj.aliases.each do |aobj, name|
28
+ next unless name == obj.name
29
+ nobj.aliases.delete(aobj)
30
+ end if nobj.is_a?(NamespaceObject)
31
+
32
+ if obj.constructor?
33
+ unless obj.has_tag?(:return)
34
+ obj.add_tag(YARD::Tags::Tag.new(:return,
35
+ "a new instance of #{namespace.name}", namespace.name.to_s))
36
+ end
37
+ elsif mscope == :class && obj.docstring.blank? && %w(inherited included
38
+ extended method_added method_removed method_undefined).include?(meth)
39
+ obj.add_tag(YARD::Tags::Tag.new(:private, nil))
40
+ elsif meth.to_s =~ /\?$/
41
+ if obj.tag(:return) && (obj.tag(:return).types || []).empty?
42
+ obj.tag(:return).types = ['Boolean']
43
+ elsif obj.tag(:return).nil?
44
+ unless obj.tags(:overload).any? {|overload| overload.tag(:return) }
45
+ obj.add_tag(YARD::Tags::Tag.new(:return, "", "Boolean"))
46
+ end
47
+ end
48
+ end
49
+
50
+ if obj.has_tag?(:option)
51
+ # create the options parameter if its missing
52
+ obj.tags(:option).each do |option|
53
+ expected_param = option.name
54
+ unless obj.tags(:param).find {|x| x.name == expected_param }
55
+ new_tag = YARD::Tags::Tag.new(:param, "a customizable set of options", "Hash", expected_param)
56
+ obj.add_tag(new_tag)
57
+ end
58
+ end
59
+ end
60
+
61
+ if info = obj.attr_info
62
+ if meth.to_s =~ /=$/ # writer
63
+ info[:write] = obj if info[:read]
64
+ else
65
+ info[:read] = obj if info[:write]
66
+ end
67
+ end
68
+
69
+ parse_block(blk, :owner => obj) # mainly for yield/exceptions
70
+ end
71
+
72
+ def format_args
73
+ args = statement.parameters
74
+ params = []
75
+ params += args.required_params.map {|a| [a.source, nil] } if args.required_params
76
+ params += args.optional_params.map {|a| [a[0].source, a[1].source] } if args.optional_params
77
+ params << ["*" + args.splat_param.source, nil] if args.splat_param
78
+ params << ["**" + args.keyword_param.source, nil] if args.keyword_param
79
+ params += args.required_end_params.map {|a| [a.source, nil] } if args.required_end_params
80
+ params << ["&" + args.block_param.source, nil] if args.block_param
81
+ params
82
+ end
83
+
84
+ def method_signature
85
+ method_name = statement.method_name(true)
86
+ if statement.parameters.any? {|e| e }
87
+ "def #{method_name}(#{statement.parameters.source})"
88
+ else
89
+ "def #{method_name}"
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,36 @@
1
+ # Handles the 'include' statement to mixin a module in the instance scope
2
+ class YARD::Handlers::Ruby::MixinHandler < YARD::Handlers::Ruby::Base
3
+ handles method_call(:include)
4
+ namespace_only
5
+
6
+ process do
7
+ errors = []
8
+ statement.parameters(false).reverse.each do |mixin|
9
+ begin
10
+ process_mixin(mixin)
11
+ rescue YARD::Parser::UndocumentableError => err
12
+ errors << err.message
13
+ end
14
+ end
15
+ if errors.size > 0
16
+ msg = errors.size == 1 ? ": #{errors[0]}" : "s: #{errors.join(", ")}"
17
+ raise YARD::Parser::UndocumentableError, "mixin#{msg} for class #{namespace.path}"
18
+ end
19
+ end
20
+
21
+ protected
22
+
23
+ def process_mixin(mixin)
24
+ raise YARD::Parser::UndocumentableError unless mixin.ref?
25
+ raise YARD::Parser::UndocumentableError if mixin.first.type == :ident
26
+
27
+ case obj = Proxy.new(namespace, mixin.source)
28
+ when ConstantObject # If a constant is included, use its value as the real object
29
+ obj = Proxy.new(namespace, obj.value, :module)
30
+ else
31
+ obj = Proxy.new(namespace, mixin.source, :module)
32
+ end
33
+
34
+ namespace.mixins(scope).unshift(obj) unless namespace.mixins(scope).include?(obj)
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ # Handles module_function calls to turn methods into public class methods.
2
+ # Also creates a private instance copy of the method.
3
+ class YARD::Handlers::Ruby::ModuleFunctionHandler < YARD::Handlers::Ruby::Base
4
+ handles method_call(:module_function)
5
+ namespace_only
6
+
7
+ process do
8
+ return if (ident = statement.jump(:ident)) == statement
9
+ case statement.type
10
+ when :var_ref, :vcall
11
+ self.scope = :module
12
+ when :fcall, :command
13
+ statement[1].traverse do |node|
14
+ case node.type
15
+ when :symbol; name = node.first.source
16
+ when :string_content; name = node.source
17
+ else next
18
+ end
19
+ instance_method = MethodObject.new(namespace, name)
20
+ class_method = MethodObject.new(namespace, name, :module)
21
+ instance_method.copy_to(class_method)
22
+ class_method.visibility = :public
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,11 @@
1
+ # Handles the declaration of a module
2
+ class YARD::Handlers::Ruby::ModuleHandler < YARD::Handlers::Ruby::Base
3
+ handles :module
4
+ namespace_only
5
+
6
+ process do
7
+ modname = statement[0].source
8
+ mod = register ModuleObject.new(namespace, modname)
9
+ parse_block(statement[1], :namespace => mod)
10
+ end
11
+ end
@@ -0,0 +1,36 @@
1
+ # Sets visibility of a constant (class, module, const)
2
+ class YARD::Handlers::Ruby::PrivateConstantHandler < YARD::Handlers::Ruby::Base
3
+ handles method_call(:private_constant)
4
+ namespace_only
5
+
6
+ process do
7
+ errors = []
8
+ statement.parameters.each do |param|
9
+ next unless AstNode === param
10
+ begin
11
+ privatize_constant(param)
12
+ rescue UndocumentableError => err
13
+ errors << err.message
14
+ end
15
+ end
16
+ if errors.size > 0
17
+ msg = errors.size == 1 ? ": #{errors[0]}" : "s: #{errors.join(", ")}"
18
+ raise UndocumentableError, "private constant#{msg} for #{namespace.path}"
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def privatize_constant(node)
25
+ if node.literal? || (node.type == :var_ref && node[0].type == :const)
26
+ node = node.jump(:tstring_content, :const)
27
+ const = Proxy.new(namespace, node[0])
28
+ ensure_loaded!(const)
29
+ const.visibility = :private
30
+ else
31
+ raise UndocumentableError, "invalid argument to private_constant: #{node.source}"
32
+ end
33
+ rescue NamespaceMissingError
34
+ raise UndocumentableError, "private visibility set on unrecognized constant: #{node[0]}"
35
+ end
36
+ end
@@ -0,0 +1,141 @@
1
+ # Helper methods to parse @attr_* tags on a class.
2
+ #
3
+ # @deprecated The use of +@attr+ tags are deprecated since 0.8.0 in favour of
4
+ # the +@!attribute+ directive. This module should not be relied on.
5
+ # @since 0.5.6
6
+ module YARD::Handlers::Ruby::StructHandlerMethods
7
+ include YARD::CodeObjects
8
+
9
+ # Extracts the user's defined @member tag for a given class and its member. Returns
10
+ # nil if the user did not define a @member tag for this struct entry.
11
+ #
12
+ # @param [ClassObject] klass the class whose tags we're searching
13
+ # @param [String] member the name of the struct member we need
14
+ # @param [Symbol] type reader method, or writer method?
15
+ # @return [Tags::Tag, nil] the tag matching the request, or nil if not found
16
+ def member_tag_for_member(klass, member, type = :read)
17
+ specific_tag = type == :read ? :attr_reader : :attr_writer
18
+ (klass.tags(specific_tag) + klass.tags(:attr)).find {|tag| tag.name == member}
19
+ end
20
+
21
+ # Retrieves all members defined in @attr* tags
22
+ #
23
+ # @param [ClassObject] klass the class with the attributes
24
+ # @return [Array<String>] the list of members defined as attributes on the class
25
+ def members_from_tags(klass)
26
+ tags = klass.tags(:attr) + klass.tags(:attr_reader) + klass.tags(:attr_writer)
27
+ tags.map {|t| t.name }.uniq
28
+ end
29
+
30
+ # Determines whether to create an attribute method based on the class's
31
+ # tags.
32
+ #
33
+ # @param [ClassObject] klass the class whose tags we're searching
34
+ # @param [String] member the name of the struct member we need
35
+ # @param [Symbol] type (:read) reader method, or writer method?
36
+ # @return [Boolean] should the attribute be created?
37
+ def create_member_method?(klass, member, type = :read)
38
+ return true if (klass.tags(:attr) + klass.tags(:attr_reader) + klass.tags(:attr_writer)).empty?
39
+ return true if member_tag_for_member(klass, member, type)
40
+ return !member_tag_for_member(klass, member, :write) if type == :read
41
+ return !member_tag_for_member(klass, member, :read)
42
+ end
43
+
44
+ # Gets the return type for the member in a nicely formatted string. Used
45
+ # to be injected into auto-generated docstrings.
46
+ #
47
+ # @param [Tags::Tag] member_tag the tag object to check for types
48
+ # @return [String] the user-declared type of the struct member, or [Object] if
49
+ # the user did not define a type for this member.
50
+ def return_type_from_tag(member_tag)
51
+ (member_tag && member_tag.types) ? member_tag.types : "Object"
52
+ end
53
+
54
+ # Creates the auto-generated docstring for the getter method of a struct's
55
+ # member. This is used so the generated documentation will look just like that
56
+ # of an attribute defined using attr_accessor.
57
+ #
58
+ # @param [ClassObject] klass the class whose members we're working with
59
+ # @param [String] member the name of the member we're generating documentation for
60
+ # @return [String] a docstring to be attached to the getter method for this member
61
+ def add_reader_tags(klass, new_method, member)
62
+ member_tag = member_tag_for_member(klass, member, :read)
63
+ return_type = return_type_from_tag(member_tag)
64
+ getter_doc_text = member_tag ? member_tag.text : "Returns the value of attribute #{member}"
65
+ new_method.docstring.replace(getter_doc_text)
66
+ new_method.add_tag YARD::Tags::Tag.new(:return, "the current value of #{member}", return_type)
67
+ end
68
+
69
+ # Creates the auto-generated docstring for the setter method of a struct's
70
+ # member. This is used so the generated documentation will look just like that
71
+ # of an attribute defined using attr_accessor.
72
+ #
73
+ # @param [ClassObject] klass the class whose members we're working with
74
+ # @param [String] member the name of the member we're generating documentation for
75
+ # @return [String] a docstring to be attached to the setter method for this member
76
+ def add_writer_tags(klass, new_method, member)
77
+ member_tag = member_tag_for_member(klass, member, :write)
78
+ return_type = return_type_from_tag(member_tag)
79
+ setter_doc_text = member_tag ? member_tag.text : "Sets the attribute #{member}"
80
+ new_method.docstring.replace(setter_doc_text)
81
+ new_method.add_tag YARD::Tags::Tag.new(:param, "the value to set the attribute #{member} to.", return_type, "value")
82
+ new_method.add_tag YARD::Tags::Tag.new(:return, "the newly set value", return_type)
83
+ end
84
+
85
+ # Creates and registers a class object with the given name and superclass name.
86
+ # Returns it for further use.
87
+ #
88
+ # @param [String] classname the name of the class
89
+ # @param [String] superclass the name of the superclass
90
+ # @return [ClassObject] the class object for further processing/method attaching
91
+ def create_class(classname, superclass)
92
+ register ClassObject.new(namespace, classname) do |o|
93
+ o.superclass = superclass if superclass
94
+ o.superclass.type = :class if o.superclass.is_a?(Proxy)
95
+ end
96
+ end
97
+
98
+ # Creates the setter (writer) method and attaches it to the class as an attribute.
99
+ # Also sets up the docstring to prettify the documentation output.
100
+ #
101
+ # @param [ClassObject] klass the class to attach the method to
102
+ # @param [String] member the name of the member we're generating a method for
103
+ def create_writer(klass, member)
104
+ # We want to convert these members into attributes just like
105
+ # as if they were declared using attr_accessor.
106
+ new_meth = register MethodObject.new(klass, "#{member}=", :instance) do |o|
107
+ o.parameters = [['value', nil]]
108
+ o.signature ||= "def #{member}=(value)"
109
+ o.source ||= "#{o.signature}\n @#{member} = value\nend"
110
+ end
111
+ add_writer_tags(klass, new_meth, member)
112
+ klass.attributes[:instance][member][:write] = new_meth
113
+ end
114
+
115
+ # Creates the getter (reader) method and attaches it to the class as an attribute.
116
+ # Also sets up the docstring to prettify the documentation output.
117
+ #
118
+ # @param [ClassObject] klass the class to attach the method to
119
+ # @param [String] member the name of the member we're generating a method for
120
+ def create_reader(klass, member)
121
+ new_meth = register MethodObject.new(klass, member, :instance) do |o|
122
+ o.signature ||= "def #{member}"
123
+ o.source ||= "#{o.signature}\n @#{member}\nend"
124
+ end
125
+ add_reader_tags(klass, new_meth, member)
126
+ klass.attributes[:instance][member][:read] = new_meth
127
+ end
128
+
129
+ # Creates the given member methods and attaches them to the given ClassObject.
130
+ #
131
+ # @param [ClassObject] klass the class to generate attributes for
132
+ # @param [Array<String>] members a list of member names
133
+ def create_attributes(klass, members)
134
+ # For each parameter, add reader and writers
135
+ members.each do |member|
136
+ klass.attributes[:instance][member] = SymbolHash[:read => nil, :write => nil]
137
+ create_writer klass, member if create_member_method?(klass, member, :write)
138
+ create_reader klass, member if create_member_method?(klass, member, :read)
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,24 @@
1
+ # Handles 'private', 'protected', and 'public' calls.
2
+ class YARD::Handlers::Ruby::VisibilityHandler < YARD::Handlers::Ruby::Base
3
+ handles method_call(:private)
4
+ handles method_call(:protected)
5
+ handles method_call(:public)
6
+ namespace_only
7
+
8
+ process do
9
+ return if (ident = statement.jump(:ident)) == statement
10
+ case statement.type
11
+ when :var_ref, :vcall
12
+ self.visibility = ident.first.to_sym
13
+ when :fcall, :command
14
+ statement[1].traverse do |node|
15
+ case node.type
16
+ when :symbol; source = node.first.source
17
+ when :string_content; source = node.source
18
+ else next
19
+ end
20
+ MethodObject.new(namespace, source, scope) {|o| o.visibility = ident.first }
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,30 @@
1
+ # Handles 'yield' calls
2
+ class YARD::Handlers::Ruby::YieldHandler < YARD::Handlers::Ruby::Base
3
+ handles :yield, :yield0
4
+
5
+ process do
6
+ return unless owner.is_a?(MethodObject) # Only methods yield
7
+ return if owner.has_tag? :yield # Don't override yield tags
8
+ return if owner.has_tag? :yieldparam # Same thing.
9
+
10
+ yieldtag = YARD::Tags::Tag.new(:yield, "", [])
11
+
12
+ if statement.type == :yield
13
+ statement.jump(:list).children.each do |item|
14
+ if item == s(:var_ref, s(:kw, "self"))
15
+ yieldtag.types << '_self'
16
+ owner.add_tag YARD::Tags::Tag.new(:yieldparam,
17
+ "the object that the method was called on", owner.namespace.path, '_self')
18
+ elsif item == s(:zsuper)
19
+ yieldtag.types << '_super'
20
+ owner.add_tag YARD::Tags::Tag.new(:yieldparam,
21
+ "the result of the method from the superclass", nil, '_super')
22
+ else
23
+ yieldtag.types << item.source
24
+ end
25
+ end
26
+ end
27
+
28
+ owner.add_tag(yieldtag) unless yieldtag.types.empty?
29
+ end
30
+ end