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,152 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe YARD::Tags::DefaultFactory do
4
+ before { @f = YARD::Tags::DefaultFactory.new }
5
+
6
+ describe '#parse_tag' do
7
+ it "should not have trailing whitespace on a regular freeform tag" do
8
+ @f.parse_tag('api', 'private ').text.should == "private"
9
+ end
10
+ end
11
+
12
+ describe '#extract_types_and_name_from_text' do
13
+ def parse_types(types)
14
+ @f.send(:extract_types_and_name_from_text, types)
15
+ end
16
+
17
+ it "should handle one type" do
18
+ parse_types('[A]').should == [nil, ['A'], ""]
19
+ end
20
+
21
+ it "should handle a list of types" do
22
+ parse_types('[A, B, C]').should == [nil, ['A', 'B', 'C'], ""]
23
+ end
24
+
25
+ it "should handle ducktypes" do
26
+ parse_types('[#foo]').should == [nil, ['#foo'], '']
27
+ end
28
+
29
+ %w(#foo= #<< #<=> #>> #== #=== Array<#<=>> Array<#==>).each do |meth|
30
+ it "should handle ducktypes with special method name #{meth}" do
31
+ parse_types("[#{meth}]").should == [nil, [meth], '']
32
+ end
33
+ end
34
+
35
+ it "should only parse #ducktypes inside brackets" do
36
+ parse_types("#ducktype").should == [nil, nil, '#ducktype']
37
+ end
38
+
39
+ it "should return the text before and after the type list" do
40
+ parse_types(' b <String> description').should == ['b', ['String'], 'description']
41
+ parse_types('b c <String> description (test)').should == [nil, nil, 'b c <String> description (test)']
42
+ end
43
+
44
+ it "should handle a complex list of types" do
45
+ v = parse_types(' [Test, Array<String, Hash, C>, String]')
46
+ v.should include(["Test", "Array<String, Hash, C>", "String"])
47
+ end
48
+
49
+ it "should handle any of the following start/end delimiting chars: (), <>, {}, []" do
50
+ a = parse_types('[a,b,c]')
51
+ b = parse_types('<a,b,c>')
52
+ c = parse_types('(a,b,c)')
53
+ d = parse_types('{a,b,c}')
54
+ a.should == b
55
+ b.should == c
56
+ c.should == d
57
+ a.should include(['a','b','c'])
58
+ end
59
+
60
+ it "should return the text before the type list as the last element" do
61
+ parse_types('b[x, y, z]').should == ['b', ['x', 'y', 'z'], '']
62
+ parse_types(' ! <x>').should == ["!", ['x'], '']
63
+ end
64
+
65
+ it "should return text unparsed if there is no type list" do
66
+ parse_types('').should == [nil, nil, '']
67
+ parse_types('[]').should == [nil, nil, '[]']
68
+ end
69
+
70
+ it "should allow A => B syntax" do
71
+ v = parse_types(' [Test, Array<String, Hash{A => {B => C}}, C>, String]')
72
+ v.should include(["Test", "Array<String, Hash{A => {B => C}}, C>", "String"])
73
+ end
74
+ end
75
+
76
+ describe '#parse_tag_with_types' do
77
+ def parse_types(text)
78
+ @f.send(:parse_tag_with_types, 'test', text)
79
+ end
80
+
81
+ it "should parse given types and description" do
82
+ YARD::Tags::Tag.should_receive(:new).with("test", "description", ["x", "y", "z"])
83
+ parse_types(' [x, y, z] description')
84
+ end
85
+
86
+ it "should parse given types only" do
87
+ YARD::Tags::Tag.should_receive(:new).with("test", "", ["x", "y", "z"])
88
+ parse_types(' [x, y, z] ')
89
+ end
90
+
91
+ it "should allow type list to be omitted" do
92
+ YARD::Tags::Tag.should_receive(:new).with('test', 'description', nil)
93
+ parse_types(' description ')
94
+ end
95
+
96
+ it "should raise an error if a name is specified before type list" do
97
+ lambda { parse_types('b<String> desc') }.should raise_error(YARD::Tags::TagFormatError, 'cannot specify a name before type list for \'@test\'')
98
+ end
99
+ end
100
+
101
+ describe '#parse_tag_with_types_name_and_default' do
102
+ def parse_types(text)
103
+ @f.send(:parse_tag_with_types_name_and_default, 'test', text)
104
+ end
105
+
106
+ it "should parse a standard type list with name before types (no default)" do
107
+ YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", ["x", "y", "z"], 'NAME', nil)
108
+ parse_types('NAME [x, y, z] description')
109
+ end
110
+
111
+ it "should parse a standard type list with name after types (no default)" do
112
+ YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", ["x", "y", "z"], 'NAME', nil)
113
+ parse_types(' [x, y, z] NAME description')
114
+ end
115
+
116
+ it "should parse a tag definition with name, typelist and default" do
117
+ YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", ["x", "y", "z"], 'NAME', ['default', 'values'])
118
+ parse_types(' [x, y, z] NAME (default, values) description')
119
+ end
120
+
121
+ it "should parse a tag definition with name, typelist and default when name is before type list" do
122
+ YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", ["x", "y", "z"], 'NAME', ['default', 'values'])
123
+ parse_types(' NAME [x, y, z] (default, values) description')
124
+ end
125
+
126
+ it "should allow typelist to be omitted" do
127
+ YARD::Tags::DefaultTag.should_receive(:new).with("test", "description", nil, 'NAME', ['default', 'values'])
128
+ parse_types(' NAME (default, values) description')
129
+ end
130
+ end
131
+
132
+ describe '#parse_tag_with_options' do
133
+ def parse_options(text)
134
+ @f.parse_tag_with_options('option', text)
135
+ end
136
+
137
+ it "should have a name before tag info" do
138
+ t = parse_options("xyz key [Types] (default) description")
139
+ t.tag_name.should == 'option'
140
+ t.name.should == 'xyz'
141
+ end
142
+
143
+ it "should parse the rest of the tag like DefaultTag" do
144
+ t = parse_options("xyz key [Types] (default) description")
145
+ t.pair.should be_instance_of(Tags::DefaultTag)
146
+ t.pair.types.should == ["Types"]
147
+ t.pair.name.should == "key"
148
+ t.pair.defaults.should == ["default"]
149
+ t.pair.text.should == "description"
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe YARD::Tags::DefaultTag do
4
+ it "should create a tag with defaults" do
5
+ o = YARD::Tags::DefaultTag.new('tagname', 'desc', ['types'], 'name', ['defaults'])
6
+ o.defaults.should == ['defaults']
7
+ o.tag_name.should == 'tagname'
8
+ o.name.should == 'name'
9
+ o.types.should == ['types']
10
+ end
11
+ end
@@ -0,0 +1,453 @@
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+
3
+ def tag_parse(content, object = nil, handler = nil)
4
+ @parser = DocstringParser.new
5
+ @parser.parse(content, object, handler)
6
+ @parser
7
+ end
8
+
9
+ describe YARD::Tags::ParseDirective do
10
+ describe '#call' do
11
+ after { Registry.clear }
12
+
13
+ it "should parse if handler=nil but use file=(stdin)" do
14
+ tag_parse %{@!parse
15
+ # Docstring here
16
+ def foo; end
17
+ }
18
+ Registry.at('#foo').docstring.should == "Docstring here"
19
+ Registry.at('#foo').file.should == '(stdin)'
20
+ end
21
+
22
+ it "should allow parser type to be specified in type" do
23
+ tag_parse %{@!parse [c]
24
+ void Init_Foo() {
25
+ rb_define_method(rb_cMyClass, "foo", foo, 1);
26
+ }
27
+ }
28
+ Registry.at('MyClass#foo').should_not be_nil
29
+ end
30
+
31
+ it "should parse code in context of current handler" do
32
+ src = <<-eof
33
+ class A
34
+ # @!parse
35
+ # def foo; end
36
+ eval "def foo; end"
37
+ end
38
+ eof
39
+ parser = Parser::SourceParser.new
40
+ parser.file = "myfile.rb"
41
+ parser.parse(StringIO.new(src))
42
+ Registry.at('A#foo').file.should == 'myfile.rb'
43
+ end
44
+ end
45
+ end
46
+
47
+ describe YARD::Tags::GroupDirective do
48
+ describe '#call' do
49
+ it "should do nothing if handler=nil" do
50
+ tag_parse("@!group foo")
51
+ end
52
+
53
+ it "should set group value in parser state (with handler)" do
54
+ handler = OpenStruct.new(:extra_state => OpenStruct.new)
55
+ tag_parse("@!group foo", nil, handler)
56
+ handler.extra_state.group.should == 'foo'
57
+ end
58
+ end
59
+ end
60
+
61
+ describe YARD::Tags::EndGroupDirective do
62
+ describe '#call' do
63
+ it "should do nothing if handler=nil" do
64
+ tag_parse("@!endgroup foo")
65
+ end
66
+
67
+ it "should set group value in parser state (with handler)" do
68
+ handler = OpenStruct.new(:extra_state => OpenStruct.new(:group => "foo"))
69
+ tag_parse("@!endgroup", nil, handler)
70
+ handler.extra_state.group.should be_nil
71
+ end
72
+ end
73
+ end
74
+
75
+ describe YARD::Tags::MacroDirective do
76
+ def handler
77
+ OpenStruct.new(:call_params => %w(a b c),
78
+ :caller_method => 'foo',
79
+ :scope => :instance, :visibility => :public,
80
+ :namespace => P('Foo::Bar'),
81
+ :statement => OpenStruct.new(:source => 'foo :a, :b, :c'))
82
+ end
83
+
84
+ after(:all) { Registry.clear }
85
+
86
+ describe '#call' do
87
+ it "should define new macro when [new] is provided" do
88
+ tag_parse("@!macro [new] foo\n foo")
89
+ CodeObjects::MacroObject.find('foo').macro_data.should == 'foo'
90
+ end
91
+
92
+ it "should define new macro if text block is provided" do
93
+ tag_parse("@!macro bar\n bar")
94
+ CodeObjects::MacroObject.find('bar').macro_data.should == 'bar'
95
+ end
96
+
97
+ it "should expand macros and return #expanded_text to tag parser" do
98
+ tag_parse("@!macro [new] foo\n foo")
99
+ tag_parse("@!macro foo").text.should == 'foo'
100
+ end
101
+
102
+ it "should not expand new macro if docstring is unattached" do
103
+ tag_parse("@!macro [new] foo\n foo").text.should_not == 'foo'
104
+ end
105
+
106
+ it "should expand new anonymous macro even if docstring is unattached" do
107
+ tag_parse("@!macro\n foo").text.should == 'foo'
108
+ end
109
+
110
+ it "should allow multiple macros to be expanded" do
111
+ tag_parse("@!macro [new] foo\n foo")
112
+ tag_parse("@!macro bar\n bar")
113
+ tag_parse("@!macro foo\n@!macro bar").text.should == "foo\nbar"
114
+ end
115
+
116
+ it "should allow anonymous macros" do
117
+ tag_parse("@!macro\n a b c", nil, handler)
118
+ @parser.text.should == 'a b c'
119
+ end
120
+
121
+ it "should expand call_params and caller_method using $N when handler is provided" do
122
+ tag_parse("@!macro\n $1 $2 $3", nil, handler)
123
+ @parser.text.should == 'a b c'
124
+ end
125
+
126
+ it "should attach macro to method if one exists" do
127
+ tag_parse("@!macro [attach] attached\n $1 $2 $3", nil, handler)
128
+ macro = CodeObjects::MacroObject.find('attached')
129
+ macro.method_object.should == P('Foo::Bar.foo')
130
+ end
131
+
132
+ it "should not expand new attached macro if defined on class method" do
133
+ baz = CodeObjects::MethodObject.new(P('Foo::Bar'), :baz, :class)
134
+ baz.visibility.should == :public
135
+ tag_parse("@!macro [attach] attached2\n @!visibility private", baz, handler)
136
+ macro = CodeObjects::MacroObject.find('attached2')
137
+ macro.method_object.should == P('Foo::Bar.baz')
138
+ baz.visibility.should == :public
139
+ end
140
+
141
+ it "should expand macro if defined on class method and there is no data block" do
142
+ tag_parse("@!macro [new] attached3\n expanded_data")
143
+ baz = CodeObjects::MethodObject.new(P('Foo::Bar'), :baz, :class)
144
+ doc = DocstringParser.new.parse('@!macro attached3', baz, handler).to_docstring
145
+ doc.should == 'expanded_data'
146
+ end
147
+
148
+ it "should not attempt to expand macro values if handler = nil" do
149
+ tag_parse("@!macro [attach] xyz\n $1 $2 $3")
150
+ end
151
+ end
152
+ end
153
+
154
+ describe YARD::Tags::MethodDirective do
155
+ describe '#call' do
156
+ after { Registry.clear }
157
+
158
+ it "should use entire docstring if no indented data is found" do
159
+ YARD.parse_string <<-eof
160
+ class Foo
161
+ # @!method foo
162
+ # @!method bar
163
+ # @!scope class
164
+ end
165
+ eof
166
+ Registry.at('Foo.foo').should be_a(CodeObjects::MethodObject)
167
+ Registry.at('Foo.bar').should be_a(CodeObjects::MethodObject)
168
+ end
169
+
170
+ it "should handle indented block text in @!method" do
171
+ YARD.parse_string <<-eof
172
+ # @!method foo(a)
173
+ # Docstring here
174
+ # @return [String] the foo
175
+ # Ignore this
176
+ # @param [String] a
177
+ eof
178
+ foo = Registry.at('#foo')
179
+ foo.docstring.should == "Docstring here"
180
+ foo.docstring.tag(:return).should_not be_nil
181
+ foo.tag(:param).should be_nil
182
+ end
183
+
184
+ it "should execute directives on object in indented block" do
185
+ YARD.parse_string <<-eof
186
+ class Foo
187
+ # @!method foo(a)
188
+ # @!scope class
189
+ # @!visibility private
190
+ # @!method bar
191
+ # Hello
192
+ # Ignore this
193
+ end
194
+ eof
195
+ foo = Registry.at('Foo.foo')
196
+ foo.visibility.should == :private
197
+ bar = Registry.at('Foo#bar')
198
+ bar.visibility.should == :public
199
+ end
200
+
201
+ it "should be able to define multiple @methods in docstring" do
202
+ YARD.parse_string <<-eof
203
+ class Foo
204
+ # @!method foo1
205
+ # Docstring1
206
+ # @!method foo2
207
+ # Docstring2
208
+ # @!method foo3
209
+ # @!scope class
210
+ # Docstring3
211
+ end
212
+ eof
213
+ foo1 = Registry.at('Foo#foo1')
214
+ foo2 = Registry.at('Foo#foo2')
215
+ foo3 = Registry.at('Foo.foo3')
216
+ foo1.docstring.should == 'Docstring1'
217
+ foo2.docstring.should == 'Docstring2'
218
+ foo3.docstring.should == 'Docstring3'
219
+ end
220
+
221
+ it "should define the method inside namespace if attached to namespace object" do
222
+ YARD.parse_string <<-eof
223
+ module Foo
224
+ # @!method foo
225
+ # Docstring1
226
+ # @!method bar
227
+ # Docstring2
228
+ class Bar
229
+ end
230
+ end
231
+ eof
232
+ Registry.at('Foo::Bar#foo').docstring.should == 'Docstring1'
233
+ Registry.at('Foo::Bar#bar').docstring.should == 'Docstring2'
234
+ end
235
+
236
+ it "should set scope to class if signature has 'self.' prefix" do
237
+ YARD.parse_string <<-eof
238
+ # @!method self.foo
239
+ # @!method self. bar
240
+ # @!method self.baz()
241
+ class Foo
242
+ end
243
+ eof
244
+ %w(foo bar baz).each do |name|
245
+ Registry.at("Foo.#{name}").should be_a(CodeObjects::MethodObject)
246
+ end
247
+ end
248
+
249
+ it "should define parameters from signature" do
250
+ YARD.parse_string <<-eof
251
+ # @!method foo(a, b, c = nil)
252
+ eof
253
+ Registry.at('#foo').parameters.should == [['a', nil], ['b', nil], ['c', 'nil']]
254
+ end
255
+
256
+ it "should be able to define method with module scope (module function)" do
257
+ YARD.parse_string <<-eof
258
+ # @!method foo
259
+ # @!scope module
260
+ # This is a docstring
261
+ # @return [Boolean] whether this is true
262
+ class Foo
263
+ end
264
+ eof
265
+ foo_c = Registry.at('Foo.foo')
266
+ foo_i = Registry.at('Foo#foo')
267
+ foo_c.should_not be_nil
268
+ foo_i.should_not be_nil
269
+ foo_c.should be_module_function
270
+ foo_c.docstring.should == foo_i.docstring
271
+ foo_c.tag(:return).text.should == foo_i.tag(:return).text
272
+ end
273
+ end
274
+ end
275
+
276
+ describe YARD::Tags::AttributeDirective do
277
+ describe '#call' do
278
+ after { Registry.clear }
279
+
280
+ it "should use entire docstring if no indented data is found" do
281
+ YARD.parse_string <<-eof
282
+ class Foo
283
+ # @!attribute foo
284
+ # @!attribute bar
285
+ # @!scope class
286
+ end
287
+ eof
288
+ Registry.at('Foo.foo').should be_reader
289
+ Registry.at('Foo.bar').should be_reader
290
+ end
291
+
292
+ it "should handle indented block in @!attribute" do
293
+ YARD.parse_string <<-eof
294
+ # @!attribute foo
295
+ # Docstring here
296
+ # @return [String] the foo
297
+ # Ignore this
298
+ # @param [String] a
299
+ eof
300
+ foo = Registry.at('#foo')
301
+ foo.is_attribute?.should == true
302
+ foo.docstring.should == "Docstring here"
303
+ foo.docstring.tag(:return).should_not be_nil
304
+ foo.tag(:param).should be_nil
305
+ end
306
+
307
+ it "should be able to define multiple @attributes in docstring" do
308
+ YARD.parse_string <<-eof
309
+ class Foo
310
+ # @!attribute [r] foo1
311
+ # Docstring1
312
+ # @!attribute [w] foo2
313
+ # Docstring2
314
+ # @!attribute foo3
315
+ # @!scope class
316
+ # Docstring3
317
+ end
318
+ eof
319
+ foo1 = Registry.at('Foo#foo1')
320
+ foo2 = Registry.at('Foo#foo2=')
321
+ foo3 = Registry.at('Foo.foo3')
322
+ foo4 = Registry.at('Foo.foo3=')
323
+ foo1.should be_reader
324
+ foo2.should be_writer
325
+ foo3.should be_reader
326
+ foo1.docstring.should == 'Docstring1'
327
+ foo2.docstring.should == 'Docstring2'
328
+ foo3.docstring.should == 'Docstring3'
329
+ foo4.should be_writer
330
+ foo1.attr_info[:write].should be_nil
331
+ foo2.attr_info[:read].should be_nil
332
+ end
333
+
334
+ it "should define the attr inside namespace if attached to namespace object" do
335
+ YARD.parse_string <<-eof
336
+ module Foo
337
+ # @!attribute [r] foo
338
+ # @!attribute [r] bar
339
+ class Bar
340
+ end
341
+ end
342
+ eof
343
+ Registry.at('Foo::Bar#foo').should be_reader
344
+ Registry.at('Foo::Bar#bar').should be_reader
345
+ end
346
+ end
347
+
348
+ it "should set scope to class if signature has 'self.' prefix" do
349
+ YARD.parse_string <<-eof
350
+ # @!attribute self.foo
351
+ # @!attribute self. bar
352
+ # @!attribute self.baz
353
+ class Foo
354
+ end
355
+ eof
356
+ %w(foo bar baz).each do |name|
357
+ Registry.at("Foo.#{name}").should be_reader
358
+ end
359
+ end
360
+ end
361
+
362
+ describe YARD::Tags::ScopeDirective do
363
+ describe '#call' do
364
+ after { Registry.clear }
365
+
366
+ it "should set state on tag parser if object = nil" do
367
+ tag_parse("@!scope class")
368
+ @parser.state.scope.should == :class
369
+ end
370
+
371
+ it "should set state on tag parser if object is namespace" do
372
+ object = CodeObjects::ClassObject.new(:root, 'Foo')
373
+ tag_parse("@!scope class", object)
374
+ object[:scope].should be_nil
375
+ @parser.state.scope.should == :class
376
+ end
377
+
378
+ it "should set scope on object if object is a method object" do
379
+ object = CodeObjects::MethodObject.new(:root, 'foo')
380
+ tag_parse("@!scope class", object)
381
+ object.scope.should == :class
382
+ end
383
+
384
+ %w(class instance module).each do |type|
385
+ it "should allow #{type} as value" do
386
+ tag_parse("@!scope #{type}")
387
+ @parser.state.scope.should == type.to_sym
388
+ end
389
+ end
390
+
391
+ %w(invalid foo FOO CLASS INSTANCE).each do |type|
392
+ it "should not allow #{type} as value" do
393
+ tag_parse("@!scope #{type}")
394
+ @parser.state.scope.should be_nil
395
+ end
396
+ end
397
+ end
398
+ end
399
+
400
+ describe YARD::Tags::VisibilityDirective do
401
+ describe '#call' do
402
+ after { Registry.clear }
403
+
404
+ it "should set visibility on tag parser if object = nil" do
405
+ tag_parse("@!visibility private")
406
+ @parser.state.visibility.should == :private
407
+ end
408
+
409
+ it "should set state on tag parser if object is namespace" do
410
+ object = CodeObjects::ClassObject.new(:root, 'Foo')
411
+ tag_parse("@!visibility protected", object)
412
+ object.visibility.should == :protected
413
+ @parser.state.visibility.should be_nil
414
+ end
415
+
416
+ it "should set visibility on object if object is a method object" do
417
+ object = CodeObjects::MethodObject.new(:root, 'foo')
418
+ tag_parse("@!visibility private", object)
419
+ object.visibility.should == :private
420
+ end
421
+
422
+ %w(public private protected).each do |type|
423
+ it "should allow #{type} as value" do
424
+ tag_parse("@!visibility #{type}")
425
+ @parser.state.visibility.should == type.to_sym
426
+ end
427
+ end
428
+
429
+ %w(invalid foo FOO PRIVATE INSTANCE).each do |type|
430
+ it "should not allow #{type} as value" do
431
+ tag_parse("@!visibility #{type}")
432
+ @parser.state.visibility.should be_nil
433
+ end
434
+ end
435
+
436
+ it "updates visibility on future methods" do
437
+ Registry.clear
438
+ YARD.parse_string <<-eof
439
+ class Foo
440
+ # @!visibility private
441
+
442
+
443
+ def foo; end
444
+ def bar; end
445
+ def baz; end
446
+ end
447
+ eof
448
+ %w(foo bar baz).each do |name|
449
+ Registry.at("Foo##{name}").visibility.should == :private
450
+ end
451
+ end if YARD::Parser::SourceParser.parser_type == :ruby
452
+ end
453
+ end
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe YARD::Tags::Library do
4
+ def tag(docstring)
5
+ Docstring.new(docstring).tags.first
6
+ end
7
+
8
+ describe '#see_tag' do
9
+ it "should take a URL" do
10
+ tag("@see http://example.com").name.should == "http://example.com"
11
+ end
12
+
13
+ it "should take an object path" do
14
+ tag("@see String#reverse").name.should == "String#reverse"
15
+ end
16
+
17
+ it "should take a description after the url/object" do
18
+ tag = tag("@see http://example.com An Example Site")
19
+ tag.name.should == "http://example.com"
20
+ tag.text.should == "An Example Site"
21
+ end
22
+ end
23
+
24
+ describe '.define_tag' do
25
+ it "should allow defining tags with '.' in the name (x.y.z defines method x_y_z)" do
26
+ Tags::Library.define_tag("foo", 'x.y.z')
27
+ Tags::Library.define_tag("foo2", 'x.y.zz', Tags::OverloadTag)
28
+ Tags::Library.instance.method(:x_y_z_tag).should_not be_nil
29
+ Tags::Library.instance.method(:x_y_zz_tag).should_not be_nil
30
+ tag('@x.y.z foo bar').text.should == 'foo bar'
31
+ tag('@x.y.zz foo(bar)').signature.should == 'foo(bar)'
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,53 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe YARD::Tags::OverloadTag do
4
+ before do
5
+ @tag = Tags::OverloadTag.new(:overload, <<-'eof')
6
+ def bar(a, b = 1, &block)
7
+ Hello world
8
+ @param a [String]
9
+ @return [String]
10
+ eof
11
+ end
12
+
13
+ it "should parse the first line as a method signature" do
14
+ @tag.signature.should == "def bar(a, b = 1, &block)"
15
+ @tag.parameters.should == [['a', nil], ['b', "1"], ['&block', nil]]
16
+ end
17
+
18
+ it "should parse the rest of the text as a new Docstring" do
19
+ @tag.docstring.should be_instance_of(Docstring)
20
+ @tag.docstring.should == "Hello world"
21
+ end
22
+
23
+ it "should set Docstring's object after #object= is called" do
24
+ m = mock(:object)
25
+ @tag.object = m
26
+ @tag.docstring.object.should == m
27
+ end
28
+
29
+ it "should respond to #tag, #tags and #has_tag?" do
30
+ @tag.object = mock(:object)
31
+ @tag.tags.size.should == 2
32
+ @tag.tag(:param).name.should == "a"
33
+ @tag.has_tag?(:return).should == true
34
+ end
35
+
36
+ it "should not be a CodeObjects::Base when not hooked up to an object" do
37
+ @tag.object = nil
38
+ @tag.is_a?(CodeObjects::Base).should == false
39
+ end
40
+
41
+ it "should be a CodeObjects::Base when hooked up to an object" do
42
+ @tag.object = mock(:object)
43
+ @tag.object.should_receive(:is_a?).at_least(3).times.with(CodeObjects::Base).and_return(true)
44
+ @tag.is_a?(CodeObjects::Base).should == true
45
+ @tag.kind_of?(CodeObjects::Base).should == true
46
+ (CodeObjects::Base === @tag).should == true
47
+ end
48
+
49
+ it "should not parse 'def' out of method name" do
50
+ tag = Tags::OverloadTag.new(:overload, "default")
51
+ tag.signature.should == "default"
52
+ end
53
+ end