yard 0.7.5 → 0.8.0

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

Potentially problematic release.


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

Files changed (339) hide show
  1. data/.yardopts +10 -2
  2. data/ChangeLog +1263 -38
  3. data/LEGAL +5 -5
  4. data/LICENSE +1 -1
  5. data/README.md +91 -82
  6. data/Rakefile +6 -6
  7. data/benchmarks/builtins_vs_eval.rb +1 -1
  8. data/benchmarks/erb_vs_erubis.rb +4 -4
  9. data/benchmarks/generation.rb +5 -5
  10. data/benchmarks/parsing.rb +2 -2
  11. data/benchmarks/registry_store_types.rb +48 -0
  12. data/bin/yard +9 -1
  13. data/bin/yardoc +9 -1
  14. data/bin/yri +10 -2
  15. data/docs/CodeObjects.md +10 -10
  16. data/docs/GettingStarted.md +85 -83
  17. data/docs/Handlers.md +21 -21
  18. data/docs/Overview.md +7 -7
  19. data/docs/Parser.md +30 -30
  20. data/docs/Tags.md +250 -554
  21. data/docs/TagsArch.md +123 -0
  22. data/docs/Templates.md +58 -80
  23. data/docs/WhatsNew.md +378 -133
  24. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  25. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  26. data/docs/templates/default/layout/html/setup.rb +8 -0
  27. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  28. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  29. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  30. data/docs/templates/plugin.rb +65 -0
  31. data/lib/yard.rb +1 -10
  32. data/lib/yard/autoload.rb +75 -27
  33. data/lib/yard/cli/command.rb +5 -2
  34. data/lib/yard/cli/command_parser.rb +3 -2
  35. data/lib/yard/cli/diff.rb +1 -1
  36. data/lib/yard/cli/i18n.rb +69 -0
  37. data/lib/yard/cli/list.rb +1 -1
  38. data/lib/yard/cli/server.rb +30 -7
  39. data/lib/yard/cli/stats.rb +5 -6
  40. data/lib/yard/cli/yardoc.rb +95 -45
  41. data/lib/yard/cli/yri.rb +24 -3
  42. data/lib/yard/code_objects/base.rb +35 -4
  43. data/lib/yard/code_objects/extra_file_object.rb +1 -1
  44. data/lib/yard/code_objects/macro_object.rb +56 -99
  45. data/lib/yard/code_objects/method_object.rb +44 -6
  46. data/lib/yard/config.rb +18 -8
  47. data/lib/yard/core_ext/symbol_hash.rb +1 -1
  48. data/lib/yard/docstring.rb +45 -85
  49. data/lib/yard/docstring_parser.rb +269 -0
  50. data/lib/yard/handlers/base.rb +129 -118
  51. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  52. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  53. data/lib/yard/handlers/c/base.rb +110 -0
  54. data/lib/yard/handlers/c/class_handler.rb +26 -0
  55. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  56. data/lib/yard/handlers/c/handler_methods.rb +165 -0
  57. data/lib/yard/handlers/c/init_handler.rb +16 -0
  58. data/lib/yard/handlers/c/method_handler.rb +35 -0
  59. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  60. data/lib/yard/handlers/c/module_handler.rb +16 -0
  61. data/lib/yard/handlers/c/override_comment_handler.rb +22 -0
  62. data/lib/yard/handlers/c/path_handler.rb +10 -0
  63. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  64. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  65. data/lib/yard/handlers/processor.rb +41 -30
  66. data/lib/yard/handlers/ruby/alias_handler.rb +0 -2
  67. data/lib/yard/handlers/ruby/attribute_handler.rb +16 -17
  68. data/lib/yard/handlers/ruby/base.rb +10 -6
  69. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  70. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  71. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +71 -0
  72. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +0 -3
  73. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +16 -17
  74. data/lib/yard/handlers/ruby/legacy/base.rb +28 -6
  75. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  76. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  77. data/lib/yard/handlers/ruby/legacy/method_handler.rb +0 -2
  78. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +1 -1
  79. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  80. data/lib/yard/handlers/ruby/method_handler.rb +10 -15
  81. data/lib/yard/handlers/ruby/mixin_handler.rb +1 -1
  82. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  83. data/lib/yard/handlers/ruby/struct_handler_methods.rb +3 -2
  84. data/lib/yard/i18n/pot_generator.rb +281 -0
  85. data/lib/yard/i18n/text.rb +72 -0
  86. data/lib/yard/logging.rb +3 -7
  87. data/lib/yard/options.rb +216 -0
  88. data/lib/yard/parser/c/c_parser.rb +225 -0
  89. data/lib/yard/parser/c/comment_parser.rb +131 -0
  90. data/lib/yard/parser/c/statement.rb +63 -0
  91. data/lib/yard/parser/ruby/ast_node.rb +91 -1
  92. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +1 -0
  93. data/lib/yard/parser/ruby/legacy/statement.rb +7 -2
  94. data/lib/yard/parser/ruby/legacy/statement_list.rb +13 -22
  95. data/lib/yard/parser/ruby/ruby_parser.rb +87 -26
  96. data/lib/yard/parser/source_parser.rb +89 -88
  97. data/lib/yard/rake/yardoc_task.rb +1 -1
  98. data/lib/yard/registry.rb +21 -10
  99. data/lib/yard/registry_store.rb +48 -0
  100. data/lib/yard/serializers/file_system_serializer.rb +18 -20
  101. data/lib/yard/serializers/yardoc_serializer.rb +1 -0
  102. data/lib/yard/server/adapter.rb +2 -2
  103. data/lib/yard/server/commands/base.rb +1 -1
  104. data/lib/yard/server/commands/display_object_command.rb +13 -6
  105. data/lib/yard/server/commands/frames_command.rb +4 -21
  106. data/lib/yard/server/commands/library_command.rb +57 -11
  107. data/lib/yard/server/commands/list_command.rb +10 -34
  108. data/lib/yard/server/commands/search_command.rb +8 -2
  109. data/lib/yard/server/doc_server_helper.rb +34 -0
  110. data/lib/yard/server/rack_adapter.rb +5 -1
  111. data/lib/yard/server/router.rb +4 -10
  112. data/lib/yard/server/static_caching.rb +2 -2
  113. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +2 -2
  114. data/lib/yard/server/templates/default/fulldoc/html/js/live.js +0 -15
  115. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +3 -3
  116. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  117. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +1 -1
  118. data/lib/yard/server/templates/doc_server/search/html/setup.rb +1 -1
  119. data/lib/yard/tags/default_factory.rb +31 -4
  120. data/lib/yard/tags/directives.rb +593 -0
  121. data/lib/yard/tags/library.rb +437 -35
  122. data/lib/yard/templates/engine.rb +17 -12
  123. data/lib/yard/templates/helpers/base_helper.rb +8 -2
  124. data/lib/yard/templates/helpers/html_helper.rb +57 -14
  125. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +1 -1
  126. data/lib/yard/templates/helpers/markup_helper.rb +9 -9
  127. data/lib/yard/templates/helpers/text_helper.rb +2 -2
  128. data/lib/yard/templates/template.rb +42 -13
  129. data/lib/yard/templates/template_options.rb +81 -0
  130. data/spec/cli/command_parser_spec.rb +4 -4
  131. data/spec/cli/command_spec.rb +3 -3
  132. data/spec/cli/config_spec.rb +13 -13
  133. data/spec/cli/diff_spec.rb +13 -10
  134. data/spec/cli/gems_spec.rb +12 -12
  135. data/spec/cli/help_spec.rb +2 -2
  136. data/spec/cli/i18n_spec.rb +111 -0
  137. data/spec/cli/server_spec.rb +66 -18
  138. data/spec/cli/stats_spec.rb +15 -15
  139. data/spec/cli/yardoc_spec.rb +124 -97
  140. data/spec/cli/yri_spec.rb +14 -12
  141. data/spec/code_objects/base_spec.rb +104 -46
  142. data/spec/code_objects/class_object_spec.rb +33 -33
  143. data/spec/code_objects/code_object_list_spec.rb +5 -5
  144. data/spec/code_objects/constants_spec.rb +4 -3
  145. data/spec/code_objects/extra_file_object_spec.rb +19 -19
  146. data/spec/code_objects/macro_object_spec.rb +31 -37
  147. data/spec/code_objects/method_object_spec.rb +46 -23
  148. data/spec/code_objects/module_object_spec.rb +16 -16
  149. data/spec/code_objects/namespace_object_spec.rb +6 -6
  150. data/spec/code_objects/proxy_spec.rb +19 -19
  151. data/spec/config_spec.rb +33 -24
  152. data/spec/core_ext/array_spec.rb +1 -1
  153. data/spec/core_ext/file_spec.rb +8 -8
  154. data/spec/core_ext/hash_spec.rb +1 -1
  155. data/spec/core_ext/insertion_spec.rb +3 -3
  156. data/spec/core_ext/module_spec.rb +1 -1
  157. data/spec/core_ext/string_spec.rb +6 -6
  158. data/spec/core_ext/symbol_hash_spec.rb +11 -11
  159. data/spec/docstring_parser_spec.rb +207 -0
  160. data/spec/docstring_spec.rb +33 -146
  161. data/spec/handlers/alias_handler_spec.rb +14 -14
  162. data/spec/handlers/attribute_handler_spec.rb +20 -20
  163. data/spec/handlers/base_spec.rb +16 -16
  164. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  165. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  166. data/spec/handlers/c/class_handler_spec.rb +64 -0
  167. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  168. data/spec/handlers/c/init_handler_spec.rb +36 -0
  169. data/spec/handlers/c/method_handler_spec.rb +228 -0
  170. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  171. data/spec/handlers/c/module_handler_spec.rb +38 -0
  172. data/spec/handlers/c/override_comment_handler_spec.rb +43 -0
  173. data/spec/handlers/c/path_handler_spec.rb +35 -0
  174. data/spec/handlers/c/spec_helper.rb +11 -0
  175. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  176. data/spec/handlers/class_condition_handler_spec.rb +10 -10
  177. data/spec/handlers/class_handler_spec.rb +38 -38
  178. data/spec/handlers/class_variable_handler_spec.rb +1 -1
  179. data/spec/handlers/constant_handler_spec.rb +7 -7
  180. data/spec/handlers/{macro_handler_spec.rb → dsl_handler_spec.rb} +72 -53
  181. data/spec/handlers/examples/alias_handler_001.rb.txt +5 -5
  182. data/spec/handlers/examples/class_condition_handler_001.rb.txt +9 -9
  183. data/spec/handlers/examples/class_handler_001.rb.txt +1 -1
  184. data/spec/handlers/examples/dsl_handler_001.rb.txt +110 -0
  185. data/spec/handlers/examples/exception_handler_001.rb.txt +14 -14
  186. data/spec/handlers/examples/method_condition_handler_001.rb.txt +2 -2
  187. data/spec/handlers/examples/method_handler_001.rb.txt +16 -16
  188. data/spec/handlers/examples/mixin_handler_001.rb.txt +8 -4
  189. data/spec/handlers/examples/private_constant_handler_001.rb.txt +1 -1
  190. data/spec/handlers/examples/visibility_handler_001.rb.txt +3 -3
  191. data/spec/handlers/examples/yield_handler_001.rb.txt +13 -14
  192. data/spec/handlers/exception_handler_spec.rb +9 -9
  193. data/spec/handlers/extend_handler_spec.rb +2 -2
  194. data/spec/handlers/legacy_base_spec.rb +34 -34
  195. data/spec/handlers/method_condition_handler_spec.rb +2 -2
  196. data/spec/handlers/method_handler_spec.rb +33 -33
  197. data/spec/handlers/mixin_handler_spec.rb +13 -9
  198. data/spec/handlers/module_function_handler_spec.rb +82 -0
  199. data/spec/handlers/module_handler_spec.rb +6 -6
  200. data/spec/handlers/private_constant_handler_spec.rb +3 -3
  201. data/spec/handlers/processor_spec.rb +5 -5
  202. data/spec/handlers/ruby/base_spec.rb +10 -6
  203. data/spec/handlers/ruby/legacy/base_spec.rb +11 -7
  204. data/spec/handlers/spec_helper.rb +2 -3
  205. data/spec/handlers/visibility_handler_spec.rb +6 -6
  206. data/spec/handlers/yield_handler_spec.rb +8 -8
  207. data/spec/i18n/pot_generator_spec.rb +244 -0
  208. data/spec/i18n/text_spec.rb +69 -0
  209. data/spec/options_spec.rb +160 -0
  210. data/spec/parser/base_spec.rb +3 -3
  211. data/spec/parser/c_parser_spec.rb +31 -257
  212. data/spec/parser/examples/array.c.txt +187 -187
  213. data/spec/parser/examples/extrafile.c.txt +1 -1
  214. data/spec/parser/examples/override.c.txt +1 -1
  215. data/spec/parser/ruby/ast_node_spec.rb +1 -1
  216. data/spec/parser/ruby/legacy/statement_list_spec.rb +24 -24
  217. data/spec/parser/ruby/legacy/token_list_spec.rb +7 -7
  218. data/spec/parser/ruby/ruby_parser_spec.rb +56 -34
  219. data/spec/parser/source_parser_spec.rb +125 -65
  220. data/spec/parser/tag_parsing_spec.rb +4 -4
  221. data/spec/rake/yardoc_task_spec.rb +10 -8
  222. data/spec/registry_spec.rb +65 -36
  223. data/spec/registry_store_spec.rb +90 -40
  224. data/spec/serializers/file_system_serializer_spec.rb +12 -12
  225. data/spec/serializers/yardoc_serializer_spec.rb +2 -2
  226. data/spec/server/adapter_spec.rb +3 -3
  227. data/spec/server/commands/base_spec.rb +8 -8
  228. data/spec/server/commands/library_command_spec.rb +3 -3
  229. data/spec/server/commands/static_file_command_spec.rb +7 -7
  230. data/spec/server/doc_server_helper_spec.rb +1 -1
  231. data/spec/server/doc_server_serializer_spec.rb +6 -6
  232. data/spec/server/rack_adapter_spec.rb +3 -3
  233. data/spec/server/router_spec.rb +19 -19
  234. data/spec/server/static_caching_spec.rb +4 -4
  235. data/spec/spec_helper.rb +7 -7
  236. data/spec/tags/default_factory_spec.rb +24 -16
  237. data/spec/tags/directives_spec.rb +422 -0
  238. data/spec/tags/library_spec.rb +15 -4
  239. data/spec/tags/overload_tag_spec.rb +6 -6
  240. data/spec/tags/ref_tag_list_spec.rb +8 -8
  241. data/spec/templates/class_spec.rb +7 -7
  242. data/spec/templates/constant_spec.rb +7 -7
  243. data/spec/templates/engine_spec.rb +28 -36
  244. data/spec/templates/examples/class001.html +108 -108
  245. data/spec/templates/examples/class002.html +17 -17
  246. data/spec/templates/examples/constant001.txt +1 -1
  247. data/spec/templates/examples/method001.html +45 -45
  248. data/spec/templates/examples/method002.html +25 -25
  249. data/spec/templates/examples/method003.html +60 -60
  250. data/spec/templates/examples/method004.html +7 -7
  251. data/spec/templates/examples/method005.html +28 -28
  252. data/spec/templates/examples/module001.html +321 -321
  253. data/spec/templates/examples/module001.txt +1 -1
  254. data/spec/templates/examples/module002.html +130 -130
  255. data/spec/templates/examples/module003.html +74 -74
  256. data/spec/templates/examples/module004.html +388 -0
  257. data/spec/templates/helpers/base_helper_spec.rb +32 -32
  258. data/spec/templates/helpers/html_helper_spec.rb +87 -68
  259. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +9 -9
  260. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +16 -16
  261. data/spec/templates/helpers/markup_helper_spec.rb +31 -28
  262. data/spec/templates/helpers/method_helper_spec.rb +7 -7
  263. data/spec/templates/helpers/shared_signature_examples.rb +9 -7
  264. data/spec/templates/helpers/text_helper_spec.rb +3 -3
  265. data/spec/templates/method_spec.rb +13 -13
  266. data/spec/templates/module_spec.rb +70 -24
  267. data/spec/templates/onefile_spec.rb +32 -15
  268. data/spec/templates/section_spec.rb +23 -23
  269. data/spec/templates/spec_helper.rb +31 -1
  270. data/spec/templates/tag_spec.rb +5 -5
  271. data/spec/templates/template_spec.rb +54 -46
  272. data/spec/verifier_spec.rb +5 -5
  273. data/templates/default/class/setup.rb +2 -2
  274. data/templates/default/docstring/html/abstract.erb +1 -1
  275. data/templates/default/docstring/html/note.erb +1 -1
  276. data/templates/default/docstring/html/private.erb +1 -1
  277. data/templates/default/docstring/html/todo.erb +1 -1
  278. data/templates/default/docstring/setup.rb +2 -2
  279. data/templates/default/fulldoc/html/css/full_list.css +4 -2
  280. data/templates/default/fulldoc/html/css/style.css +50 -44
  281. data/templates/default/fulldoc/html/frames.erb +21 -6
  282. data/templates/default/fulldoc/html/full_list.erb +5 -3
  283. data/templates/default/fulldoc/html/{full_list_files.erb → full_list_file.erb} +0 -0
  284. data/templates/default/fulldoc/html/js/app.js +29 -26
  285. data/templates/default/fulldoc/html/js/full_list.js +9 -9
  286. data/templates/default/fulldoc/html/js/jquery.js +4 -16
  287. data/templates/default/fulldoc/html/setup.rb +42 -38
  288. data/templates/default/layout/dot/header.erb +1 -1
  289. data/templates/default/layout/html/breadcrumb.erb +6 -6
  290. data/templates/default/layout/html/files.erb +1 -1
  291. data/templates/default/layout/html/footer.erb +1 -1
  292. data/templates/default/layout/html/headers.erb +3 -6
  293. data/templates/default/layout/html/index.erb +1 -1
  294. data/templates/default/layout/html/layout.erb +3 -7
  295. data/templates/default/layout/html/objects.erb +1 -1
  296. data/templates/default/layout/html/script_setup.erb +5 -0
  297. data/templates/default/layout/html/search.erb +4 -1
  298. data/templates/default/layout/html/setup.rb +8 -8
  299. data/templates/default/method_details/html/method_signature.erb +10 -3
  300. data/templates/default/method_details/setup.rb +1 -0
  301. data/templates/default/module/dot/info.erb +1 -1
  302. data/templates/default/module/dot/setup.rb +2 -2
  303. data/templates/default/module/html/attribute_details.erb +1 -1
  304. data/templates/default/module/html/children.erb +1 -1
  305. data/templates/default/module/html/defines.erb +1 -1
  306. data/templates/default/module/html/inherited_methods.erb +5 -4
  307. data/templates/default/module/html/item_summary.erb +15 -5
  308. data/templates/default/module/html/method_details_list.erb +2 -2
  309. data/templates/default/module/setup.rb +25 -12
  310. data/templates/default/module/text/setup.rb +1 -1
  311. data/templates/default/onefile/html/layout.erb +1 -1
  312. data/templates/default/onefile/html/setup.rb +2 -2
  313. data/templates/default/tags/html/example.erb +4 -2
  314. data/templates/default/tags/html/option.erb +1 -1
  315. data/templates/default/tags/html/overload.erb +1 -1
  316. data/templates/default/tags/html/see.erb +1 -1
  317. data/templates/default/tags/html/tag.erb +1 -1
  318. data/templates/default/tags/setup.rb +4 -3
  319. data/templates/guide/fulldoc/html/css/style.css +8 -8
  320. data/templates/guide/fulldoc/html/js/app.js +6 -6
  321. data/templates/guide/fulldoc/html/setup.rb +12 -12
  322. data/templates/guide/layout/html/layout.erb +11 -11
  323. data/templates/guide/layout/html/setup.rb +9 -9
  324. data/templates/guide/method/html/header.erb +2 -2
  325. data/templates/guide/method/html/setup.rb +1 -1
  326. metadata +68 -18
  327. data/bin/yard-graph +0 -4
  328. data/bin/yard-server +0 -4
  329. data/docs/Glossary.md +0 -12
  330. data/lib/yard/handlers/ruby/legacy/macro_handler.rb +0 -39
  331. data/lib/yard/handlers/ruby/macro_handler.rb +0 -40
  332. data/lib/yard/handlers/ruby/macro_handler_methods.rb +0 -131
  333. data/lib/yard/parser/c_parser.rb +0 -497
  334. data/lib/yard/server/templates/default/layout/html/headers.erb +0 -16
  335. data/lib/yard/server/templates/doc_server/frames/html/frames.erb +0 -13
  336. data/lib/yard/server/templates/doc_server/frames/html/setup.rb +0 -3
  337. data/lib/yard/server/templates/doc_server/full_list/html/full_list.erb +0 -34
  338. data/lib/yard/server/templates/doc_server/full_list/html/setup.rb +0 -20
  339. data/spec/handlers/examples/macro_handler_001.rb.txt +0 -83
data/lib/yard/cli/list.rb CHANGED
@@ -3,7 +3,7 @@ module YARD
3
3
  # Lists all constant and method names in the codebase. Uses {Yardoc} --list.
4
4
  class List < Command
5
5
  def description; 'Lists all constant and methods. Uses `yard doc --list`' end
6
-
6
+
7
7
  # Runs the commandline utility, parsing arguments and displaying a
8
8
  # list of objects
9
9
  #
@@ -23,11 +23,9 @@ module YARD
23
23
  # @since 0.6.2
24
24
  attr_accessor :template_paths
25
25
 
26
- def description
27
- "Runs a local documentation server"
28
- end
29
-
30
- def run(*args)
26
+ # Creates a new instance of the Server command line utility
27
+ def initialize
28
+ super
31
29
  self.scripts = []
32
30
  self.template_paths = []
33
31
  self.libraries = {}
@@ -36,6 +34,13 @@ module YARD
36
34
  :caching => false
37
35
  )
38
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)
39
44
  optparse(*args)
40
45
 
41
46
  select_adapter.setup
@@ -71,7 +76,7 @@ module YARD
71
76
  yardoc = File.expand_path(yardoc)
72
77
  if File.exist?(yardoc)
73
78
  libraries[library] ||= []
74
- libraries[library] << YARD::Server::LibraryVersion.new(library, nil, yardoc)
79
+ libraries[library] |= [YARD::Server::LibraryVersion.new(library, nil, yardoc)]
75
80
  else
76
81
  log.warn "Cannot find yardoc db for #{library}: #{yardoc}"
77
82
  end
@@ -82,10 +87,25 @@ module YARD
82
87
  require 'rubygems'
83
88
  Gem.source_index.find_name('').each do |spec|
84
89
  libraries[spec.name] ||= []
85
- libraries[spec.name] << YARD::Server::LibraryVersion.new(spec.name, spec.version.to_s, nil, :gem)
90
+ libraries[spec.name] |= [YARD::Server::LibraryVersion.new(spec.name, spec.version.to_s, nil, :gem)]
86
91
  end
87
92
  end
88
93
 
94
+ def add_gems_from_gemfile(gemfile = nil)
95
+ require 'bundler'
96
+ gemfile ||= "Gemfile"
97
+ if File.exists?("#{gemfile}.lock")
98
+ Bundler::LockfileParser.new(File.read("#{gemfile}.lock")).specs.each do |spec|
99
+ libraries[spec.name] ||= []
100
+ libraries[spec.name] |= [YARD::Server::LibraryVersion.new(spec.name, spec.version.to_s, nil, :gem)]
101
+ end
102
+ else
103
+ log.warn "Cannot find #{gemfile}.lock, ignoring --gemfile option"
104
+ end
105
+ rescue LoadError
106
+ log.error "Bundler not available, ignoring --gemfile option"
107
+ end
108
+
89
109
  def optparse(*args)
90
110
  opts = OptionParser.new
91
111
  opts.banner = 'Usage: yard server [options] [[library yardoc_file] ...]'
@@ -109,6 +129,9 @@ module YARD
109
129
  opts.on('-g', '--gems', 'Serves documentation for installed gems') do
110
130
  add_gems
111
131
  end
132
+ opts.on('-G', '--gemfile [GEMFILE]', 'Serves documentation for gems from Gemfile') do |gemfile|
133
+ add_gems_from_gemfile(gemfile)
134
+ end
112
135
  opts.on('-t', '--template-path PATH',
113
136
  'The template path to look for templates in. (used with -t).') do |path|
114
137
  self.template_paths << path
@@ -33,11 +33,9 @@ module YARD
33
33
  def run(*args)
34
34
  parse_arguments(*args)
35
35
 
36
- if parse
37
- if use_cache
38
- Registry.load!
39
- checksums = Registry.checksums.dup
40
- end
36
+ if use_cache
37
+ Registry.load!
38
+ elsif parse
41
39
  YARD.parse(files, excluded)
42
40
  Registry.save(use_cache) if save_yardoc
43
41
  end
@@ -75,7 +73,8 @@ module YARD
75
73
  max = objects.sort_by {|o| o.path.length }.last.path.length
76
74
  if @compact
77
75
  objects.each do |object|
78
- puts("%-#{max}s (%s)" % [object.path, object.file])
76
+ puts("%-#{max}s (%s)" % [object.path,
77
+ [object.file, object.line].compact.join(":")])
79
78
  end
80
79
  else
81
80
  last_file = nil
@@ -3,6 +3,50 @@ require 'fileutils'
3
3
 
4
4
  module YARD
5
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
+
6
50
  # Yardoc is the default YARD CLI command (+yard doc+ and historic +yardoc+
7
51
  # executable) used to generate and output (mainly) HTML documentation given
8
52
  # a set of source files.
@@ -150,7 +194,7 @@ module YARD
150
194
  # @return [Array<String>] a list of assets to copy after generation
151
195
  # @since 0.6.0
152
196
  attr_accessor :assets
153
-
197
+
154
198
  # @return [Boolean] whether markup option was specified
155
199
  # @since 0.7.0
156
200
  attr_accessor :has_markup
@@ -158,19 +202,8 @@ module YARD
158
202
  # Creates a new instance of the commandline utility
159
203
  def initialize
160
204
  super
161
- @options = SymbolHash.new(false)
162
- @options.update(
163
- :format => :html,
164
- :template => :default,
165
- :markup => :rdoc, # default is :rdoc but falls back on :none
166
- :serializer => YARD::Serializers::FileSystemSerializer.new,
167
- :default_return => "Object",
168
- :hide_void_return => false,
169
- :no_highlight => false,
170
- :files => [],
171
- :title => "Documentation by YARD #{YARD::VERSION}",
172
- :verifier => Verifier.new
173
- )
205
+ @options = YardocOptions.new
206
+ @options.reset_defaults
174
207
  @visibilities = [:public]
175
208
  @assets = {}
176
209
  @excluded = []
@@ -248,13 +281,21 @@ module YARD
248
281
  self.files = ['{lib,app}/**/*.rb', 'ext/**/*.c'] if self.files.empty?
249
282
  self.files.delete_if {|x| x =~ /\A\s*\Z/ } # remove empty ones
250
283
  readme = Dir.glob('README*').first
251
- readme ||= Dir.glob(files.first).first if options[:onefile]
252
- options[:readme] ||= CodeObjects::ExtraFileObject.new(readme) if readme
253
- options[:files].unshift(options[:readme]).uniq! if options[:readme]
284
+ readme ||= Dir.glob(files.first).first if options.onefile
285
+ options.readme ||= CodeObjects::ExtraFileObject.new(readme) if readme
286
+ options.files.unshift(options.readme).uniq! if options.readme
254
287
 
255
288
  Tags::Library.visible_tags -= hidden_tags
256
289
  add_visibility_verifier
257
290
 
291
+ # US-ASCII is invalid encoding for onefile
292
+ if defined?(::Encoding) && options.onefile
293
+ if ::Encoding.default_internal == ::Encoding::US_ASCII
294
+ log.warn "--one-file is not compatible with US-ASCII encoding, using ASCII-8BIT"
295
+ ::Encoding.default_external, ::Encoding.default_internal = ['ascii-8bit'] * 2
296
+ end
297
+ end
298
+
258
299
  if generate && !verify_markup_options
259
300
  false
260
301
  else
@@ -295,7 +336,7 @@ module YARD
295
336
  end
296
337
  Registry.load_all if use_cache
297
338
  objects = run_verifier(all_objects).reject do |object|
298
- serialized = !options[:serializer] || options[:serializer].exists?(object)
339
+ serialized = !options.serializer || options.serializer.exists?(object)
299
340
  if checksums && serialized && !object.files.any? {|f, line| changed_files.include?(f) }
300
341
  true
301
342
  else
@@ -314,17 +355,17 @@ module YARD
314
355
  result, lvl = false, has_markup ? log.level : Logger::FATAL
315
356
  obj = Struct.new(:options).new(options)
316
357
  obj.extend(Templates::Helpers::MarkupHelper)
317
- options[:files].each do |file|
358
+ options.files.each do |file|
318
359
  markup = file.attributes[:markup] || obj.markup_for_file('', file.filename)
319
360
  result = obj.load_markup_provider(markup)
320
361
  return false if !result && markup != :rdoc
321
362
  end
322
- options[:markup] = :rdoc unless has_markup
363
+ options.markup = :rdoc unless has_markup
323
364
  log.enter_level(lvl) { result = obj.load_markup_provider }
324
365
  if !result && !has_markup
325
366
  log.warn "Could not load default RDoc formatter, " +
326
367
  "ignoring any markup (install RDoc to get default formatting)."
327
- options[:markup] = :none
368
+ options.markup = :none
328
369
  true
329
370
  else
330
371
  result
@@ -335,8 +376,8 @@ module YARD
335
376
  # @return [void]
336
377
  # @since 0.6.0
337
378
  def copy_assets
338
- return unless options[:serializer]
339
- outpath = options[:serializer].basepath
379
+ return unless options.serializer
380
+ outpath = options.serializer.basepath
340
381
  assets.each do |from, to|
341
382
  to = File.join(outpath, to)
342
383
  log.debug "Copying asset '#{from}' to '#{to}'"
@@ -355,7 +396,7 @@ module YARD
355
396
  puts "#{item.file}:#{item.line}: #{item.path}"
356
397
  end
357
398
  end
358
-
399
+
359
400
  # Parses out the yardopts/document options
360
401
  def parse_yardopts_options(*args)
361
402
  opts = OptionParser.new
@@ -386,7 +427,7 @@ module YARD
386
427
  files.map! {|f| f.include?("*") ? Dir.glob(f) : f }.flatten!
387
428
  files.each do |file|
388
429
  if File.file?(file)
389
- options[:files] << CodeObjects::ExtraFileObject.new(file)
430
+ options.files << CodeObjects::ExtraFileObject.new(file)
390
431
  else
391
432
  log.warn "Could not find extra file: #{file}"
392
433
  end
@@ -424,12 +465,12 @@ module YARD
424
465
  # @since 0.5.6
425
466
  def add_visibility_verifier
426
467
  vis_expr = "object.type != :method || #{visibilities.uniq.inspect}.include?(object.visibility)"
427
- options[:verifier].add_expressions(vis_expr)
468
+ options.verifier.add_expressions(vis_expr)
428
469
  end
429
470
 
430
471
  # (see Templates::Helpers::BaseHelper#run_verifier)
431
472
  def run_verifier(list)
432
- options[:verifier] ? options[:verifier].run(list) : list
473
+ options.verifier ? options.verifier.run(list) : list
433
474
  end
434
475
 
435
476
  # @since 0.6.0
@@ -506,10 +547,10 @@ module YARD
506
547
  self.excluded << path
507
548
  end
508
549
  end
509
-
550
+
510
551
  # Adds --[no-]yardopts / --[no-]document
511
552
  def yardopts_options(opts)
512
- opts.on('--[no-]yardopts [FILE]',
553
+ opts.on('--[no-]yardopts [FILE]',
513
554
  "If arguments should be read from FILE",
514
555
  " (defaults to yes, FILE defaults to .yardopts)") do |use_yardopts|
515
556
  if use_yardopts.is_a?(String)
@@ -532,7 +573,7 @@ module YARD
532
573
  opts.separator "Output options:"
533
574
 
534
575
  opts.on('--one-file', 'Generates output as a single file') do
535
- options[:onefile] = true
576
+ options.onefile = true
536
577
  end
537
578
 
538
579
  opts.on('--list', 'List objects to standard out (implies -n)') do |format|
@@ -553,37 +594,46 @@ module YARD
553
594
  end
554
595
 
555
596
  opts.on('--no-private', "Hide objects with @private tag") do
556
- options[:verifier].add_expressions '!object.tag(:private) &&
597
+ options.verifier.add_expressions '!object.tag(:private) &&
557
598
  (object.namespace.is_a?(CodeObjects::Proxy) || !object.namespace.tag(:private))'
558
599
  end
559
600
 
601
+ opts.on('--embed-mixins', "Embeds mixin methods into class documentation") do
602
+ options.embed_mixins << '*'
603
+ end
604
+
605
+ opts.on('--embed-mixin [MODULE]', "Embeds mixin methods from a particular",
606
+ " module into class documentation") do |mod|
607
+ options.embed_mixins << mod
608
+ end
609
+
560
610
  opts.on('--no-highlight', "Don't highlight code blocks in output.") do
561
- options[:no_highlight] = true
611
+ options.highlight = false
562
612
  end
563
613
 
564
614
  opts.on('--default-return TYPE', "Shown if method has no return type. ",
565
615
  " (defaults to 'Object')") do |type|
566
- options[:default_return] = type
616
+ options.default_return = type
567
617
  end
568
618
 
569
619
  opts.on('--hide-void-return', "Hides return types specified as 'void'. ",
570
620
  " (default is shown)") do
571
- options[:hide_void_return] = true
621
+ options.hide_void_return = true
572
622
  end
573
623
 
574
624
  opts.on('--query QUERY', "Only show objects that match a specific query") do |query|
575
625
  next if YARD::Config.options[:safe_mode]
576
- options[:verifier].add_expressions(query.taint)
626
+ options.verifier.add_expressions(query.taint)
577
627
  end
578
628
 
579
629
  opts.on('--title TITLE', 'Add a specific title to HTML documents') do |title|
580
- options[:title] = title
630
+ options.title = title
581
631
  end
582
632
 
583
633
  opts.on('-r', '--readme FILE', '--main FILE', 'The readme file used as the title page',
584
634
  ' of documentation.') do |readme|
585
635
  if File.file?(readme)
586
- options[:readme] = CodeObjects::ExtraFileObject.new(readme)
636
+ options.readme = CodeObjects::ExtraFileObject.new(readme)
587
637
  else
588
638
  log.warn "Could not find readme file: #{readme}"
589
639
  end
@@ -608,23 +658,23 @@ module YARD
608
658
 
609
659
  opts.on('-o', '--output-dir PATH',
610
660
  'The output directory. (defaults to ./doc)') do |dir|
611
- options[:serializer].basepath = dir
661
+ options.serializer.basepath = dir
612
662
  end
613
663
 
614
664
  opts.on('-m', '--markup MARKUP',
615
665
  'Markup style used in documentation, like textile, ',
616
666
  ' markdown or rdoc. (defaults to rdoc)') do |markup|
617
667
  self.has_markup = true
618
- options[:markup] = markup.to_sym
668
+ options.markup = markup.to_sym
619
669
  end
620
670
 
621
671
  opts.on('-M', '--markup-provider MARKUP_PROVIDER',
622
- 'Overrides the library used to process markup ',
672
+ 'Overrides the library used to process markup ',
623
673
  ' formatting (specify the gem name)') do |markup_provider|
624
- options[:markup_provider] = markup_provider.to_sym
674
+ options.markup_provider = markup_provider.to_sym
625
675
  end
626
676
 
627
- opts.on('--charset ENC', 'Character set to use when parsing files ',
677
+ opts.on('--charset ENC', 'Character set to use when parsing files ',
628
678
  ' (default is system locale)') do |encoding|
629
679
  begin
630
680
  if defined?(Encoding) && Encoding.respond_to?(:default_external=)
@@ -637,20 +687,20 @@ module YARD
637
687
 
638
688
  opts.on('-t', '--template TEMPLATE',
639
689
  'The template to use. (defaults to "default")') do |template|
640
- options[:template] = template.to_sym
690
+ options.template = template.to_sym
641
691
  end
642
692
 
643
693
  opts.on('-p', '--template-path PATH',
644
694
  'The template path to look for templates in.',
645
695
  ' (used with -t).') do |path|
646
696
  next if YARD::Config.options[:safe_mode]
647
- YARD::Templates::Engine.register_template_path(path)
697
+ YARD::Templates::Engine.register_template_path(File.expand_path(path))
648
698
  end
649
699
 
650
700
  opts.on('-f', '--format FORMAT',
651
701
  'The output format for the template.',
652
702
  ' (defaults to html)') do |format|
653
- options[:format] = format.to_sym
703
+ options.format = format.to_sym
654
704
  end
655
705
 
656
706
  opts.on('--no-stats', 'Don\'t print statistics') do
data/lib/yard/cli/yri.rb CHANGED
@@ -110,14 +110,18 @@ module YARD
110
110
  @search_paths.unshift(@cache[name]) if @cache[name]
111
111
  @search_paths.unshift(Registry.yardoc_file)
112
112
 
113
+ # Try to load it from in memory cache
114
+ log.debug "Searching for #{name} in memory"
115
+ if obj = try_load_object(name, nil)
116
+ return obj
117
+ end
118
+
113
119
  log.debug "Searching for #{name} in search paths"
114
120
  @search_paths.each do |path|
115
121
  next unless File.exist?(path)
116
122
  log.debug "Searching for #{name} in #{path}..."
117
123
  Registry.load(path)
118
- obj = Registry.at(name)
119
- if obj
120
- cache_object(name, path)
124
+ if obj = try_load_object(name, path)
121
125
  return obj
122
126
  end
123
127
  end
@@ -126,6 +130,23 @@ module YARD
126
130
 
127
131
  private
128
132
 
133
+ # Tries to load the object with name. If successful, caches the object
134
+ # with the cache_path
135
+ #
136
+ # @param [String] name the object path
137
+ # @param [String] cache_path the location of the yardoc
138
+ # db containing the object to cache for future lookups.
139
+ # No caching is done if this is nil.
140
+ # @return [void]
141
+ def try_load_object(name, cache_path)
142
+ if obj = Registry.at(name)
143
+ if cache_path
144
+ cache_object(name, cache_path)
145
+ end
146
+ return obj
147
+ end
148
+ end
149
+
129
150
  # Loads {CACHE_FILE}
130
151
  # @return [void]
131
152
  def load_cache