yard 0.9.16 → 0.9.17

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of yard might be problematic. Click here for more details.

Files changed (566) hide show
  1. checksums.yaml +5 -5
  2. data/.yardopts +26 -26
  3. data/CHANGELOG.md +728 -728
  4. data/LEGAL +66 -66
  5. data/LICENSE +22 -22
  6. data/README.md +328 -328
  7. data/Rakefile +53 -47
  8. data/benchmarks/builtins_vs_eval.rb +24 -24
  9. data/benchmarks/concat_vs_join.rb +13 -13
  10. data/benchmarks/erb_vs_erubis.rb +54 -54
  11. data/benchmarks/format_args.rb +47 -47
  12. data/benchmarks/generation.rb +38 -38
  13. data/benchmarks/marshal_vs_dbm.rb +64 -64
  14. data/benchmarks/parsing.rb +46 -46
  15. data/benchmarks/pathname_vs_string.rb +50 -50
  16. data/benchmarks/rdoc_vs_yardoc.rb +11 -11
  17. data/benchmarks/registry_store_types.rb +49 -49
  18. data/benchmarks/ri_vs_yri.rb +19 -19
  19. data/benchmarks/ripper_parser.rb +13 -13
  20. data/benchmarks/splat_vs_flatten.rb +13 -13
  21. data/benchmarks/template_erb.rb +23 -23
  22. data/benchmarks/template_format.rb +7 -7
  23. data/benchmarks/template_profile.rb +18 -18
  24. data/benchmarks/yri_cache.rb +20 -20
  25. data/bin/yard +13 -13
  26. data/bin/yardoc +13 -13
  27. data/bin/yri +13 -13
  28. data/docs/CodeObjects.md +115 -115
  29. data/docs/GettingStarted.md +679 -679
  30. data/docs/Handlers.md +152 -152
  31. data/docs/Overview.md +61 -61
  32. data/docs/Parser.md +191 -191
  33. data/docs/Tags.md +283 -283
  34. data/docs/TagsArch.md +123 -123
  35. data/docs/Templates.md +496 -496
  36. data/docs/WhatsNew.md +1245 -1245
  37. data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
  38. data/docs/templates/default/fulldoc/html/setup.rb +6 -6
  39. data/docs/templates/default/layout/html/setup.rb +9 -9
  40. data/docs/templates/default/layout/html/tag_list.erb +11 -11
  41. data/docs/templates/default/yard_tags/html/list.erb +18 -18
  42. data/docs/templates/default/yard_tags/html/setup.rb +26 -26
  43. data/docs/templates/plugin.rb +70 -70
  44. data/lib/rubygems_plugin.rb +9 -9
  45. data/lib/yard.rb +69 -69
  46. data/lib/yard/autoload.rb +303 -303
  47. data/lib/yard/cli/command.rb +85 -85
  48. data/lib/yard/cli/command_parser.rb +93 -93
  49. data/lib/yard/cli/config.rb +198 -198
  50. data/lib/yard/cli/diff.rb +270 -270
  51. data/lib/yard/cli/display.rb +69 -69
  52. data/lib/yard/cli/gems.rb +84 -84
  53. data/lib/yard/cli/graph.rb +125 -125
  54. data/lib/yard/cli/help.rb +20 -20
  55. data/lib/yard/cli/i18n.rb +70 -70
  56. data/lib/yard/cli/list.rb +23 -23
  57. data/lib/yard/cli/markup_types.rb +32 -32
  58. data/lib/yard/cli/server.rb +257 -257
  59. data/lib/yard/cli/stats.rb +231 -231
  60. data/lib/yard/cli/yardoc.rb +788 -788
  61. data/lib/yard/cli/yardopts_command.rb +110 -110
  62. data/lib/yard/cli/yri.rb +215 -215
  63. data/lib/yard/code_objects/base.rb +615 -610
  64. data/lib/yard/code_objects/class_object.rb +146 -146
  65. data/lib/yard/code_objects/class_variable_object.rb +11 -11
  66. data/lib/yard/code_objects/constant_object.rb +16 -16
  67. data/lib/yard/code_objects/extended_method_object.rb +24 -24
  68. data/lib/yard/code_objects/extra_file_object.rb +131 -131
  69. data/lib/yard/code_objects/macro_object.rb +172 -172
  70. data/lib/yard/code_objects/method_object.rb +196 -196
  71. data/lib/yard/code_objects/module_object.rb +21 -21
  72. data/lib/yard/code_objects/namespace_mapper.rb +114 -114
  73. data/lib/yard/code_objects/namespace_object.rb +200 -200
  74. data/lib/yard/code_objects/proxy.rb +240 -240
  75. data/lib/yard/code_objects/root_object.rb +19 -19
  76. data/lib/yard/config.rb +270 -270
  77. data/lib/yard/core_ext/array.rb +16 -16
  78. data/lib/yard/core_ext/file.rb +69 -69
  79. data/lib/yard/core_ext/hash.rb +16 -16
  80. data/lib/yard/core_ext/insertion.rb +63 -63
  81. data/lib/yard/core_ext/module.rb +20 -20
  82. data/lib/yard/core_ext/string.rb +68 -68
  83. data/lib/yard/core_ext/symbol_hash.rb +75 -75
  84. data/lib/yard/docstring.rb +386 -378
  85. data/lib/yard/docstring_parser.rb +345 -345
  86. data/lib/yard/gem_index.rb +29 -29
  87. data/lib/yard/globals.rb +22 -22
  88. data/lib/yard/handlers/base.rb +595 -595
  89. data/lib/yard/handlers/c/alias_handler.rb +16 -16
  90. data/lib/yard/handlers/c/attribute_handler.rb +13 -13
  91. data/lib/yard/handlers/c/base.rb +129 -129
  92. data/lib/yard/handlers/c/class_handler.rb +27 -27
  93. data/lib/yard/handlers/c/constant_handler.rb +13 -13
  94. data/lib/yard/handlers/c/handler_methods.rb +211 -211
  95. data/lib/yard/handlers/c/init_handler.rb +20 -20
  96. data/lib/yard/handlers/c/method_handler.rb +45 -36
  97. data/lib/yard/handlers/c/mixin_handler.rb +21 -21
  98. data/lib/yard/handlers/c/module_handler.rb +17 -17
  99. data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
  100. data/lib/yard/handlers/c/path_handler.rb +11 -11
  101. data/lib/yard/handlers/c/struct_handler.rb +13 -13
  102. data/lib/yard/handlers/c/symbol_handler.rb +8 -8
  103. data/lib/yard/handlers/processor.rb +200 -200
  104. data/lib/yard/handlers/ruby/alias_handler.rb +44 -44
  105. data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
  106. data/lib/yard/handlers/ruby/base.rb +165 -165
  107. data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
  108. data/lib/yard/handlers/ruby/class_handler.rb +119 -119
  109. data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
  110. data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
  111. data/lib/yard/handlers/ruby/constant_handler.rb +59 -59
  112. data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
  113. data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
  114. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -95
  115. data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
  116. data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
  117. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
  118. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
  119. data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
  120. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
  121. data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
  122. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
  123. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
  124. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
  125. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
  126. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
  127. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
  128. data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
  129. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
  130. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
  131. data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
  132. data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
  133. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
  134. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
  135. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
  136. data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
  137. data/lib/yard/handlers/ruby/method_handler.rb +118 -118
  138. data/lib/yard/handlers/ruby/mixin_handler.rb +37 -37
  139. data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
  140. data/lib/yard/handlers/ruby/module_handler.rb +12 -12
  141. data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
  142. data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
  143. data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
  146. data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
  147. data/lib/yard/i18n/locale.rb +67 -67
  148. data/lib/yard/i18n/message.rb +57 -57
  149. data/lib/yard/i18n/messages.rb +56 -56
  150. data/lib/yard/i18n/po_parser.rb +61 -61
  151. data/lib/yard/i18n/pot_generator.rb +290 -290
  152. data/lib/yard/i18n/text.rb +173 -173
  153. data/lib/yard/logging.rb +205 -205
  154. data/lib/yard/options.rb +217 -217
  155. data/lib/yard/parser/base.rb +57 -57
  156. data/lib/yard/parser/c/c_parser.rb +235 -235
  157. data/lib/yard/parser/c/comment_parser.rb +134 -134
  158. data/lib/yard/parser/c/statement.rb +64 -64
  159. data/lib/yard/parser/ruby/ast_node.rb +540 -540
  160. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1354 -1354
  161. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
  162. data/lib/yard/parser/ruby/legacy/statement.rb +66 -66
  163. data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
  164. data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
  165. data/lib/yard/parser/ruby/ruby_parser.rb +687 -687
  166. data/lib/yard/parser/ruby/token_resolver.rb +156 -156
  167. data/lib/yard/parser/source_parser.rb +526 -526
  168. data/lib/yard/rake/yardoc_task.rb +81 -81
  169. data/lib/yard/registry.rb +439 -439
  170. data/lib/yard/registry_resolver.rb +189 -189
  171. data/lib/yard/registry_store.rb +337 -337
  172. data/lib/yard/rubygems/backports.rb +10 -10
  173. data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
  174. data/lib/yard/rubygems/backports/MIT.txt +20 -20
  175. data/lib/yard/rubygems/backports/gem.rb +10 -10
  176. data/lib/yard/rubygems/backports/source_index.rb +365 -365
  177. data/lib/yard/rubygems/doc_manager.rb +90 -90
  178. data/lib/yard/rubygems/hook.rb +197 -197
  179. data/lib/yard/rubygems/specification.rb +50 -50
  180. data/lib/yard/serializers/base.rb +83 -83
  181. data/lib/yard/serializers/file_system_serializer.rb +123 -123
  182. data/lib/yard/serializers/process_serializer.rb +24 -24
  183. data/lib/yard/serializers/stdout_serializer.rb +34 -34
  184. data/lib/yard/serializers/yardoc_serializer.rb +152 -152
  185. data/lib/yard/server.rb +13 -13
  186. data/lib/yard/server/adapter.rb +100 -100
  187. data/lib/yard/server/commands/base.rb +209 -209
  188. data/lib/yard/server/commands/display_file_command.rb +29 -29
  189. data/lib/yard/server/commands/display_object_command.rb +65 -65
  190. data/lib/yard/server/commands/frames_command.rb +16 -16
  191. data/lib/yard/server/commands/library_command.rb +187 -187
  192. data/lib/yard/server/commands/library_index_command.rb +28 -28
  193. data/lib/yard/server/commands/list_command.rb +25 -25
  194. data/lib/yard/server/commands/root_request_command.rb +15 -15
  195. data/lib/yard/server/commands/search_command.rb +79 -79
  196. data/lib/yard/server/commands/static_file_command.rb +23 -23
  197. data/lib/yard/server/commands/static_file_helpers.rb +62 -62
  198. data/lib/yard/server/doc_server_helper.rb +91 -91
  199. data/lib/yard/server/doc_server_serializer.rb +39 -39
  200. data/lib/yard/server/library_version.rb +277 -277
  201. data/lib/yard/server/rack_adapter.rb +89 -89
  202. data/lib/yard/server/router.rb +187 -187
  203. data/lib/yard/server/static_caching.rb +46 -46
  204. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
  205. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
  206. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
  207. data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
  208. data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
  209. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
  210. data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
  211. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
  212. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
  213. data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
  214. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
  215. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
  216. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
  217. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
  218. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
  219. data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
  220. data/lib/yard/server/webrick_adapter.rb +45 -45
  221. data/lib/yard/tags/default_factory.rb +191 -191
  222. data/lib/yard/tags/default_tag.rb +13 -13
  223. data/lib/yard/tags/directives.rb +616 -616
  224. data/lib/yard/tags/library.rb +633 -633
  225. data/lib/yard/tags/option_tag.rb +13 -13
  226. data/lib/yard/tags/overload_tag.rb +71 -71
  227. data/lib/yard/tags/ref_tag.rb +8 -8
  228. data/lib/yard/tags/ref_tag_list.rb +28 -28
  229. data/lib/yard/tags/tag.rb +71 -71
  230. data/lib/yard/tags/tag_format_error.rb +7 -7
  231. data/lib/yard/tags/types_explainer.rb +162 -162
  232. data/lib/yard/templates/engine.rb +186 -186
  233. data/lib/yard/templates/erb_cache.rb +23 -23
  234. data/lib/yard/templates/helpers/base_helper.rb +215 -215
  235. data/lib/yard/templates/helpers/filter_helper.rb +27 -27
  236. data/lib/yard/templates/helpers/html_helper.rb +646 -642
  237. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
  238. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
  239. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
  240. data/lib/yard/templates/helpers/markup_helper.rb +172 -172
  241. data/lib/yard/templates/helpers/method_helper.rb +75 -75
  242. data/lib/yard/templates/helpers/module_helper.rb +21 -21
  243. data/lib/yard/templates/helpers/text_helper.rb +112 -112
  244. data/lib/yard/templates/helpers/uml_helper.rb +47 -47
  245. data/lib/yard/templates/section.rb +105 -105
  246. data/lib/yard/templates/template.rb +418 -418
  247. data/lib/yard/templates/template_options.rb +92 -92
  248. data/lib/yard/verifier.rb +151 -151
  249. data/lib/yard/version.rb +3 -1
  250. data/spec/cli/command_parser_spec.rb +43 -43
  251. data/spec/cli/command_spec.rb +36 -36
  252. data/spec/cli/config_spec.rb +148 -148
  253. data/spec/cli/diff_spec.rb +254 -254
  254. data/spec/cli/display_spec.rb +30 -30
  255. data/spec/cli/gems_spec.rb +81 -81
  256. data/spec/cli/graph_spec.rb +18 -18
  257. data/spec/cli/help_spec.rb +22 -22
  258. data/spec/cli/i18n_spec.rb +107 -107
  259. data/spec/cli/list_spec.rb +8 -8
  260. data/spec/cli/markup_types_spec.rb +22 -22
  261. data/spec/cli/server_spec.rb +324 -324
  262. data/spec/cli/stats_spec.rb +96 -96
  263. data/spec/cli/yard_on_yard_spec.rb +38 -38
  264. data/spec/cli/yardoc_spec.rb +862 -849
  265. data/spec/cli/yri_spec.rb +101 -101
  266. data/spec/code_objects/base_spec.rb +470 -460
  267. data/spec/code_objects/class_object_spec.rb +226 -226
  268. data/spec/code_objects/code_object_list_spec.rb +36 -36
  269. data/spec/code_objects/constants_spec.rb +116 -116
  270. data/spec/code_objects/extra_file_object_spec.rb +160 -160
  271. data/spec/code_objects/macro_object_spec.rb +150 -150
  272. data/spec/code_objects/method_object_spec.rb +184 -184
  273. data/spec/code_objects/module_object_spec.rb +142 -142
  274. data/spec/code_objects/namespace_object_spec.rb +171 -171
  275. data/spec/code_objects/proxy_spec.rb +141 -141
  276. data/spec/code_objects/spec_helper.rb +3 -3
  277. data/spec/config_spec.rb +171 -171
  278. data/spec/core_ext/array_spec.rb +13 -13
  279. data/spec/core_ext/file_spec.rb +72 -72
  280. data/spec/core_ext/hash_spec.rb +14 -14
  281. data/spec/core_ext/insertion_spec.rb +37 -37
  282. data/spec/core_ext/module_spec.rb +15 -15
  283. data/spec/core_ext/string_spec.rb +42 -42
  284. data/spec/core_ext/symbol_hash_spec.rb +89 -89
  285. data/spec/docstring_parser_spec.rb +280 -262
  286. data/spec/docstring_spec.rb +373 -364
  287. data/spec/examples.txt +1875 -1871
  288. data/spec/handlers/alias_handler_spec.rb +82 -82
  289. data/spec/handlers/attribute_handler_spec.rb +96 -96
  290. data/spec/handlers/base_spec.rb +216 -216
  291. data/spec/handlers/c/alias_handler_spec.rb +34 -34
  292. data/spec/handlers/c/attribute_handler_spec.rb +41 -41
  293. data/spec/handlers/c/class_handler_spec.rb +78 -78
  294. data/spec/handlers/c/constant_handler_spec.rb +71 -71
  295. data/spec/handlers/c/init_handler_spec.rb +48 -48
  296. data/spec/handlers/c/method_handler_spec.rb +325 -325
  297. data/spec/handlers/c/mixin_handler_spec.rb +44 -44
  298. data/spec/handlers/c/module_handler_spec.rb +71 -71
  299. data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
  300. data/spec/handlers/c/path_handler_spec.rb +36 -36
  301. data/spec/handlers/c/spec_helper.rb +23 -23
  302. data/spec/handlers/c/struct_handler_spec.rb +16 -16
  303. data/spec/handlers/class_condition_handler_spec.rb +87 -87
  304. data/spec/handlers/class_handler_spec.rb +247 -247
  305. data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
  306. data/spec/handlers/class_variable_handler_spec.rb +12 -12
  307. data/spec/handlers/constant_handler_spec.rb +112 -112
  308. data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
  309. data/spec/handlers/dsl_handler_spec.rb +219 -219
  310. data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
  311. data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
  312. data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
  313. data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
  314. data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
  315. data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
  316. data/spec/handlers/examples/dsl_handler_001.rb.txt +154 -154
  317. data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
  318. data/spec/handlers/examples/extend_handler_001.rb.txt +15 -15
  319. data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
  320. data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
  321. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -37
  322. data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
  323. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
  324. data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
  325. data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
  326. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
  327. data/spec/handlers/exception_handler_spec.rb +49 -49
  328. data/spec/handlers/extend_handler_spec.rb +24 -24
  329. data/spec/handlers/legacy_base_spec.rb +128 -128
  330. data/spec/handlers/method_condition_handler_spec.rb +15 -15
  331. data/spec/handlers/method_handler_spec.rb +190 -190
  332. data/spec/handlers/mixin_handler_spec.rb +56 -56
  333. data/spec/handlers/module_function_handler_spec.rb +106 -106
  334. data/spec/handlers/module_handler_spec.rb +35 -35
  335. data/spec/handlers/private_class_method_handler_spec.rb +11 -11
  336. data/spec/handlers/private_constant_handler_spec.rb +25 -25
  337. data/spec/handlers/processor_spec.rb +35 -35
  338. data/spec/handlers/public_class_method_handler_spec.rb +11 -11
  339. data/spec/handlers/ruby/base_spec.rb +95 -95
  340. data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
  341. data/spec/handlers/spec_helper.rb +33 -33
  342. data/spec/handlers/visibility_handler_spec.rb +44 -44
  343. data/spec/handlers/yield_handler_spec.rb +52 -52
  344. data/spec/i18n/locale_spec.rb +81 -81
  345. data/spec/i18n/message_spec.rb +52 -52
  346. data/spec/i18n/messages_spec.rb +67 -67
  347. data/spec/i18n/pot_generator_spec.rb +295 -295
  348. data/spec/i18n/text_spec.rb +184 -184
  349. data/spec/logging_spec.rb +44 -44
  350. data/spec/options_spec.rb +171 -171
  351. data/spec/parser/base_spec.rb +24 -24
  352. data/spec/parser/c_parser_spec.rb +236 -223
  353. data/spec/parser/examples/array.c.txt +6267 -6267
  354. data/spec/parser/examples/example1.rb.txt +7 -7
  355. data/spec/parser/examples/extrafile.c.txt +8 -8
  356. data/spec/parser/examples/file.c.txt +28 -0
  357. data/spec/parser/examples/multifile.c.txt +22 -22
  358. data/spec/parser/examples/namespace.cpp.txt +68 -68
  359. data/spec/parser/examples/override.c.txt +424 -424
  360. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
  361. data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
  362. data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
  363. data/spec/parser/ruby/ast_node_spec.rb +33 -33
  364. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
  365. data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
  366. data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
  367. data/spec/parser/ruby/token_resolver_spec.rb +165 -165
  368. data/spec/parser/source_parser_spec.rb +727 -727
  369. data/spec/parser/tag_parsing_spec.rb +17 -17
  370. data/spec/rake/yardoc_task_spec.rb +118 -118
  371. data/spec/registry_spec.rb +463 -463
  372. data/spec/registry_store_spec.rb +316 -316
  373. data/spec/rubygems/doc_manager_spec.rb +112 -112
  374. data/spec/serializers/data/serialized_yardoc/checksums +1 -1
  375. data/spec/serializers/file_system_serializer_spec.rb +145 -145
  376. data/spec/serializers/spec_helper.rb +2 -2
  377. data/spec/serializers/yardoc_serializer_spec.rb +78 -78
  378. data/spec/server/adapter_spec.rb +39 -39
  379. data/spec/server/commands/base_spec.rb +91 -91
  380. data/spec/server/commands/library_command_spec.rb +39 -39
  381. data/spec/server/doc_server_helper_spec.rb +72 -72
  382. data/spec/server/doc_server_serializer_spec.rb +60 -60
  383. data/spec/server/rack_adapter_spec.rb +21 -21
  384. data/spec/server/router_spec.rb +123 -123
  385. data/spec/server/spec_helper.rb +22 -22
  386. data/spec/server/static_caching_spec.rb +47 -47
  387. data/spec/server/webrick_servlet_spec.rb +20 -20
  388. data/spec/server_spec.rb +19 -19
  389. data/spec/spec_helper.rb +212 -212
  390. data/spec/tags/default_factory_spec.rb +168 -168
  391. data/spec/tags/default_tag_spec.rb +11 -11
  392. data/spec/tags/directives_spec.rb +463 -463
  393. data/spec/tags/library_spec.rb +48 -48
  394. data/spec/tags/overload_tag_spec.rb +53 -53
  395. data/spec/tags/ref_tag_list_spec.rb +53 -53
  396. data/spec/tags/types_explainer_spec.rb +203 -203
  397. data/spec/templates/class_spec.rb +45 -45
  398. data/spec/templates/constant_spec.rb +41 -41
  399. data/spec/templates/engine_spec.rb +131 -131
  400. data/spec/templates/examples/class001.html +308 -308
  401. data/spec/templates/examples/class001.txt +36 -36
  402. data/spec/templates/examples/class002.html +39 -39
  403. data/spec/templates/examples/constant001.txt +24 -24
  404. data/spec/templates/examples/constant002.txt +6 -6
  405. data/spec/templates/examples/constant003.txt +10 -10
  406. data/spec/templates/examples/method001.html +137 -137
  407. data/spec/templates/examples/method001.txt +35 -35
  408. data/spec/templates/examples/method002.html +91 -91
  409. data/spec/templates/examples/method002.txt +20 -20
  410. data/spec/templates/examples/method003.html +165 -165
  411. data/spec/templates/examples/method003.txt +45 -45
  412. data/spec/templates/examples/method004.html +48 -48
  413. data/spec/templates/examples/method004.txt +10 -10
  414. data/spec/templates/examples/method005.html +105 -105
  415. data/spec/templates/examples/method005.txt +33 -33
  416. data/spec/templates/examples/method006.html +107 -107
  417. data/spec/templates/examples/method006.txt +20 -20
  418. data/spec/templates/examples/module001.dot +33 -33
  419. data/spec/templates/examples/module001.html +833 -833
  420. data/spec/templates/examples/module001.txt +33 -33
  421. data/spec/templates/examples/module002.html +341 -341
  422. data/spec/templates/examples/module003.html +202 -202
  423. data/spec/templates/examples/module004.html +394 -394
  424. data/spec/templates/examples/module005.html +81 -81
  425. data/spec/templates/examples/tag001.txt +82 -82
  426. data/spec/templates/helpers/base_helper_spec.rb +171 -171
  427. data/spec/templates/helpers/html_helper_spec.rb +668 -653
  428. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
  429. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
  430. data/spec/templates/helpers/markup_helper_spec.rb +136 -136
  431. data/spec/templates/helpers/method_helper_spec.rb +107 -107
  432. data/spec/templates/helpers/module_helper_spec.rb +35 -35
  433. data/spec/templates/helpers/shared_signature_examples.rb +126 -126
  434. data/spec/templates/helpers/text_helper_spec.rb +65 -65
  435. data/spec/templates/method_spec.rb +118 -118
  436. data/spec/templates/module_spec.rb +203 -203
  437. data/spec/templates/onefile_spec.rb +66 -66
  438. data/spec/templates/section_spec.rb +144 -144
  439. data/spec/templates/spec_helper.rb +76 -76
  440. data/spec/templates/tag_spec.rb +52 -52
  441. data/spec/templates/template_spec.rb +410 -410
  442. data/spec/verifier_spec.rb +106 -106
  443. data/templates/default/class/dot/setup.rb +7 -7
  444. data/templates/default/class/dot/superklass.erb +2 -2
  445. data/templates/default/class/html/constructor_details.erb +8 -8
  446. data/templates/default/class/html/setup.rb +2 -2
  447. data/templates/default/class/html/subclasses.erb +4 -4
  448. data/templates/default/class/setup.rb +36 -36
  449. data/templates/default/class/text/setup.rb +12 -12
  450. data/templates/default/class/text/subclasses.erb +5 -5
  451. data/templates/default/constant/text/header.erb +11 -11
  452. data/templates/default/constant/text/setup.rb +4 -4
  453. data/templates/default/docstring/html/abstract.erb +4 -4
  454. data/templates/default/docstring/html/deprecated.erb +1 -1
  455. data/templates/default/docstring/html/index.erb +5 -5
  456. data/templates/default/docstring/html/note.erb +6 -6
  457. data/templates/default/docstring/html/private.erb +4 -4
  458. data/templates/default/docstring/html/text.erb +1 -1
  459. data/templates/default/docstring/html/todo.erb +6 -6
  460. data/templates/default/docstring/setup.rb +52 -52
  461. data/templates/default/docstring/text/abstract.erb +2 -2
  462. data/templates/default/docstring/text/deprecated.erb +2 -2
  463. data/templates/default/docstring/text/index.erb +2 -2
  464. data/templates/default/docstring/text/note.erb +3 -3
  465. data/templates/default/docstring/text/private.erb +2 -2
  466. data/templates/default/docstring/text/text.erb +1 -1
  467. data/templates/default/docstring/text/todo.erb +3 -3
  468. data/templates/default/fulldoc/html/css/full_list.css +58 -58
  469. data/templates/default/fulldoc/html/css/style.css +496 -496
  470. data/templates/default/fulldoc/html/frames.erb +17 -17
  471. data/templates/default/fulldoc/html/full_list.erb +37 -37
  472. data/templates/default/fulldoc/html/full_list_class.erb +2 -2
  473. data/templates/default/fulldoc/html/full_list_file.erb +7 -7
  474. data/templates/default/fulldoc/html/full_list_method.erb +10 -10
  475. data/templates/default/fulldoc/html/js/app.js +292 -292
  476. data/templates/default/fulldoc/html/js/full_list.js +216 -216
  477. data/templates/default/fulldoc/html/js/jquery.js +3 -3
  478. data/templates/default/fulldoc/html/setup.rb +241 -241
  479. data/templates/default/layout/dot/header.erb +5 -5
  480. data/templates/default/layout/dot/setup.rb +15 -15
  481. data/templates/default/layout/html/breadcrumb.erb +11 -11
  482. data/templates/default/layout/html/files.erb +11 -11
  483. data/templates/default/layout/html/footer.erb +5 -5
  484. data/templates/default/layout/html/headers.erb +15 -15
  485. data/templates/default/layout/html/index.erb +2 -2
  486. data/templates/default/layout/html/layout.erb +23 -23
  487. data/templates/default/layout/html/listing.erb +4 -4
  488. data/templates/default/layout/html/objects.erb +32 -32
  489. data/templates/default/layout/html/script_setup.erb +4 -4
  490. data/templates/default/layout/html/search.erb +12 -12
  491. data/templates/default/layout/html/setup.rb +89 -89
  492. data/templates/default/method/html/header.erb +16 -16
  493. data/templates/default/method/setup.rb +4 -4
  494. data/templates/default/method_details/html/header.erb +2 -2
  495. data/templates/default/method_details/html/method_signature.erb +24 -24
  496. data/templates/default/method_details/html/source.erb +9 -9
  497. data/templates/default/method_details/setup.rb +11 -11
  498. data/templates/default/method_details/text/header.erb +10 -10
  499. data/templates/default/method_details/text/method_signature.erb +12 -12
  500. data/templates/default/method_details/text/setup.rb +11 -11
  501. data/templates/default/module/dot/child.erb +1 -1
  502. data/templates/default/module/dot/dependencies.erb +2 -2
  503. data/templates/default/module/dot/header.erb +6 -6
  504. data/templates/default/module/dot/info.erb +13 -13
  505. data/templates/default/module/dot/setup.rb +15 -15
  506. data/templates/default/module/html/attribute_details.erb +10 -10
  507. data/templates/default/module/html/attribute_summary.erb +8 -8
  508. data/templates/default/module/html/box_info.erb +43 -43
  509. data/templates/default/module/html/children.erb +8 -8
  510. data/templates/default/module/html/constant_summary.erb +17 -17
  511. data/templates/default/module/html/defines.erb +2 -2
  512. data/templates/default/module/html/header.erb +5 -5
  513. data/templates/default/module/html/inherited_attributes.erb +14 -14
  514. data/templates/default/module/html/inherited_constants.erb +8 -8
  515. data/templates/default/module/html/inherited_methods.erb +18 -18
  516. data/templates/default/module/html/item_summary.erb +40 -40
  517. data/templates/default/module/html/method_details_list.erb +9 -9
  518. data/templates/default/module/html/method_summary.erb +13 -13
  519. data/templates/default/module/html/methodmissing.erb +12 -12
  520. data/templates/default/module/setup.rb +167 -167
  521. data/templates/default/module/text/children.erb +9 -9
  522. data/templates/default/module/text/class_meths_list.erb +7 -7
  523. data/templates/default/module/text/extends.erb +7 -7
  524. data/templates/default/module/text/header.erb +7 -7
  525. data/templates/default/module/text/includes.erb +7 -7
  526. data/templates/default/module/text/instance_meths_list.erb +7 -7
  527. data/templates/default/module/text/setup.rb +13 -13
  528. data/templates/default/onefile/html/files.erb +4 -4
  529. data/templates/default/onefile/html/headers.erb +6 -6
  530. data/templates/default/onefile/html/layout.erb +17 -17
  531. data/templates/default/onefile/html/readme.erb +2 -2
  532. data/templates/default/onefile/html/setup.rb +62 -62
  533. data/templates/default/root/dot/child.erb +2 -2
  534. data/templates/default/root/dot/setup.rb +6 -6
  535. data/templates/default/root/html/setup.rb +2 -2
  536. data/templates/default/tags/html/example.erb +10 -10
  537. data/templates/default/tags/html/index.erb +2 -2
  538. data/templates/default/tags/html/option.erb +24 -24
  539. data/templates/default/tags/html/overload.erb +13 -13
  540. data/templates/default/tags/html/see.erb +7 -7
  541. data/templates/default/tags/html/tag.erb +20 -20
  542. data/templates/default/tags/setup.rb +57 -57
  543. data/templates/default/tags/text/example.erb +12 -12
  544. data/templates/default/tags/text/index.erb +1 -1
  545. data/templates/default/tags/text/option.erb +20 -20
  546. data/templates/default/tags/text/overload.erb +19 -19
  547. data/templates/default/tags/text/see.erb +11 -11
  548. data/templates/default/tags/text/tag.erb +13 -13
  549. data/templates/guide/class/html/setup.rb +2 -2
  550. data/templates/guide/docstring/html/setup.rb +2 -2
  551. data/templates/guide/fulldoc/html/css/style.css +108 -108
  552. data/templates/guide/fulldoc/html/js/app.js +33 -33
  553. data/templates/guide/fulldoc/html/setup.rb +74 -74
  554. data/templates/guide/layout/html/layout.erb +81 -81
  555. data/templates/guide/layout/html/setup.rb +25 -25
  556. data/templates/guide/method/html/header.erb +17 -17
  557. data/templates/guide/method/html/setup.rb +22 -22
  558. data/templates/guide/module/html/header.erb +6 -6
  559. data/templates/guide/module/html/method_list.erb +4 -4
  560. data/templates/guide/module/html/setup.rb +27 -27
  561. data/templates/guide/onefile/html/files.erb +4 -4
  562. data/templates/guide/onefile/html/setup.rb +6 -6
  563. data/templates/guide/onefile/html/toc.erb +3 -3
  564. data/templates/guide/tags/html/setup.rb +9 -9
  565. data/yard.gemspec +43 -43
  566. metadata +4 -4
@@ -1,283 +1,283 @@
1
- # @title Tags Overview
2
-
3
- # Tags Overview
4
-
5
- Tags represent meta-data as well as behavioural data that can be added to
6
- documentation through the `@tag` style syntax. As mentioned, there are two
7
- basic types of tags in YARD, "meta-data tags" and "behavioural tags", the
8
- latter is more often known as "directives". These two tag types can be
9
- visually identified by their prefix. Meta-data tags have a `@` prefix,
10
- while directives have a prefix of `@!` to indicate that the directive
11
- performs some potentially mutable action on or with the docstring. The
12
- two tag types would be used in the following way, respectively:
13
-
14
- # @meta_data_tag some data
15
- # @!directive_tag some data
16
- class Foo; end
17
-
18
- This document describes how tags can be specified, how they affect your
19
- documentation, and how to use specific built-in tags in YARD, as well
20
- as how to define custom tags.
21
-
22
- ## Meta-Data Tags
23
-
24
- Meta-data tags are useful to add arbitrary meta-data about a documented
25
- object. These tags simply add data to objects that can be looked up later,
26
- either programmatically, or displayed in templates. The benefit to describing
27
- objects using meta-data tags is that your documentation can be organized
28
- semantically. Rather than having a huge listing of text with no distinction
29
- of what each paragraph is discussing, tags allow you to focus in on specific
30
- elements of your documentation.
31
-
32
- For example, describing parameters of a method can often be important to your
33
- documentation, but should not be mixed up with the documentation that describes
34
- what the method itself does. In this case, separating the parameter documentation
35
- into {tag:param} tags can yield much better organized documentation, both in
36
- source and in your output, without having to manually format the data using
37
- standard markup.
38
-
39
- All of this meta-data can be easily parsed by tools and used both in your templates
40
- as well as in code checker tools. An example of how you can leverage tags
41
- programmatically is shown in the {tag:todo} tag, which lists a small snippet of
42
- Ruby code that can list all of your TODO items, if they are properly tagged.
43
-
44
- Custom meta-data tags can be added either programmatically or via the YARD
45
- command-line. This is discussed in the "[Adding Custom Tags](#Adding_Custom_Tags)"
46
- section.
47
-
48
- A list of built-in meta-data tags are found below in the [Tag List](#Tag_List).
49
-
50
- ## Directives
51
-
52
- Directives are similar to meta-data tags in the way they are specified, but they
53
- do not add meta-data to the object directly. Instead, they affect the parsing
54
- context and objects themselves, allowing a developer to create objects
55
- (like methods) outright, rather than simply add text to an existing object.
56
- Directives have a `@!` prefix to differentiate these tags from meta-data tags,
57
- as well as to indicate that the tag may modify or create new objects when
58
- it is called.
59
-
60
- A list of built-in directives are found below in the [Directive List](#Directive_List).
61
-
62
- ## Tag Syntax
63
-
64
- Tags begin with the `@` or `@!` prefix at the start of a comment line, followed
65
- immediately by the tag name, and then optional tag data (if the tag requires it).
66
- Unless otherwise specified by documentation for the tag, all "description" text
67
- is considered free-form data and can include any arbitrary textual data.
68
-
69
- ### Multi-line Tags
70
-
71
- Tags can span multiple lines if the subsequent lines are indented by more than
72
- one space. The typical convention is to indent subsequent lines by 2 spaces.
73
- In the following example, `@tagname` will have the text *"This is indented tag data"*:
74
-
75
- # @tagname This is
76
- # indented tag data
77
- # but this is not
78
-
79
- For most tags, newlines and indented data are not significant and do not impact
80
- the result of the tag. In other words, you can decide to span a tag onto multiple
81
- lines at any point by creating an indented block. However, some tags like
82
- {tag:example}, {tag:overload}, {tag:!macro}, {tag:!method}, and {tag:!attribute}
83
- rely on the first line for special information about the tag, and you cannot
84
- split this first line up. For instance, the {tag:example} tag uses the first line
85
- to indicate the example's title.
86
-
87
- ### Common Tag Syntaxes
88
-
89
- Although custom tags can be parsed in any way, the built-in tags follow a few
90
- common syntax structures by convention in order to simplify the syntax. The
91
- following syntaxes are available:
92
-
93
- 1. **Freeform data** — In this case, any amount of textual data is allowed,
94
- including no data. In some cases, no data is necessary for the tag.
95
- 2. **Freeform data with a types specifier list** — Mostly freeform data
96
- beginning with an *optional* types specifier list surrounded in `[brackets]`.
97
- Note that for extensibility, other bracket types are allowed, such as `<>`,
98
- `()` and `{}`. The contents of the list are discussed in detail below.
99
- 3. **Freeform data with a name and types specifier list** &mdash; freeform
100
- data beginning with an *optional* types list, as well as a name key, placed
101
- either before or after the types list. The name key is *required*. Note that
102
- for extensibility, the name can be placed *before* the types list, like:
103
- `name [Types] description`. In this case, a separating space is not required
104
- between the name and types, and you can still use any of the other brackets
105
- that the type specifier list allows.
106
- 4. **Freeform data with title** &mdash; freeform data where the first line cannot
107
- be split into multiple lines. The first line must also always refer to the
108
- "title" portion, and therefore, if there is no title, the first line must
109
- be blank. The "title" might occasionally be listed by another name in tag
110
- documentation, however, you can identify this syntax by the existence of
111
- a multi-line signature with "Indented block" on the second line.
112
-
113
- In the tag list below, the term "description" implies freeform data, `[Types]`
114
- implies a types specifier list, "name" implies a name key, and "title" implies
115
- the first line is a newline significant field that cannot be split into multiple
116
- lines.
117
-
118
- ### Types Specifier List
119
-
120
- In some cases, a tag will allow for a "types specifier list"; this will be evident
121
- from the use of the `[Types]` syntax in the tag signature. A types specifier list
122
- is a comma separated list of types, most often classes or modules, but occasionally
123
- literals. For example, the following {tag:return} tag lists a set of types returned
124
- by a method:
125
-
126
- # Finds an object or list of objects in the db using a query
127
- # @return [String, Array<String>, nil] the object or objects to
128
- # find in the database. Can be nil.
129
- def find(query) finder_code_here end
130
-
131
- A list of conventions for type names is specified below. Typically, however,
132
- any Ruby literal or class/module is allowed here. Duck-types (method names
133
- prefixed with "#") are also allowed.
134
-
135
- Note that the type specifier list is always an optional field and can be omitted
136
- when present in a tag signature. This is the reason why it is surrounded by
137
- brackets. It is also a freeform list, and can contain any list of values, though
138
- a set of conventions for how to list types is described below.
139
-
140
- ### Type List Conventions
141
-
142
- <p class="note">
143
- A list of examples of common type listings and what they translate into is
144
- available at <a href="http://yardoc.org/types">http://yardoc.org/types</a>.
145
- </p>
146
-
147
- Typically, a type list contains a list of classes or modules that are associated
148
- with the tag. In some cases, however, certain special values are allowed or required
149
- to be listed. This section discusses the syntax for specifying Ruby types inside of
150
- type specifier lists, as well as the other non-Ruby types that are accepted by
151
- convention in these lists.
152
-
153
- It's important to realize that the conventions listed here may not always adequately
154
- describe every type signature, and is not meant to be a complete syntax. This is
155
- why the types specifier list is freeform and can contain any set of values. The
156
- conventions defined here are only conventions, and if they do not work for your
157
- type specifications, you can define your own appropriate conventions.
158
-
159
- Note that a types specifier list might also be used for non-Type values. In this
160
- case, the tag documentation will describe what values are allowed within the
161
- type specifier list.
162
-
163
- #### Class or Module Types
164
-
165
- Any Ruby type is allowed as a class or module type. Such a type is simply the name
166
- of the class or module.
167
-
168
- Note that one extra type that is accepted by convention is the `Boolean` type,
169
- which represents both the `TrueClass` and `FalseClass` types. This type does not
170
- exist in Ruby, however.
171
-
172
- #### Parametrized Types
173
-
174
- In addition to basic types (like String or Array), YARD conventions allow for
175
- a "generics" like syntax to specify container objects or other parametrized types.
176
- The syntax is `Type<SubType, OtherSubType, ...>`. For instance, an Array might
177
- contain only String objects, in which case the type specification would be
178
- `Array<String>`. Multiple parametrized types can be listed, separated by commas.
179
-
180
- Note that parametrized types are typically not order-dependent, in other words,
181
- a list of parametrized types can occur in any order inside of a type. An array
182
- specified as `Array<String, Fixnum>` can contain any amount of Strings or Fixnums,
183
- in any order. When the order matters, use "order-dependent lists", described below.
184
-
185
- #### Duck-Types
186
-
187
- Duck-types are allowed in type specifier lists, and are identified by method
188
- names beginning with the "#" prefix. Typically, duck-types are recommended
189
- for {tag:param} tags only, though they can be used in other tags if needed.
190
- The following example shows a method that takes a parameter of any type
191
- that responds to the "read" method:
192
-
193
- # Reads from any I/O object.
194
- # @param io [#read] the input object to read from
195
- def read(io) io.read end
196
-
197
- #### Hashes
198
-
199
- Hashes can be specified either via the parametrized type discussed above,
200
- in the form `Hash<KeyType, ValueType>`, or using the hash specific syntax:
201
- `Hash{KeyTypes=>ValueTypes}`. In the latter case, KeyTypes or ValueTypes can
202
- also be a list of types separated by commas.
203
-
204
- #### Order-Dependent Lists
205
-
206
- An order dependent list is a set of types surrounded by "()" and separated by
207
- commas. This list must contain exactly those types in exactly the order specified.
208
- For instance, an Array containing a String, Fixnum and Hash in that order (and
209
- having exactly those 3 elements) would be listed as: `Array<(String, Fixnum, Hash)>`.
210
-
211
- #### Literals
212
-
213
- Some literals are accepted by virtue of being Ruby literals, but also by YARD
214
- conventions. Here is a non-exhaustive list of certain accepted literal values:
215
-
216
- * `true`, `false`, `nil` &mdash; used when a method returns these explicit literal
217
- values. Note that if your method returns both `true` or `false`, you should use
218
- the `Boolean` conventional type instead.
219
- * `self` &mdash; has the same meaning as Ruby's "self" keyword in the context of
220
- parameters or return types. Recommended mostly for {tag:return} tags that are
221
- chainable.
222
- * `void` &mdash; indicates that the type for this tag is explicitly undefined.
223
- Mostly used to specify {tag:return} tags that do not care about their return
224
- value. Using a `void` return tag is recommended over no type, because it makes
225
- the documentation more explicit about what the user should expect. YARD will
226
- also add a note for the user if they have undefined return types, making things
227
- clear that they should not use the return value of such a method.
228
-
229
- <a name="reftags"></a>
230
-
231
- ### Reference Tags
232
-
233
- <p class="note">
234
- Reference tag syntax applies only to meta-data tags, not directives.
235
- </p>
236
-
237
- If a tag's data begins with `(see OBJECT)` it is considered a "reference tag".
238
- A reference tag literally copies the tag data by the given tag name from the
239
- specified OBJECT. For instance, a method may copy all {tag:param} tags from
240
- a given object using the reference tag syntax:
241
-
242
- # @param user [String] the username for the operation
243
- # @param host [String] the host that this user is associated with
244
- # @param time [Time] the time that this operation took place
245
- def clean(user, host, time = Time.now) end
246
-
247
- # @param (see #clean)
248
- def activate(user, host, time = Time.now) end
249
-
250
- ## Adding Custom Tags
251
-
252
- <p class="note">If a tag is specific to a given project, consider namespacing
253
- it by naming it in the form <tt>projectname.tagname</tt>, ie.,
254
- <tt>yard.tag_signature</tt>.</p>
255
-
256
- Custom tags can be added to YARD either via the command-line or programmatically.
257
- The programmatic method is not discussed in this document, but rather in the
258
- {file:docs/TagsArch.md} document.
259
-
260
- To add a custom tag via the command-line or .yardopts file, you can use the
261
- `--*-tag` options. A few different options are available for the common tag
262
- syntaxes described above. For example, to add a basic freeform tag, use:
263
-
264
- !!!sh
265
- $ yard doc --tag rest_url:"REST URL"
266
-
267
- This will register the `@rest_url` tag for use in your documentation and display
268
- this tag in HTML output wherever it is used with the heading "REST URL".
269
- Note that the tag title should follow the tag name with a colon (`:`). Other
270
- tag syntaxes exist, such as the type specifier list freeform tag
271
- (`--type-tag`), or a named key tag with types (`--type-name-tag`).
272
-
273
- If you want to create a tag but not display it in output (it is only for
274
- programmatic use), add `--hide-tag tagname` after the definition:
275
-
276
- !!!sh
277
- $ yard doc --tag complexity:"McCabe Complexity" --hide-tag complexity
278
-
279
- Note that you might not need a tag title if you are hiding it. The title
280
- part can be omitted.
281
-
282
- {yard:include_tags}
283
-
1
+ # @title Tags Overview
2
+
3
+ # Tags Overview
4
+
5
+ Tags represent meta-data as well as behavioural data that can be added to
6
+ documentation through the `@tag` style syntax. As mentioned, there are two
7
+ basic types of tags in YARD, "meta-data tags" and "behavioural tags", the
8
+ latter is more often known as "directives". These two tag types can be
9
+ visually identified by their prefix. Meta-data tags have a `@` prefix,
10
+ while directives have a prefix of `@!` to indicate that the directive
11
+ performs some potentially mutable action on or with the docstring. The
12
+ two tag types would be used in the following way, respectively:
13
+
14
+ # @meta_data_tag some data
15
+ # @!directive_tag some data
16
+ class Foo; end
17
+
18
+ This document describes how tags can be specified, how they affect your
19
+ documentation, and how to use specific built-in tags in YARD, as well
20
+ as how to define custom tags.
21
+
22
+ ## Meta-Data Tags
23
+
24
+ Meta-data tags are useful to add arbitrary meta-data about a documented
25
+ object. These tags simply add data to objects that can be looked up later,
26
+ either programmatically, or displayed in templates. The benefit to describing
27
+ objects using meta-data tags is that your documentation can be organized
28
+ semantically. Rather than having a huge listing of text with no distinction
29
+ of what each paragraph is discussing, tags allow you to focus in on specific
30
+ elements of your documentation.
31
+
32
+ For example, describing parameters of a method can often be important to your
33
+ documentation, but should not be mixed up with the documentation that describes
34
+ what the method itself does. In this case, separating the parameter documentation
35
+ into {tag:param} tags can yield much better organized documentation, both in
36
+ source and in your output, without having to manually format the data using
37
+ standard markup.
38
+
39
+ All of this meta-data can be easily parsed by tools and used both in your templates
40
+ as well as in code checker tools. An example of how you can leverage tags
41
+ programmatically is shown in the {tag:todo} tag, which lists a small snippet of
42
+ Ruby code that can list all of your TODO items, if they are properly tagged.
43
+
44
+ Custom meta-data tags can be added either programmatically or via the YARD
45
+ command-line. This is discussed in the "[Adding Custom Tags](#Adding_Custom_Tags)"
46
+ section.
47
+
48
+ A list of built-in meta-data tags are found below in the [Tag List](#Tag_List).
49
+
50
+ ## Directives
51
+
52
+ Directives are similar to meta-data tags in the way they are specified, but they
53
+ do not add meta-data to the object directly. Instead, they affect the parsing
54
+ context and objects themselves, allowing a developer to create objects
55
+ (like methods) outright, rather than simply add text to an existing object.
56
+ Directives have a `@!` prefix to differentiate these tags from meta-data tags,
57
+ as well as to indicate that the tag may modify or create new objects when
58
+ it is called.
59
+
60
+ A list of built-in directives are found below in the [Directive List](#Directive_List).
61
+
62
+ ## Tag Syntax
63
+
64
+ Tags begin with the `@` or `@!` prefix at the start of a comment line, followed
65
+ immediately by the tag name, and then optional tag data (if the tag requires it).
66
+ Unless otherwise specified by documentation for the tag, all "description" text
67
+ is considered free-form data and can include any arbitrary textual data.
68
+
69
+ ### Multi-line Tags
70
+
71
+ Tags can span multiple lines if the subsequent lines are indented by more than
72
+ one space. The typical convention is to indent subsequent lines by 2 spaces.
73
+ In the following example, `@tagname` will have the text *"This is indented tag data"*:
74
+
75
+ # @tagname This is
76
+ # indented tag data
77
+ # but this is not
78
+
79
+ For most tags, newlines and indented data are not significant and do not impact
80
+ the result of the tag. In other words, you can decide to span a tag onto multiple
81
+ lines at any point by creating an indented block. However, some tags like
82
+ {tag:example}, {tag:overload}, {tag:!macro}, {tag:!method}, and {tag:!attribute}
83
+ rely on the first line for special information about the tag, and you cannot
84
+ split this first line up. For instance, the {tag:example} tag uses the first line
85
+ to indicate the example's title.
86
+
87
+ ### Common Tag Syntaxes
88
+
89
+ Although custom tags can be parsed in any way, the built-in tags follow a few
90
+ common syntax structures by convention in order to simplify the syntax. The
91
+ following syntaxes are available:
92
+
93
+ 1. **Freeform data** &mdash; In this case, any amount of textual data is allowed,
94
+ including no data. In some cases, no data is necessary for the tag.
95
+ 2. **Freeform data with a types specifier list** &mdash; Mostly freeform data
96
+ beginning with an *optional* types specifier list surrounded in `[brackets]`.
97
+ Note that for extensibility, other bracket types are allowed, such as `<>`,
98
+ `()` and `{}`. The contents of the list are discussed in detail below.
99
+ 3. **Freeform data with a name and types specifier list** &mdash; freeform
100
+ data beginning with an *optional* types list, as well as a name key, placed
101
+ either before or after the types list. The name key is *required*. Note that
102
+ for extensibility, the name can be placed *before* the types list, like:
103
+ `name [Types] description`. In this case, a separating space is not required
104
+ between the name and types, and you can still use any of the other brackets
105
+ that the type specifier list allows.
106
+ 4. **Freeform data with title** &mdash; freeform data where the first line cannot
107
+ be split into multiple lines. The first line must also always refer to the
108
+ "title" portion, and therefore, if there is no title, the first line must
109
+ be blank. The "title" might occasionally be listed by another name in tag
110
+ documentation, however, you can identify this syntax by the existence of
111
+ a multi-line signature with "Indented block" on the second line.
112
+
113
+ In the tag list below, the term "description" implies freeform data, `[Types]`
114
+ implies a types specifier list, "name" implies a name key, and "title" implies
115
+ the first line is a newline significant field that cannot be split into multiple
116
+ lines.
117
+
118
+ ### Types Specifier List
119
+
120
+ In some cases, a tag will allow for a "types specifier list"; this will be evident
121
+ from the use of the `[Types]` syntax in the tag signature. A types specifier list
122
+ is a comma separated list of types, most often classes or modules, but occasionally
123
+ literals. For example, the following {tag:return} tag lists a set of types returned
124
+ by a method:
125
+
126
+ # Finds an object or list of objects in the db using a query
127
+ # @return [String, Array<String>, nil] the object or objects to
128
+ # find in the database. Can be nil.
129
+ def find(query) finder_code_here end
130
+
131
+ A list of conventions for type names is specified below. Typically, however,
132
+ any Ruby literal or class/module is allowed here. Duck-types (method names
133
+ prefixed with "#") are also allowed.
134
+
135
+ Note that the type specifier list is always an optional field and can be omitted
136
+ when present in a tag signature. This is the reason why it is surrounded by
137
+ brackets. It is also a freeform list, and can contain any list of values, though
138
+ a set of conventions for how to list types is described below.
139
+
140
+ ### Type List Conventions
141
+
142
+ <p class="note">
143
+ A list of examples of common type listings and what they translate into is
144
+ available at <a href="http://yardoc.org/types">http://yardoc.org/types</a>.
145
+ </p>
146
+
147
+ Typically, a type list contains a list of classes or modules that are associated
148
+ with the tag. In some cases, however, certain special values are allowed or required
149
+ to be listed. This section discusses the syntax for specifying Ruby types inside of
150
+ type specifier lists, as well as the other non-Ruby types that are accepted by
151
+ convention in these lists.
152
+
153
+ It's important to realize that the conventions listed here may not always adequately
154
+ describe every type signature, and is not meant to be a complete syntax. This is
155
+ why the types specifier list is freeform and can contain any set of values. The
156
+ conventions defined here are only conventions, and if they do not work for your
157
+ type specifications, you can define your own appropriate conventions.
158
+
159
+ Note that a types specifier list might also be used for non-Type values. In this
160
+ case, the tag documentation will describe what values are allowed within the
161
+ type specifier list.
162
+
163
+ #### Class or Module Types
164
+
165
+ Any Ruby type is allowed as a class or module type. Such a type is simply the name
166
+ of the class or module.
167
+
168
+ Note that one extra type that is accepted by convention is the `Boolean` type,
169
+ which represents both the `TrueClass` and `FalseClass` types. This type does not
170
+ exist in Ruby, however.
171
+
172
+ #### Parametrized Types
173
+
174
+ In addition to basic types (like String or Array), YARD conventions allow for
175
+ a "generics" like syntax to specify container objects or other parametrized types.
176
+ The syntax is `Type<SubType, OtherSubType, ...>`. For instance, an Array might
177
+ contain only String objects, in which case the type specification would be
178
+ `Array<String>`. Multiple parametrized types can be listed, separated by commas.
179
+
180
+ Note that parametrized types are typically not order-dependent, in other words,
181
+ a list of parametrized types can occur in any order inside of a type. An array
182
+ specified as `Array<String, Fixnum>` can contain any amount of Strings or Fixnums,
183
+ in any order. When the order matters, use "order-dependent lists", described below.
184
+
185
+ #### Duck-Types
186
+
187
+ Duck-types are allowed in type specifier lists, and are identified by method
188
+ names beginning with the "#" prefix. Typically, duck-types are recommended
189
+ for {tag:param} tags only, though they can be used in other tags if needed.
190
+ The following example shows a method that takes a parameter of any type
191
+ that responds to the "read" method:
192
+
193
+ # Reads from any I/O object.
194
+ # @param io [#read] the input object to read from
195
+ def read(io) io.read end
196
+
197
+ #### Hashes
198
+
199
+ Hashes can be specified either via the parametrized type discussed above,
200
+ in the form `Hash<KeyType, ValueType>`, or using the hash specific syntax:
201
+ `Hash{KeyTypes=>ValueTypes}`. In the latter case, KeyTypes or ValueTypes can
202
+ also be a list of types separated by commas.
203
+
204
+ #### Order-Dependent Lists
205
+
206
+ An order dependent list is a set of types surrounded by "()" and separated by
207
+ commas. This list must contain exactly those types in exactly the order specified.
208
+ For instance, an Array containing a String, Fixnum and Hash in that order (and
209
+ having exactly those 3 elements) would be listed as: `Array<(String, Fixnum, Hash)>`.
210
+
211
+ #### Literals
212
+
213
+ Some literals are accepted by virtue of being Ruby literals, but also by YARD
214
+ conventions. Here is a non-exhaustive list of certain accepted literal values:
215
+
216
+ * `true`, `false`, `nil` &mdash; used when a method returns these explicit literal
217
+ values. Note that if your method returns both `true` or `false`, you should use
218
+ the `Boolean` conventional type instead.
219
+ * `self` &mdash; has the same meaning as Ruby's "self" keyword in the context of
220
+ parameters or return types. Recommended mostly for {tag:return} tags that are
221
+ chainable.
222
+ * `void` &mdash; indicates that the type for this tag is explicitly undefined.
223
+ Mostly used to specify {tag:return} tags that do not care about their return
224
+ value. Using a `void` return tag is recommended over no type, because it makes
225
+ the documentation more explicit about what the user should expect. YARD will
226
+ also add a note for the user if they have undefined return types, making things
227
+ clear that they should not use the return value of such a method.
228
+
229
+ <a name="reftags"></a>
230
+
231
+ ### Reference Tags
232
+
233
+ <p class="note">
234
+ Reference tag syntax applies only to meta-data tags, not directives.
235
+ </p>
236
+
237
+ If a tag's data begins with `(see OBJECT)` it is considered a "reference tag".
238
+ A reference tag literally copies the tag data by the given tag name from the
239
+ specified OBJECT. For instance, a method may copy all {tag:param} tags from
240
+ a given object using the reference tag syntax:
241
+
242
+ # @param user [String] the username for the operation
243
+ # @param host [String] the host that this user is associated with
244
+ # @param time [Time] the time that this operation took place
245
+ def clean(user, host, time = Time.now) end
246
+
247
+ # @param (see #clean)
248
+ def activate(user, host, time = Time.now) end
249
+
250
+ ## Adding Custom Tags
251
+
252
+ <p class="note">If a tag is specific to a given project, consider namespacing
253
+ it by naming it in the form <tt>projectname.tagname</tt>, ie.,
254
+ <tt>yard.tag_signature</tt>.</p>
255
+
256
+ Custom tags can be added to YARD either via the command-line or programmatically.
257
+ The programmatic method is not discussed in this document, but rather in the
258
+ {file:docs/TagsArch.md} document.
259
+
260
+ To add a custom tag via the command-line or .yardopts file, you can use the
261
+ `--*-tag` options. A few different options are available for the common tag
262
+ syntaxes described above. For example, to add a basic freeform tag, use:
263
+
264
+ !!!sh
265
+ $ yard doc --tag rest_url:"REST URL"
266
+
267
+ This will register the `@rest_url` tag for use in your documentation and display
268
+ this tag in HTML output wherever it is used with the heading "REST URL".
269
+ Note that the tag title should follow the tag name with a colon (`:`). Other
270
+ tag syntaxes exist, such as the type specifier list freeform tag
271
+ (`--type-tag`), or a named key tag with types (`--type-name-tag`).
272
+
273
+ If you want to create a tag but not display it in output (it is only for
274
+ programmatic use), add `--hide-tag tagname` after the definition:
275
+
276
+ !!!sh
277
+ $ yard doc --tag complexity:"McCabe Complexity" --hide-tag complexity
278
+
279
+ Note that you might not need a tag title if you are hiding it. The title
280
+ part can be omitted.
281
+
282
+ {yard:include_tags}
283
+