deg-yard 0.8.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. data/.travis.yml +39 -0
  2. data/.yardopts +25 -0
  3. data/.yardopts_guide +19 -0
  4. data/.yardopts_i18n +22 -0
  5. data/Gemfile +35 -0
  6. data/LEGAL +66 -0
  7. data/LICENSE +22 -0
  8. data/README.md +609 -0
  9. data/Rakefile +66 -0
  10. data/benchmarks/builtins_vs_eval.rb +23 -0
  11. data/benchmarks/concat_vs_join.rb +12 -0
  12. data/benchmarks/erb_vs_erubis.rb +53 -0
  13. data/benchmarks/format_args.rb +46 -0
  14. data/benchmarks/generation.rb +37 -0
  15. data/benchmarks/marshal_vs_dbm.rb +63 -0
  16. data/benchmarks/parsing.rb +46 -0
  17. data/benchmarks/pathname_vs_string.rb +50 -0
  18. data/benchmarks/rdoc_vs_yardoc.rb +10 -0
  19. data/benchmarks/registry_store_types.rb +48 -0
  20. data/benchmarks/ri_vs_yri.rb +18 -0
  21. data/benchmarks/ripper_parser.rb +12 -0
  22. data/benchmarks/splat_vs_flatten.rb +12 -0
  23. data/benchmarks/template_erb.rb +22 -0
  24. data/benchmarks/template_format.rb +6 -0
  25. data/benchmarks/template_profile.rb +17 -0
  26. data/benchmarks/yri_cache.rb +19 -0
  27. data/bin/yard +12 -0
  28. data/bin/yardoc +12 -0
  29. data/bin/yri +12 -0
  30. data/docs/CodeObjects.md +115 -0
  31. data/docs/GettingStarted.md +592 -0
  32. data/docs/Handlers.md +152 -0
  33. data/docs/Overview.md +61 -0
  34. data/docs/Parser.md +191 -0
  35. data/docs/Tags.md +282 -0
  36. data/docs/TagsArch.md +123 -0
  37. data/docs/Templates.md +496 -0
  38. data/docs/WhatsNew.md +1244 -0
  39. data/docs/images/code-objects-class-diagram.png +0 -0
  40. data/docs/images/handlers-class-diagram.png +0 -0
  41. data/docs/images/overview-class-diagram.png +0 -0
  42. data/docs/images/parser-class-diagram.png +0 -0
  43. data/docs/images/tags-class-diagram.png +0 -0
  44. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  45. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  46. data/docs/templates/default/layout/html/setup.rb +8 -0
  47. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  48. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  49. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  50. data/docs/templates/plugin.rb +65 -0
  51. data/lib/rubygems_plugin.rb +4 -0
  52. data/lib/yard/autoload.rb +290 -0
  53. data/lib/yard/cli/command.rb +84 -0
  54. data/lib/yard/cli/command_parser.rb +92 -0
  55. data/lib/yard/cli/config.rb +136 -0
  56. data/lib/yard/cli/diff.rb +270 -0
  57. data/lib/yard/cli/display.rb +68 -0
  58. data/lib/yard/cli/gems.rb +83 -0
  59. data/lib/yard/cli/graph.rb +126 -0
  60. data/lib/yard/cli/help.rb +18 -0
  61. data/lib/yard/cli/i18n.rb +69 -0
  62. data/lib/yard/cli/list.rb +22 -0
  63. data/lib/yard/cli/markup_types.rb +33 -0
  64. data/lib/yard/cli/server.rb +253 -0
  65. data/lib/yard/cli/stats.rb +213 -0
  66. data/lib/yard/cli/yardoc.rb +752 -0
  67. data/lib/yard/cli/yardopts_command.rb +109 -0
  68. data/lib/yard/cli/yri.rb +214 -0
  69. data/lib/yard/code_objects/base.rb +585 -0
  70. data/lib/yard/code_objects/class_object.rb +143 -0
  71. data/lib/yard/code_objects/class_variable_object.rb +8 -0
  72. data/lib/yard/code_objects/constant_object.rb +13 -0
  73. data/lib/yard/code_objects/extended_method_object.rb +23 -0
  74. data/lib/yard/code_objects/extra_file_object.rb +128 -0
  75. data/lib/yard/code_objects/macro_object.rb +172 -0
  76. data/lib/yard/code_objects/method_object.rb +191 -0
  77. data/lib/yard/code_objects/module_object.rb +18 -0
  78. data/lib/yard/code_objects/namespace_object.rb +200 -0
  79. data/lib/yard/code_objects/proxy.rb +258 -0
  80. data/lib/yard/code_objects/root_object.rb +17 -0
  81. data/lib/yard/config.rb +269 -0
  82. data/lib/yard/core_ext/array.rb +15 -0
  83. data/lib/yard/core_ext/file.rb +65 -0
  84. data/lib/yard/core_ext/hash.rb +15 -0
  85. data/lib/yard/core_ext/insertion.rb +60 -0
  86. data/lib/yard/core_ext/module.rb +19 -0
  87. data/lib/yard/core_ext/string.rb +67 -0
  88. data/lib/yard/core_ext/symbol_hash.rb +73 -0
  89. data/lib/yard/docstring.rb +362 -0
  90. data/lib/yard/docstring_parser.rb +321 -0
  91. data/lib/yard/globals.rb +18 -0
  92. data/lib/yard/handlers/base.rb +597 -0
  93. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  94. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  95. data/lib/yard/handlers/c/base.rb +110 -0
  96. data/lib/yard/handlers/c/class_handler.rb +26 -0
  97. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  98. data/lib/yard/handlers/c/handler_methods.rb +166 -0
  99. data/lib/yard/handlers/c/init_handler.rb +18 -0
  100. data/lib/yard/handlers/c/method_handler.rb +35 -0
  101. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  102. data/lib/yard/handlers/c/module_handler.rb +16 -0
  103. data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
  104. data/lib/yard/handlers/c/path_handler.rb +10 -0
  105. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  106. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  107. data/lib/yard/handlers/processor.rb +201 -0
  108. data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
  109. data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
  110. data/lib/yard/handlers/ruby/base.rb +164 -0
  111. data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
  112. data/lib/yard/handlers/ruby/class_handler.rb +121 -0
  113. data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  114. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  115. data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  116. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  117. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
  118. data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  119. data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  120. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
  121. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
  122. data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
  123. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  124. data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
  125. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  126. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  127. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  128. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  129. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  130. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  131. data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
  132. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  133. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  134. data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  139. data/lib/yard/handlers/ruby/method_handler.rb +92 -0
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  142. data/lib/yard/handlers/ruby/module_handler.rb +11 -0
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  146. data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  147. data/lib/yard/i18n/locale.rb +74 -0
  148. data/lib/yard/i18n/message.rb +56 -0
  149. data/lib/yard/i18n/messages.rb +55 -0
  150. data/lib/yard/i18n/pot_generator.rb +280 -0
  151. data/lib/yard/i18n/text.rb +173 -0
  152. data/lib/yard/logging.rb +190 -0
  153. data/lib/yard/options.rb +216 -0
  154. data/lib/yard/parser/base.rb +56 -0
  155. data/lib/yard/parser/c/c_parser.rb +231 -0
  156. data/lib/yard/parser/c/comment_parser.rb +131 -0
  157. data/lib/yard/parser/c/statement.rb +63 -0
  158. data/lib/yard/parser/ruby/ast_node.rb +496 -0
  159. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
  160. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
  161. data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
  162. data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
  163. data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
  164. data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
  165. data/lib/yard/parser/source_parser.rb +517 -0
  166. data/lib/yard/rake/yardoc_task.rb +74 -0
  167. data/lib/yard/registry.rb +438 -0
  168. data/lib/yard/registry_store.rb +319 -0
  169. data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/lib/yard/rubygems/backports/gem.rb +9 -0
  172. data/lib/yard/rubygems/backports/source_index.rb +370 -0
  173. data/lib/yard/rubygems/backports.rb +8 -0
  174. data/lib/yard/rubygems/doc_manager.rb +88 -0
  175. data/lib/yard/rubygems/specification.rb +41 -0
  176. data/lib/yard/serializers/base.rb +80 -0
  177. data/lib/yard/serializers/file_system_serializer.rb +90 -0
  178. data/lib/yard/serializers/process_serializer.rb +24 -0
  179. data/lib/yard/serializers/stdout_serializer.rb +32 -0
  180. data/lib/yard/serializers/yardoc_serializer.rb +124 -0
  181. data/lib/yard/server/adapter.rb +100 -0
  182. data/lib/yard/server/commands/base.rb +192 -0
  183. data/lib/yard/server/commands/display_file_command.rb +24 -0
  184. data/lib/yard/server/commands/display_object_command.rb +58 -0
  185. data/lib/yard/server/commands/frames_command.rb +15 -0
  186. data/lib/yard/server/commands/library_command.rb +148 -0
  187. data/lib/yard/server/commands/library_index_command.rb +24 -0
  188. data/lib/yard/server/commands/list_command.rb +24 -0
  189. data/lib/yard/server/commands/search_command.rb +78 -0
  190. data/lib/yard/server/commands/static_file_command.rb +57 -0
  191. data/lib/yard/server/doc_server_helper.rb +76 -0
  192. data/lib/yard/server/doc_server_serializer.rb +33 -0
  193. data/lib/yard/server/library_version.rb +227 -0
  194. data/lib/yard/server/rack_adapter.rb +88 -0
  195. data/lib/yard/server/router.rb +176 -0
  196. data/lib/yard/server/static_caching.rb +45 -0
  197. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  198. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  199. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  200. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  201. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  202. data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  203. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
  204. data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
  205. data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  206. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  207. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  208. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  209. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  210. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  211. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  212. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  213. data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  214. data/lib/yard/server/webrick_adapter.rb +43 -0
  215. data/lib/yard/server.rb +11 -0
  216. data/lib/yard/tags/default_factory.rb +176 -0
  217. data/lib/yard/tags/default_tag.rb +12 -0
  218. data/lib/yard/tags/directives.rb +599 -0
  219. data/lib/yard/tags/library.rb +630 -0
  220. data/lib/yard/tags/option_tag.rb +12 -0
  221. data/lib/yard/tags/overload_tag.rb +66 -0
  222. data/lib/yard/tags/ref_tag.rb +7 -0
  223. data/lib/yard/tags/ref_tag_list.rb +27 -0
  224. data/lib/yard/tags/tag.rb +57 -0
  225. data/lib/yard/tags/tag_format_error.rb +6 -0
  226. data/lib/yard/templates/engine.rb +185 -0
  227. data/lib/yard/templates/erb_cache.rb +22 -0
  228. data/lib/yard/templates/helpers/base_helper.rb +212 -0
  229. data/lib/yard/templates/helpers/filter_helper.rb +26 -0
  230. data/lib/yard/templates/helpers/html_helper.rb +599 -0
  231. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  232. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
  233. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
  234. data/lib/yard/templates/helpers/markup_helper.rb +169 -0
  235. data/lib/yard/templates/helpers/method_helper.rb +74 -0
  236. data/lib/yard/templates/helpers/module_helper.rb +19 -0
  237. data/lib/yard/templates/helpers/text_helper.rb +95 -0
  238. data/lib/yard/templates/helpers/uml_helper.rb +46 -0
  239. data/lib/yard/templates/section.rb +106 -0
  240. data/lib/yard/templates/template.rb +407 -0
  241. data/lib/yard/templates/template_options.rb +88 -0
  242. data/lib/yard/verifier.rb +148 -0
  243. data/lib/yard/version.rb +3 -0
  244. data/lib/yard.rb +71 -0
  245. data/po/ja.po +31118 -0
  246. data/spec/cli/command_parser_spec.rb +43 -0
  247. data/spec/cli/command_spec.rb +36 -0
  248. data/spec/cli/config_spec.rb +92 -0
  249. data/spec/cli/diff_spec.rb +260 -0
  250. data/spec/cli/display_spec.rb +30 -0
  251. data/spec/cli/gems_spec.rb +81 -0
  252. data/spec/cli/graph_spec.rb +17 -0
  253. data/spec/cli/help_spec.rb +22 -0
  254. data/spec/cli/i18n_spec.rb +111 -0
  255. data/spec/cli/list_spec.rb +8 -0
  256. data/spec/cli/markup_types_spec.rb +22 -0
  257. data/spec/cli/server_spec.rb +327 -0
  258. data/spec/cli/stats_spec.rb +90 -0
  259. data/spec/cli/yardoc_spec.rb +804 -0
  260. data/spec/cli/yri_spec.rb +99 -0
  261. data/spec/code_objects/base_spec.rb +438 -0
  262. data/spec/code_objects/class_object_spec.rb +225 -0
  263. data/spec/code_objects/code_object_list_spec.rb +33 -0
  264. data/spec/code_objects/constants_spec.rb +82 -0
  265. data/spec/code_objects/extra_file_object_spec.rb +147 -0
  266. data/spec/code_objects/macro_object_spec.rb +148 -0
  267. data/spec/code_objects/method_object_spec.rb +175 -0
  268. data/spec/code_objects/module_object_spec.rb +141 -0
  269. data/spec/code_objects/namespace_object_spec.rb +170 -0
  270. data/spec/code_objects/proxy_spec.rb +140 -0
  271. data/spec/code_objects/spec_helper.rb +3 -0
  272. data/spec/config_spec.rb +176 -0
  273. data/spec/core_ext/array_spec.rb +14 -0
  274. data/spec/core_ext/file_spec.rb +68 -0
  275. data/spec/core_ext/hash_spec.rb +14 -0
  276. data/spec/core_ext/insertion_spec.rb +37 -0
  277. data/spec/core_ext/module_spec.rb +15 -0
  278. data/spec/core_ext/string_spec.rb +42 -0
  279. data/spec/core_ext/symbol_hash_spec.rb +86 -0
  280. data/spec/docstring_parser_spec.rb +228 -0
  281. data/spec/docstring_spec.rb +335 -0
  282. data/spec/handlers/alias_handler_spec.rb +80 -0
  283. data/spec/handlers/attribute_handler_spec.rb +94 -0
  284. data/spec/handlers/base_spec.rb +206 -0
  285. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  286. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  287. data/spec/handlers/c/class_handler_spec.rb +63 -0
  288. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  289. data/spec/handlers/c/init_handler_spec.rb +47 -0
  290. data/spec/handlers/c/method_handler_spec.rb +229 -0
  291. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  292. data/spec/handlers/c/module_handler_spec.rb +38 -0
  293. data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
  294. data/spec/handlers/c/path_handler_spec.rb +35 -0
  295. data/spec/handlers/c/spec_helper.rb +13 -0
  296. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  297. data/spec/handlers/class_condition_handler_spec.rb +67 -0
  298. data/spec/handlers/class_handler_spec.rb +246 -0
  299. data/spec/handlers/class_variable_handler_spec.rb +11 -0
  300. data/spec/handlers/constant_handler_spec.rb +64 -0
  301. data/spec/handlers/dsl_handler_spec.rb +197 -0
  302. data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  303. data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  304. data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
  305. data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  306. data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  307. data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  308. data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
  309. data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  310. data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  311. data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  312. data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
  313. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
  314. data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  315. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  316. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  317. data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
  318. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
  319. data/spec/handlers/exception_handler_spec.rb +48 -0
  320. data/spec/handlers/extend_handler_spec.rb +23 -0
  321. data/spec/handlers/legacy_base_spec.rb +128 -0
  322. data/spec/handlers/method_condition_handler_spec.rb +14 -0
  323. data/spec/handlers/method_handler_spec.rb +184 -0
  324. data/spec/handlers/mixin_handler_spec.rb +55 -0
  325. data/spec/handlers/module_function_handler_spec.rb +105 -0
  326. data/spec/handlers/module_handler_spec.rb +34 -0
  327. data/spec/handlers/private_constant_handler_spec.rb +24 -0
  328. data/spec/handlers/processor_spec.rb +34 -0
  329. data/spec/handlers/ruby/base_spec.rb +94 -0
  330. data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
  331. data/spec/handlers/spec_helper.rb +33 -0
  332. data/spec/handlers/visibility_handler_spec.rb +39 -0
  333. data/spec/handlers/yield_handler_spec.rb +51 -0
  334. data/spec/i18n/locale_spec.rb +68 -0
  335. data/spec/i18n/message_spec.rb +52 -0
  336. data/spec/i18n/messages_spec.rb +67 -0
  337. data/spec/i18n/pot_generator_spec.rb +262 -0
  338. data/spec/i18n/text_spec.rb +180 -0
  339. data/spec/logging_spec.rb +35 -0
  340. data/spec/options_spec.rb +171 -0
  341. data/spec/parser/base_spec.rb +24 -0
  342. data/spec/parser/c_parser_spec.rb +171 -0
  343. data/spec/parser/examples/array.c.txt +3887 -0
  344. data/spec/parser/examples/example1.rb.txt +8 -0
  345. data/spec/parser/examples/extrafile.c.txt +8 -0
  346. data/spec/parser/examples/multifile.c.txt +22 -0
  347. data/spec/parser/examples/override.c.txt +424 -0
  348. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  349. data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  350. data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  351. data/spec/parser/ruby/ast_node_spec.rb +33 -0
  352. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  353. data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
  354. data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
  355. data/spec/parser/source_parser_spec.rb +717 -0
  356. data/spec/parser/tag_parsing_spec.rb +18 -0
  357. data/spec/rake/yardoc_task_spec.rb +101 -0
  358. data/spec/registry_spec.rb +393 -0
  359. data/spec/registry_store_spec.rb +315 -0
  360. data/spec/rubygems/doc_manager_spec.rb +112 -0
  361. data/spec/serializers/data/serialized_yardoc/checksums +1 -0
  362. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  363. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  364. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  365. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  366. data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  367. data/spec/serializers/file_system_serializer_spec.rb +124 -0
  368. data/spec/serializers/spec_helper.rb +2 -0
  369. data/spec/serializers/yardoc_serializer_spec.rb +46 -0
  370. data/spec/server/adapter_spec.rb +38 -0
  371. data/spec/server/commands/base_spec.rb +87 -0
  372. data/spec/server/commands/library_command_spec.rb +39 -0
  373. data/spec/server/commands/static_file_command_spec.rb +84 -0
  374. data/spec/server/doc_server_helper_spec.rb +53 -0
  375. data/spec/server/doc_server_serializer_spec.rb +45 -0
  376. data/spec/server/rack_adapter_spec.rb +20 -0
  377. data/spec/server/router_spec.rb +122 -0
  378. data/spec/server/spec_helper.rb +17 -0
  379. data/spec/server/static_caching_spec.rb +39 -0
  380. data/spec/server/webrick_servlet_spec.rb +20 -0
  381. data/spec/server_spec.rb +10 -0
  382. data/spec/spec_helper.rb +128 -0
  383. data/spec/tags/default_factory_spec.rb +152 -0
  384. data/spec/tags/default_tag_spec.rb +11 -0
  385. data/spec/tags/directives_spec.rb +453 -0
  386. data/spec/tags/library_spec.rb +34 -0
  387. data/spec/tags/overload_tag_spec.rb +53 -0
  388. data/spec/tags/ref_tag_list_spec.rb +53 -0
  389. data/spec/templates/class_spec.rb +44 -0
  390. data/spec/templates/constant_spec.rb +40 -0
  391. data/spec/templates/engine_spec.rb +121 -0
  392. data/spec/templates/examples/class001.html +280 -0
  393. data/spec/templates/examples/class001.txt +36 -0
  394. data/spec/templates/examples/class002.html +35 -0
  395. data/spec/templates/examples/constant001.txt +25 -0
  396. data/spec/templates/examples/constant002.txt +7 -0
  397. data/spec/templates/examples/constant003.txt +11 -0
  398. data/spec/templates/examples/method001.html +130 -0
  399. data/spec/templates/examples/method001.txt +35 -0
  400. data/spec/templates/examples/method002.html +86 -0
  401. data/spec/templates/examples/method002.txt +20 -0
  402. data/spec/templates/examples/method003.html +159 -0
  403. data/spec/templates/examples/method003.txt +45 -0
  404. data/spec/templates/examples/method004.html +44 -0
  405. data/spec/templates/examples/method004.txt +10 -0
  406. data/spec/templates/examples/method005.html +99 -0
  407. data/spec/templates/examples/method005.txt +33 -0
  408. data/spec/templates/examples/module001.dot +33 -0
  409. data/spec/templates/examples/module001.html +825 -0
  410. data/spec/templates/examples/module001.txt +33 -0
  411. data/spec/templates/examples/module002.html +318 -0
  412. data/spec/templates/examples/module003.html +185 -0
  413. data/spec/templates/examples/module004.html +387 -0
  414. data/spec/templates/examples/tag001.txt +82 -0
  415. data/spec/templates/helpers/base_helper_spec.rb +175 -0
  416. data/spec/templates/helpers/html_helper_spec.rb +612 -0
  417. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  418. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
  419. data/spec/templates/helpers/markup_helper_spec.rb +135 -0
  420. data/spec/templates/helpers/method_helper_spec.rb +82 -0
  421. data/spec/templates/helpers/shared_signature_examples.rb +123 -0
  422. data/spec/templates/helpers/text_helper_spec.rb +44 -0
  423. data/spec/templates/method_spec.rb +102 -0
  424. data/spec/templates/module_spec.rb +181 -0
  425. data/spec/templates/onefile_spec.rb +64 -0
  426. data/spec/templates/section_spec.rb +146 -0
  427. data/spec/templates/spec_helper.rb +73 -0
  428. data/spec/templates/tag_spec.rb +51 -0
  429. data/spec/templates/template_spec.rb +409 -0
  430. data/spec/verifier_spec.rb +106 -0
  431. data/templates/default/class/dot/setup.rb +6 -0
  432. data/templates/default/class/dot/superklass.erb +3 -0
  433. data/templates/default/class/html/constructor_details.erb +8 -0
  434. data/templates/default/class/html/setup.rb +1 -0
  435. data/templates/default/class/html/subclasses.erb +4 -0
  436. data/templates/default/class/setup.rb +36 -0
  437. data/templates/default/class/text/setup.rb +11 -0
  438. data/templates/default/class/text/subclasses.erb +5 -0
  439. data/templates/default/constant/text/header.erb +11 -0
  440. data/templates/default/constant/text/setup.rb +3 -0
  441. data/templates/default/docstring/html/abstract.erb +4 -0
  442. data/templates/default/docstring/html/deprecated.erb +1 -0
  443. data/templates/default/docstring/html/index.erb +5 -0
  444. data/templates/default/docstring/html/note.erb +6 -0
  445. data/templates/default/docstring/html/private.erb +4 -0
  446. data/templates/default/docstring/html/returns_void.erb +1 -0
  447. data/templates/default/docstring/html/text.erb +1 -0
  448. data/templates/default/docstring/html/todo.erb +6 -0
  449. data/templates/default/docstring/setup.rb +51 -0
  450. data/templates/default/docstring/text/abstract.erb +2 -0
  451. data/templates/default/docstring/text/deprecated.erb +2 -0
  452. data/templates/default/docstring/text/index.erb +2 -0
  453. data/templates/default/docstring/text/note.erb +4 -0
  454. data/templates/default/docstring/text/private.erb +2 -0
  455. data/templates/default/docstring/text/returns_void.erb +1 -0
  456. data/templates/default/docstring/text/text.erb +1 -0
  457. data/templates/default/docstring/text/todo.erb +4 -0
  458. data/templates/default/fulldoc/html/css/common.css +1 -0
  459. data/templates/default/fulldoc/html/css/full_list.css +57 -0
  460. data/templates/default/fulldoc/html/css/style.css +338 -0
  461. data/templates/default/fulldoc/html/frames.erb +28 -0
  462. data/templates/default/fulldoc/html/full_list.erb +40 -0
  463. data/templates/default/fulldoc/html/full_list_class.erb +2 -0
  464. data/templates/default/fulldoc/html/full_list_file.erb +5 -0
  465. data/templates/default/fulldoc/html/full_list_method.erb +8 -0
  466. data/templates/default/fulldoc/html/js/app.js +214 -0
  467. data/templates/default/fulldoc/html/js/full_list.js +178 -0
  468. data/templates/default/fulldoc/html/js/jquery.js +4 -0
  469. data/templates/default/fulldoc/html/setup.rb +199 -0
  470. data/templates/default/layout/dot/header.erb +6 -0
  471. data/templates/default/layout/dot/setup.rb +14 -0
  472. data/templates/default/layout/html/breadcrumb.erb +13 -0
  473. data/templates/default/layout/html/files.erb +11 -0
  474. data/templates/default/layout/html/footer.erb +5 -0
  475. data/templates/default/layout/html/headers.erb +14 -0
  476. data/templates/default/layout/html/index.erb +2 -0
  477. data/templates/default/layout/html/layout.erb +20 -0
  478. data/templates/default/layout/html/listing.erb +4 -0
  479. data/templates/default/layout/html/objects.erb +32 -0
  480. data/templates/default/layout/html/script_setup.erb +5 -0
  481. data/templates/default/layout/html/search.erb +8 -0
  482. data/templates/default/layout/html/setup.rb +71 -0
  483. data/templates/default/method/html/header.erb +16 -0
  484. data/templates/default/method/setup.rb +3 -0
  485. data/templates/default/method/text/header.erb +1 -0
  486. data/templates/default/method_details/html/header.erb +3 -0
  487. data/templates/default/method_details/html/method_signature.erb +25 -0
  488. data/templates/default/method_details/html/source.erb +10 -0
  489. data/templates/default/method_details/setup.rb +10 -0
  490. data/templates/default/method_details/text/header.erb +10 -0
  491. data/templates/default/method_details/text/method_signature.erb +12 -0
  492. data/templates/default/method_details/text/setup.rb +10 -0
  493. data/templates/default/module/dot/child.erb +1 -0
  494. data/templates/default/module/dot/dependencies.erb +3 -0
  495. data/templates/default/module/dot/header.erb +6 -0
  496. data/templates/default/module/dot/info.erb +14 -0
  497. data/templates/default/module/dot/setup.rb +14 -0
  498. data/templates/default/module/html/attribute_details.erb +10 -0
  499. data/templates/default/module/html/attribute_summary.erb +8 -0
  500. data/templates/default/module/html/box_info.erb +37 -0
  501. data/templates/default/module/html/children.erb +8 -0
  502. data/templates/default/module/html/constant_summary.erb +13 -0
  503. data/templates/default/module/html/defines.erb +3 -0
  504. data/templates/default/module/html/header.erb +5 -0
  505. data/templates/default/module/html/inherited_attributes.erb +14 -0
  506. data/templates/default/module/html/inherited_constants.erb +8 -0
  507. data/templates/default/module/html/inherited_methods.erb +19 -0
  508. data/templates/default/module/html/item_summary.erb +40 -0
  509. data/templates/default/module/html/method_details_list.erb +9 -0
  510. data/templates/default/module/html/method_summary.erb +14 -0
  511. data/templates/default/module/html/methodmissing.erb +12 -0
  512. data/templates/default/module/html/pre_docstring.erb +1 -0
  513. data/templates/default/module/setup.rb +164 -0
  514. data/templates/default/module/text/children.erb +10 -0
  515. data/templates/default/module/text/class_meths_list.erb +8 -0
  516. data/templates/default/module/text/extends.erb +8 -0
  517. data/templates/default/module/text/header.erb +7 -0
  518. data/templates/default/module/text/includes.erb +8 -0
  519. data/templates/default/module/text/instance_meths_list.erb +8 -0
  520. data/templates/default/module/text/setup.rb +12 -0
  521. data/templates/default/onefile/html/files.erb +5 -0
  522. data/templates/default/onefile/html/headers.erb +6 -0
  523. data/templates/default/onefile/html/layout.erb +17 -0
  524. data/templates/default/onefile/html/readme.erb +3 -0
  525. data/templates/default/onefile/html/setup.rb +61 -0
  526. data/templates/default/root/dot/child.erb +3 -0
  527. data/templates/default/root/dot/setup.rb +5 -0
  528. data/templates/default/root/html/setup.rb +1 -0
  529. data/templates/default/tags/html/example.erb +11 -0
  530. data/templates/default/tags/html/index.erb +3 -0
  531. data/templates/default/tags/html/option.erb +24 -0
  532. data/templates/default/tags/html/overload.erb +14 -0
  533. data/templates/default/tags/html/see.erb +8 -0
  534. data/templates/default/tags/html/tag.erb +20 -0
  535. data/templates/default/tags/setup.rb +55 -0
  536. data/templates/default/tags/text/example.erb +12 -0
  537. data/templates/default/tags/text/index.erb +1 -0
  538. data/templates/default/tags/text/option.erb +20 -0
  539. data/templates/default/tags/text/overload.erb +19 -0
  540. data/templates/default/tags/text/see.erb +11 -0
  541. data/templates/default/tags/text/tag.erb +13 -0
  542. data/templates/guide/class/html/setup.rb +1 -0
  543. data/templates/guide/docstring/html/setup.rb +1 -0
  544. data/templates/guide/fulldoc/html/css/style.css +108 -0
  545. data/templates/guide/fulldoc/html/js/app.js +33 -0
  546. data/templates/guide/fulldoc/html/setup.rb +73 -0
  547. data/templates/guide/layout/html/layout.erb +81 -0
  548. data/templates/guide/layout/html/setup.rb +28 -0
  549. data/templates/guide/method/html/header.erb +18 -0
  550. data/templates/guide/method/html/setup.rb +21 -0
  551. data/templates/guide/module/html/header.erb +7 -0
  552. data/templates/guide/module/html/method_list.erb +5 -0
  553. data/templates/guide/module/html/setup.rb +26 -0
  554. data/templates/guide/onefile/html/files.erb +4 -0
  555. data/templates/guide/onefile/html/setup.rb +5 -0
  556. data/templates/guide/onefile/html/toc.erb +3 -0
  557. data/templates/guide/tags/html/setup.rb +8 -0
  558. metadata +689 -0
@@ -0,0 +1,752 @@
1
+ require 'digest/sha1'
2
+ require 'fileutils'
3
+
4
+ module YARD
5
+ module CLI
6
+ # Default options used in +yard doc+ command.
7
+ class YardocOptions < Templates::TemplateOptions
8
+ # @return [Array<CodeObjects::ExtraFileObject>]
9
+ # the list of extra files rendered along with objects
10
+ default_attr :files, lambda { [] }
11
+
12
+ # @return [String] the default title appended to each generated page
13
+ default_attr :title, "Documentation by YARD #{YARD::VERSION}"
14
+
15
+ # @return [Verifier] the default verifier object to filter queries
16
+ default_attr :verifier, lambda { Verifier.new }
17
+
18
+ # @return [Serializers::Base] the default serializer for generating output
19
+ # to disk.
20
+ default_attr :serializer, lambda { Serializers::FileSystemSerializer.new }
21
+
22
+ # @return [Symbol] the default output format (:html).
23
+ default_attr :format, :html
24
+
25
+ # @return [Boolean] whether the data should be rendered in a single page,
26
+ # if the template supports it.
27
+ default_attr :onefile, false
28
+
29
+ # @return [CodeObjects::ExtraFileObject] the README file object rendered
30
+ # along with objects
31
+ attr_accessor :readme
32
+
33
+ # @return [Array<CodeObjects::Base>] the list of code objects to render
34
+ # the templates with.
35
+ attr_accessor :objects
36
+
37
+ # @return [Numeric] An index value for rendering sequentially related templates
38
+ attr_accessor :index
39
+
40
+ # @return [CodeObjects::Base] an extra item to send to a template that is not
41
+ # the main rendered object
42
+ attr_accessor :item
43
+
44
+ # @return [CodeObjects::ExtraFileObject] the file object being rendered.
45
+ # The +object+ key is not used so that a file may be rendered in the context
46
+ # of an object's namespace (for generating links).
47
+ attr_accessor :file
48
+ end
49
+
50
+ # Yardoc is the default YARD CLI command (+yard doc+ and historic +yardoc+
51
+ # executable) used to generate and output (mainly) HTML documentation given
52
+ # a set of source files.
53
+ #
54
+ # == Usage
55
+ #
56
+ # Main usage for this command is:
57
+ #
58
+ # $ yardoc [options] [source_files [- extra_files]]
59
+ #
60
+ # See +yardoc --help+ for details on valid options.
61
+ #
62
+ # == Options File (+.yardopts+)
63
+ #
64
+ # If a +.yardopts+ file is found in the source directory being processed,
65
+ # YARD will use the contents of the file as arguments to the command,
66
+ # treating newlines as spaces. You can use shell-style quotations to
67
+ # group space delimited arguments, just like on the command line.
68
+ #
69
+ # A valid +.yardopts+ file might look like:
70
+ #
71
+ # --no-private
72
+ # --title "My Title"
73
+ # --exclude foo --exclude bar
74
+ # lib/**/*.erb
75
+ # lib/**/*.rb -
76
+ # HACKING.rdoc LEGAL COPYRIGHT
77
+ #
78
+ # Note that Yardoc also supports the legacy RDoc style +.document+ file,
79
+ # though this file can only specify source globs to parse, not options.
80
+ #
81
+ # == Queries (+--query+)
82
+ #
83
+ # Yardoc supports queries to select specific code objects for which to
84
+ # generate documentation. For example, you might want to generate
85
+ # documentation only for your public API. If you've documented your public
86
+ # methods with +@api public+, you can use the following query to select
87
+ # all of these objects:
88
+ #
89
+ # --query '@api.text == "public"'
90
+ #
91
+ # Note that the syntax for queries is mostly Ruby with a few syntactic
92
+ # simplifications for meta-data tags. See the {Verifier} class for an
93
+ # overview of this syntax.
94
+ #
95
+ # == Adding Custom Ad-Hoc Meta-data Tags (+--tag+)
96
+ #
97
+ # YARD allows specification of {file:docs/Tags.md meta-data tags}
98
+ # programmatically via the {YARD::Tags::Library} class, but often this is not
99
+ # practical for users writing documentation. To make adding custom tags
100
+ # easier, Yardoc has a few command-line switches for creating basic tags
101
+ # and displaying them in generated HTML output.
102
+ #
103
+ # To specify a custom tag to be displayed in output, use any of the
104
+ # following:
105
+ #
106
+ # * +--tag+ TAG:TITLE
107
+ # * +--name-tag+ TAG:TITLE
108
+ # * +--type-tag+ TAG:TITLE
109
+ # * +--type-name-tag+ TAG:TITLE
110
+ # * +--title-tag+ TAG:TITLE
111
+ #
112
+ # "TAG:TITLE" is of the form: name:"Display Title", for example:
113
+ #
114
+ # --tag overload:"Overloaded Method"
115
+ #
116
+ # See +yardoc --help+ for a description of the various options.
117
+ #
118
+ # Tags added in this way are automatically displayed in output. To add
119
+ # a meta-data tag that does not show up in output, use +--hide-tag TAG+.
120
+ # Note that you can also use this option on existing tags to hide
121
+ # builtin tags, for instance.
122
+ #
123
+ # == Processed Data Storage (+.yardoc+ directory)
124
+ #
125
+ # When Yardoc parses a source directory, it creates a +.yardoc+ directory
126
+ # (by default, override with +-b+) at the root of the project. This directory
127
+ # contains marshal dumps for all raw object data in the source, so that
128
+ # you can access it later for various commands (+stats+, +graph+, etc.).
129
+ # This directory is also used as a cache for any future calls to +yardoc+
130
+ # so as to process only the files which have changed since the last call.
131
+ #
132
+ # When Yardoc uses the cache in subsequent calls to +yardoc+, methods
133
+ # or classes that have been deleted from source since the last parsing
134
+ # will not be erased from the cache (YARD never deletes objects). In such
135
+ # a case, you should wipe the cache and do a clean parsing of the source tree.
136
+ # You can do this by deleting the +.yardoc+ directory manually, or running
137
+ # Yardoc without +--use-cache+ (+-c+).
138
+ #
139
+ # @since 0.2.1
140
+ # @see Verifier
141
+ class Yardoc < YardoptsCommand
142
+ # @return [Hash] the hash of options passed to the template.
143
+ # @see Templates::Engine#render
144
+ attr_reader :options
145
+
146
+ # @return [Array<String>] list of Ruby source files to process
147
+ attr_accessor :files
148
+
149
+ # @return [Array<String>] list of excluded paths (regexp matches)
150
+ # @since 0.5.3
151
+ attr_accessor :excluded
152
+
153
+ # @return [Boolean] whether to use the existing yardoc db if the
154
+ # .yardoc already exists. Also makes use of file checksums to
155
+ # parse only changed files.
156
+ attr_accessor :use_cache
157
+
158
+ # @return [Boolean] whether objects should be serialized to .yardoc db
159
+ attr_accessor :save_yardoc
160
+
161
+ # @return [Boolean] whether to generate output
162
+ attr_accessor :generate
163
+
164
+ # @return [Boolean] whether to print a list of objects
165
+ # @since 0.5.5
166
+ attr_accessor :list
167
+
168
+ # Keep track of which visibilities are to be shown
169
+ # @return [Array<Symbol>] a list of visibilities
170
+ # @since 0.5.6
171
+ attr_accessor :visibilities
172
+
173
+ # Keep track of which APIs are to be shown
174
+ # @return [Array<String>] a list of APIs
175
+ # @since 0.8.1
176
+ attr_accessor :apis
177
+
178
+ # Keep track of which APIs are to be hidden
179
+ # @return [Array<String>] a list of APIs to be hidden
180
+ # @since 0.8.7
181
+ attr_accessor :hidden_apis
182
+
183
+ # @return [Array<Symbol>] a list of tags to hide from templates
184
+ # @since 0.6.0
185
+ attr_accessor :hidden_tags
186
+
187
+ # @return [Boolean] whether to print statistics after parsing
188
+ # @since 0.6.0
189
+ attr_accessor :statistics
190
+
191
+ # @return [Array<String>] a list of assets to copy after generation
192
+ # @since 0.6.0
193
+ attr_accessor :assets
194
+
195
+ # @return [Boolean] whether markup option was specified
196
+ # @since 0.7.0
197
+ attr_accessor :has_markup
198
+
199
+ # Creates a new instance of the commandline utility
200
+ def initialize
201
+ super
202
+ @options = YardocOptions.new
203
+ @options.reset_defaults
204
+ @visibilities = [:public]
205
+ @apis = []
206
+ @hidden_apis = []
207
+ @assets = {}
208
+ @excluded = []
209
+ @files = []
210
+ @hidden_tags = []
211
+ @use_cache = false
212
+ @generate = true
213
+ @statistics = true
214
+ @list = false
215
+ @save_yardoc = true
216
+ @has_markup = false
217
+
218
+ if defined?(::Encoding) && ::Encoding.respond_to?(:default_external=)
219
+ ::Encoding.default_external, ::Encoding.default_internal = 'utf-8', 'utf-8'
220
+ end
221
+ end
222
+
223
+ def description
224
+ "Generates documentation"
225
+ end
226
+
227
+ # Runs the commandline utility, parsing arguments and generating
228
+ # output if set.
229
+ #
230
+ # @param [Array<String>] args the list of arguments. If the list only
231
+ # contains a single nil value, skip calling of {#parse_arguments}
232
+ # @return [void]
233
+ def run(*args)
234
+ log.show_progress = true
235
+ if args.size == 0 || !args.first.nil?
236
+ # fail early if arguments are not valid
237
+ return unless parse_arguments(*args)
238
+ end
239
+
240
+ checksums = nil
241
+ if use_cache
242
+ Registry.load
243
+ checksums = Registry.checksums.dup
244
+ end
245
+ YARD.parse(files, excluded)
246
+ Registry.save(use_cache) if save_yardoc
247
+
248
+ if generate
249
+ run_generate(checksums)
250
+ copy_assets
251
+ elsif list
252
+ print_list
253
+ end
254
+
255
+ if !list && statistics && log.level < Logger::ERROR
256
+ Registry.load_all
257
+ log.enter_level(Logger::ERROR) do
258
+ Stats.new(false).run(*args)
259
+ end
260
+ end
261
+
262
+ true
263
+ ensure
264
+ log.show_progress = false
265
+ end
266
+
267
+ # Parses commandline arguments
268
+ # @param [Array<String>] args the list of arguments
269
+ # @return [Boolean] whether or not arguments are valid
270
+ # @since 0.5.6
271
+ def parse_arguments(*args)
272
+ super(*args)
273
+
274
+ # Last minute modifications
275
+ self.files = ['{lib,app}/**/*.rb', 'ext/**/*.c'] if self.files.empty?
276
+ self.files.delete_if {|x| x =~ /\A\s*\Z/ } # remove empty ones
277
+ readme = Dir.glob('README*').first
278
+ readme ||= Dir.glob(files.first).first if options.onefile
279
+ options.readme ||= CodeObjects::ExtraFileObject.new(readme) if readme
280
+ options.files.unshift(options.readme).uniq! if options.readme
281
+
282
+ Tags::Library.visible_tags -= hidden_tags
283
+ add_visibility_verifier
284
+ add_api_verifier
285
+
286
+ apply_locale
287
+
288
+ # US-ASCII is invalid encoding for onefile
289
+ if defined?(::Encoding) && options.onefile
290
+ if ::Encoding.default_internal == ::Encoding::US_ASCII
291
+ log.warn "--one-file is not compatible with US-ASCII encoding, using ASCII-8BIT"
292
+ ::Encoding.default_external, ::Encoding.default_internal = ['ascii-8bit'] * 2
293
+ end
294
+ end
295
+
296
+ if generate && !verify_markup_options
297
+ false
298
+ else
299
+ true
300
+ end
301
+ end
302
+
303
+ # The list of all objects to process. Override this method to change
304
+ # which objects YARD should generate documentation for.
305
+ #
306
+ # @deprecated To hide methods use the +@private+ tag instead.
307
+ # @return [Array<CodeObjects::Base>] a list of code objects to process
308
+ def all_objects
309
+ Registry.all(:root, :module, :class)
310
+ end
311
+
312
+ private
313
+
314
+ # Generates output for objects
315
+ # @param [Hash, nil] checksums if supplied, a list of checkums for files.
316
+ # @return [void]
317
+ # @since 0.5.1
318
+ def run_generate(checksums)
319
+ if checksums
320
+ changed_files = []
321
+ Registry.checksums.each do |file, hash|
322
+ changed_files << file if checksums[file] != hash
323
+ end
324
+ end
325
+ Registry.load_all if use_cache
326
+ objects = run_verifier(all_objects).reject do |object|
327
+ serialized = !options.serializer || options.serializer.exists?(object)
328
+ if checksums && serialized && !object.files.any? {|f, line| changed_files.include?(f) }
329
+ true
330
+ else
331
+ log.debug "Re-generating object #{object.path}..."
332
+ false
333
+ end
334
+ end
335
+ Templates::Engine.generate(objects, options)
336
+ end
337
+
338
+ # Verifies that the markup options are valid before parsing any code.
339
+ # Failing early is better than failing late.
340
+ #
341
+ # @return (see YARD::Templates::Helpers::MarkupHelper#load_markup_provider)
342
+ def verify_markup_options
343
+ result, lvl = false, has_markup ? log.level : Logger::FATAL
344
+ obj = Struct.new(:options).new(options)
345
+ obj.extend(Templates::Helpers::MarkupHelper)
346
+ options.files.each do |file|
347
+ markup = file.attributes[:markup] || obj.markup_for_file('', file.filename)
348
+ result = obj.load_markup_provider(markup)
349
+ return false if !result && markup != :rdoc
350
+ end
351
+ options.markup = :rdoc unless has_markup
352
+ log.enter_level(lvl) { result = obj.load_markup_provider }
353
+ if !result && !has_markup
354
+ log.warn "Could not load default RDoc formatter, " +
355
+ "ignoring any markup (install RDoc to get default formatting)."
356
+ options.markup = :none
357
+ true
358
+ else
359
+ result
360
+ end
361
+ end
362
+
363
+ # Copies any assets to the output directory
364
+ # @return [void]
365
+ # @since 0.6.0
366
+ def copy_assets
367
+ return unless options.serializer
368
+ outpath = options.serializer.basepath
369
+ assets.each do |from, to|
370
+ to = File.join(outpath, to)
371
+ log.debug "Copying asset '#{from}' to '#{to}'"
372
+ from += '/.' if File.directory?(from)
373
+ FileUtils.cp_r(from, to)
374
+ end
375
+ end
376
+
377
+ # Prints a list of all objects
378
+ # @return [void]
379
+ # @since 0.5.5
380
+ def print_list
381
+ Registry.load_all
382
+ run_verifier(Registry.all).
383
+ sort_by {|item| [item.file || '', item.line || 0] }.each do |item|
384
+ log.puts "#{item.file}:#{item.line}: #{item.path}"
385
+ end
386
+ end
387
+
388
+ # Adds a set of extra documentation files to be processed
389
+ # @param [Array<String>] files the set of documentation files
390
+ def add_extra_files(*files)
391
+ files.map! {|f| f.include?("*") ? Dir.glob(f) : f }.flatten!
392
+ files.each do |file|
393
+ if File.file?(file)
394
+ options.files << CodeObjects::ExtraFileObject.new(file)
395
+ else
396
+ log.warn "Could not find extra file: #{file}"
397
+ end
398
+ end
399
+ end
400
+
401
+ # Parses the file arguments into Ruby files and extra files, which are
402
+ # separated by a '-' element.
403
+ #
404
+ # @example Parses a set of Ruby source files
405
+ # parse_files %w(file1 file2 file3)
406
+ # @example Parses a set of Ruby files with a separator and extra files
407
+ # parse_files %w(file1 file2 - extrafile1 extrafile2)
408
+ # @param [Array<String>] files the list of files to parse
409
+ # @return [void]
410
+ def parse_files(*files)
411
+ seen_extra_files_marker = false
412
+
413
+ files.each do |file|
414
+ if file == "-"
415
+ seen_extra_files_marker = true
416
+ next
417
+ end
418
+
419
+ if seen_extra_files_marker
420
+ add_extra_files(file)
421
+ else
422
+ self.files << file
423
+ end
424
+ end
425
+ end
426
+
427
+ # Adds verifier rule for visibilities
428
+ # @return [void]
429
+ # @since 0.5.6
430
+ def add_visibility_verifier
431
+ vis_expr = "#{visibilities.uniq.inspect}.include?(object.visibility)"
432
+ options.verifier.add_expressions(vis_expr)
433
+ end
434
+
435
+ # Adds verifier rule for APIs
436
+ # @return [void]
437
+ # @since 0.8.1
438
+ def add_api_verifier
439
+ no_api = true if apis.delete('')
440
+ exprs = []
441
+
442
+ if apis.size > 0
443
+ exprs << "#{apis.uniq.inspect}.include?(@api.text)"
444
+ end
445
+
446
+ if hidden_apis.size > 0
447
+ exprs << "!#{hidden_apis.uniq.inspect}.include?(@api.text)"
448
+ end
449
+
450
+ exprs = exprs.size > 0 ? [exprs.join(' && ')] : []
451
+ exprs << "!@api" if no_api
452
+
453
+ expr = exprs.join(' || ')
454
+ options.verifier.add_expressions(expr) unless expr.empty?
455
+ end
456
+
457
+ # Applies the specified locale to collected objects
458
+ # @return [void]
459
+ # @since 0.8.3
460
+ def apply_locale
461
+ YARD::I18n::Locale.default = options.locale
462
+ options.files.each do |file|
463
+ file.locale = options.locale
464
+ end
465
+ end
466
+
467
+ # (see Templates::Helpers::BaseHelper#run_verifier)
468
+ def run_verifier(list)
469
+ options.verifier ? options.verifier.run(list) : list
470
+ end
471
+
472
+ # @since 0.6.0
473
+ def add_tag(tag_data, factory_method = nil)
474
+ tag, title = *tag_data.split(':')
475
+ title ||= tag.capitalize
476
+ Tags::Library.define_tag(title, tag.to_sym, factory_method)
477
+ Tags::Library.visible_tags |= [tag.to_sym]
478
+ end
479
+
480
+ # Parses commandline options.
481
+ # @param [Array<String>] args each tokenized argument
482
+ def optparse(*args)
483
+ opts = OptionParser.new
484
+ opts.banner = "Usage: yard doc [options] [source_files [- extra_files]]"
485
+
486
+ opts.separator "(if a list of source files is omitted, "
487
+ opts.separator " {lib,app}/**/*.rb ext/**/*.c is used.)"
488
+ opts.separator ""
489
+ opts.separator "Example: yardoc -o documentation/ - FAQ LICENSE"
490
+ opts.separator " The above example outputs documentation for files in"
491
+ opts.separator " lib/**/*.rb to documentation/ including the extra files"
492
+ opts.separator " FAQ and LICENSE."
493
+ opts.separator ""
494
+ opts.separator "A base set of options can be specified by adding a .yardopts"
495
+ opts.separator "file to your base path containing all extra options separated"
496
+ opts.separator "by whitespace."
497
+
498
+ general_options(opts)
499
+ output_options(opts)
500
+ tag_options(opts)
501
+ common_options(opts)
502
+ parse_options(opts, args)
503
+ parse_files(*args) unless args.empty?
504
+ end
505
+
506
+ # Adds general options
507
+ def general_options(opts)
508
+ opts.separator ""
509
+ opts.separator "General Options:"
510
+
511
+ opts.on('-b', '--db FILE', 'Use a specified .yardoc db to load from or save to',
512
+ ' (defaults to .yardoc)') do |yfile|
513
+ YARD::Registry.yardoc_file = yfile
514
+ end
515
+
516
+ opts.on('--[no-]single-db', 'Whether code objects should be stored to single',
517
+ ' database file (advanced)') do |use_single_db|
518
+ Registry.single_object_db = use_single_db
519
+ end
520
+
521
+ opts.on('-n', '--no-output', 'Only generate .yardoc database, no documentation.') do
522
+ self.generate = false
523
+ end
524
+
525
+ opts.on('-c', '--use-cache [FILE]',
526
+ "Use the cached .yardoc db to generate documentation.",
527
+ " (defaults to no cache)") do |file|
528
+ YARD::Registry.yardoc_file = file if file
529
+ self.use_cache = true
530
+ end
531
+
532
+ opts.on('--no-cache', "Clear .yardoc db before parsing source.") do
533
+ self.use_cache = false
534
+ end
535
+
536
+ yardopts_options(opts)
537
+
538
+ opts.on('--no-save', 'Do not save the parsed data to the yardoc db') do
539
+ self.save_yardoc = false
540
+ end
541
+
542
+ opts.on('--exclude REGEXP', 'Ignores a file if it matches path match (regexp)') do |path|
543
+ self.excluded << path
544
+ end
545
+ end
546
+
547
+ # Adds output options
548
+ def output_options(opts)
549
+ opts.separator ""
550
+ opts.separator "Output options:"
551
+
552
+ opts.on('--one-file', 'Generates output as a single file') do
553
+ options.onefile = true
554
+ end
555
+
556
+ opts.on('--list', 'List objects to standard out (implies -n)') do |format|
557
+ self.generate = false
558
+ self.list = true
559
+ end
560
+
561
+ opts.on('--no-public', "Don't show public methods. (default shows public)") do
562
+ visibilities.delete(:public)
563
+ end
564
+
565
+ opts.on('--protected', "Show protected methods. (default hides protected)") do
566
+ visibilities.push(:protected)
567
+ end
568
+
569
+ opts.on('--private', "Show private methods. (default hides private)") do
570
+ visibilities.push(:private)
571
+ end
572
+
573
+ opts.on('--no-private', "Hide objects with @private tag") do
574
+ options.verifier.add_expressions '!object.tag(:private) &&
575
+ (object.namespace.is_a?(CodeObjects::Proxy) || !object.namespace.tag(:private))'
576
+ end
577
+
578
+ opts.on('--[no-]api API', 'Generates documentation for a given API',
579
+ '(objects which define the correct @api tag).',
580
+ 'If --no-api is given, displays objects with',
581
+ 'no @api tag.') do |api|
582
+ api = '' if api == false
583
+ apis.push(api)
584
+ end
585
+
586
+ opts.on('--hide-api API', 'Hides given @api tag from documentation') do |api|
587
+ hidden_apis.push(api)
588
+ end
589
+
590
+ opts.on('--embed-mixins', "Embeds mixin methods into class documentation") do
591
+ options.embed_mixins << '*'
592
+ end
593
+
594
+ opts.on('--embed-mixin [MODULE]', "Embeds mixin methods from a particular",
595
+ " module into class documentation") do |mod|
596
+ options.embed_mixins << mod
597
+ end
598
+
599
+ opts.on('--no-highlight', "Don't highlight code blocks in output.") do
600
+ options.highlight = false
601
+ end
602
+
603
+ opts.on('--default-return TYPE', "Shown if method has no return type. ",
604
+ " (defaults to 'Object')") do |type|
605
+ options.default_return = type
606
+ end
607
+
608
+ opts.on('--hide-void-return', "Hides return types specified as 'void'. ",
609
+ " (default is shown)") do
610
+ options.hide_void_return = true
611
+ end
612
+
613
+ opts.on('--query QUERY', "Only show objects that match a specific query") do |query|
614
+ next if YARD::Config.options[:safe_mode]
615
+ options.verifier.add_expressions(query.taint)
616
+ end
617
+
618
+ opts.on('--title TITLE', 'Add a specific title to HTML documents') do |title|
619
+ options.title = title
620
+ end
621
+
622
+ opts.on('-r', '--readme FILE', '--main FILE', 'The readme file used as the title page',
623
+ ' of documentation.') do |readme|
624
+ if File.file?(readme)
625
+ options.readme = CodeObjects::ExtraFileObject.new(readme)
626
+ else
627
+ log.warn "Could not find readme file: #{readme}"
628
+ end
629
+ end
630
+
631
+ opts.on('--files FILE1,FILE2,...', 'Any extra comma separated static files to be ',
632
+ ' included (eg. FAQ)') do |files|
633
+ add_extra_files(*files.split(","))
634
+ end
635
+
636
+ opts.on('--asset FROM[:TO]', 'A file or directory to copy over to output ',
637
+ ' directory after generating') do |asset|
638
+ re = /^(?:\.\.\/|\/)/
639
+ from, to = *asset.split(':').map {|f| File.cleanpath(f) }
640
+ to ||= from
641
+ if from =~ re || to =~ re
642
+ log.warn "Invalid file '#{asset}'"
643
+ else
644
+ assets[from] = to
645
+ end
646
+ end
647
+
648
+ opts.on('-o', '--output-dir PATH',
649
+ 'The output directory. (defaults to ./doc)') do |dir|
650
+ options.serializer.basepath = dir
651
+ end
652
+
653
+ opts.on('-m', '--markup MARKUP',
654
+ 'Markup style used in documentation, like textile, ',
655
+ ' markdown or rdoc. (defaults to rdoc)') do |markup|
656
+ self.has_markup = true
657
+ options.markup = markup.to_sym
658
+ end
659
+
660
+ opts.on('-M', '--markup-provider MARKUP_PROVIDER',
661
+ 'Overrides the library used to process markup ',
662
+ ' formatting (specify the gem name)') do |markup_provider|
663
+ options.markup_provider = markup_provider.to_sym
664
+ end
665
+
666
+ opts.on('--charset ENC', 'Character set to use when parsing files ',
667
+ ' (default is system locale)') do |encoding|
668
+ begin
669
+ if defined?(Encoding) && Encoding.respond_to?(:default_external=)
670
+ Encoding.default_external, Encoding.default_internal = encoding, encoding
671
+ end
672
+ rescue ArgumentError => e
673
+ raise OptionParser::InvalidOption, e
674
+ end
675
+ end
676
+
677
+ opts.on('-t', '--template TEMPLATE',
678
+ 'The template to use. (defaults to "default")') do |template|
679
+ options.template = template.to_sym
680
+ end
681
+
682
+ opts.on('-p', '--template-path PATH',
683
+ 'The template path to look for templates in.',
684
+ ' (used with -t).') do |path|
685
+ next if YARD::Config.options[:safe_mode]
686
+ YARD::Templates::Engine.register_template_path(File.expand_path(path))
687
+ end
688
+
689
+ opts.on('-f', '--format FORMAT',
690
+ 'The output format for the template.',
691
+ ' (defaults to html)') do |format|
692
+ options.format = format.to_sym
693
+ end
694
+
695
+ opts.on('--no-stats', 'Don\'t print statistics') do
696
+ self.statistics = false
697
+ end
698
+
699
+ opts.on('--locale LOCALE',
700
+ 'The locale for generated documentation.',
701
+ ' (defaults to en)') do |locale|
702
+ options.locale = locale
703
+ end
704
+
705
+ opts.on('--po-dir DIR',
706
+ 'The directory that has .po files.',
707
+ " (defaults to #{YARD::Registry.po_dir})") do |dir|
708
+ YARD::Registry.po_dir = dir
709
+ end
710
+ end
711
+
712
+ # Adds tag options
713
+ # @since 0.6.0
714
+ def tag_options(opts)
715
+ opts.separator ""
716
+ opts.separator "Tag options: (TAG:TITLE looks like: 'overload:Overloaded Method')"
717
+
718
+ opts.on('--tag TAG:TITLE', 'Registers a new free-form metadata @tag') do |tag|
719
+ add_tag(tag)
720
+ end
721
+
722
+ opts.on('--type-tag TAG:TITLE', 'Tag with an optional types field') do |tag|
723
+ add_tag(tag, :with_types)
724
+ end
725
+
726
+ opts.on('--type-name-tag TAG:TITLE', 'Tag with optional types and a name field') do |tag|
727
+ add_tag(tag, :with_types_and_name)
728
+ end
729
+
730
+ opts.on('--name-tag TAG:TITLE', 'Tag with a name field') do |tag|
731
+ add_tag(tag, :with_name)
732
+ end
733
+
734
+ opts.on('--title-tag TAG:TITLE', 'Tag with first line as title field') do |tag|
735
+ add_tag(tag, :with_title_and_text)
736
+ end
737
+
738
+ opts.on('--hide-tag TAG', 'Hides a previously defined tag from templates') do |tag|
739
+ self.hidden_tags |= [tag.to_sym]
740
+ end
741
+
742
+ opts.on('--transitive-tag TAG', 'Marks a tag as transitive') do |tag|
743
+ Tags::Library.transitive_tags |= [tag.to_sym]
744
+ end
745
+
746
+ opts.on('--non-transitive-tag TAG', 'Marks a tag as not transitive') do |tag|
747
+ Tags::Library.transitive_tags -= [tag.to_sym]
748
+ end
749
+ end
750
+ end
751
+ end
752
+ end