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
@@ -8,19 +8,19 @@ describe YARD::Handlers::Base do
8
8
  before do
9
9
  Handlers::Base.stub!(:inherited)
10
10
  end
11
-
11
+
12
12
  it "should keep track of subclasses" do
13
13
  Handlers::Base.should_receive(:inherited).once
14
14
  class TestHandler < Handlers::Base; end
15
15
  end
16
-
16
+
17
17
  it "should raise NotImplementedError if process is called on a class with no #process" do
18
18
  class TestNotImplementedHandler < Handlers::Base
19
19
  end
20
-
20
+
21
21
  lambda { TestNotImplementedHandler.new(0, 0).process }.should raise_error(NotImplementedError)
22
22
  end
23
-
23
+
24
24
  it "should allow multiple handles arguments" do
25
25
  Handlers::Base.should_receive(:inherited).once
26
26
  class TestHandler1 < Handlers::Base
@@ -39,7 +39,7 @@ describe YARD::Handlers::Base do
39
39
  TestHandler2.handlers.should == [:a, :b, :c]
40
40
  end
41
41
  end
42
-
42
+
43
43
  describe 'transitive tags' do
44
44
  it "should add transitive tags to children" do
45
45
  Registry.clear
@@ -58,7 +58,7 @@ describe YARD::Handlers::Base do
58
58
  Registry.at('A#bar').tag(:author).should be_nil
59
59
  end
60
60
  end
61
-
61
+
62
62
  describe 'sharing global state' do
63
63
  it "should allow globals to share global state among handlers" do
64
64
  class GlobalStateHandler1 < Handlers::Ruby::Base
@@ -80,13 +80,13 @@ describe YARD::Handlers::Base do
80
80
  end
81
81
  end
82
82
  end if HAVE_RIPPER
83
-
83
+
84
84
  describe '#push_state' do
85
85
  def process(klass)
86
86
  state = OpenStruct.new(:namespace => "ROOT", :scope => :instance, :owner => "ROOT")
87
87
  klass.new(state, nil).process
88
88
  end
89
-
89
+
90
90
  it "should push and return all old state info after block" do
91
91
  class PushStateHandler1 < Handlers::Base
92
92
  def process
@@ -102,7 +102,7 @@ describe YARD::Handlers::Base do
102
102
  end
103
103
  process PushStateHandler1
104
104
  end
105
-
105
+
106
106
  it "should allow owner to be pushed individually" do
107
107
  class PushStateHandler2 < Handlers::Base
108
108
  def process
@@ -116,7 +116,7 @@ describe YARD::Handlers::Base do
116
116
  end
117
117
  process PushStateHandler2
118
118
  end
119
-
119
+
120
120
  it "should allow scope to be pushed individually" do
121
121
  class PushStateHandler3 < Handlers::Base
122
122
  def process
@@ -131,14 +131,14 @@ describe YARD::Handlers::Base do
131
131
  process PushStateHandler3
132
132
  end
133
133
  end
134
-
134
+
135
135
  describe '.in_file' do
136
136
  def parse(filename, parser_type, src = "class A; end")
137
137
  parser = Parser::SourceParser.new(parser_type)
138
138
  parser.instance_variable_set("@file", filename)
139
139
  parser.parse(StringIO.new(src))
140
140
  end
141
-
141
+
142
142
  def create_handler(stmts, parser_type)
143
143
  $handler_counter ||= 0
144
144
  sklass = parser_type == :ruby ? "Base" : "Legacy::Base"
@@ -150,7 +150,7 @@ describe YARD::Handlers::Base do
150
150
  end
151
151
  eof
152
152
  end
153
-
153
+
154
154
  def test_handler(file, stmts, creates = true, parser_type = :ruby)
155
155
  Registry.clear
156
156
  Registry.at('#FOO').should be_nil
@@ -159,14 +159,14 @@ describe YARD::Handlers::Base do
159
159
  Registry.at('#FOO').send(creates ? :should_not : :should, be_nil)
160
160
  Handlers::Base.subclasses.delete_if {|k,v| k.to_s =~ /^InFileHandler/ }
161
161
  end
162
-
162
+
163
163
  [:ruby, :ruby18].each do |parser_type|
164
164
  next if parser_type == :ruby && LEGACY_PARSER
165
165
  describe "Parser type = #{parser_type.inspect}" do
166
166
  it "should allow handler to be specific to a file" do
167
167
  test_handler 'file_a.rb', 'in_file "file_a.rb"', true, parser_type
168
168
  end
169
-
169
+
170
170
  it "should ignore handler if filename does not match" do
171
171
  test_handler 'file_b.rb', 'in_file "file_a.rb"', false, parser_type
172
172
  end
@@ -174,7 +174,7 @@ describe YARD::Handlers::Base do
174
174
  it "should only test filename part when given a String" do
175
175
  test_handler '/path/to/file_a.rb', 'in_file "/to/file_a.rb"', false, parser_type
176
176
  end
177
-
177
+
178
178
  it "should test exact match for entire String" do
179
179
  test_handler 'file_a.rb', 'in_file "file"', false, parser_type
180
180
  end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::AliasHandler do
4
+ it "should allow defining of aliases (rb_define_alias)" do
5
+ parse <<-eof
6
+ /* FOO */
7
+ VALUE foo(VALUE x) { int value = x; }
8
+ void Init_Foo() {
9
+ rb_cFoo = rb_define_class("Foo", rb_cObject);
10
+ rb_define_method(rb_cFoo, "foo", foo, 1);
11
+ rb_define_alias(rb_cFoo, "bar", "foo");
12
+ }
13
+ eof
14
+
15
+ Registry.at('Foo#bar').should be_is_alias
16
+ Registry.at('Foo#bar').docstring.should == 'FOO'
17
+ end
18
+
19
+ it "should allow defining of aliases (rb_define_alias) of attributes" do
20
+ parse <<-eof
21
+ /* FOO */
22
+ VALUE foo(VALUE x) { int value = x; }
23
+ void Init_Foo() {
24
+ rb_cFoo = rb_define_class("Foo", rb_cObject);
25
+ rb_define_attr(rb_cFoo, "foo", 1, 0);
26
+ rb_define_alias(rb_cFoo, "foo?", "foo");
27
+ }
28
+ eof
29
+
30
+ Registry.at('Foo#foo').should be_reader
31
+ Registry.at('Foo#foo?').should be_is_alias
32
+ end
33
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::AttributeHandler do
4
+ def run(read, write, commented = nil)
5
+ parse <<-eof
6
+ /* FOO */
7
+ VALUE foo(VALUE x) { int value = x; }
8
+ void Init_Foo() {
9
+ rb_cFoo = rb_define_class("Foo", rb_cObject);
10
+ #{commented ? '/*' : ''}
11
+ rb_define_attr(rb_cFoo, "foo", #{read}, #{write});
12
+ #{commented ? '*/' : ''}
13
+ }
14
+ eof
15
+ end
16
+
17
+ it "should handle readonly attribute (rb_define_attr)" do
18
+ run(1, 0)
19
+ Registry.at('Foo#foo').should be_reader
20
+ Registry.at('Foo#foo=').should be_nil
21
+ end
22
+
23
+ it "should handle writeonly attribute (rb_define_attr)" do
24
+ run(0, 1)
25
+ Registry.at('Foo#foo').should be_nil
26
+ Registry.at('Foo#foo=').should be_writer
27
+ end
28
+
29
+ it "should handle readwrite attribute (rb_define_attr)" do
30
+ run(1, 1)
31
+ Registry.at('Foo#foo').should be_reader
32
+ Registry.at('Foo#foo=').should be_writer
33
+ end
34
+
35
+ it "should handle commented writeonly attribute (/* rb_define_attr */)" do
36
+ run(1, 1, true)
37
+ Registry.at('Foo#foo').should be_reader
38
+ Registry.at('Foo#foo=').should be_writer
39
+ end
40
+ end
@@ -0,0 +1,64 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::ClassHandler do
4
+ it "should register classes" do
5
+ parse_init 'cFoo = rb_define_class("Foo", rb_cObject);'
6
+ Registry.at('Foo').type.should == :class
7
+ end
8
+
9
+ it "should register classes under namespaces" do
10
+ parse_init 'cFoo = rb_define_class_under(cBar, "Foo", rb_cObject);'
11
+ Registry.at('Bar::Foo').type.should == :class
12
+ end
13
+
14
+ it "should remember symbol defined with class" do
15
+ parse_init(<<-eof)
16
+ cXYZ = rb_define_class("Foo", rb_cObject);
17
+ rb_define_method(cXYZ, "bar", bar, 0);
18
+ eof
19
+ Registry.at('Foo').type.should == :class
20
+ Registry.at('Foo#bar').should_not be_nil
21
+ end
22
+
23
+ it "should lookup superclass symbol name" do
24
+ parse_init(<<-eof)
25
+ cXYZ = rb_define_class("Foo", rb_cObject);
26
+ cBar = rb_define_class("Bar", cXYZ);
27
+ eof
28
+ Registry.at('Bar').superclass.should == Registry.at('Foo')
29
+ end
30
+
31
+ it "should user superclass symbol name as proxy if not found" do
32
+ parse_init(<<-eof)
33
+ // cXYZ = rb_define_class("Foo", rb_cObject);
34
+ cBar = rb_define_class("Bar", cXYZ);
35
+ eof
36
+ Registry.at('Bar').superclass.should == P('XYZ')
37
+ end
38
+
39
+ it "should not associate declaration comments as class docstring" do
40
+ parse_init(<<-eof)
41
+ /* Docstring! */
42
+ cFoo = rb_define_class("Foo", cObject);
43
+ eof
44
+ Registry.at('Foo').docstring.should be_blank
45
+ end
46
+
47
+ it "should associate a file with the declaration" do
48
+ parse_init(<<-eof)
49
+ cFoo = rb_define_class("Foo", cObject);
50
+ eof
51
+ Registry.at('Foo').file.should == '(stdin)'
52
+ Registry.at('Foo').line.should == 2
53
+ end
54
+
55
+ it "should properly handle Proxy superclasses" do
56
+ parse_init <<-eof
57
+ cFoo = rb_define_class_under(mFoo, "Bar", rb_cBar);
58
+ eof
59
+ Registry.at('Foo::Bar').type.should == :class
60
+ Registry.at('Foo::Bar').superclass.should == P('Bar')
61
+ P('Bar').should be_a(CodeObjects::Proxy)
62
+ P('Bar').type.should == :class
63
+ end
64
+ end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::ConstantHandler do
4
+ it "should register constants" do
5
+ parse_init <<-eof
6
+ mFoo = rb_define_module("Foo");
7
+ rb_define_const(mFoo, "FOO", ID2SYM(100));
8
+ eof
9
+ Registry.at('Foo::FOO').type.should == :constant
10
+ end
11
+
12
+ it "should look for override comments" do
13
+ parse <<-eof
14
+ /* Document-const: FOO
15
+ * Document-const: Foo::BAR
16
+ * Foo bar!
17
+ */
18
+
19
+ void Init_Foo() {
20
+ mFoo = rb_define_module("Foo");
21
+ rb_define_const(mFoo, "FOO", ID2SYM(100));
22
+ rb_define_const(mFoo, "BAR", ID2SYM(101));
23
+ }
24
+ eof
25
+ foo = Registry.at('Foo::FOO')
26
+ foo.type.should == :constant
27
+ foo.docstring.should == 'Foo bar!'
28
+ foo.value.should == 'ID2SYM(100)'
29
+ foo.file.should == '(stdin)'
30
+ foo.line.should == 8
31
+ bar = Registry.at('Foo::BAR')
32
+ bar.type.should == :constant
33
+ bar.docstring.should == 'Foo bar!'
34
+ bar.file.should == '(stdin)'
35
+ bar.line.should == 9
36
+ bar.value.should == 'ID2SYM(101)'
37
+ end
38
+
39
+ it "should use comment attached to declaration as fallback" do
40
+ parse_init <<-eof
41
+ mFoo = rb_define_module("Foo");
42
+ rb_define_const(mFoo, "FOO", ID2SYM(100)); // foobar!
43
+ eof
44
+ foo = Registry.at('Foo::FOO')
45
+ foo.value.should == 'ID2SYM(100)'
46
+ foo.docstring.should == 'foobar!'
47
+ end
48
+
49
+ it "should allow the form VALUE: DOCSTRING to document value" do
50
+ parse_init <<-eof
51
+ mFoo = rb_define_module("Foo");
52
+ rb_define_const(mFoo, "FOO", ID2SYM(100)); // 100: foobar!
53
+ eof
54
+ foo = Registry.at('Foo::FOO')
55
+ foo.value.should == '100'
56
+ foo.docstring.should == 'foobar!'
57
+ end
58
+
59
+ it "should allow escaping of backslashes in VALUE: DOCSTRING syntax" do
60
+ parse_init <<-eof
61
+ mFoo = rb_define_module("Foo");
62
+ rb_define_const(mFoo, "FOO", ID2SYM(100)); // 100\\:x\\:y: foobar:x!
63
+ eof
64
+ foo = Registry.at('Foo::FOO')
65
+ foo.value.should == '100:x:y'
66
+ foo.docstring.should == 'foobar:x!'
67
+ end
68
+ end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::InitHandler do
4
+ it "should add documentation in Init_ClassName() to ClassName" do
5
+ parse(<<-eof)
6
+ // Bar!
7
+ void Init_A() {
8
+ rb_cA = rb_define_class("A", rb_cObject);
9
+ }
10
+ eof
11
+ Registry.at('A').docstring.should == 'Bar!'
12
+ end
13
+
14
+ it "should not add documentation if ClassName is not created in Init" do
15
+ parse(<<-eof)
16
+ // Bar!
17
+ void Init_A() {
18
+ }
19
+ eof
20
+ Registry.at('A').should be_nil
21
+ end
22
+
23
+ it "should not overwrite override comment" do
24
+ parse(<<-eof)
25
+ /* Document-class: A
26
+ * Foo!
27
+ */
28
+
29
+ // Bar!
30
+ void Init_A() {
31
+ rb_cA = rb_define_class("A", rb_cObject);
32
+ }
33
+ eof
34
+ Registry.at('A').docstring.should == 'Foo!'
35
+ end
36
+ end
@@ -0,0 +1,228 @@
1
+ require File.dirname(__FILE__) + "/spec_helper"
2
+
3
+ describe YARD::Handlers::C::MethodHandler do
4
+ it "should register methods" do
5
+ parse_init <<-eof
6
+ mFoo = rb_define_module("Foo");
7
+ rb_define_method(mFoo, "bar", bar, 0);
8
+ eof
9
+ Registry.at('Foo#bar').should_not be_nil
10
+ Registry.at('Foo#bar').visibility.should == :public
11
+ end
12
+
13
+ it "should register private methods" do
14
+ parse_init <<-eof
15
+ mFoo = rb_define_module("Foo");
16
+ rb_define_private_method(mFoo, "bar", bar, 0);
17
+ eof
18
+ Registry.at('Foo#bar').should_not be_nil
19
+ Registry.at('Foo#bar').visibility.should == :private
20
+ end
21
+
22
+ it "should register singleton methods" do
23
+ parse_init <<-eof
24
+ mFoo = rb_define_module("Foo");
25
+ rb_define_singleton_method(mFoo, "bar", bar, 0);
26
+ eof
27
+ Registry.at('Foo.bar').should_not be_nil
28
+ Registry.at('Foo.bar').visibility.should == :public
29
+ end
30
+
31
+ it "should register module functions" do
32
+ parse <<-eof
33
+ /* DOCSTRING
34
+ * @return [String] foo!
35
+ */
36
+ static VALUE bar(VALUE self) { x(); y(); z(); }
37
+
38
+ void Init_Foo() {
39
+ mFoo = rb_define_module("Foo");
40
+ rb_define_module_function(mFoo, "bar", bar, 0);
41
+ }
42
+ eof
43
+ bar_c = Registry.at('Foo.bar')
44
+ bar_i = Registry.at('Foo#bar')
45
+ bar_c.should be_module_function
46
+ bar_c.visibility.should == :public
47
+ bar_c.docstring.should == "DOCSTRING"
48
+ bar_c.tag(:return).object.should == bar_c
49
+ bar_c.source.should == "static VALUE bar(VALUE self) { x(); y(); z(); }"
50
+ bar_i.should_not be_module_function
51
+ bar_i.visibility.should == :private
52
+ bar_i.docstring.should == "DOCSTRING"
53
+ bar_i.tag(:return).object.should == bar_i
54
+ bar_i.source.should == bar_c.source
55
+ end
56
+
57
+ it "should register global functions into Kernel" do
58
+ parse_init 'rb_define_global_function("bar", bar, 0);'
59
+ Registry.at('Kernel#bar').should_not be_nil
60
+ end
61
+
62
+ it "should look for symbol containing method source" do
63
+ parse <<-eof
64
+ static VALUE foo(VALUE self) { x(); y(); z(); }
65
+ VALUE bar() { a(); b(); c(); }
66
+ void Init_Foo() {
67
+ mFoo = rb_define_module("Foo");
68
+ rb_define_method(mFoo, "foo", foo, 0);
69
+ rb_define_method(mFoo, "bar", bar, 0);
70
+ }
71
+ eof
72
+ foo = Registry.at('Foo#foo')
73
+ bar = Registry.at('Foo#bar')
74
+ foo.source.should == "static VALUE foo(VALUE self) { x(); y(); z(); }"
75
+ foo.file.should == '(stdin)'
76
+ foo.line.should == 1
77
+ bar.source.should == "VALUE bar() { a(); b(); c(); }"
78
+ bar.file.should == '(stdin)'
79
+ bar.line.should == 2
80
+ end
81
+
82
+ it "should find docstrings attached to method symbols" do
83
+ parse <<-eof
84
+ /* DOCSTRING */
85
+ static VALUE foo(VALUE self) { x(); y(); z(); }
86
+ void Init_Foo() {
87
+ mFoo = rb_define_module("Foo");
88
+ rb_define_method(mFoo, "foo", foo, 0);
89
+ }
90
+ eof
91
+ foo = Registry.at('Foo#foo')
92
+ foo.docstring.should == 'DOCSTRING'
93
+ end
94
+
95
+ it "should use declaration comments as docstring if there are no others" do
96
+ parse <<-eof
97
+ static VALUE foo(VALUE self) { x(); y(); z(); }
98
+ void Init_Foo() {
99
+ mFoo = rb_define_module("Foo");
100
+ /* DOCSTRING */
101
+ rb_define_method(mFoo, "foo", foo, 0);
102
+ // DOCSTRING!
103
+ rb_define_method(mFoo, "bar", bar, 0);
104
+ }
105
+ eof
106
+ foo = Registry.at('Foo#foo')
107
+ foo.docstring.should == 'DOCSTRING'
108
+ bar = Registry.at('Foo#bar')
109
+ bar.docstring.should == 'DOCSTRING!'
110
+ end
111
+
112
+ it "should look for symbols in other file" do
113
+ other = <<-eof
114
+ /* DOCSTRING! */
115
+ static VALUE foo() { x(); }
116
+ eof
117
+ File.should_receive(:read).with('other.c').and_return(other)
118
+ parse <<-eof
119
+ void Init_Foo() {
120
+ mFoo = rb_define_module("Foo");
121
+ rb_define_method(mFoo, "foo", foo, 0); // in other.c
122
+ }
123
+ eof
124
+ foo = Registry.at('Foo#foo')
125
+ foo.docstring.should == 'DOCSTRING!'
126
+ foo.file.should == 'other.c'
127
+ foo.line.should == 2
128
+ foo.source.should == 'static VALUE foo() { x(); }'
129
+ end
130
+
131
+ it "should allow extra file to include /'s and other filename characters" do
132
+ File.should_receive(:read).at_least(1).times.with('ext/a-file.c').and_return(<<-eof)
133
+ /* FOO */
134
+ VALUE foo(VALUE x) { int value = x; }
135
+
136
+ /* BAR */
137
+ VALUE bar(VALUE x) { int value = x; }
138
+ eof
139
+ parse_init <<-eof
140
+ rb_define_method(rb_cFoo, "foo", foo, 1); /* in ext/a-file.c */
141
+ rb_define_global_function("bar", bar, 1); /* in ext/a-file.c */
142
+ eof
143
+ Registry.at('Foo#foo').docstring.should == 'FOO'
144
+ Registry.at('Kernel#bar').docstring.should == 'BAR'
145
+ end
146
+
147
+ it "should warn if other file can't be found" do
148
+ log.should_receive(:warn).with(/Missing source file `other.c' when parsing Foo#foo/)
149
+ parse <<-eof
150
+ void Init_Foo() {
151
+ mFoo = rb_define_module("Foo");
152
+ rb_define_method(mFoo, "foo", foo, 0); // in other.c
153
+ }
154
+ eof
155
+ end
156
+
157
+ it "should look at override comments for docstring" do
158
+ parse <<-eof
159
+ /* Document-method: Foo::foo
160
+ * Document-method: new
161
+ * Document-method: Foo::Bar#baz
162
+ * Foo bar!
163
+ */
164
+
165
+ // init comments
166
+ void Init_Foo() {
167
+ mFoo = rb_define_module("Foo");
168
+ rb_define_method(mFoo, "foo", foo, 0);
169
+ rb_define_method(mFoo, "initialize", foo, 0);
170
+ mBar = rb_define_module_under(mFoo, "Bar");
171
+ rb_define_method(mBar, "baz", foo, 0);
172
+ }
173
+ eof
174
+ Registry.at('Foo#foo').docstring.should == 'Foo bar!'
175
+ Registry.at('Foo#initialize').docstring.should == 'Foo bar!'
176
+ Registry.at('Foo::Bar#baz').docstring.should == 'Foo bar!'
177
+ end
178
+
179
+ it "should look at overrides in other files" do
180
+ other = <<-eof
181
+ /* Document-method: Foo::foo
182
+ * Document-method: new
183
+ * Document-method: Foo::Bar#baz
184
+ * Foo bar!
185
+ */
186
+ eof
187
+ File.should_receive(:read).with('other.c').and_return(other)
188
+ parse <<-eof
189
+ void Init_Foo() {
190
+ mFoo = rb_define_module("Foo");
191
+ rb_define_method(mFoo, "foo", foo, 0); // in other.c
192
+ rb_define_method(mFoo, "initialize", foo, 0); // in other.c
193
+ mBar = rb_define_module_under(mFoo, "Bar"); // in other.c
194
+ rb_define_method(mBar, "baz", foo, 0); // in other.c
195
+ }
196
+ eof
197
+ Registry.at('Foo#foo').docstring.should == 'Foo bar!'
198
+ Registry.at('Foo#initialize').docstring.should == 'Foo bar!'
199
+ Registry.at('Foo::Bar#baz').docstring.should == 'Foo bar!'
200
+ end
201
+
202
+ it "should add return tag on methods ending in '?'" do
203
+ parse <<-eof
204
+ /* DOCSTRING */
205
+ static VALUE foo(VALUE self) { x(); y(); z(); }
206
+ void Init_Foo() {
207
+ mFoo = rb_define_module("Foo");
208
+ rb_define_method(mFoo, "foo?", foo, 0);
209
+ }
210
+ eof
211
+ foo = Registry.at('Foo#foo?')
212
+ foo.docstring.should == 'DOCSTRING'
213
+ foo.tag(:return).types.should == ['Boolean']
214
+ end
215
+
216
+ it "should not add return tag if return tags exist" do
217
+ parse <<-eof
218
+ // @return [String] foo
219
+ static VALUE foo(VALUE self) { x(); y(); z(); }
220
+ void Init_Foo() {
221
+ mFoo = rb_define_module("Foo");
222
+ rb_define_method(mFoo, "foo?", foo, 0);
223
+ }
224
+ eof
225
+ foo = Registry.at('Foo#foo?')
226
+ foo.tag(:return).types.should == ['String']
227
+ end
228
+ end