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
@@ -6,13 +6,17 @@ describe YARD::Handlers::Ruby::Legacy::Base, "#handles and inheritance" do
6
6
  before do
7
7
  Handlers::Ruby::Legacy::Base.stub!(:inherited)
8
8
  Handlers::Ruby::Legacy::MixinHandler.stub!(:inherited) # fixes a Ruby1.9 issue
9
- @processor = Handlers::Processor.new(nil, false, :ruby18)
9
+ @processor = Handlers::Processor.new(OpenStruct.new(:parser_type => :ruby18))
10
10
  end
11
-
11
+
12
+ after(:all) do
13
+ Handlers::Base.clear_subclasses
14
+ end
15
+
12
16
  def stmt(string)
13
17
  Statement.new(TokenList.new(string))
14
18
  end
15
-
19
+
16
20
  it "should only handle Handlers inherited from Ruby::Legacy::Base class" do
17
21
  class IgnoredHandler < Handlers::Base
18
22
  handles "hello"
@@ -50,7 +54,7 @@ describe YARD::Handlers::Ruby::Legacy::Base, "#handles and inheritance" do
50
54
  TestTokenHandler.handles?(stmt("module")).should be_true
51
55
  TestTokenHandler.handles?(stmt("if")).should be_false
52
56
  end
53
-
57
+
54
58
  it "should parse a do/end or { } block with #parse_block" do
55
59
  class MyBlockHandler < Handlers::Ruby::Legacy::Base
56
60
  handles /\AmyMethod\b/
@@ -58,14 +62,14 @@ describe YARD::Handlers::Ruby::Legacy::Base, "#handles and inheritance" do
58
62
  parse_block(:owner => "test")
59
63
  end
60
64
  end
61
-
65
+
62
66
  class MyBlockInnerHandler < Handlers::Ruby::Legacy::Base
63
67
  handles "inner"
64
68
  def self.reset; @@reached = false end
65
69
  def self.reached?; @@reached ||= false end
66
70
  def process; @@reached = true end
67
71
  end
68
-
72
+
69
73
  Handlers::Base.stub!(:subclasses).and_return [MyBlockHandler, MyBlockInnerHandler]
70
74
  Parser::SourceParser.parser_type = :ruby18
71
75
  Parser::SourceParser.parse_string "myMethod do inner end"
@@ -75,4 +79,4 @@ describe YARD::Handlers::Ruby::Legacy::Base, "#handles and inheritance" do
75
79
  MyBlockInnerHandler.should be_reached
76
80
  Parser::SourceParser.parser_type = :ruby
77
81
  end
78
- end
82
+ end
@@ -17,7 +17,7 @@ end
17
17
  class StubbedProcessor < Processor
18
18
  def process(statements)
19
19
  statements.each_with_index do |stmt, index|
20
- find_handlers(stmt).each do |handler|
20
+ find_handlers(stmt).each do |handler|
21
21
  handler.new(self, stmt).process
22
22
  end
23
23
  end
@@ -27,8 +27,7 @@ end
27
27
  class StubbedSourceParser < Parser::SourceParser
28
28
  StubbedSourceParser.parser_type = :ruby
29
29
  def post_process
30
- post = StubbedProcessor.new(@file, @load_order_errors, @parser_type, @globals)
30
+ post = StubbedProcessor.new(self)
31
31
  post.process(@parser.enumerator)
32
32
  end
33
33
  end
34
-
@@ -2,32 +2,32 @@ require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
3
  describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}VisibilityHandler" do
4
4
  before(:all) { parse_file :visibility_handler_001, __FILE__ }
5
-
5
+
6
6
  it "should be able to set visibility to public" do
7
7
  Registry.at("Testing#pub").visibility.should == :public
8
8
  Registry.at("Testing#pub2").visibility.should == :public
9
9
  end
10
-
10
+
11
11
  it "should be able to set visibility to private" do
12
12
  Registry.at("Testing#priv").visibility.should == :private
13
13
  end
14
-
14
+
15
15
  it "should be able to set visibility to protected" do
16
16
  Registry.at("Testing#prot").visibility.should == :protected
17
17
  end
18
-
18
+
19
19
  it "should support parameters and only set visibility on those methods" do
20
20
  Registry['Testing#notpriv'].visibility.should == :protected
21
21
  Registry['Testing#notpriv2'].visibility.should == :protected
22
22
  Registry['Testing#notpriv?'].visibility.should == :protected
23
23
  end
24
-
24
+
25
25
  it "should only accept strings and symbols" do
26
26
  Registry.at('Testing#name').should be_nil
27
27
  Registry.at('Testing#argument').should be_nil
28
28
  Registry.at('Testing#method_call').should be_nil
29
29
  end
30
-
30
+
31
31
  it "should handle constants passed in as symbols" do
32
32
  Registry.at('Testing#Foo').visibility.should == :private
33
33
  end
@@ -2,17 +2,17 @@ require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
3
  describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}YieldHandler" do
4
4
  before(:all) { parse_file :yield_handler_001, __FILE__ }
5
-
5
+
6
6
  it "should only parse yield blocks in methods" do
7
7
  P(:Testing).tag(:yield).should be_nil
8
8
  P(:Testing).tag(:yieldparam).should be_nil
9
9
  end
10
-
10
+
11
11
  it "should handle an empty yield statement" do
12
12
  P('Testing#mymethod').tag(:yield).should be_nil
13
13
  P('Testing#mymethod').tag(:yieldparam).should be_nil
14
14
  end
15
-
15
+
16
16
  it "should not document a yield statement in a method with either @yield or @yieldparam" do
17
17
  P('Testing#mymethod2').tag(:yield).types.should == ['a', 'b']
18
18
  P('Testing#mymethod2').tag(:yield).text.should == "Blah"
@@ -24,25 +24,25 @@ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}YieldHandler"
24
24
  P('Testing#mymethod4').tag(:yieldparam).name.should == '_self'
25
25
  P('Testing#mymethod4').tag(:yieldparam).text.should == 'BLAH'
26
26
  end
27
-
27
+
28
28
  it "should handle any arbitrary yield statement" do
29
29
  P('Testing#mymethod5').tag(:yield).types.should == [':a', 'b', '_self', 'File.read(\'file\', \'w\')', 'CONSTANT']
30
30
  end
31
-
31
+
32
32
  it "should handle parentheses" do
33
33
  P('Testing#mymethod6').tag(:yield).types.should == ['b', 'a']
34
34
  end
35
-
35
+
36
36
  it "should only document the first yield statement in a method (limitation of yield handler)" do
37
37
  P('Testing#mymethod7').tag(:yield).types.should == ['a']
38
38
  end
39
-
39
+
40
40
  it "should handle `self` keyword and list object type as yieldparam for _self" do
41
41
  P('Testing#mymethod8').tag(:yield).types.should == ['_self']
42
42
  P('Testing#mymethod8').tag(:yieldparam).types.should == ['Testing']
43
43
  P('Testing#mymethod8').tag(:yieldparam).text.should == "the object that the method was called on"
44
44
  end
45
-
45
+
46
46
  it "should handle `super` keyword and document it under _super" do
47
47
  P('Testing#mymethod9').tag(:yield).types.should == ['_super']
48
48
  P('Testing#mymethod9').tag(:yieldparam).types.should be_nil
@@ -0,0 +1,244 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe YARD::I18n::PotGenerator do
4
+ before do
5
+ @generator = YARD::I18n::PotGenerator.new("..")
6
+ end
7
+
8
+ describe "Generate" do
9
+ it "should generate the default header" do
10
+ @generator.generate.should == <<-'eoh'
11
+ # SOME DESCRIPTIVE TITLE.
12
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
13
+ # This file is distributed under the same license as the PACKAGE package.
14
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
15
+ #
16
+ #, fuzzy
17
+ msgid ""
18
+ msgstr ""
19
+ "Project-Id-Version: PACKAGE VERSION\n"
20
+ "Report-Msgid-Bugs-To: \n"
21
+ "POT-Creation-Date: 2011-11-20 22:17+0900\n"
22
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
23
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
24
+ "Language-Team: LANGUAGE <LL@li.org>\n"
25
+ "Language: \n"
26
+ "MIME-Version: 1.0\n"
27
+ "Content-Type: text/plain; charset=UTF-8\n"
28
+ "Content-Transfer-Encoding: 8bit\n"
29
+
30
+ eoh
31
+ end
32
+
33
+ it "should generate messages in location order" do
34
+ @generator.stub!(:header).and_return("HEADER\n\n")
35
+ @generator.messages["tag|see|Parser::SourceParser.parse"] = {
36
+ :locations => [["yard.rb", 14]],
37
+ :comments => ["@see"],
38
+ }
39
+ @generator.messages["Parses a path or set of paths"] = {
40
+ :locations => [["yard.rb", 12], ["yard/parser/source_parser.rb", 83]],
41
+ :comments => ["YARD.parse", "YARD::Parser::SourceParser.parse"],
42
+ }
43
+ @generator.generate.should == <<-'eoh'
44
+ HEADER
45
+
46
+ # YARD.parse
47
+ # YARD::Parser::SourceParser.parse
48
+ #: ../yard.rb:12
49
+ #: ../yard/parser/source_parser.rb:83
50
+ msgid "Parses a path or set of paths"
51
+ msgstr ""
52
+
53
+ # @see
54
+ #: ../yard.rb:14
55
+ msgid "tag|see|Parser::SourceParser.parse"
56
+ msgstr ""
57
+
58
+ eoh
59
+ end
60
+ end
61
+
62
+ describe "Escape" do
63
+ def generate_message_pot(message)
64
+ pot = ""
65
+ options = {
66
+ :comments => [],
67
+ :locations => [],
68
+ }
69
+ @generator.send(:generate_message, pot, message, options)
70
+ pot
71
+ end
72
+
73
+ it "should escape <\\>" do
74
+ generate_message_pot("hello \\ world").should == <<-'eop'
75
+ msgid "hello \\ world"
76
+ msgstr ""
77
+
78
+ eop
79
+ end
80
+
81
+ it "should escape <\">" do
82
+ generate_message_pot("hello \" world").should == <<-'eop'
83
+ msgid "hello \" world"
84
+ msgstr ""
85
+
86
+ eop
87
+ end
88
+
89
+ it "should escape <\\n>" do
90
+ generate_message_pot("hello \n world").should == <<-'eop'
91
+ msgid "hello \n"
92
+ " world"
93
+ msgstr ""
94
+
95
+ eop
96
+ end
97
+ end
98
+
99
+ describe "Object" do
100
+ before do
101
+ Registry.clear
102
+ @yard = YARD::CodeObjects::ModuleObject.new(:root, :YARD)
103
+ end
104
+
105
+ it "should extract docstring" do
106
+ object = YARD::CodeObjects::MethodObject.new(@yard, :parse, :module) do |o|
107
+ o.docstring = "An alias to {Parser::SourceParser}'s parsing method"
108
+ end
109
+ @generator.parse_objects([object])
110
+ @generator.messages.should == {
111
+ "An alias to {Parser::SourceParser}'s parsing method" => {
112
+ :locations => [],
113
+ :comments => ["YARD.parse"],
114
+ }
115
+ }
116
+ end
117
+
118
+ it "should extract location" do
119
+ object = YARD::CodeObjects::MethodObject.new(@yard, :parse, :module) do |o|
120
+ o.docstring = "An alias to {Parser::SourceParser}'s parsing method"
121
+ o.files = [["yard.rb", 12]]
122
+ end
123
+ @generator.parse_objects([object])
124
+ @generator.messages.should == {
125
+ "An alias to {Parser::SourceParser}'s parsing method" => {
126
+ :locations => [["yard.rb", 13]],
127
+ :comments => ["YARD.parse"],
128
+ }
129
+ }
130
+ end
131
+
132
+ it "should extract tag name" do
133
+ object = YARD::CodeObjects::MethodObject.new(@yard, :parse, :module) do |o|
134
+ o.docstring = "@see Parser::SourceParser.parse"
135
+ o.files = [["yard.rb", 12]]
136
+ end
137
+ @generator.parse_objects([object])
138
+ @generator.messages.should == {
139
+ "tag|see|Parser::SourceParser.parse" => {
140
+ :locations => [["yard.rb", 12]],
141
+ :comments => ["@see"],
142
+ },
143
+ }
144
+ end
145
+
146
+ it "should extract tag text" do
147
+ object = YARD::CodeObjects::MethodObject.new(@yard, :parse, :module) do |o|
148
+ o.docstring = <<-eod
149
+ @example Parse a glob of files
150
+ YARD.parse('lib/**/*.rb')
151
+ eod
152
+ o.files = [["yard.rb", 12]]
153
+ end
154
+ @generator.parse_objects([object])
155
+ @generator.messages.should == {
156
+ "tag|example|Parse a glob of files" => {
157
+ :locations => [["yard.rb", 12]],
158
+ :comments => ["@example"],
159
+ },
160
+ "YARD.parse('lib/**/*.rb')" => {
161
+ :locations => [["yard.rb", 12]],
162
+ :comments => ["@example Parse a glob of files"],
163
+ }
164
+ }
165
+ end
166
+
167
+ it "should extract tag types" do
168
+ object = YARD::CodeObjects::MethodObject.new(@yard, :parse, :module) do |o|
169
+ o.docstring = <<-eod
170
+ @param [String, Array<String>] paths a path, glob, or list of paths to
171
+ parse
172
+ eod
173
+ o.files = [["yard.rb", 12]]
174
+ end
175
+ @generator.parse_objects([object])
176
+ @generator.messages.should == {
177
+ "tag|param|paths" => {
178
+ :locations => [["yard.rb", 12]],
179
+ :comments => ["@param [String, Array<String>]"],
180
+ },
181
+ "a path, glob, or list of paths to\nparse" => {
182
+ :locations => [["yard.rb", 12]],
183
+ :comments => ["@param [String, Array<String>] paths"],
184
+ }
185
+ }
186
+ end
187
+ end
188
+
189
+ describe "File" do
190
+ it "should extract attribute" do
191
+ path = "GettingStarted.md"
192
+ text = <<-eor
193
+ # @title Getting Started Guide
194
+
195
+ # Getting Started with YARD
196
+ eor
197
+ File.stub!(:open).with(path).and_yield(StringIO.new(text))
198
+ File.stub!(:read).with(path).and_return(text)
199
+ file = YARD::CodeObjects::ExtraFileObject.new(path)
200
+ @generator.parse_files([file])
201
+ @generator.messages.should == {
202
+ "Getting Started Guide" => {
203
+ :locations => [[path, 1]],
204
+ :comments => ["title"],
205
+ },
206
+ "# Getting Started with YARD" => {
207
+ :locations => [[path, 3]],
208
+ :comments => [],
209
+ }
210
+ }
211
+ end
212
+
213
+ it "should extract paragraphs" do
214
+ path = "README.md"
215
+ paragraph1 = <<-eop.strip
216
+ Note that class methods must not be referred to with the "::" namespace
217
+ separator. Only modules, classes and constants should use "::".
218
+ eop
219
+ paragraph2 = <<-eop.strip
220
+ You can also do lookups on any installed gems. Just make sure to build the
221
+ .yardoc databases for installed gems with:
222
+ eop
223
+ text = <<-eot
224
+ #{paragraph1}
225
+
226
+ #{paragraph2}
227
+ eot
228
+ File.stub!(:open).with(path).and_yield(StringIO.new(text))
229
+ File.stub!(:read).with(path).and_return(text)
230
+ file = YARD::CodeObjects::ExtraFileObject.new(path)
231
+ @generator.parse_files([file])
232
+ @generator.messages.should == {
233
+ paragraph1 => {
234
+ :locations => [[path, 1]],
235
+ :comments => [],
236
+ },
237
+ paragraph2 => {
238
+ :locations => [[path, 4]],
239
+ :comments => [],
240
+ }
241
+ }
242
+ end
243
+ end
244
+ end
@@ -0,0 +1,69 @@
1
+ describe YARD::I18n::Text do
2
+ def extract_messages(input, options={})
3
+ text = YARD::I18n::Text.new(StringIO.new(input), options)
4
+ messages = []
5
+ text.extract_messages do |*message|
6
+ messages << message
7
+ end
8
+ messages
9
+ end
10
+
11
+ describe "Header" do
12
+ it "should extract attribute" do
13
+ text = <<-eot
14
+ # @title Getting Started Guide
15
+
16
+ # Getting Started with YARD
17
+ eot
18
+ extract_messages(text, :have_header => true).should ==
19
+ [[:attribute, "title", "Getting Started Guide", 1],
20
+ [:paragraph, "# Getting Started with YARD", 3]]
21
+ end
22
+
23
+ it "should ignore markup line" do
24
+ text = <<-eot
25
+ #!markdown
26
+ # @title Getting Started Guide
27
+
28
+ # Getting Started with YARD
29
+ eot
30
+ extract_messages(text, :have_header => true).should ==
31
+ [[:attribute, "title", "Getting Started Guide", 2],
32
+ [:paragraph, "# Getting Started with YARD", 4]]
33
+ end
34
+
35
+ it "should terminate header block by markup line not at the first line" do
36
+ text = <<-eot
37
+ # @title Getting Started Guide
38
+ #!markdown
39
+
40
+ # Getting Started with YARD
41
+ eot
42
+ extract_messages(text, :have_header => true).should ==
43
+ [[:attribute, "title", "Getting Started Guide", 1],
44
+ [:paragraph, "#!markdown", 2],
45
+ [:paragraph, "# Getting Started with YARD", 4]]
46
+ end
47
+ end
48
+
49
+ describe "Body" do
50
+ it "should split to paragraphs" do
51
+ paragraph1 = <<-eop.strip
52
+ Note that class methods must not be referred to with the "::" namespace
53
+ separator. Only modules, classes and constants should use "::".
54
+ eop
55
+ paragraph2 = <<-eop.strip
56
+ You can also do lookups on any installed gems. Just make sure to build the
57
+ .yardoc databases for installed gems with:
58
+ eop
59
+ text = <<-eot
60
+ #{paragraph1}
61
+
62
+ #{paragraph2}
63
+ eot
64
+ extract_messages(text).should ==
65
+ [[:paragraph, paragraph1, 1],
66
+ [:paragraph, paragraph2, 4]]
67
+ end
68
+ end
69
+ end