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,21 @@
1
+ # Handles 'extend' call to include modules into the class scope of another
2
+ # @see MixinHandler
3
+ class YARD::Handlers::Ruby::ExtendHandler < YARD::Handlers::Ruby::MixinHandler
4
+ handles method_call(:extend)
5
+ namespace_only
6
+
7
+ def scope; :class end
8
+
9
+ private
10
+
11
+ def process_mixin(mixin)
12
+ if mixin == s(:var_ref, s(:kw, "self"))
13
+ if namespace.is_a?(ClassObject)
14
+ raise UndocumentableError, "extend(self) statement on class"
15
+ end
16
+ namespace.mixins(scope) << namespace
17
+ else
18
+ super
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,34 @@
1
+ # (see Ruby::AliasHandler)
2
+ class YARD::Handlers::Ruby::Legacy::AliasHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles /\Aalias(_method)?(\s|\()/
4
+ namespace_only
5
+
6
+ process do
7
+ if TkALIAS === statement.tokens.first
8
+ tokens = statement.tokens[2..-1].to_s.split(/\s+/)
9
+ names = [tokens[0], tokens[1]].map {|t| t.gsub(/^:(['"])?(.+?)\1?$|^(:)(.+)/, '\2') }
10
+ else
11
+ names = tokval_list(statement.tokens[2..-1], :attr)
12
+ end
13
+ raise YARD::Parser::UndocumentableError, statement.tokens.first.text if names.size != 2
14
+
15
+ new_meth, old_meth = names[0].to_sym, names[1].to_sym
16
+ old_obj = namespace.child(:name => old_meth, :scope => scope)
17
+ new_obj = register MethodObject.new(namespace, new_meth, scope) do |o|
18
+ o.add_file(parser.file, statement.tokens.first.line_no, statement.comments)
19
+ end
20
+
21
+ if old_obj
22
+ new_obj.signature = old_obj.signature
23
+ new_obj.source = old_obj.source
24
+ new_obj.docstring = old_obj.docstring + YARD::Docstring.new(statement.comments)
25
+ new_obj.docstring.line_range = statement.comments_range
26
+ new_obj.docstring.hash_flag = statement.comments_hash_flag
27
+ new_obj.docstring.object = new_obj
28
+ else
29
+ new_obj.signature = "def #{new_meth}" # this is all we know.
30
+ end
31
+
32
+ namespace.aliases[new_obj] = old_meth
33
+ end
34
+ end
@@ -0,0 +1,60 @@
1
+ # (see Ruby::AttributeHandler)
2
+ class YARD::Handlers::Ruby::Legacy::AttributeHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles /\Aattr(?:_(?:reader|writer|accessor))?(?:\s|\()/
4
+ namespace_only
5
+
6
+ process do
7
+ begin
8
+ attr_type = statement.tokens.first.text.to_sym
9
+ symbols = tokval_list statement.tokens[2..-1], :attr, TkTRUE, TkFALSE
10
+ read, write = true, false
11
+ rescue SyntaxError
12
+ raise YARD::Parser::UndocumentableError, attr_type
13
+ end
14
+
15
+ # Change read/write based on attr_reader/writer/accessor
16
+ case attr_type
17
+ when :attr
18
+ # In the case of 'attr', the second parameter (if given) isn't a symbol.
19
+ write = symbols.pop if symbols.size == 2
20
+ when :attr_accessor
21
+ write = true
22
+ when :attr_reader
23
+ # change nothing
24
+ when :attr_writer
25
+ read, write = false, true
26
+ end
27
+
28
+ # Add all attributes
29
+ symbols.each do |name|
30
+ namespace.attributes[scope][name] = SymbolHash[:read => nil, :write => nil]
31
+
32
+ # Show their methods as well
33
+ {:read => name, :write => "#{name}="}.each do |type, meth|
34
+ if (type == :read ? read : write)
35
+ o = MethodObject.new(namespace, meth, scope)
36
+ if type == :write
37
+ o.parameters = [['value', nil]]
38
+ src = "def #{meth}(value)"
39
+ full_src = "#{src}\n @#{name} = value\nend"
40
+ doc = "Sets the attribute #{name}\n@param value the value to set the attribute #{name} to."
41
+ else
42
+ src = "def #{meth}"
43
+ full_src = "#{src}\n @#{name}\nend"
44
+ doc = "Returns the value of attribute #{name}"
45
+ end
46
+ o.source ||= full_src
47
+ o.signature ||= src
48
+ register(o)
49
+ o.docstring = doc if o.docstring.blank?(false)
50
+
51
+ # Regsiter the object explicitly
52
+ namespace.attributes[scope][name][type] = o
53
+ elsif obj = namespace.children.find {|o| o.name == meth.to_sym && o.scope == scope }
54
+ # register an existing method as attribute
55
+ namespace.attributes[scope][name][type] = obj
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,250 @@
1
+ module YARD
2
+ module Handlers
3
+ module Ruby::Legacy
4
+ # This is the base handler for the legacy parser. To implement a legacy
5
+ # handler, subclass this class.
6
+ #
7
+ # @abstract (see Ruby::Base)
8
+ class Base < Handlers::Base
9
+ # For tokens like TkDEF, TkCLASS, etc.
10
+ include YARD::Parser::Ruby::Legacy::RubyToken
11
+
12
+ # @return [Boolean] whether or not a {Parser::Ruby::Legacy::Statement} object should be handled
13
+ # by this handler.
14
+ def self.handles?(stmt)
15
+ handlers.any? do |a_handler|
16
+ case a_handler
17
+ when String
18
+ stmt.tokens.first.text == a_handler
19
+ when Regexp
20
+ stmt.tokens.to_s =~ a_handler
21
+ else
22
+ a_handler == stmt.tokens.first.class
23
+ end
24
+ end
25
+ end
26
+
27
+ # Parses a statement's block with a set of state values. If the
28
+ # statement has no block, nothing happens. A description of state
29
+ # values can be found at {Handlers::Base#push_state}
30
+ #
31
+ # @param [Hash] opts State options
32
+ # @option opts (see Handlers::Base#push_state)
33
+ # @see Handlers::Base#push_state #push_state
34
+ def parse_block(opts = {})
35
+ push_state(opts) do
36
+ if statement.block
37
+ blk = Parser::Ruby::Legacy::StatementList.new(statement.block)
38
+ parser.process(blk)
39
+ end
40
+ end
41
+ end
42
+
43
+ def call_params
44
+ if statement.tokens.first.is_a?(TkDEF)
45
+ extract_method_details.last.map {|param| param.first }
46
+ else
47
+ tokens = statement.tokens[1..-1]
48
+ tokval_list(tokens, :attr, :identifier, TkId).map do |value|
49
+ value.to_s
50
+ end
51
+ end
52
+ end
53
+
54
+ def caller_method
55
+ if statement.tokens.first.is_a?(TkIDENTIFIER)
56
+ statement.tokens.first.text
57
+ elsif statement.tokens.first.is_a?(TkDEF)
58
+ extract_method_details.first
59
+ else
60
+ nil
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ # Extracts method information for macro expansion only
67
+ #
68
+ # @todo This is a duplicate implementation of {MethodHandler}. Refactor.
69
+ # @return [Array<String,Array<Array<String>>>] the method name followed by method
70
+ # arguments (name and optional value)
71
+ def extract_method_details
72
+ if statement.tokens.to_s =~ /^def\s+(#{METHODMATCH})(?:(?:\s+|\s*\()(.*)(?:\)\s*$)?)?/m
73
+ meth, args = $1, $2
74
+ meth.gsub!(/\s+/,'')
75
+ args = tokval_list(Parser::Ruby::Legacy::TokenList.new(args), :all)
76
+ args.map! {|a| k, v = *a.split('=', 2); [k.strip, (v ? v.strip : nil)] } if args
77
+ if meth =~ /(?:#{NSEPQ}|#{CSEPQ})([^#{NSEP}#{CSEPQ}]+)$/
78
+ meth = $`
79
+ end
80
+ return meth, args
81
+ end
82
+ end
83
+
84
+ # The string value of a token. For example, the return value for the symbol :sym
85
+ # would be :sym. The return value for a string +"foo #{ bar}"+ would be the literal
86
+ # +"foo #{ bar}"+ without any interpolation. The return value of the identifier
87
+ # 'test' would be the same value: 'test'. Here is a list of common types and
88
+ # their return values:
89
+ #
90
+ # @example
91
+ # tokval(TokenList.new('"foo"').first) => "foo"
92
+ # tokval(TokenList.new(':foo').first) => :foo
93
+ # tokval(TokenList.new('CONSTANT').first, RubyToken::TkId) => "CONSTANT"
94
+ # tokval(TokenList.new('identifier').first, RubyToken::TkId) => "identifier"
95
+ # tokval(TokenList.new('3.25').first) => 3.25
96
+ # tokval(TokenList.new('/xyz/i').first) => /xyz/i
97
+ #
98
+ # @param [Token] token The token of the class
99
+ #
100
+ # @param [Array<Class<Token>>, Symbol] accepted_types
101
+ # The allowed token types that this token can be. Defaults to [{TkVal}].
102
+ # A list of types would be, for example, [+TkSTRING+, +TkSYMBOL+], to return
103
+ # the token's value if it is either of those types. If +TkVal+ is accepted,
104
+ # +TkNode+ is also accepted.
105
+ #
106
+ # Certain symbol keys are allowed to specify multiple types in one fell swoop.
107
+ # These symbols are:
108
+ # :string => +TkSTRING+, +TkDSTRING+, +TkDXSTRING+ and +TkXSTRING+
109
+ # :attr => +TkSYMBOL+ and +TkSTRING+
110
+ # :identifier => +TkIDENTIFIER, +TkFID+ and +TkGVAR+.
111
+ # :number => +TkFLOAT+, +TkINTEGER+
112
+ #
113
+ # @return [Object] if the token is one of the accepted types, in its real value form.
114
+ # It should be noted that identifiers and constants are kept in String form.
115
+ # @return [nil] if the token is not any of the specified accepted types
116
+ def tokval(token, *accepted_types)
117
+ accepted_types = [TkVal] if accepted_types.empty?
118
+ accepted_types.push(TkNode) if accepted_types.include? TkVal
119
+
120
+ if accepted_types.include?(:attr)
121
+ accepted_types.push(TkSTRING, TkSYMBOL)
122
+ end
123
+
124
+ if accepted_types.include?(:string)
125
+ accepted_types.push(TkSTRING, TkDSTRING, TkXSTRING, TkDXSTRING)
126
+ end
127
+
128
+ if accepted_types.include?(:identifier)
129
+ accepted_types.push(TkIDENTIFIER, TkFID, TkGVAR)
130
+ end
131
+
132
+ if accepted_types.include?(:number)
133
+ accepted_types.push(TkFLOAT, TkINTEGER)
134
+ end
135
+
136
+ return unless accepted_types.any? {|t| t === token }
137
+
138
+ case token
139
+ when TkSTRING, TkDSTRING, TkXSTRING, TkDXSTRING
140
+ token.text[1..-2]
141
+ when TkSYMBOL
142
+ token.text[1..-1].to_sym
143
+ when TkFLOAT
144
+ token.text.to_f
145
+ when TkINTEGER
146
+ token.text.to_i
147
+ when TkREGEXP
148
+ token.text =~ /\A\/(.+)\/([^\/])\Z/
149
+ Regexp.new($1, $2)
150
+ when TkTRUE
151
+ true
152
+ when TkFALSE
153
+ false
154
+ when TkNIL
155
+ nil
156
+ else
157
+ token.text
158
+ end
159
+ end
160
+
161
+ # Returns a list of symbols or string values from a statement.
162
+ # The list must be a valid comma delimited list, and values
163
+ # will only be returned to the end of the list only.
164
+ #
165
+ # Example:
166
+ # attr_accessor :a, 'b', :c, :d => ['a', 'b', 'c', 'd']
167
+ # attr_accessor 'a', UNACCEPTED_TYPE, 'c' => ['a', 'c']
168
+ #
169
+ # The tokval list of a {Parser::Ruby::Legacy::TokenList} of the above
170
+ # code would be the {#tokval} value of :a, 'b',
171
+ # :c and :d.
172
+ #
173
+ # It should also be noted that this function stops immediately at
174
+ # any ruby keyword encountered:
175
+ # "attr_accessor :a, :b, :c if x == 5" => ['a', 'b', 'c']
176
+ #
177
+ # @param [TokenList] tokenlist The list of tokens to process.
178
+ # @param [Array<Class<Token>>] accepted_types passed to {#tokval}
179
+ # @return [Array<String>] the list of tokvalues in the list.
180
+ # @return [Array<EMPTY>] if there are no symbols or Strings in the list
181
+ # @see #tokval
182
+ def tokval_list(tokenlist, *accepted_types)
183
+ return [] unless tokenlist
184
+ out = [[]]
185
+ parencount, beforeparen = 0, 0
186
+ needcomma = false
187
+ seen_comma = true
188
+ tokenlist.each do |token|
189
+ tokval = accepted_types == [:all] ? token.text : tokval(token, *accepted_types)
190
+ parencond = !out.last.empty? && tokval != nil
191
+ #puts "#{seen_comma.inspect} #{parencount} #{token.class.class_name} #{out.inspect}"
192
+ case token
193
+ when TkCOMMA
194
+ if parencount == 0
195
+ out << [] unless out.last.empty?
196
+ needcomma = false
197
+ seen_comma = true
198
+ else
199
+ out.last << token.text if parencond
200
+ end
201
+ when TkLPAREN
202
+ if seen_comma
203
+ beforeparen += 1
204
+ else
205
+ parencount += 1
206
+ out.last << token.text if parencond
207
+ end
208
+ when TkRPAREN
209
+ if beforeparen > 0
210
+ beforeparen -= 1
211
+ else
212
+ out.last << token.text if parencount > 0 && tokval != nil
213
+ parencount -= 1
214
+ end
215
+ when TkLBRACE, TkLBRACK, TkDO
216
+ parencount += 1
217
+ out.last << token.text if tokval != nil
218
+ when TkRBRACE, TkRBRACK, TkEND
219
+ out.last << token.text if tokval != nil
220
+ parencount -= 1
221
+ else
222
+ break if TkKW === token && ![TkTRUE, TkFALSE, TkSUPER, TkSELF, TkNIL].include?(token.class)
223
+
224
+ seen_comma = false unless TkWhitespace === token
225
+ if parencount == 0
226
+ next if needcomma
227
+ next if TkWhitespace === token
228
+ if tokval != nil
229
+ out.last << tokval
230
+ else
231
+ out.last.clear
232
+ needcomma = true
233
+ end
234
+ elsif parencond
235
+ needcomma = true
236
+ out.last << token.text
237
+ end
238
+ end
239
+
240
+ if beforeparen == 0 && parencount < 0
241
+ break
242
+ end
243
+ end
244
+ # Flatten any single element lists
245
+ out.map {|e| e.empty? ? nil : (e.size == 1 ? e.pop : e.flatten.join) }.compact
246
+ end
247
+ end
248
+ end
249
+ end
250
+ end
@@ -0,0 +1,83 @@
1
+ # (see Ruby::ClassConditionHandler)
2
+ # @since 0.5.4
3
+ class YARD::Handlers::Ruby::Legacy::ClassConditionHandler < YARD::Handlers::Ruby::Legacy::Base
4
+ namespace_only
5
+ handles TkIF, TkELSIF, TkUNLESS
6
+
7
+ process do
8
+ condition = parse_condition
9
+ if condition == nil
10
+ # Parse both blocks if we're unsure of the condition
11
+ parse_then_block
12
+ parse_else_block
13
+ elsif condition
14
+ parse_then_block
15
+ else
16
+ parse_else_block
17
+ end
18
+ end
19
+
20
+ protected
21
+
22
+ # Parses the condition part of the if/unless statement
23
+ #
24
+ # @return [true, false, nil] true if the condition can be definitely
25
+ # parsed to true, false if not, and nil if the condition cannot be
26
+ # parsed with certainty (it's dynamic)
27
+ # @since 0.5.5
28
+ def parse_condition
29
+ condition = nil
30
+
31
+ # Right now we can handle very simple unary conditions like:
32
+ # if true
33
+ # if false
34
+ # if 0
35
+ # if 100 (not 0)
36
+ # if defined? SOME_CONSTANT
37
+ #
38
+ # The last case will do a lookup in the registry and then one
39
+ # in the Ruby world (using eval).
40
+ case statement.tokens[1..-1].to_s.strip
41
+ when /^(\d+)$/
42
+ condition = $1 != "0"
43
+ when /^defined\?\s*\(?(.+?)\)?$/
44
+ # defined? keyword used, let's see if we can look up the name
45
+ # in the registry, then we'll try using Ruby's powers. eval() is not
46
+ # *too* dangerous here since code is not actually executed.
47
+ name = $1
48
+ obj = YARD::Registry.resolve(namespace, name, true)
49
+ begin
50
+ condition = true if obj || Object.instance_eval("defined? #{name}")
51
+ rescue SyntaxError, NameError
52
+ condition = false
53
+ end
54
+ when "true"
55
+ condition = true
56
+ when "false"
57
+ condition = false
58
+ end
59
+
60
+ if TkUNLESS === statement.tokens.first
61
+ condition = !condition if condition != nil
62
+ end
63
+ condition
64
+ end
65
+
66
+ # @since 0.5.5
67
+ def parse_then_block
68
+ parse_block(:visibility => visibility)
69
+ end
70
+
71
+ # @since 0.5.5
72
+ def parse_else_block
73
+ return unless statement.block
74
+ stmtlist = YARD::Parser::Ruby::Legacy::StatementList
75
+ stmtlist.new(statement.block).each do |stmt|
76
+ if TkELSE === stmt.tokens.first
77
+ push_state(:visibility => visibility) do
78
+ parser.process(stmtlist.new(stmt.block))
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,111 @@
1
+ # (see Ruby::ClassHandler)
2
+ class YARD::Handlers::Ruby::Legacy::ClassHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ include YARD::Handlers::Ruby::StructHandlerMethods
4
+ handles TkCLASS
5
+ namespace_only
6
+
7
+ process do
8
+ if statement.tokens.to_s =~ /^class\s+(#{NAMESPACEMATCH})\s*(?:<\s*(.+)|\Z)/m
9
+ classname = $1
10
+ superclass_def = $2
11
+ superclass = parse_superclass($2)
12
+ classname = classname.gsub(/\s/, '')
13
+ if superclass == "Struct"
14
+ is_a_struct = true
15
+ superclass = struct_superclass_name(superclass_def)
16
+ create_struct_superclass(superclass, superclass_def)
17
+ end
18
+ undocsuper = superclass_def && superclass.nil?
19
+
20
+ klass = register ClassObject.new(namespace, classname) do |o|
21
+ o.superclass = superclass if superclass
22
+ o.superclass.type = :class if o.superclass.is_a?(Proxy)
23
+ end
24
+ if is_a_struct
25
+ parse_struct_subclass(klass, superclass_def)
26
+ elsif klass
27
+ create_attributes(klass, members_from_tags(klass))
28
+ end
29
+ parse_block(:namespace => klass)
30
+
31
+ if undocsuper
32
+ raise YARD::Parser::UndocumentableError, 'superclass (class was added without superclass)'
33
+ end
34
+ elsif statement.tokens.to_s =~ /^class\s*<<\s*([\w\:\s]+)/
35
+ classname = $1.gsub(/\s/, '')
36
+ proxy = Proxy.new(namespace, classname)
37
+
38
+ # Allow constants to reference class names
39
+ if ConstantObject === proxy
40
+ if proxy.value =~ /\A#{NAMESPACEMATCH}\Z/
41
+ proxy = Proxy.new(namespace, proxy.value)
42
+ else
43
+ raise YARD::Parser::UndocumentableError, "constant class reference '#{classname}'"
44
+ end
45
+ end
46
+
47
+ if classname == "self"
48
+ parse_block(:namespace => namespace, :scope => :class)
49
+ elsif classname[0,1] =~ /[A-Z]/
50
+ register ClassObject.new(namespace, classname) if Proxy === proxy
51
+ parse_block(:namespace => proxy, :scope => :class)
52
+ else
53
+ raise YARD::Parser::UndocumentableError, "class '#{classname}'"
54
+ end
55
+ else
56
+ raise YARD::Parser::UndocumentableError, "class: #{statement.tokens}"
57
+ end
58
+ end
59
+
60
+ private
61
+
62
+ # Extracts the parameter list from the Struct.new declaration and returns it
63
+ # formatted as a list of member names. Expects the user will have used symbols
64
+ # to define the struct member names
65
+ #
66
+ # @param [String] superstring the string declaring the superclass
67
+ # @return [Array<String>] a list of member names
68
+ def extract_parameters(superstring)
69
+ paramstring = superstring.match(/\A(O?Struct)\.new\((.*?)\)/)[2]
70
+ paramstring.split(",").select {|x| x.strip[0,1] == ":"}.map {|x| x.strip[1..-1] } # the 1..-1 chops the leading :
71
+ end
72
+
73
+ def create_struct_superclass(superclass, superclass_def)
74
+ return if superclass == "Struct"
75
+ the_super = register ClassObject.new(P("Struct"), superclass[8..-1]) do |o|
76
+ o.superclass = "Struct"
77
+ end
78
+ parse_struct_subclass(the_super, superclass_def)
79
+ the_super
80
+ end
81
+
82
+ def struct_superclass_name(superclass)
83
+ if match = superclass.match(/\A(Struct)\.new\((.*?)\)/)
84
+ paramstring = match[2].split(",")
85
+ first = paramstring.first.strip
86
+ if first[0,1] =~ /['"]/ && first[-1,1] =~ /['"]/ && first !~ /\#\{/
87
+ return "Struct::#{first[1..-2]}"
88
+ end
89
+ end
90
+ "Struct"
91
+ end
92
+
93
+ def parse_struct_subclass(klass, superclass_def)
94
+ # Bounce if there's no parens
95
+ return unless superclass_def =~ /O?Struct\.new\((.*?)\)/
96
+ members = extract_parameters(superclass_def)
97
+ create_attributes(klass, members)
98
+ end
99
+
100
+ def parse_superclass(superclass)
101
+ case superclass
102
+ when /\A(#{NAMESPACEMATCH})(?:\s|\Z)/,
103
+ /\A(Struct|OStruct)\.new/,
104
+ /\ADelegateClass\((.+?)\)\s*\Z/,
105
+ /\A(#{NAMESPACEMATCH})\(/
106
+ $1
107
+ when "self"
108
+ namespace.path
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,14 @@
1
+ # (see Ruby::ClassVariableHandler)
2
+ class YARD::Handlers::Ruby::Legacy::ClassVariableHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ HANDLER_MATCH = /\A@@\w+\s*=\s*/m
4
+ handles HANDLER_MATCH
5
+ namespace_only
6
+
7
+ process do
8
+ name, value = *statement.tokens.to_s.split(/\s*=\s*/, 2)
9
+ register ClassVariableObject.new(namespace, name) do |o|
10
+ o.source = statement
11
+ o.value = value.strip
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ # (see Ruby::CommentHandler)
2
+ class YARD::Handlers::Ruby::Legacy::CommentHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles TkCOMMENT
4
+ namespace_only
5
+
6
+ process do
7
+ register_docstring(nil)
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ # (see Ruby::ConstantHandler)
2
+ class YARD::Handlers::Ruby::Legacy::ConstantHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ include YARD::Handlers::Ruby::StructHandlerMethods
4
+ HANDLER_MATCH = /\A[A-Z]\w*\s*=[^=]\s*/m
5
+ handles HANDLER_MATCH
6
+ namespace_only
7
+
8
+ process do
9
+ name, value = *statement.tokens.to_s.split(/\s*=\s*/, 2)
10
+ if value =~ /\A\s*Struct.new(?:\s*\(?|\b)/
11
+ process_structclass(name, $')
12
+ else
13
+ register ConstantObject.new(namespace, name) {|o| o.source = statement; o.value = value.strip }
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def process_structclass(classname, parameters)
20
+ klass = create_class(classname, P(:Struct))
21
+ create_attributes(klass, extract_parameters(parameters))
22
+ end
23
+
24
+ def extract_parameters(parameters)
25
+ members = tokval_list(YARD::Parser::Ruby::Legacy::TokenList.new(parameters), TkSYMBOL)
26
+ members.map {|m| m.to_s }
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ module YARD
2
+ module Handlers
3
+ module Ruby
4
+ module Legacy
5
+ # (see Ruby::DSLHandler)
6
+ class DSLHandler < Base
7
+ include CodeObjects
8
+ include DSLHandlerMethods
9
+ handles TkIDENTIFIER
10
+ namespace_only
11
+ process { handle_comments }
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ # (see Ruby::ExceptionHandler)
2
+ class YARD::Handlers::Ruby::Legacy::ExceptionHandler < YARD::Handlers::Ruby::Legacy::Base
3
+ handles /\Araise(\s|\(|\Z)/
4
+
5
+ process do
6
+ return unless owner.is_a?(MethodObject) # Only methods yield
7
+ return if owner.has_tag?(:raise)
8
+
9
+ klass = statement.tokens.to_s[/^raise[\(\s]*(#{NAMESPACEMATCH})\s*(?:\)|,|\s(?:if|unless|until)|;|(?:(?:\.|\:\:)\s*)?new|$)/, 1]
10
+ owner.add_tag YARD::Tags::Tag.new(:raise, '', klass) if klass
11
+ end
12
+ end
@@ -0,0 +1,20 @@
1
+ # (see Ruby::ExtendHandler)
2
+ class YARD::Handlers::Ruby::Legacy::ExtendHandler < YARD::Handlers::Ruby::Legacy::MixinHandler
3
+ handles /\Aextend(\s|\()/
4
+ namespace_only
5
+
6
+ def scope; :class end
7
+
8
+ private
9
+
10
+ def process_mixin(mixin)
11
+ if mixin == "self"
12
+ if namespace.is_a?(ClassObject)
13
+ raise UndocumentableError, "extend(self) statement on class"
14
+ end
15
+ namespace.mixins(scope) << namespace
16
+ else
17
+ super
18
+ end
19
+ end
20
+ end