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
@@ -10,10 +10,10 @@ shared_examples_for "parser type registration" do
10
10
  end
11
11
 
12
12
  describe YARD::Parser::SourceParser do
13
- before do
13
+ before do
14
14
  Registry.clear
15
15
  end
16
-
16
+
17
17
  def parse_list(*list)
18
18
  files = list.map do |v|
19
19
  filename, source = *v
@@ -38,7 +38,7 @@ describe YARD::Parser::SourceParser do
38
38
  def after_file(&block)
39
39
  Parser::SourceParser.after_parse_file(&block)
40
40
  end
41
-
41
+
42
42
  describe '.before_parse_list' do
43
43
  before do
44
44
  Parser::SourceParser.before_parse_list_callbacks.clear
@@ -53,16 +53,16 @@ describe YARD::Parser::SourceParser do
53
53
  parse_list ['foo.rb', 'foo!'], ['bar.rb', 'class Foo; end']
54
54
  Registry.at('Foo').should_not be_nil
55
55
  end
56
-
56
+
57
57
  it "should support multiple callbacks" do
58
58
  checks = []
59
59
  before_list { checks << :one }
60
60
  before_list { checks << :two }
61
61
  parse_list ['file.rb', ''], ['file2.rb', ''], ['file3.rb', 'class Foo; end']
62
- Registry.at('Foo').should_not be_nil
62
+ Registry.at('Foo').should_not be_nil
63
63
  checks.should == [:one, :two]
64
64
  end
65
-
65
+
66
66
  it "should cancel parsing if it returns false" do
67
67
  checks = []
68
68
  before_list { checks << :one }
@@ -72,7 +72,7 @@ describe YARD::Parser::SourceParser do
72
72
  Registry.at('Foo').should be_nil
73
73
  checks.should == [:one]
74
74
  end
75
-
75
+
76
76
  it "should not cancel on nil" do
77
77
  checks = []
78
78
  before_list { checks << :one }
@@ -82,7 +82,7 @@ describe YARD::Parser::SourceParser do
82
82
  Registry.at('Foo').should_not be_nil
83
83
  checks.should == [:one, :two]
84
84
  end
85
-
85
+
86
86
  it "should pass in globals" do
87
87
  before_list {|f,g| g.x = 1 }
88
88
  before_list {|f,g| g.x += 1 }
@@ -108,16 +108,16 @@ describe YARD::Parser::SourceParser do
108
108
  parse_list ['foo.rb', 'foo!'], ['bar.rb', 'class Foo; end']
109
109
  Registry.at('Foo').should_not be_nil
110
110
  end
111
-
111
+
112
112
  it "should support multiple callbacks" do
113
113
  checks = []
114
114
  after_list { checks << :one }
115
115
  after_list { checks << :two }
116
116
  parse_list ['file.rb', ''], ['file2.rb', ''], ['file3.rb', 'class Foo; end']
117
- Registry.at('Foo').should_not be_nil
117
+ Registry.at('Foo').should_not be_nil
118
118
  checks.should == [:one, :two]
119
119
  end
120
-
120
+
121
121
  it "should not cancel parsing if it returns false" do
122
122
  checks = []
123
123
  after_list { checks << :one }
@@ -143,16 +143,16 @@ describe YARD::Parser::SourceParser do
143
143
  parse_list ['foo.rb', 'class Foo; end'], ['bar.rb', 'class Foo; end']
144
144
  Registry.at('Foo').should_not be_nil
145
145
  end
146
-
146
+
147
147
  it "should support multiple callbacks" do
148
148
  checks = []
149
149
  before_file { checks << :one }
150
150
  before_file { checks << :two }
151
151
  parse_list ['file.rb', ''], ['file2.rb', ''], ['file3.rb', 'class Foo; end']
152
- Registry.at('Foo').should_not be_nil
152
+ Registry.at('Foo').should_not be_nil
153
153
  checks.should == [:one, :two, :one, :two, :one, :two]
154
154
  end
155
-
155
+
156
156
  it "should cancel parsing if it returns false" do
157
157
  checks = []
158
158
  before_file { checks << :one }
@@ -162,7 +162,7 @@ describe YARD::Parser::SourceParser do
162
162
  Registry.at('Foo').should be_nil
163
163
  checks.should == [:one, :one, :one]
164
164
  end
165
-
165
+
166
166
  it "should not cancel on nil" do
167
167
  checks = []
168
168
  before_file { checks << :one }
@@ -173,7 +173,7 @@ describe YARD::Parser::SourceParser do
173
173
  checks.should == [:one, :two, :one, :two, :one, :two]
174
174
  end
175
175
  end
176
-
176
+
177
177
  describe '.after_parse_file' do
178
178
  before do
179
179
  Parser::SourceParser.before_parse_file_callbacks.clear
@@ -188,16 +188,16 @@ describe YARD::Parser::SourceParser do
188
188
  parse_list ['foo.rb', 'class Foo; end'], ['bar.rb', 'class Foo; end']
189
189
  Registry.at('Foo').should_not be_nil
190
190
  end
191
-
191
+
192
192
  it "should support multiple callbacks" do
193
193
  checks = []
194
194
  after_file { checks << :one }
195
195
  after_file { checks << :two }
196
196
  parse_list ['file.rb', ''], ['file2.rb', ''], ['file3.rb', 'class Foo; end']
197
- Registry.at('Foo').should_not be_nil
197
+ Registry.at('Foo').should_not be_nil
198
198
  checks.should == [:one, :two, :one, :two, :one, :two]
199
199
  end
200
-
200
+
201
201
  it "should not cancel parsing if it returns false" do
202
202
  checks = []
203
203
  after_file { checks << :one }
@@ -208,10 +208,10 @@ describe YARD::Parser::SourceParser do
208
208
  checks.should == [:one, :three, :one, :three, :one, :three]
209
209
  end
210
210
  end
211
-
211
+
212
212
  describe '.register_parser_type' do
213
213
  it_should_behave_like "parser type registration"
214
-
214
+
215
215
  it "should register a subclass of Parser::Base" do
216
216
  parser = mock(:parser)
217
217
  parser.should_receive(:parse)
@@ -219,14 +219,14 @@ describe YARD::Parser::SourceParser do
219
219
  Parser::SourceParser.register_parser_type(:my_parser, MyParser, 'myparser')
220
220
  Parser::SourceParser.parse_string('content', :my_parser)
221
221
  end
222
-
222
+
223
223
  it "should require class to be a subclass of Parser::Base" do
224
224
  lambda { Parser::SourceParser.register_parser_type(:my_parser, String) }.should raise_error(ArgumentError)
225
225
  lambda { Parser::SourceParser.register_parser_type(:my_parser, Parser::Base) }.should raise_error(ArgumentError)
226
226
  end
227
227
  end
228
-
229
- describe '.parser_type_for_extension' do
228
+
229
+ describe '.parser_type_for_extension' do
230
230
  it_should_behave_like "parser type registration"
231
231
 
232
232
  it "should find an extension in a registered array of extensions" do
@@ -236,26 +236,26 @@ describe YARD::Parser::SourceParser do
236
236
  Parser::SourceParser.parser_type_for_extension('d').should == :my_parser
237
237
  Parser::SourceParser.parser_type_for_extension('c').should_not == :my_parser
238
238
  end
239
-
239
+
240
240
  it "should find an extension in a Regexp" do
241
241
  Parser::SourceParser.register_parser_type(:my_parser, MyParser, /abc$/)
242
242
  Parser::SourceParser.parser_type_for_extension('dabc').should == :my_parser
243
243
  Parser::SourceParser.parser_type_for_extension('dabcd').should_not == :my_parser
244
244
  end
245
-
245
+
246
246
  it "should find an extension in a list of Regexps" do
247
247
  Parser::SourceParser.register_parser_type(:my_parser, MyParser, [/ab$/, /abc$/])
248
248
  Parser::SourceParser.parser_type_for_extension('dabc').should == :my_parser
249
249
  Parser::SourceParser.parser_type_for_extension('dabcd').should_not == :my_parser
250
250
  end
251
-
251
+
252
252
  it "should find an extension in a String" do
253
253
  Parser::SourceParser.register_parser_type(:my_parser, MyParser, "abc")
254
254
  Parser::SourceParser.parser_type_for_extension('abc').should == :my_parser
255
255
  Parser::SourceParser.parser_type_for_extension('abcd').should_not == :my_parser
256
256
  end
257
257
  end
258
-
258
+
259
259
  describe '#parse_string' do
260
260
  it "should parse basic Ruby code" do
261
261
  YARD.parse_string(<<-eof)
@@ -272,7 +272,7 @@ describe YARD::Parser::SourceParser do
272
272
  Registry.at("Hello::Hi#me").docstring.should == "Docstring\nDocstring2"
273
273
  Registry.at("Hello::Hi#me").docstring.line_range.should == (3..4)
274
274
  end
275
-
275
+
276
276
  it "should parse Ruby code with metaclasses" do
277
277
  YARD.parse_string(<<-eof)
278
278
  module Hello
@@ -288,18 +288,18 @@ describe YARD::Parser::SourceParser do
288
288
  Registry.at("Hello::Hi.me").should_not == nil
289
289
  Registry.at("Hello::Hi.me").docstring.should == "Docstring"
290
290
  end
291
-
291
+
292
292
  it "should only use prepended comments for an object" do
293
293
  YARD.parse_string(<<-eof)
294
294
  # Test
295
-
295
+
296
296
  # PASS
297
297
  module Hello
298
298
  end # FAIL
299
299
  eof
300
300
  Registry.at(:Hello).docstring.should == "PASS"
301
301
  end
302
-
302
+
303
303
  it "should not add comments appended to last line of block" do
304
304
  YARD.parse_string <<-eof
305
305
  module Hello2
@@ -307,7 +307,7 @@ describe YARD::Parser::SourceParser do
307
307
  eof
308
308
  Registry.at(:Hello2).docstring.should be_blank
309
309
  end
310
-
310
+
311
311
  it "should add comments appended to an object's first line" do
312
312
  YARD.parse_string <<-eof
313
313
  module Hello # PASS
@@ -324,7 +324,7 @@ describe YARD::Parser::SourceParser do
324
324
  Registry.at(:Hello2).docstring.should == "PASS"
325
325
  Registry.at('Hello2#x').docstring.should == "ANOTHER PASS"
326
326
  end
327
-
327
+
328
328
  it "should take preceeding comments only if they exist" do
329
329
  YARD.parse_string <<-eof
330
330
  # PASS
@@ -335,7 +335,7 @@ describe YARD::Parser::SourceParser do
335
335
 
336
336
  Registry.at(:Hello).docstring.should == "PASS"
337
337
  end
338
-
338
+
339
339
  it "should strip all hashes prefixed on comment line" do
340
340
  YARD.parse_string(<<-eof)
341
341
  ### PASS
@@ -346,7 +346,7 @@ describe YARD::Parser::SourceParser do
346
346
  eof
347
347
  Registry.at(:Hello).docstring.should == "PASS\nPASS\nPASS"
348
348
  end
349
-
349
+
350
350
  it "should handle =begin/=end style comments" do
351
351
  YARD.parse_string "=begin\nfoo\nbar\n=end\nclass Foo; end\n"
352
352
  Registry.at(:Foo).docstring.should == "foo\nbar"
@@ -357,39 +357,97 @@ describe YARD::Parser::SourceParser do
357
357
  YARD.parse_string "=begin\nfoo\n\nbar\n=end\nclass Foo; end\n"
358
358
  Registry.at(:Foo).docstring.should == "foo\n\nbar"
359
359
  end
360
-
360
+
361
361
  it "should know about docstrings starting with ##" do
362
362
  {'#' => false, '##' => true}.each do |hash, expected|
363
363
  YARD.parse_string "#{hash}\n# Foo bar\nclass Foo; end"
364
364
  Registry.at(:Foo).docstring.hash_flag.should == expected
365
365
  end
366
366
  end
367
-
367
+
368
368
  it "should remove shebang from initial file comments" do
369
369
  YARD.parse_string "#!/bin/ruby\n# this is a comment\nclass Foo; end"
370
370
  Registry.at(:Foo).docstring.should == "this is a comment"
371
371
  end
372
-
372
+
373
373
  it "should remove encoding line from initial file comments" do
374
374
  YARD.parse_string "# encoding: utf-8\n# this is a comment\nclass Foo; end"
375
375
  Registry.at(:Foo).docstring.should == "this is a comment"
376
376
  end
377
-
377
+
378
378
  it "should add macros on any object" do
379
379
  YARD.parse_string <<-eof
380
- # @macro [new] foo
381
- # This is a macro
382
- # @return [String] the string
380
+ # @!macro [new] foo
381
+ # This is a macro
382
+ # @return [String] the string
383
383
  class Foo
384
- # @macro foo
384
+ # @!macro foo
385
385
  def foo; end
386
386
  end
387
387
  eof
388
-
388
+
389
389
  macro = CodeObjects::MacroObject.find('foo')
390
390
  macro.macro_data.should == "This is a macro\n@return [String] the string"
391
- Registry.at('Foo').docstring.all.should == macro.macro_data
392
- Registry.at('Foo#foo').docstring.all.should == macro.macro_data
391
+ Registry.at('Foo').docstring.to_raw.should == macro.macro_data
392
+ Registry.at('Foo#foo').docstring.to_raw.should == macro.macro_data
393
+ end
394
+
395
+ it "should allow directives parsed on lone comments" do
396
+ YARD.parse_string(<<-eof)
397
+ class Foo
398
+ # @!method foo(a = "hello")
399
+ # @!scope class
400
+ # @!visibility private
401
+ # @param [String] a the name of the foo
402
+ # @return [Symbol] the symbolized foo
403
+
404
+ # @!method bar(value)
405
+ end
406
+ eof
407
+ foo = Registry.at('Foo.foo')
408
+ bar = Registry.at('Foo#bar')
409
+ foo.should_not be_nil
410
+ foo.visibility.should == :private
411
+ foo.tag(:param).name.should == 'a'
412
+ foo.tag(:return).types.should == ['Symbol']
413
+ bar.should_not be_nil
414
+ bar.signature.should == 'def bar(value)'
415
+ end
416
+
417
+ it "should parse lone comments at end of blocks" do
418
+ YARD.parse_string(<<-eof)
419
+ class Foo
420
+ none
421
+
422
+ # @!method foo(a = "hello")
423
+ end
424
+ eof
425
+ foo = Registry.at('Foo#foo')
426
+ foo.should_not be_nil
427
+ foo.signature.should == 'def foo(a = "hello")'
428
+ end
429
+
430
+ it "should handle lone comment with no code" do
431
+ YARD.parse_string '# @!method foo(a = "hello")'
432
+ foo = Registry.at('#foo')
433
+ foo.should_not be_nil
434
+ foo.signature.should == 'def foo(a = "hello")'
435
+ end
436
+
437
+ it "should handle non-ASCII encoding in heredoc" do
438
+ YARD.parse_string <<-eof
439
+ # encoding: utf-8
440
+
441
+ heredoc <<-ending
442
+ foo\u{ffe2} bar.
443
+ ending
444
+
445
+ # Hello \u{ffe2} world
446
+ class Foo < Bar
447
+ attr_accessor :foo
448
+ end
449
+ eof
450
+ Registry.at('Foo').superclass.should == P('Bar')
393
451
  end
394
452
  end
395
453
 
@@ -400,19 +458,19 @@ describe YARD::Parser::SourceParser do
400
458
  Registry.at("Hello::Hi#me").should_not == nil
401
459
  Registry.at("Hello::Hi#me").docstring.should == "Docstring"
402
460
  end
403
-
461
+
404
462
  it "should parse a set of file globs" do
405
463
  Dir.should_receive(:[]).with('lib/**/*.rb').and_return([])
406
464
  YARD.parse('lib/**/*.rb')
407
465
  end
408
-
466
+
409
467
  it "should parse a set of absolute paths" do
410
468
  Dir.should_not_receive(:[]).and_return([])
411
469
  File.should_receive(:file?).with('/path/to/file').and_return(true)
412
470
  File.should_receive(:read_binary).with('/path/to/file').and_return("")
413
471
  YARD.parse('/path/to/file')
414
472
  end
415
-
473
+
416
474
  it "should clean paths before parsing" do
417
475
  File.should_receive(:open).and_return("")
418
476
  parser = Parser::SourceParser.new(:ruby, true)
@@ -430,7 +488,7 @@ describe YARD::Parser::SourceParser do
430
488
  File.should_receive(:read_binary).with('b.rb').and_return("")
431
489
  YARD.parse ['/path/to/file', '*.rb']
432
490
  end
433
-
491
+
434
492
  it "should convert directories into globs" do
435
493
  Dir.should_receive(:[]).with('foo/**/*.{rb,c}').and_return(['foo/a.rb', 'foo/bar/b.rb'])
436
494
  File.should_receive(:directory?).with('foo').and_return(true)
@@ -440,7 +498,7 @@ describe YARD::Parser::SourceParser do
440
498
  File.should_receive(:read_binary).with('foo/bar/b.rb').and_return("")
441
499
  YARD.parse ['foo']
442
500
  end
443
-
501
+
444
502
  it "should use Registry.checksums cache if file is cached" do
445
503
  data = 'DATA'
446
504
  hash = Registry.checksum_for(data)
@@ -451,14 +509,14 @@ describe YARD::Parser::SourceParser do
451
509
  File.should_receive(:read_binary).with('foo/bar').and_return(data)
452
510
  YARD.parse('foo/bar')
453
511
  end
454
-
512
+
455
513
  it "should support excluded paths" do
456
514
  File.should_receive(:file?).with('foo/bar').and_return(true)
457
515
  File.should_receive(:file?).with('foo/baz').and_return(true)
458
516
  File.should_not_receive(:read_binary)
459
517
  YARD.parse(["foo/bar", "foo/baz"], ["foo", /baz$/])
460
518
  end
461
-
519
+
462
520
  it "should convert file contents to proper encoding if coding line is present" do
463
521
  valid = []
464
522
  valid << "# encoding: sjis"
@@ -528,13 +586,13 @@ describe YARD::Parser::SourceParser do
528
586
  end
529
587
  end if HAVE_RIPPER && RUBY19
530
588
  end
531
-
589
+
532
590
  describe '#parse_in_order' do
533
591
  def in_order_parse(*files)
534
592
  paths = files.map {|f| File.join(File.dirname(__FILE__), 'examples', f.to_s + '.rb.txt') }
535
593
  YARD::Parser::SourceParser.parse(paths, [], Logger::DEBUG)
536
594
  end
537
-
595
+
538
596
  it "should attempt to parse files in order" do
539
597
  msgs = []
540
598
  log.should_receive(:debug) {|m| msgs << m }.at_least(:once)
@@ -543,8 +601,8 @@ describe YARD::Parser::SourceParser do
543
601
  msgs[2].should =~ /Missing object MyModule/
544
602
  msgs[3].should =~ /Processing .+parse_in_order_002.+/
545
603
  msgs[4].should =~ /Re-processing .+parse_in_order_001.+/
546
- end if CONTINUATIONS_SUPPORTED
547
-
604
+ end
605
+
548
606
  it "should attempt to order files by length (process toplevel files first)" do
549
607
  %w(a a/b a/b/c).each do |file|
550
608
  File.should_receive(:file?).with(file).and_return(true)
@@ -553,21 +611,23 @@ describe YARD::Parser::SourceParser do
553
611
  YARD.parse %w(a/b/c a/b a)
554
612
  end
555
613
  end
556
-
614
+
557
615
  describe '#parse_statements' do
558
616
  it "should display a warning for invalid parser type" do
559
617
  log.should_receive(:warn).with(/unrecognized file/)
618
+ log.should_receive(:backtrace)
560
619
  YARD::Parser::SourceParser.parse_string("int main() { }", :d)
561
620
  end
562
-
621
+
563
622
  if HAVE_RIPPER
564
623
  it "should display a warning for a syntax error (with new parser)" do
565
624
  err_msg = "Syntax error in `(stdin)`:(1,3): syntax error, unexpected $undefined, expecting $end"
566
625
  log.should_receive(:warn).with(err_msg)
626
+ log.should_receive(:backtrace)
567
627
  YARD::Parser::SourceParser.parse_string("$$$", :ruby)
568
628
  end
569
629
  end
570
-
630
+
571
631
  it "should handle groups" do
572
632
  Registry.clear
573
633
  YARD.parse_string <<-eof
@@ -575,16 +635,16 @@ describe YARD::Parser::SourceParser do
575
635
  # @group Group Name
576
636
  def foo; end
577
637
  def foo2; end
578
-
638
+
579
639
  # @endgroup
580
-
640
+
581
641
  def bar; end
582
-
642
+
583
643
  # @group Group 2
584
644
  def baz; end
585
645
  end
586
646
  eof
587
-
647
+
588
648
  Registry.at('A').groups.should == ['Group Name', 'Group 2']
589
649
  Registry.at('A#bar').group.should be_nil
590
650
  Registry.at('A#foo').group.should == "Group Name"