deg-yard 0.8.7.1

Sign up to get free protection for your applications and to get access to all the features.
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,592 @@
1
+ # @title Getting Started Guide
2
+
3
+ # Getting Started with YARD
4
+
5
+ There are a few ways which YARD can be of use to you or your project. This
6
+ document will cover the most common ways to use YARD:
7
+
8
+ * [Documenting Code with YARD](#docing)
9
+ * [Using YARD to Generate Documentation](#using)
10
+ * [Configuring YARD](#config)
11
+ * [Extending YARD](#extending)
12
+ * [Templating YARD](#templating)
13
+ * [Plugin Support](#plugins)
14
+
15
+ <a name="docing"></a>
16
+
17
+ ## Documenting Code with YARD
18
+
19
+ By default, YARD is compatible with the same RDoc syntax most Ruby developers
20
+ are already familiar with. However, one of the biggest advantages of YARD is
21
+ the extended meta-data syntax, commonly known as "tags", that you can use
22
+ to express small bits of information in a structured and formal manner. While
23
+ RDoc syntax expects you to describe your method in a completely free-form
24
+ manner, YARD recommends declaring your parameters, return types, etc. with
25
+ the `@tag` syntax, which makes outputting the documentation more consistent
26
+ and easier to read. Consider the RDoc documentation for a method to_format:
27
+
28
+ # Converts the object into textual markup given a specific `format`
29
+ # (defaults to `:html`)
30
+ #
31
+ # == Parameters:
32
+ # format::
33
+ # A Symbol declaring the format to convert the object to. This
34
+ # can be `:text` or `:html`.
35
+ #
36
+ # == Returns:
37
+ # A string representing the object in a specified
38
+ # format.
39
+ #
40
+ def to_format(format = :html)
41
+ # format the object
42
+ end
43
+
44
+ While this may seem easy enough to read and understand, it's hard for a machine
45
+ to properly pull this data back out of our documentation. Also we've tied our
46
+ markup to our content, and now our documentation becomes hard to maintain if
47
+ we decide later to change our markup style (maybe we don't want the ":" suffix
48
+ on our headers anymore).
49
+
50
+ In YARD, we would simply define our method as:
51
+
52
+ # Converts the object into textual markup given a specific format.
53
+ #
54
+ # @param format [Symbol] the format type, `:text` or `:html`
55
+ # @return [String] the object converted into the expected format.
56
+ def to_format(format = :html)
57
+ # format the object
58
+ end
59
+
60
+ Using tags we can add semantic metadata to our code without worrying about
61
+ presentation. YARD will handle presentation for us when we decide to generate
62
+ documentation later.
63
+
64
+ ## Which Markup Format?
65
+
66
+ YARD does not impose a specific markup. The above example uses standard RDoc
67
+ markup formatting, but YARD also supports textile and markdown via the
68
+ command-line switch or `.yardopts` file (see below). This means that you are
69
+ free to use whatever formatting you like. This guide is actually written
70
+ using markdown. YARD, however, does add a few important syntaxes that are
71
+ processed no matter which markup formatting you use, such as tag support
72
+ and inter-document linking. These syntaxes are discussed below.
73
+
74
+ ## Adding Tags to Documentation
75
+
76
+ The tag syntax that YARD uses is the same @tag-style syntax you may have seen
77
+ if you've ever coded in Java, Python, PHP, Objective-C or a myriad of other
78
+ languages. The following tag adds an author tag to your class:
79
+
80
+ # @author Loren Segal
81
+ class MyClass
82
+ end
83
+
84
+ To allow for large amounts of text, the @tag syntax will recognize any indented
85
+ lines following a tag as part of the tag data. For example:
86
+
87
+ # @deprecated Use {#my_new_method} instead of this method because
88
+ # it uses a library that is no longer supported in Ruby 1.9.
89
+ # The new method accepts the same parameters.
90
+ def mymethod
91
+ end
92
+
93
+ ### List of Tags
94
+
95
+ A list of tags can be found in {file:docs/Tags.md#taglist}
96
+
97
+ ### Reference Tags
98
+
99
+ To reduce the amount of duplication in writing documentation for repetitive
100
+ code, YARD introduces "reference tags", which are not quite tags, but not
101
+ quite docstrings either. In a sense, they are tag (and docstring) modifiers.
102
+ Basically, any docstring (or tag) that begins with "(see OTHEROBJECT)" will
103
+ implicitly link the docstring or tag to the "OTHEROBJECT", copying any data
104
+ from that docstring/tag into your current object. Consider the example:
105
+
106
+ class MyWebServer
107
+ # Handles a request
108
+ # @param request [Request] the request object
109
+ # @return [String] the resulting webpage
110
+ def get(request) "hello" end
111
+
112
+ # (see #get)
113
+ def post(request) "hello" end
114
+ end
115
+
116
+ The above `#post` method takes the docstring and all tags (`param` and `return`)
117
+ of the `#get` method. When you generate HTML documentation, you will see this
118
+ duplication automatically, so you don't have to manually type it out. We can
119
+ also add our own custom docstring information below the "see" reference, and
120
+ whatever we write will be appended to the docstring:
121
+
122
+ # (see #get)
123
+ # @note This method may modify our application state!
124
+ def post(request) self.state += 1; "hello" end
125
+
126
+ Here we added another tag, but we could have also added plain text. The
127
+ text must be appended *after* the `(see ...)` statement, preferably on
128
+ a separate line.
129
+
130
+ Note that we don't have to "refer" the whole docstring. We can also link
131
+ individual tags instead. Since "get" and "post" actually have different
132
+ descriptions, a more accurate example would be to only refer our parameter
133
+ and return tags:
134
+
135
+ class MyWebServer
136
+ # Handles a GET request
137
+ # @param request [Request] the request object
138
+ # @return [String] the resulting webpage
139
+ def get(request) "hello" end
140
+
141
+ # Handles a POST request
142
+ # @note This method may modify our application state!
143
+ # @param (see #get)
144
+ # @return (see #get)
145
+ def post(request) self.state += 1; "hello" end
146
+ end
147
+
148
+ The above copies all of the param and return tags from `#get`. Note that you
149
+ cannot copy individual tags of a specific type with this syntax.
150
+
151
+ ## Declaring Types
152
+
153
+ Some tags also have an optional "types" field which let us declare a list of
154
+ types associated with the tag. For instance, a return tag can be declared
155
+ with or without a types field.
156
+
157
+ # @return [String, nil] the contents of our object or nil
158
+ # if the object has not been filled with data.
159
+ def validate; end
160
+
161
+ # We don't care about the "type" here:
162
+ # @return the object
163
+ def to_obj; end
164
+
165
+ The list of types is in the form `[type1, type2, ...]` and is mostly free-form,
166
+ so we can also specify duck-types or constant values. For example:
167
+
168
+ # @param argname [#to_s] any object that responds to `#to_s`
169
+ # @param argname [true, false] only true or false
170
+
171
+ Note the latter example can be replaced by the meta-type "Boolean".
172
+ Another meta-type is "void", which stands for "no meaningful value"
173
+ and is used for return values. These meta-types are by convention
174
+ only, but are recommended.
175
+
176
+ List types can be specified in the form `CollectionClass<ElementType, ...>`.
177
+ For instance, consider the following Array that holds a set of Strings and
178
+ Symbols:
179
+
180
+ # @param list [Array<String, Symbol>] the list of strings and symbols.
181
+
182
+ We mentioned that these type fields are "mostly" free-form. In truth, they
183
+ are defined "by convention". To view samples of common type specifications
184
+ and recommended conventions for writing type specifications, see
185
+ [http://yardoc.org/types.html](http://yardoc.org/types.html). Note that these
186
+ conventions may change every now and then, although we are working on a more
187
+ "formal" type specification proposal.
188
+
189
+ ## Documenting DSL Methods
190
+
191
+ Application code in Ruby often makes use of DSL style metaprogrammed methods.
192
+ The most common is the `attr_accessor` method, which of course has built-in
193
+ support in YARD. However, frameworks and libraries often expose custom
194
+ methods that perform similar metaprogramming tasks, and it is often useful
195
+ to document their functionality in your application. Consider the `property`
196
+ method in a project like [DataMapper](http://datamapper.org), which creates
197
+ a typed attribute for a database model. The code might look like:
198
+
199
+ class Post
200
+ include DataMapper::Resource
201
+
202
+ property :title, String
203
+ end
204
+
205
+ As of version 0.7.0, YARD will automatically pick up on these basic methods if
206
+ you document them with a docstring. Therefore, simply adding some comments to
207
+ the code will cause it to generate documentation:
208
+
209
+ class Post
210
+ include DataMapper::Resource
211
+
212
+ # @return [String] the title property of the post
213
+ property :title, String
214
+ end
215
+
216
+ Note that YARD uses the first argument in the method call to determine the
217
+ method name. In some cases, this would not be the method name, and you would
218
+ need to declare it manually. You can do so with the `@!method` directive:
219
+
220
+ # @!method foo
221
+ create_a_foo_method
222
+
223
+ The @!method directive can also accept a full method signature with parameters:
224
+
225
+ # @!method foo(name, opts = {})
226
+ create_a_foo_method
227
+
228
+ You can also set visibility and scope, or modify the method signature with
229
+ extra tags. The following adds documentation for a private class method:
230
+
231
+ # @!method foo(opts = {})
232
+ # The foo method!
233
+ # @!scope class
234
+ # @!visibility private
235
+ create_a_private_foo_class_method
236
+
237
+ Finally, you can tag a method as an attribute by replacing the @!method
238
+ tag with @!attribute. The @!attribute directive allows for the flags [r], [w],
239
+ or [rw] to declare a readonly, writeonly, or readwrite attribute, respectively.
240
+
241
+ # @!attribute [w]
242
+ # The writeonly foo attribute!
243
+ a_writeonly_attribute :foo
244
+
245
+ (Note that if the name can be automatically detected, you do not need to
246
+ specify it in the @!method or @!attribute directives)
247
+
248
+ However, you will notice a few drawbacks with this basic support:
249
+
250
+ 1. There is a fair bit of duplication in such documentation. Specifically, we
251
+ repeat the term String and title twice in the property example.
252
+ 2. We must write a code comment for this property to show up in the documentation.
253
+ If we do not write a comment, it is ignored.
254
+
255
+ ### Macros
256
+
257
+ Fortunately YARD 0.7.0 also adds macros, a powerful way to add support for
258
+ these DSL methods on the fly without writing extra plugins. Macros allow
259
+ you to interpolate arguments from the method call inside the docstring,
260
+ reducing duplication. If we re-wrote the `property` example from above
261
+ using a macro, it might look like:
262
+
263
+ class Post
264
+ include DataMapper::Resource
265
+
266
+ # @!macro dm.property
267
+ # @return [$2] the $1 $0 of the post
268
+ property :title, String
269
+ end
270
+
271
+ (Note that $0 represents the method call, in this case `property`. The rest
272
+ are arguments in the method call.)
273
+
274
+ The above example is equivalent to the first version shown in the previous
275
+ section. There is also some extra benefit to using this macro, in that we
276
+ can re-apply it to any other property in our class by simply calling on
277
+ the macro. The following:
278
+
279
+ # @!macro dm.property
280
+ property :view_count, Integer
281
+
282
+ Would be equivalent to:
283
+
284
+ # @return [Integer] the view_count property of the post
285
+ property :view_count, Integer
286
+
287
+ Finally, macros can be "attached" to method calls, allowing them to be implicitly
288
+ activated every time the method call is seen in the source code of the class,
289
+ or an inheriting class. By simply adding the `[attach]` flag, the macro
290
+ becomes implicit on future calls. All of the properties below get documented
291
+ by using this snippet:
292
+
293
+ class Post
294
+ include DataMapper::Resource
295
+
296
+ # @!macro [attach] dm.property
297
+ # @return [$2] the $1 $0 of the post
298
+ property :title, String
299
+ property :view_count, Integer
300
+ property :email, String
301
+ end
302
+
303
+ You can read more about macros in the {file:docs/Tags.md Tags Overview} document.
304
+
305
+ ## Customized YARD Markup
306
+
307
+ YARD supports a special syntax to link to other code objects, URLs, files,
308
+ or embed docstrings between documents. This syntax has the general form
309
+ of `{Name OptionalTitle}` (where `OptionalTitle` can have spaces, but `Name`
310
+ cannot).
311
+
312
+ ### Linking Objects `{...}`
313
+
314
+ To link another "object" (class, method, module, etc.), use the format:
315
+
316
+ {ObjectName#method OPTIONAL_TITLE}
317
+ {Class::CONSTANT My constant's title}
318
+ {#method_inside_current_namespace}
319
+
320
+ Without an explicit title, YARD will use the relative path to the object as
321
+ the link name. Note that you can also use relative paths inside the object
322
+ path to refer to an object inside the same namespace as your current docstring.
323
+
324
+ Note that the `@see` tag automatically links its data. You should not use
325
+ the link syntax in this tag:
326
+
327
+ # @see #methodname <- Correct.
328
+ # @see {#methodname} <- Incorrect.
329
+
330
+ If you want to use a Hash, prefix the first { with "!":
331
+
332
+ # !{ :some_key => 'value' }
333
+
334
+ ### Linking URLs `{http://...}`
335
+
336
+ URLs are also linked using this `{...}` syntax:
337
+
338
+ {http://example.com Optional Title}
339
+ {mailto:email@example.com}
340
+
341
+ ### Linking Files `{file:...}`
342
+
343
+ Files can also be linked using this same syntax but by adding the `file:`
344
+ prefix to the object name. Files refer to extra readme files you added
345
+ via the command-line. Consider the following examples:
346
+
347
+ {file:docs/GettingStarted.md Getting Started}
348
+ {file:mypage.html Name#anchor}
349
+
350
+ As shown, you can also add an optional `#anchor` if the page is an HTML link.
351
+
352
+ ### Embedding Docstrings `{include:...}`
353
+
354
+ We saw the `(see ...)` syntax above, which allowed us to link an entire docstring
355
+ with another. Sometimes, however, we just want to copy docstring text without
356
+ tags. Using the same `{...}` syntax, but using the `include:` prefix, we can
357
+ embed a docstring (minus tags) at a specific point in the text.
358
+
359
+ # This class is cool
360
+ # @abstract
361
+ class Foo; end
362
+
363
+ # This is another class. {include:Foo} too!
364
+ class Bar; end
365
+
366
+ The docstring for Bar becomes:
367
+
368
+ "This is another class. This class is cool too!"
369
+
370
+ ### Embedding Files `{include:file:...}`
371
+
372
+ You can embed the contents of files using `{include:file:path/to/file}`,
373
+ similar to the `{include:OBJECT}` tag above. If the file uses a specific markup
374
+ type, it will be applied and embedded as marked up text. The following
375
+ shows how the tag can be used inside of comments:
376
+
377
+ # Here is an example of a highlighted Ruby file:
378
+ #
379
+ # {include:file:examples/test.rb}
380
+
381
+ ### Rendering Objects `{render:...}`
382
+
383
+ Entire objects can also be rendered in place in documentation. This can be
384
+ used for guide-style documentation which does not document the entire source
385
+ tree, but instead selectively renders important classes or methods. Consider
386
+ the following documentation inside of a README file:
387
+
388
+ !!!plain
389
+ = igLatinPay!
390
+
391
+ This library adds pig latin methods to the string class, allowing you
392
+ to transform sentences into pig latin.
393
+
394
+ {render:String#pig_latin}
395
+
396
+ You can also un-pig-latin-ify a word or sentence:
397
+
398
+ {render:String#de_pig_latin}
399
+
400
+ The above would render the methods in place inside the README document,
401
+ allowing you to summarize a small library in a single file.
402
+
403
+ <a name="using"></a>
404
+
405
+ ## Using YARD to Generate Documentation
406
+
407
+ ### `yard` Executable
408
+
409
+ YARD ships with a single executable aptly named `yard`. In addition to
410
+ generating standard documentation for your project, you would use this tool
411
+ if you wanted to:
412
+
413
+ * Document all installed gems
414
+ * Run a local documentation server
415
+ * Generate UML diagrams using [Graphviz][graphviz]
416
+ * View `ri`-style documentation
417
+ * Diff your documentation
418
+ * Analyze documentation statistics.
419
+
420
+ The following commands are available in YARD 0.6.x (see `yard help` for a
421
+ full list):
422
+
423
+ Usage: yard <command> [options]
424
+
425
+ Commands:
426
+ config Views or edits current global configuration
427
+ diff Returns the object diff of two gems or .yardoc files
428
+ doc Generates documentation
429
+ gems Builds YARD index for gems
430
+ graph Graphs class diagram using Graphviz
431
+ help Retrieves help for a command
432
+ ri A tool to view documentation in the console like `ri`
433
+ server Runs a local documentation server
434
+ stats Prints documentation statistics on a set of files
435
+
436
+ Note that `yardoc` is an alias for `yard doc`, and `yri` is an alias for
437
+ `yard ri`. These commands are maintained for backwards compatibility.
438
+
439
+ ### `.yardopts` Options File
440
+
441
+ Unless your documentation is very small, you'll end up needing to run `yardoc`
442
+ with many options. The `yardoc` tool will use the options found in this file.
443
+ It is recommended to check this in to your repository and distribute it with
444
+ your source. This file is placed at the root of your project (in the directory
445
+ you run `yardoc` from) and contains all of arguments you would otherwise pass
446
+ to the command-line tool. For instance, if you often type:
447
+
448
+ yardoc --no-private --protected app/**/*.rb - README LEGAL COPYING
449
+
450
+ You can place the following into your `.yardopts`:
451
+
452
+ --no-private --protected app/**/*.rb - README LEGAL COPYING
453
+
454
+ This way, you only need to type:
455
+
456
+ yardoc
457
+
458
+ Any extra switches passed to the command-line now will be appended to your
459
+ `.yardopts` options.
460
+
461
+ Note that options for `yardoc` are discussed in the {file:README.md README},
462
+ and a full overview of the `.yardopts` file can be found in {YARD::CLI::Yardoc}.
463
+
464
+ ### Documenting Extra Files
465
+
466
+ "Extra files" are extra guide style documents that help to give a brief overview
467
+ of how to use your library/framework, as well as any extra information that
468
+ might be vital for your users. The most common "extra file" is the README,
469
+ which is automatically detected by YARD if found in the root of your project
470
+ (any file starting with `README*`). You can specify extra files on the command
471
+ line (or in the `.yardopts` file) by listing them after the '-' separator:
472
+
473
+ yardoc lib/**/*.rb ext/**/*.c - LICENSE.txt
474
+
475
+ Note that the README will automatically be picked up, so you do not need to
476
+ specify it. If you don't want to modify the default file globs, you can ignore
477
+ the first set of arguments:
478
+
479
+ yardoc - LICENSE.txt
480
+
481
+ Below you can read about how to customize the look of these extra files, both
482
+ with markup and pretty titles.
483
+
484
+ #### Adding Meta-Data to Extra Files
485
+
486
+ You can add YARD-style `@tag` metadata to the top of any extra file if prefixed
487
+ by a `#` hash comment. YARD allows for arbitrary meta-data, but pays special
488
+ attention to the tags `@markup`, `@encoding`, and `@title`. Note that there
489
+ cannot be any whitespace before the tags. Here is an example of some tag data
490
+ in a README:
491
+
492
+ # @markup markdown
493
+ # @title The Best Library in the World!
494
+ # @author The Author Name
495
+
496
+ This is the best library you will ever meet. Lipsum ...
497
+
498
+ The `@markup` tag allows you to specify a markup format to use for the file,
499
+ including "markdown", "textile", "rdoc", "ruby", "text", "html", or "none"
500
+ (no markup). This can be used when the markup cannot be auto-detected using
501
+ the extension of the filename, if the file has no extension, or if you want
502
+ to override the auto-detection.
503
+
504
+ By using `@encoding` you can specify a non-standard encoding. Note that
505
+ `yardoc --charset` sets the global encoding (for all comments / files),
506
+ so if you are using unicode across all your files, you can specify it there.
507
+ Using the `@encoding` tag might be used to override the default global
508
+ charset, say, if you had a localized `README.jp` file with SJIS data.
509
+ Also note that this only affects Ruby 1.9.x, as Ruby 1.8 is not properly
510
+ encoding aware.
511
+
512
+ The `@title` tag allows you to specify a full title name for the document.
513
+ By default, YARD uses the filename as the title of the document and lists
514
+ it in the file list in the index and file menu. In some cases, the file name
515
+ might not be descriptive enough, so YARD allows you to specify a full title:
516
+
517
+ contents of TITLE.txt:
518
+ # @title The Title of The Document
519
+
520
+ Currently all other meta-data is hidden from view, though accessible
521
+ programmatically using the {YARD::CodeObjects::ExtraFileObject} class.
522
+
523
+ <a name="config"></a>
524
+
525
+ ## Configuring YARD
526
+
527
+ YARD (0.6.2+) supports a global configuration file stored in `~/.yard/config`.
528
+ This file is stored as a YAML file and can contain arbitrary keys and values
529
+ that can be used by YARD at run-time. YARD defines specific keys that are used
530
+ to control various features, and they are listed in {YARD::Config::DEFAULT_CONFIG_OPTIONS}.
531
+ A sample configuration file might look like:
532
+
533
+ :load_plugins: false
534
+ :ignored_plugins:
535
+ - my_plugin
536
+ - my_other_plugin
537
+ :autoload_plugins:
538
+ - my_autoload_plugin
539
+ :safe_mode: false
540
+
541
+ You can also view and edit these configuration options from the commandline
542
+ using the `yard config` command. To list your configuration, use `yard config --list`.
543
+ To view a key, use `yard config ITEM`, and to set it, use `yard config ITEM VALUE`.
544
+
545
+ <a name="extending"></a>
546
+
547
+ ## Extending YARD
548
+
549
+ There are many ways to extend YARD to support non-standard Ruby syntax (DSLs),
550
+ add new meta-data tags or programmatically access the intermediate metadata
551
+ and documentation from code. An overview of YARD's full architecture can be
552
+ found in the {file:docs/Overview.md} document.
553
+
554
+ For information on adding support for Ruby DSLs, see the {file:docs/Handlers.md}
555
+ and {file:docs/Parser.md} architecture documents.
556
+
557
+ For information on adding extra tags, see {file:docs/Tags.md}.
558
+
559
+ For information on accessing the data YARD stores about your documentation,
560
+ look at the {file:docs/CodeObjects.md} architecture document.
561
+
562
+ <a name="templating"></a>
563
+
564
+ ## Templating YARD
565
+
566
+ In many cases you may want to change the style of YARD's templates or add extra
567
+ information after extending it. The {file:docs/Templates.md} architecture
568
+ document covers the basics of how YARD's templating system works.
569
+
570
+ <a name="plugins"></a>
571
+
572
+ ## Plugin Support
573
+
574
+ As of 0.4, YARD will automatically load any gem named with the prefix of
575
+ `yard-` or `yard_`. You can use this to load a custom plugin that
576
+ [extend](#extending) YARD's functionality. A good example of this
577
+ is the [yard-rspec][yard-rspec] plugin, which adds [RSpec][rspec] specifications
578
+ to your documentation (`yardoc` and `yri`). You can try it out by installing
579
+ the gem or cloning the project and trying the example:
580
+
581
+ $ gem install yard-rspec -s http://gemcutter.org
582
+ or
583
+ $ git clone git://github.com/lsegal/yard-spec-plugin
584
+
585
+ YARD also provides a way to temporarily disable plugins on a per-user basis.
586
+ To disable a plugin create the file `~/.yard/ignored_plugins` with a list
587
+ of plugin names separated by newlines. Note that the `.yard` directory might
588
+ not exist, so you may need to create it.
589
+
590
+ [graphviz]:http://www.graphviz.org
591
+ [yard-rspec]:http://github.com/lsegal/yard-spec-plugin
592
+ [rspec]:http://rspec.info