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
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::MixinHandler do
4
+ it "should add includes to modules or classes" do
5
+ parse_init <<-eof
6
+ mFoo = rb_define_module("Foo");
7
+ cBar = rb_define_class("Bar", rb_cObject);
8
+ mBaz = rb_define_module("Baz");
9
+ rb_include_module(cBar, mFoo);
10
+ rb_include_module(mBaz, mFoo);
11
+ eof
12
+ foo = Registry.at('Foo')
13
+ bar = Registry.at('Bar')
14
+ baz = Registry.at('Baz')
15
+ bar.mixins(:instance).should == [foo]
16
+ baz.mixins(:instance).should == [foo]
17
+ end
18
+
19
+ it "should add include as proxy if symbol lookup fails" do
20
+ parse_init <<-eof
21
+ mFoo = rb_define_module("Foo");
22
+ rb_include_module(mFoo, mXYZ);
23
+ eof
24
+ foo = Registry.at('Foo')
25
+ foo.mixins(:instance).should == [P('XYZ')]
26
+ end
27
+ end
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::ClassHandler do
4
+ it "should register modules" do
5
+ parse_init 'mFoo = rb_define_module("Foo");'
6
+ Registry.at('Foo').type.should == :module
7
+ end
8
+
9
+ it "should register classes under namespaces" do
10
+ parse_init 'mFoo = rb_define_module_under(mBar, "Foo");'
11
+ Registry.at('Bar::Foo').type.should == :module
12
+ end
13
+
14
+ it "should remember symbol defined with class" do
15
+ parse_init(<<-eof)
16
+ cXYZ = rb_define_module("Foo");
17
+ rb_define_method(cXYZ, "bar", bar, 0);
18
+ eof
19
+ Registry.at('Foo').type.should == :module
20
+ Registry.at('Foo#bar').should_not be_nil
21
+ end
22
+
23
+ it "should not associate declaration comments as module docstring" do
24
+ parse_init(<<-eof)
25
+ /* Docstring! */
26
+ mFoo = rb_define_module("Foo");
27
+ eof
28
+ Registry.at('Foo').docstring.should be_blank
29
+ end
30
+
31
+ it "should associate a file with the declaration" do
32
+ parse_init(<<-eof)
33
+ mFoo = rb_define_module("Foo");
34
+ eof
35
+ Registry.at('Foo').file.should == '(stdin)'
36
+ Registry.at('Foo').line.should == 2
37
+ end
38
+ end
@@ -0,0 +1,43 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::OverrideCommentHandler do
4
+ [:class, :module].each do |type|
5
+ it "should handle Document-#{type}" do
6
+ parse(<<-eof)
7
+ /* Document-#{type}: A
8
+ * Foo bar baz
9
+ */
10
+ void
11
+ eof
12
+ Registry.at('A').type.should == type
13
+ Registry.at('A').docstring.should == 'Foo bar baz'
14
+ end
15
+ end
16
+
17
+ it "should handle multiple class/module combinations" do
18
+ parse(<<-eof)
19
+ /* Document-class: A
20
+ * Document-class: B
21
+ * Document-module: C
22
+ * Foo bar baz
23
+ */
24
+ eof
25
+ Registry.at('A').docstring.should == 'Foo bar baz'
26
+ Registry.at('B').docstring.should == 'Foo bar baz'
27
+ Registry.at('C').docstring.should == 'Foo bar baz'
28
+ Registry.at('C').type == :module
29
+ end
30
+
31
+ it "should handle Document-class with inheritance" do
32
+ parse(<<-eof)
33
+ /* Document-class: A < B
34
+ * Foo bar baz
35
+ */
36
+ void
37
+ eof
38
+ obj = Registry.at('A')
39
+ obj.type.should == :class
40
+ obj.docstring.should == 'Foo bar baz'
41
+ obj.superclass.should == P('B')
42
+ end
43
+ end
@@ -0,0 +1,35 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::PathHandler do
4
+ it 'should track variable names defined under namespaces' do
5
+ parse_init <<-eof
6
+ mFoo = rb_define_module("Foo");
7
+ cBar = rb_define_class_under(mFoo, "Bar", rb_cObject);
8
+ rb_define_method(cBar, "foo", foo, 1);
9
+ eof
10
+ Registry.at('Foo::Bar').should_not be_nil
11
+ Registry.at('Foo::Bar#foo').should_not be_nil
12
+ end
13
+
14
+ it 'should track variable names defined under namespaces' do
15
+ parse_init <<-eof
16
+ mFoo = rb_define_module("Foo");
17
+ cBar = rb_define_class_under(mFoo, "Bar", rb_cObject);
18
+ mBaz = rb_define_module_under(cBar, "Baz");
19
+ rb_define_method(mBaz, "foo", foo, 1);
20
+ eof
21
+ Registry.at('Foo::Bar::Baz').should_not be_nil
22
+ Registry.at('Foo::Bar::Baz#foo').should_not be_nil
23
+ end
24
+
25
+ it "should handle rb_path2class() calls" do
26
+ parse_init <<-eof
27
+ somePath = rb_path2class("Foo::Bar::Baz")
28
+ mFoo = rb_define_module("Foo");
29
+ cBar = rb_define_class_under(mFoo, "Bar", rb_cObject);
30
+ mBaz = rb_define_module_under(cBar, "Baz");
31
+ rb_define_method(somePath, "foo", foo, 1);
32
+ eof
33
+ Registry.at('Foo::Bar::Baz#foo').should_not be_nil
34
+ end
35
+ end
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+
3
+ def parse(src)
4
+ YARD::Registry.clear
5
+ YARD.parse_string(src, :c)
6
+ end
7
+
8
+ def parse_init(src)
9
+ YARD::Registry.clear
10
+ YARD.parse_string("void Init_Foo() {\n#{src}\n}", :c)
11
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe YARD::Handlers::C::StructHandler do
4
+ after { Registry.clear }
5
+
6
+ it "should handle Struct class definitions" do
7
+ parse_init <<-eof
8
+ rb_cRange = rb_struct_define_without_accessor(
9
+ "Range", rb_cFoo, range_alloc,
10
+ "begin", "end", "excl", NULL);
11
+ eof
12
+ Registry.at('Range').type.should == :class
13
+ Registry.at('Range').superclass.should == P(:Foo)
14
+ end
15
+ end
@@ -2,40 +2,40 @@ require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
3
  describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassConditionHandler" do
4
4
  before(:all) { parse_file :class_condition_handler_001, __FILE__ }
5
-
5
+
6
6
  def verify_method(*names)
7
7
  names.each {|name| Registry.at("A##{name}").should_not be_nil }
8
8
  names.each {|name| Registry.at("A##{name}not").should be_nil }
9
9
  end
10
-
10
+
11
11
  def no_undoc_error(code)
12
12
  lambda { StubbedSourceParser.parse_string(code) }.should_not raise_error
13
13
  end
14
-
14
+
15
15
  it "should parse all unless blocks for complex conditions" do
16
16
  verify_method :g
17
17
  end
18
-
18
+
19
19
  it "should not parse conditionals inside methods" do
20
20
  verify_method :h
21
21
  end
22
-
22
+
23
23
  it "should only parse then block if condition is literal value `true`" do
24
24
  verify_method :p
25
25
  end
26
-
26
+
27
27
  it "should only parse then block if condition is literal integer != 0" do
28
28
  verify_method :o
29
29
  end
30
-
30
+
31
31
  it "should invert block to parse for literal condition if it's an unless block" do
32
32
  verify_method :e
33
33
  end
34
-
34
+
35
35
  it "should handle conditions such as 'defined? VALUE'" do
36
36
  verify_method :j, :k
37
37
  end
38
-
38
+
39
39
  it "should parse all if/elsif blocks for complex conditions" do
40
40
  verify_method :a, :b, :c, :d
41
41
  end
@@ -47,7 +47,7 @@ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassCondition
47
47
  it "should only parse else block if condition is literal integer == 0" do
48
48
  verify_method :n
49
49
  end
50
-
50
+
51
51
  it "should not fail on complex conditions" do
52
52
  log.should_not_receive(:warn)
53
53
  log.should_not_receive(:error)
@@ -2,36 +2,36 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler" do
4
4
  before(:all) { parse_file :class_handler_001, __FILE__ }
5
-
5
+
6
6
  it "should parse a class block with docstring" do
7
7
  P("A").docstring.should == "Docstring"
8
8
  end
9
-
9
+
10
10
  it "should handle complex class names" do
11
11
  P("A::B::C").should_not == nil
12
12
  end
13
-
13
+
14
14
  it "should handle the subclassing syntax" do
15
15
  P("A::B::C").superclass.should == P(:String)
16
16
  P("A::X").superclass.should == Registry.at("A::B::C")
17
17
  end
18
-
18
+
19
19
  it "should interpret class << self as a class level block" do
20
20
  P("A.classmethod1").should_not == nil
21
21
  end
22
-
22
+
23
23
  it "should interpret class << ClassName as a class level block in ClassName's namespace" do
24
24
  P("A::B::C.Hello").should be_instance_of(CodeObjects::MethodObject)
25
25
  end
26
-
26
+
27
27
  it "should make visibility public when parsing a block" do
28
28
  P("A::B::C#method1").visibility.should == :public
29
29
  end
30
-
30
+
31
31
  it "should set superclass type to :class if it is a Proxy" do
32
32
  P("A::B::C").superclass.type.should == :class
33
33
  end
34
-
34
+
35
35
  it "should look for a superclass before creating the class if it shares the same name" do
36
36
  P('B::A').superclass.should == P('A')
37
37
  end
@@ -39,33 +39,33 @@ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler"
39
39
  it "should handle class definitions in the form ::ClassName" do
40
40
  Registry.at("MyRootClass").should_not be_nil
41
41
  end
42
-
42
+
43
43
  it "should handle superclass as a constant-style method (camping style < R /path/)" do
44
44
  P('Test1').superclass.should == P(:R)
45
45
  P('Test2').superclass.should == P(:R)
46
46
  P('Test6').superclass.should == P(:NotDelegateClass)
47
47
  end
48
-
48
+
49
49
  it "should handle superclass with OStruct.new or Struct.new syntax (superclass should be OStruct/Struct)" do
50
50
  P('Test3').superclass.should == P(:Struct)
51
51
  P('Test4').superclass.should == P(:OStruct)
52
52
  end
53
-
53
+
54
54
  it "should handle DelegateClass(CLASSNAME) superclass syntax" do
55
55
  P('Test5').superclass.should == P(:Array)
56
56
  end
57
-
57
+
58
58
  it "should handle a superclass of the same name in the form ::ClassName" do
59
59
  P('Q::Logger').superclass.should == P(:Logger)
60
60
  P('Q::Foo').superclass.should_not == P('Q::Logger')
61
61
  end
62
-
62
+
63
63
  ["CallMethod('test')", "VSD^#}}", 'not.aclass', 'self'].each do |klass|
64
64
  it "should raise an UndocumentableError for invalid class '#{klass}'" do
65
65
  with_parser(:ruby18) { undoc_error "class #{klass}; end" }
66
66
  end
67
67
  end
68
-
68
+
69
69
  ['@@INVALID', 'hi', '$MYCLASS', 'AnotherClass.new'].each do |klass|
70
70
  it "should raise an UndocumentableError for invalid superclass '#{klass}' but it should create the class." do
71
71
  YARD::CodeObjects::ClassObject.should_receive(:new).with(Registry.root, 'A')
@@ -73,7 +73,7 @@ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler"
73
73
  Registry.at('A').superclass.should == P(:Object)
74
74
  end
75
75
  end
76
-
76
+
77
77
  ['not.aclass', 'self', 'AnotherClass.new'].each do |klass|
78
78
  it "should raise an UndocumentableError if the constant class reference 'class << SomeConstant' does not point to a valid class name" do
79
79
  with_parser(:ruby18) do
@@ -89,11 +89,11 @@ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler"
89
89
  it "should document 'class << SomeConstant' by using SomeConstant's value as a reference to the real class name" do
90
90
  Registry.at('String.classmethod').should_not be_nil
91
91
  end
92
-
92
+
93
93
  it "should allow class << SomeRubyClass to create the class if it does not exist" do
94
94
  Registry.at('Symbol.toString').should_not be_nil
95
95
  end
96
-
96
+
97
97
  it "should document 'class Exception' without running into superclass issues" do
98
98
  Parser::SourceParser.parse_string <<-eof
99
99
  class Exception
@@ -101,16 +101,16 @@ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler"
101
101
  eof
102
102
  Registry.at(:Exception).should_not be_nil
103
103
  end
104
-
104
+
105
105
  it "should document 'class RT < XX::RT' with proper superclass even if XX::RT is a proxy" do
106
106
  Registry.at(:RT).should_not be_nil
107
107
  Registry.at(:RT).superclass.should == P('XX::RT')
108
108
  end
109
-
109
+
110
110
  it "should not overwrite docstring with an empty one" do
111
111
  Registry.at(:Zebra).docstring.should == "Docstring 2"
112
112
  end
113
-
113
+
114
114
  it "should turn 'class Const < Struct.new(:sym)' into class Const with attr :sym" do
115
115
  obj = Registry.at("Point")
116
116
  obj.should be_kind_of(CodeObjects::ClassObject)
@@ -134,12 +134,12 @@ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler"
134
134
 
135
135
  Registry.at("XPoint").should be_nil
136
136
  end
137
-
137
+
138
138
  it "should create a Struct::Name class when class Const < Struct.new('Name', :sym) is found" do
139
139
  obj = Registry.at("Struct::XPoint")
140
140
  obj.should_not be_nil
141
141
  end
142
-
142
+
143
143
  it "should attach attribtues to the generated Struct::Name class when Struct.new('Name') is used" do
144
144
  obj = Registry.at("Struct::XPoint")
145
145
  attrs = obj.attributes[:instance]
@@ -149,32 +149,32 @@ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler"
149
149
  attrs[key][:write].should_not be_nil
150
150
  end
151
151
  end
152
-
152
+
153
153
  it "should use @attr to set attribute descriptions on Struct subclasses" do
154
154
  obj = Registry.at("DoccedStruct#input")
155
155
  obj.docstring.should == "the input stream"
156
156
  end
157
-
157
+
158
158
  it "should use @attr to set attribute types on Struct subclasses" do
159
159
  obj = Registry.at("DoccedStruct#someproc")
160
160
  obj.should_not be_nil
161
161
  obj.tag(:return).should_not be_nil
162
162
  obj.tag(:return).types.should == ["Proc", "#call"]
163
163
  end
164
-
164
+
165
165
  it "should default types unspecified by @attr to Object on Struct subclasses" do
166
166
  obj = Registry.at("DoccedStruct#mode")
167
167
  obj.should_not be_nil
168
168
  obj.tag(:return).should_not be_nil
169
169
  obj.tag(:return).types.should == ["Object"]
170
170
  end
171
-
171
+
172
172
  it "should create parameters for writers of Struct subclass's attributes" do
173
173
  obj = Registry.at("DoccedStruct#input=")
174
174
  obj.tags(:param).size.should == 1
175
175
  obj.tag(:param).types.should == ["IO"]
176
176
  end
177
-
177
+
178
178
  ["SemiDoccedStruct", "NotAStruct"].each do |struct|
179
179
  describe("Attributes on a " + (struct == "NotAStruct" ? "class" : "struct")) do
180
180
  it "defines both readers and writers when @attr is used on Structs" do
@@ -183,63 +183,63 @@ describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler"
183
183
  attrs[:first][:read].should_not be_nil
184
184
  attrs[:first][:write].should_not be_nil
185
185
  end
186
-
186
+
187
187
  it "defines only a reader when only @attr_reader is used on Structs" do
188
188
  obj = Registry.at(struct)
189
189
  attrs = obj.attributes[:instance]
190
190
  attrs[:second][:read].should_not be_nil
191
191
  attrs[:second][:write].should be_nil
192
192
  end
193
-
193
+
194
194
  it "defines only a writer when only @attr_writer is used on Structs" do
195
195
  obj = Registry.at(struct)
196
196
  attrs = obj.attributes[:instance]
197
197
  attrs[:third][:read].should be_nil
198
198
  attrs[:third][:write].should_not be_nil
199
199
  end
200
-
200
+
201
201
  it "defines a reader with correct return types when @attr_reader is used on Structs" do
202
202
  obj = Registry.at("#{struct}#second")
203
203
  obj.tag(:return).types.should == ["Fixnum"]
204
204
  end
205
-
205
+
206
206
  it "defines a writer with correct parameter types when @attr_writer is used on Structs" do
207
207
  obj = Registry.at("#{struct}#third=")
208
208
  obj.tag(:param).types.should == ["Array"]
209
209
  end
210
-
210
+
211
211
  it "defines a reader and a writer when both @attr_reader and @attr_writer are used" do
212
212
  obj = Registry.at(struct)
213
213
  attrs = obj.attributes[:instance]
214
214
  attrs[:fourth][:read].should_not be_nil
215
215
  attrs[:fourth][:write].should_not be_nil
216
216
  end
217
-
217
+
218
218
  it "uses @attr_reader for the getter when both @attr_reader and @attr_writer are given" do
219
219
  obj = Registry.at("#{struct}#fourth")
220
220
  obj.tag(:return).types.should == ["#read"]
221
221
  end
222
-
222
+
223
223
  it "uses @attr_writer for the setter when both @attr_reader and @attr_writer are given" do
224
224
  obj = Registry.at("#{struct}#fourth=")
225
225
  obj.tag(:param).types.should == ["IO"]
226
226
  end
227
-
227
+
228
228
  it "extracts text from @attr_reader" do
229
229
  Registry.at("#{struct}#fourth").docstring.should == "returns a proc that reads"
230
230
  end
231
-
231
+
232
232
  it "extracts text from @attr_writer" do
233
233
  Registry.at("#{struct}#fourth=").docstring.should == "sets the proc that writes stuff"
234
234
  end
235
235
  end
236
236
  end
237
-
237
+
238
238
  it "should inherit from a regular struct" do
239
239
  Registry.at('RegularStruct').superclass.should == P(:Struct)
240
240
  Registry.at('RegularStruct2').superclass.should == P(:Struct)
241
241
  end
242
-
242
+
243
243
  it "should handle inheritance from 'self'" do
244
244
  Registry.at('Outer1::Inner1').superclass.should == Registry.at('Outer1')
245
245
  end