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,69 @@
1
+ require "pathname"
2
+
3
+ module YARD
4
+ module CLI
5
+ # CLI command to support internationalization (a.k.a. i18n).
6
+ # I18n feature is based on gettext technology.
7
+ # This command generates .pot file from docstring and extra
8
+ # documentation.
9
+ #
10
+ # @since 0.8.0
11
+ # @todo Support msgminit and msgmerge features?
12
+ class I18n < Yardoc
13
+ def initialize
14
+ super
15
+ @options.serializer.basepath = "po/yard.pot"
16
+ end
17
+
18
+ def description
19
+ 'Generates .pot file from source code and extra documentation'
20
+ end
21
+
22
+ def run(*args)
23
+ if args.size == 0 || !args.first.nil?
24
+ # fail early if arguments are not valid
25
+ return unless parse_arguments(*args)
26
+ end
27
+
28
+ YARD.parse(files, excluded)
29
+
30
+ serializer = options.serializer
31
+ pot_file_path = Pathname.new(serializer.basepath).expand_path
32
+ pot_file_dir_path, pot_file_basename = pot_file_path.split
33
+ relative_base_path = Pathname.pwd.relative_path_from(pot_file_dir_path)
34
+ serializer.basepath = pot_file_dir_path.to_s
35
+ serializer.serialize(pot_file_basename.to_s,
36
+ generate_pot(relative_base_path.to_s))
37
+
38
+ true
39
+ end
40
+
41
+ private
42
+
43
+ def general_options(opts)
44
+ opts.banner = "Usage: yard i18n [options] [source_files [- extra_files]]"
45
+ opts.top.list.clear
46
+ opts.separator "(if a list of source files is omitted, "
47
+ opts.separator " {lib,app}/**/*.rb ext/**/*.c is used.)"
48
+ opts.separator ""
49
+ opts.separator "Example: yard i18n -o yard.pot - FAQ LICENSE"
50
+ opts.separator " The above example outputs .pot file for files in"
51
+ opts.separator " lib/**/*.rb to yard.pot including the extra files"
52
+ opts.separator " FAQ and LICENSE."
53
+ opts.separator ""
54
+ opts.separator "A base set of options can be specified by adding a .yardopts"
55
+ opts.separator "file to your base path containing all extra options separated"
56
+ opts.separator "by whitespace."
57
+ super(opts)
58
+ end
59
+
60
+ def generate_pot(relative_base_path)
61
+ generator = YARD::I18n::PotGenerator.new(relative_base_path)
62
+ objects = run_verifier(all_objects)
63
+ generator.parse_objects(objects)
64
+ generator.parse_files(options.files || [])
65
+ generator.generate
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,22 @@
1
+ module YARD
2
+ module CLI
3
+ # Lists all constant and method names in the codebase. Uses {Yardoc} --list.
4
+ class List < Command
5
+ def description; 'Lists all constant and methods. Uses `yard doc --list`' end
6
+
7
+ # Runs the commandline utility, parsing arguments and displaying a
8
+ # list of objects
9
+ #
10
+ # @param [Array<String>] args the list of arguments.
11
+ # @return [void]
12
+ def run(*args)
13
+ if args.include?('--help')
14
+ log.puts "Usage: yard list [yardoc_options]"
15
+ log.puts "Takes the same arguments as yardoc. See yardoc --help"
16
+ else
17
+ Yardoc.run('-c', '--list', *args)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,33 @@
1
+ module YARD
2
+ module CLI
3
+ # Lists all markup types
4
+ # @since 0.8.6
5
+ class MarkupTypes < Command
6
+ def description; 'Lists all available markup types and libraries' end
7
+
8
+ # Runs the commandline utility, parsing arguments and displaying a
9
+ # list of markup types
10
+ #
11
+ # @param [Array<String>] args the list of arguments.
12
+ # @return [void]
13
+ def run(*args)
14
+ log.puts "Available markup types for `doc' command:"
15
+ log.puts
16
+ types = Templates::Helpers::MarkupHelper::MARKUP_PROVIDERS
17
+ exts = Templates::Helpers::MarkupHelper::MARKUP_EXTENSIONS
18
+ types.sort_by {|name, _| name.to_s }.each do |name, providers|
19
+ log.puts "[#{name}]"
20
+ libs = providers.map {|p| p[:lib] }.compact
21
+ if libs.size > 0
22
+ log.puts " Providers: #{libs.join(" ")}"
23
+ end
24
+ if exts[name]
25
+ log.puts " Extensions: #{exts[name].map {|e| ".#{e}"}.join(" ")}"
26
+ end
27
+
28
+ log.puts
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,253 @@
1
+ module YARD
2
+ module CLI
3
+ # A local documentation server
4
+ # @since 0.6.0
5
+ class Server < Command
6
+ # @return [Hash] a list of options to pass to the doc server
7
+ attr_accessor :options
8
+
9
+ # @return [Hash] a list of options to pass to the web server
10
+ attr_accessor :server_options
11
+
12
+ # @return [Hash] a list of library names and yardoc files to serve
13
+ attr_accessor :libraries
14
+
15
+ # @return [Adapter] the adapter to use for loading the web server
16
+ attr_accessor :adapter
17
+
18
+ # @return [Array<String>] a list of scripts to load
19
+ # @since 0.6.2
20
+ attr_accessor :scripts
21
+
22
+ # @return [Array<String>] a list of template paths to register
23
+ # @since 0.6.2
24
+ attr_accessor :template_paths
25
+
26
+ # Creates a new instance of the Server command line utility
27
+ def initialize
28
+ super
29
+ self.scripts = []
30
+ self.template_paths = []
31
+ self.libraries = {}
32
+ self.options = SymbolHash.new(false).update(
33
+ :single_library => true,
34
+ :caching => false
35
+ )
36
+ self.server_options = {:Port => 8808}
37
+ end
38
+
39
+ def description
40
+ "Runs a local documentation server"
41
+ end
42
+
43
+ def run(*args)
44
+ optparse(*args)
45
+
46
+ select_adapter.setup
47
+ load_scripts
48
+ load_template_paths
49
+ adapter.new(libraries, options, server_options).start
50
+ end
51
+
52
+ private
53
+
54
+ def load_scripts
55
+ scripts.each {|file| load_script(file) }
56
+ end
57
+
58
+ def load_template_paths
59
+ return if YARD::Config.options[:safe_mode]
60
+ Templates::Engine.template_paths |= template_paths
61
+ end
62
+
63
+ def select_adapter
64
+ return adapter if adapter
65
+ require 'rubygems'
66
+ require 'rack'
67
+ self.adapter = YARD::Server::RackAdapter
68
+ rescue LoadError
69
+ self.adapter = YARD::Server::WebrickAdapter
70
+ end
71
+
72
+ def add_libraries(args)
73
+ (0...args.size).step(2) do |index|
74
+ library, dir = args[index], args[index + 1]
75
+
76
+ libver = nil
77
+ if dir
78
+ if File.exist?(dir)
79
+ # Provided dir contains a .yardopts file
80
+ libver = create_library_version_if_yardopts_exist(library, dir)
81
+ libver ||= YARD::Server::LibraryVersion.new(library, nil, dir)
82
+ end
83
+ else
84
+ # Check if this dir contains a .yardopts file
85
+ pwd = Dir.pwd
86
+ libver = create_library_version_if_yardopts_exist(library, pwd)
87
+
88
+ # Check default location
89
+ yfile = File.join(pwd, '.yardoc')
90
+ libver ||= YARD::Server::LibraryVersion.new(library, nil, yfile)
91
+ end
92
+
93
+ # Register library
94
+ if libver
95
+ libver.yardoc_file = File.expand_path(libver.yardoc_file) if libver.yardoc_file
96
+ libver.source_path = File.expand_path(libver.source_path) if libver.source_path
97
+ libraries[library] ||= []
98
+ libraries[library] |= [libver]
99
+ else
100
+ log.warn "Cannot find yardoc db for #{library}: #{dir.inspect}"
101
+ end
102
+ end
103
+ end
104
+
105
+ # @param [String] library The library name.
106
+ # @param [String, nil] dir The argument provided on the CLI after the
107
+ # library name. Is supposed to point to either a project directory
108
+ # with a Yard options file, or a yardoc db.
109
+ # @return [LibraryVersion, nil]
110
+ def create_library_version_if_yardopts_exist(library, dir)
111
+ if dir
112
+ options_file = File.join(dir, Yardoc::DEFAULT_YARDOPTS_FILE)
113
+ if File.exist?(options_file)
114
+ # Found yardopts, extract db path
115
+ yfile = extract_db_from_options_file(options_file)
116
+ db = File.expand_path(yfile, dir)
117
+
118
+ # Create libver
119
+ libver = YARD::Server::LibraryVersion.new(library, nil, db)
120
+ libver.source_path = dir
121
+ libver
122
+ end
123
+ end
124
+ end
125
+
126
+ def add_gems
127
+ require 'rubygems'
128
+ Gem.source_index.find_name('').each do |spec|
129
+ libraries[spec.name] ||= []
130
+ libraries[spec.name] |= [YARD::Server::LibraryVersion.new(spec.name, spec.version.to_s, nil, :gem)]
131
+ end
132
+ end
133
+
134
+ def add_gems_from_gemfile(gemfile = nil)
135
+ require 'bundler'
136
+ gemfile ||= "Gemfile"
137
+ if File.exist?("#{gemfile}.lock")
138
+ Bundler::LockfileParser.new(File.read("#{gemfile}.lock")).specs.each do |spec|
139
+ libraries[spec.name] ||= []
140
+ libraries[spec.name] |= [YARD::Server::LibraryVersion.new(spec.name, spec.version.to_s, nil, :gem)]
141
+ end
142
+ else
143
+ log.warn "Cannot find #{gemfile}.lock, ignoring --gemfile option"
144
+ end
145
+ rescue LoadError
146
+ log.error "Bundler not available, ignoring --gemfile option"
147
+ end
148
+
149
+ def optparse(*args)
150
+ opts = OptionParser.new
151
+ opts.banner = 'Usage: yard server [options] [[library yardoc_file] ...]'
152
+ opts.separator ''
153
+ opts.separator 'Example: yard server -m yard .yardoc ruby-core ../ruby/.yardoc'
154
+ opts.separator 'The above example serves documentation for YARD and Ruby-core'
155
+ opts.separator ''
156
+ opts.separator 'If no library/yardoc_file is specified, the server uses'
157
+ opts.separator 'the name of the current directory and `.yardoc` respectively'
158
+ opts.separator ''
159
+ opts.separator "General Options:"
160
+ opts.on('-m', '--multi-library', 'Serves documentation for multiple libraries') do
161
+ options[:single_library] = false
162
+ end
163
+ opts.on('-c', '--cache', 'Caches all documentation to document root (see --docroot)') do
164
+ options[:caching] = true
165
+ end
166
+ opts.on('-r', '--reload', 'Reparses the library code on each request') do
167
+ options[:incremental] = true
168
+ end
169
+ opts.on('-g', '--gems', 'Serves documentation for installed gems') do
170
+ add_gems
171
+ end
172
+ opts.on('-G', '--gemfile [GEMFILE]', 'Serves documentation for gems from Gemfile') do |gemfile|
173
+ add_gems_from_gemfile(gemfile)
174
+ end
175
+ opts.on('-t', '--template-path PATH',
176
+ 'The template path to look for templates in. (used with -t).') do |path|
177
+ self.template_paths << path
178
+ end
179
+ opts.separator ''
180
+ opts.separator "Web Server Options:"
181
+ opts.on('-d', '--daemon', 'Daemonizes the server process') do
182
+ server_options[:daemonize] = true
183
+ end
184
+ opts.on('-B HOST', '--bind', 'The host address to bind to') do |host|
185
+ server_options[:Host] = host.to_s
186
+ end
187
+ opts.on('-p PORT', '--port', 'Serves documentation on PORT') do |port|
188
+ server_options[:Port] = port.to_i
189
+ end
190
+ opts.on('--docroot DOCROOT', 'Uses DOCROOT as document root') do |docroot|
191
+ server_options[:DocumentRoot] = File.expand_path(docroot)
192
+ end
193
+ opts.on('-a', '--adapter ADAPTER', 'Use the ADAPTER (full Ruby class) for web server') do |adapter|
194
+ if adapter.downcase == 'webrick'
195
+ self.adapter = YARD::Server::WebrickAdapter
196
+ elsif adapter.downcase == 'rack'
197
+ self.adapter = YARD::Server::RackAdapter
198
+ else
199
+ self.adapter = eval(adapter)
200
+ end
201
+ end
202
+ opts.on('-s', '--server TYPE', 'Use a specific server type eg. thin,mongrel,cgi (Rack specific)') do |type|
203
+ server_options[:server] = type
204
+ end
205
+ common_options(opts)
206
+ opts.on('-e', '--load FILE', 'A Ruby script to load before the source tree is parsed.') do |file|
207
+ self.scripts << file
208
+ end
209
+ parse_options(opts, args)
210
+
211
+ if args.empty? && libraries.empty?
212
+ # No args - try to use current dir
213
+ add_libraries([File.basename(Dir.pwd), nil])
214
+
215
+ # Generate doc for first time
216
+ libver = libraries.empty? ? nil : libraries.values.first.first
217
+ if libver and !File.exist?(libver.yardoc_file)
218
+ generate_doc_for_first_time(libver)
219
+ end
220
+ else
221
+ add_libraries(args)
222
+ options[:single_library] = false if libraries.size > 1
223
+ end
224
+ end
225
+
226
+ def generate_doc_for_first_time(libver)
227
+ log.enter_level(Logger::INFO) do
228
+ yardoc_file = libver.yardoc_file.sub /^#{Regexp.quote Dir.pwd}[\\\/]+/, ''
229
+ log.info "No yardoc db found in #{yardoc_file}, parsing source before starting server..."
230
+ end
231
+ Dir.chdir(libver.source_path) do
232
+ Yardoc.run('-n')
233
+ end
234
+ end
235
+
236
+ def extract_db_from_options_file(options_file)
237
+ args = File.read_binary(options_file).shell_split
238
+ db = YARD::Registry.yardoc_file
239
+ opts = OptionParser.new
240
+ opts.on('-b', '--db FILE') {|file| db = file }
241
+
242
+ begin
243
+ opts.parse!(args)
244
+ rescue OptionParser::ParseError
245
+ args.shift if args.first && args.first[0,1] != '-'
246
+ retry
247
+ end
248
+
249
+ db
250
+ end
251
+ end
252
+ end
253
+ end
@@ -0,0 +1,213 @@
1
+ module YARD
2
+ module CLI
3
+ # @since 0.6.0
4
+ class Stats < Yardoc
5
+ include Templates::Helpers::BaseHelper
6
+
7
+ # Maintains the order in which +stats_for_+ statistics methods should be
8
+ # printed.
9
+ #
10
+ # @see #print_statistics
11
+ STATS_ORDER = [:files, :modules, :classes, :constants, :methods]
12
+
13
+ # @return [Boolean] whether to parse and load registry
14
+ attr_accessor :parse
15
+
16
+ # @param [Boolean] parse whether to parse and load registry (see {#parse})
17
+ def initialize(parse = true)
18
+ super()
19
+ @parse = parse
20
+ @undoc_list = nil
21
+ @compact = false
22
+ end
23
+
24
+ def description
25
+ "Prints documentation statistics on a set of files"
26
+ end
27
+
28
+ # Runs the commandline utility, parsing arguments and generating
29
+ # output if set.
30
+ #
31
+ # @param [Array<String>] args the list of arguments
32
+ # @return [void]
33
+ def run(*args)
34
+ parse_arguments(*args)
35
+
36
+ if use_cache
37
+ Registry.load!
38
+ elsif parse
39
+ YARD.parse(files, excluded)
40
+ Registry.save(use_cache) if save_yardoc
41
+ end
42
+
43
+ print_statistics
44
+ print_undocumented_objects
45
+ end
46
+
47
+ # Prints statistics for different object types
48
+ #
49
+ # To add statistics for a specific type, add a method +#stats_for_TYPE+
50
+ # to this class that calls {#output}.
51
+ def print_statistics
52
+ @total, @undocumented = 0, 0
53
+ meths = methods.map {|m| m.to_s }.grep(/^stats_for_/)
54
+ STATS_ORDER.each do |meth|
55
+ mname = "stats_for_#{meth}"
56
+ if meths.include?(mname)
57
+ send(mname)
58
+ meths.delete(mname)
59
+ end
60
+ end
61
+ meths.each {|m| send(m) }
62
+ if @total == 0
63
+ total = 0
64
+ else
65
+ total = (@total - @undocumented).to_f / @total.to_f * 100
66
+ end
67
+ log.puts("% 3.2f%% documented" % total)
68
+ end
69
+
70
+ # Prints list of undocumented objects
71
+ def print_undocumented_objects
72
+ return if !@undoc_list || @undoc_list.empty?
73
+ log.puts
74
+ log.puts "Undocumented Objects:"
75
+
76
+ objects = @undoc_list.sort_by {|o| o.file }
77
+ max = objects.sort_by {|o| o.path.length }.last.path.length
78
+ if @compact
79
+ objects.each do |object|
80
+ log.puts("%-#{max}s (%s)" % [object.path,
81
+ [object.file, object.line].compact.join(":")])
82
+ end
83
+ else
84
+ last_file = nil
85
+ objects.each do |object|
86
+ if object.file != last_file
87
+ log.puts
88
+ log.puts "(in file: #{object.file})"
89
+ end
90
+ log.puts object.path
91
+ last_file = object.file
92
+ end
93
+ end
94
+ end
95
+
96
+ # @return [Array<CodeObjects::Base>] all the parsed objects in the registry,
97
+ # removing any objects that are not visible (private, protected) depending
98
+ # on the arguments passed to the command.
99
+ def all_objects
100
+ @all_objects ||= run_verifier Registry.all
101
+ end
102
+
103
+ # Statistics for files
104
+ def stats_for_files
105
+ files = []
106
+ all_objects.each {|o| files |= [o.file] }
107
+ output "Files", files.size
108
+ end
109
+
110
+ # Statistics for modules
111
+ def stats_for_modules
112
+ output "Modules", *type_statistics(:module)
113
+ end
114
+
115
+ # Statistics for classes
116
+ def stats_for_classes
117
+ output "Classes", *type_statistics(:class)
118
+ end
119
+
120
+ # Statistics for constants
121
+ def stats_for_constants
122
+ output "Constants", *type_statistics(:constant)
123
+ end
124
+
125
+ # Statistics for methods
126
+ def stats_for_methods
127
+ objs = all_objects.select {|m| m.type == :method }
128
+ objs.reject! {|m| m.is_alias? || !m.is_explicit? }
129
+ undoc = objs.select {|m| m.docstring.blank? && !m.overridden_method }
130
+ @undoc_list |= undoc if @undoc_list
131
+ output "Methods", objs.size, undoc.size
132
+ end
133
+
134
+ # Prints a statistic to standard out. This method is optimized for
135
+ # getting Integer values, though it allows any data to be printed.
136
+ #
137
+ # @param [String] name the statistic name
138
+ # @param [Integer, String] data the numeric (or any) data representing
139
+ # the statistic. If +data+ is an Integer, it should represent the
140
+ # total objects of a type.
141
+ # @param [Integer, nil] undoc number of undocumented objects for the type
142
+ # @return [void]
143
+ def output(name, data, undoc = nil)
144
+ @total += data if data.is_a?(Integer) && undoc
145
+ @undocumented += undoc if undoc.is_a?(Integer)
146
+ if undoc
147
+ data = ("%5s (% 5d undocumented)" % [data, undoc])
148
+ else
149
+ data = "%5s" % data
150
+ end
151
+ log.puts("%-12s %s" % [name + ":", data])
152
+ end
153
+
154
+ private
155
+
156
+ def type_statistics(type)
157
+ objs = all_objects.select {|m| m.type == type }
158
+ undoc = objs.find_all {|m| m.docstring.blank? }
159
+ @undoc_list |= undoc if @undoc_list
160
+ [objs.size, undoc.size]
161
+ end
162
+
163
+ # Parses commandline options.
164
+ # @param [Array<String>] args each tokenized argument
165
+ def optparse(*args)
166
+ opts = OptionParser.new
167
+ opts.banner = "Usage: yard stats [options] [source_files]"
168
+
169
+ opts.separator "(if a list of source files is omitted, lib/**/*.rb ext/**/*.c is used.)"
170
+
171
+ general_options(opts)
172
+ output_options(opts)
173
+ tag_options(opts)
174
+ common_options(opts)
175
+ parse_options(opts, args)
176
+ parse_files(*args) unless args.empty?
177
+ end
178
+
179
+ def general_options(opts)
180
+ super(opts)
181
+
182
+ opts.on('--list-undoc', 'List all undocumented objects') do
183
+ @undoc_list = []
184
+ end
185
+
186
+ opts.on('--compact', 'Compact undocumented objects listing') do
187
+ @compact = true
188
+ end
189
+
190
+ opts.on('--no-public', "Don't include public methods in statistics.") do
191
+ visibilities.delete(:public)
192
+ end
193
+
194
+ opts.on('--protected', "Include protected methods in statistics.") do
195
+ visibilities.push(:protected)
196
+ end
197
+
198
+ opts.on('--private', "Include private methods in statistics.") do
199
+ visibilities.push(:private)
200
+ end
201
+
202
+ opts.on('--no-private', "Don't include objects with @private tag in statistics.") do
203
+ options[:verifier].add_expressions '!object.tag(:private) &&
204
+ (object.namespace.type == :proxy || !object.namespace.tag(:private))'
205
+ end
206
+
207
+ opts.on('--query QUERY', "Only includes objects that match a specific query") do |query|
208
+ options[:verifier].add_expressions(query.taint)
209
+ end
210
+ end
211
+ end
212
+ end
213
+ end