yard 0.9.5 → 0.9.6

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 (575) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +0 -0
  3. data/CHANGELOG.md +20 -0
  4. data/LEGAL +0 -0
  5. data/LICENSE +0 -0
  6. data/README.md +70 -35
  7. data/Rakefile +10 -39
  8. data/benchmarks/builtins_vs_eval.rb +9 -8
  9. data/benchmarks/concat_vs_join.rb +1 -0
  10. data/benchmarks/erb_vs_erubis.rb +3 -2
  11. data/benchmarks/format_args.rb +1 -0
  12. data/benchmarks/generation.rb +2 -1
  13. data/benchmarks/marshal_vs_dbm.rb +2 -1
  14. data/benchmarks/parsing.rb +1 -1
  15. data/benchmarks/pathname_vs_string.rb +1 -0
  16. data/benchmarks/rdoc_vs_yardoc.rb +2 -1
  17. data/benchmarks/registry_store_types.rb +1 -0
  18. data/benchmarks/ri_vs_yri.rb +1 -0
  19. data/benchmarks/ripper_parser.rb +2 -1
  20. data/benchmarks/splat_vs_flatten.rb +4 -3
  21. data/benchmarks/template_erb.rb +2 -1
  22. data/benchmarks/template_format.rb +1 -0
  23. data/benchmarks/template_profile.rb +4 -3
  24. data/benchmarks/yri_cache.rb +2 -1
  25. data/bin/yard +2 -1
  26. data/bin/yardoc +2 -1
  27. data/bin/yri +2 -1
  28. data/docs/CodeObjects.md +0 -0
  29. data/docs/GettingStarted.md +0 -0
  30. data/docs/Handlers.md +0 -0
  31. data/docs/Overview.md +0 -0
  32. data/docs/Parser.md +0 -0
  33. data/docs/Tags.md +0 -0
  34. data/docs/TagsArch.md +0 -0
  35. data/docs/Templates.md +0 -0
  36. data/docs/WhatsNew.md +0 -0
  37. data/docs/images/code-objects-class-diagram.png +0 -0
  38. data/docs/images/tags-class-diagram.png +0 -0
  39. data/docs/templates/default/fulldoc/html/full_list_tag.erb +0 -0
  40. data/docs/templates/default/fulldoc/html/setup.rb +1 -1
  41. data/docs/templates/default/layout/html/setup.rb +1 -0
  42. data/docs/templates/default/layout/html/tag_list.erb +0 -0
  43. data/docs/templates/default/yard_tags/html/list.erb +0 -0
  44. data/docs/templates/default/yard_tags/html/setup.rb +18 -19
  45. data/docs/templates/plugin.rb +18 -13
  46. data/lib/rubygems_plugin.rb +1 -0
  47. data/lib/yard.rb +5 -6
  48. data/lib/yard/autoload.rb +4 -0
  49. data/lib/yard/cli/command.rb +3 -2
  50. data/lib/yard/cli/command_parser.rb +4 -3
  51. data/lib/yard/cli/config.rb +5 -4
  52. data/lib/yard/cli/diff.rb +39 -39
  53. data/lib/yard/cli/display.rb +2 -1
  54. data/lib/yard/cli/gems.rb +6 -5
  55. data/lib/yard/cli/graph.rb +4 -5
  56. data/lib/yard/cli/help.rb +4 -2
  57. data/lib/yard/cli/i18n.rb +2 -1
  58. data/lib/yard/cli/list.rb +2 -1
  59. data/lib/yard/cli/markup_types.rb +4 -5
  60. data/lib/yard/cli/server.rb +27 -24
  61. data/lib/yard/cli/stats.rb +20 -16
  62. data/lib/yard/cli/yardoc.rb +22 -19
  63. data/lib/yard/cli/yardopts_command.rb +3 -2
  64. data/lib/yard/cli/yri.rb +26 -25
  65. data/lib/yard/code_objects/base.rb +41 -37
  66. data/lib/yard/code_objects/class_object.rb +3 -2
  67. data/lib/yard/code_objects/class_variable_object.rb +2 -1
  68. data/lib/yard/code_objects/constant_object.rb +2 -1
  69. data/lib/yard/code_objects/extended_method_object.rb +2 -1
  70. data/lib/yard/code_objects/extra_file_object.rb +1 -0
  71. data/lib/yard/code_objects/macro_object.rb +10 -10
  72. data/lib/yard/code_objects/method_object.rb +15 -13
  73. data/lib/yard/code_objects/module_object.rb +1 -0
  74. data/lib/yard/code_objects/namespace_mapper.rb +1 -0
  75. data/lib/yard/code_objects/namespace_object.rb +2 -5
  76. data/lib/yard/code_objects/proxy.rb +35 -53
  77. data/lib/yard/code_objects/root_object.rb +3 -1
  78. data/lib/yard/config.rb +8 -9
  79. data/lib/yard/core_ext/array.rb +1 -0
  80. data/lib/yard/core_ext/file.rb +4 -3
  81. data/lib/yard/core_ext/hash.rb +3 -2
  82. data/lib/yard/core_ext/insertion.rb +7 -4
  83. data/lib/yard/core_ext/module.rb +2 -1
  84. data/lib/yard/core_ext/string.rb +5 -4
  85. data/lib/yard/core_ext/symbol_hash.rb +8 -6
  86. data/lib/yard/docstring.rb +26 -15
  87. data/lib/yard/docstring_parser.rb +61 -61
  88. data/lib/yard/gem_index.rb +17 -0
  89. data/lib/yard/globals.rb +6 -2
  90. data/lib/yard/handlers/base.rb +22 -23
  91. data/lib/yard/handlers/c/alias_handler.rb +3 -2
  92. data/lib/yard/handlers/c/attribute_handler.rb +2 -2
  93. data/lib/yard/handlers/c/base.rb +13 -13
  94. data/lib/yard/handlers/c/class_handler.rb +1 -0
  95. data/lib/yard/handlers/c/constant_handler.rb +3 -2
  96. data/lib/yard/handlers/c/handler_methods.rb +24 -25
  97. data/lib/yard/handlers/c/init_handler.rb +4 -2
  98. data/lib/yard/handlers/c/method_handler.rb +7 -6
  99. data/lib/yard/handlers/c/mixin_handler.rb +3 -1
  100. data/lib/yard/handlers/c/module_handler.rb +1 -0
  101. data/lib/yard/handlers/c/override_comment_handler.rb +2 -1
  102. data/lib/yard/handlers/c/path_handler.rb +1 -0
  103. data/lib/yard/handlers/c/struct_handler.rb +1 -0
  104. data/lib/yard/handlers/c/symbol_handler.rb +2 -1
  105. data/lib/yard/handlers/processor.rb +14 -15
  106. data/lib/yard/handlers/ruby/alias_handler.rb +4 -2
  107. data/lib/yard/handlers/ruby/attribute_handler.rb +11 -6
  108. data/lib/yard/handlers/ruby/base.rb +5 -4
  109. data/lib/yard/handlers/ruby/class_condition_handler.rb +4 -3
  110. data/lib/yard/handlers/ruby/class_handler.rb +7 -9
  111. data/lib/yard/handlers/ruby/class_variable_handler.rb +2 -1
  112. data/lib/yard/handlers/ruby/comment_handler.rb +1 -0
  113. data/lib/yard/handlers/ruby/constant_handler.rb +9 -5
  114. data/lib/yard/handlers/ruby/decorator_handler_methods.rb +15 -28
  115. data/lib/yard/handlers/ruby/dsl_handler.rb +1 -0
  116. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +7 -6
  117. data/lib/yard/handlers/ruby/exception_handler.rb +1 -0
  118. data/lib/yard/handlers/ruby/extend_handler.rb +1 -0
  119. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +6 -4
  120. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +12 -7
  121. data/lib/yard/handlers/ruby/legacy/base.rb +21 -26
  122. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +7 -7
  123. data/lib/yard/handlers/ruby/legacy/class_handler.rb +7 -5
  124. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +2 -1
  125. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +1 -0
  126. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +2 -1
  127. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +1 -0
  128. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +2 -1
  129. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +2 -1
  130. data/lib/yard/handlers/ruby/legacy/method_handler.rb +11 -6
  131. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +5 -5
  132. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +2 -1
  133. data/lib/yard/handlers/ruby/legacy/module_handler.rb +2 -1
  134. data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +2 -1
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +2 -1
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +3 -2
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +1 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +2 -1
  139. data/lib/yard/handlers/ruby/method_handler.rb +9 -11
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +2 -1
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +2 -1
  142. data/lib/yard/handlers/ruby/module_handler.rb +2 -1
  143. data/lib/yard/handlers/ruby/private_class_method_handler.rb +1 -0
  144. data/lib/yard/handlers/ruby/private_constant_handler.rb +2 -2
  145. data/lib/yard/handlers/ruby/public_class_method_handler.rb +1 -0
  146. data/lib/yard/handlers/ruby/struct_handler_methods.rb +5 -4
  147. data/lib/yard/handlers/ruby/visibility_handler.rb +1 -0
  148. data/lib/yard/handlers/ruby/yield_handler.rb +1 -0
  149. data/lib/yard/i18n/locale.rb +1 -0
  150. data/lib/yard/i18n/message.rb +5 -4
  151. data/lib/yard/i18n/messages.rb +2 -1
  152. data/lib/yard/i18n/po_parser.rb +5 -4
  153. data/lib/yard/i18n/pot_generator.rb +8 -8
  154. data/lib/yard/i18n/text.rb +9 -9
  155. data/lib/yard/logging.rb +9 -6
  156. data/lib/yard/options.rb +8 -7
  157. data/lib/yard/parser/base.rb +3 -2
  158. data/lib/yard/parser/c/c_parser.rb +22 -21
  159. data/lib/yard/parser/c/comment_parser.rb +9 -6
  160. data/lib/yard/parser/c/statement.rb +1 -0
  161. data/lib/yard/parser/ruby/ast_node.rb +20 -18
  162. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +99 -122
  163. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +3 -2
  164. data/lib/yard/parser/ruby/legacy/statement.rb +4 -3
  165. data/lib/yard/parser/ruby/legacy/statement_list.rb +52 -42
  166. data/lib/yard/parser/ruby/legacy/token_list.rb +16 -13
  167. data/lib/yard/parser/ruby/ruby_parser.rb +87 -63
  168. data/lib/yard/parser/ruby/token_resolver.rb +156 -0
  169. data/lib/yard/parser/source_parser.rb +28 -20
  170. data/lib/yard/rake/yardoc_task.rb +3 -3
  171. data/lib/yard/registry.rb +14 -16
  172. data/lib/yard/registry_resolver.rb +36 -20
  173. data/lib/yard/registry_store.rb +19 -15
  174. data/lib/yard/rubygems/backports.rb +2 -0
  175. data/lib/yard/rubygems/backports/LICENSE.txt +0 -0
  176. data/lib/yard/rubygems/backports/MIT.txt +0 -0
  177. data/lib/yard/rubygems/backports/gem.rb +1 -0
  178. data/lib/yard/rubygems/backports/source_index.rb +25 -30
  179. data/lib/yard/rubygems/doc_manager.rb +10 -8
  180. data/lib/yard/rubygems/hook.rb +11 -18
  181. data/lib/yard/rubygems/specification.rb +1 -0
  182. data/lib/yard/serializers/base.rb +5 -2
  183. data/lib/yard/serializers/file_system_serializer.rb +7 -6
  184. data/lib/yard/serializers/process_serializer.rb +2 -2
  185. data/lib/yard/serializers/stdout_serializer.rb +8 -6
  186. data/lib/yard/serializers/yardoc_serializer.rb +31 -26
  187. data/lib/yard/server.rb +2 -1
  188. data/lib/yard/server/adapter.rb +1 -1
  189. data/lib/yard/server/commands/base.rb +15 -2
  190. data/lib/yard/server/commands/display_file_command.rb +2 -2
  191. data/lib/yard/server/commands/display_object_command.rb +6 -3
  192. data/lib/yard/server/commands/frames_command.rb +1 -0
  193. data/lib/yard/server/commands/library_command.rb +50 -14
  194. data/lib/yard/server/commands/library_index_command.rb +5 -4
  195. data/lib/yard/server/commands/list_command.rb +1 -0
  196. data/lib/yard/server/commands/root_request_command.rb +1 -0
  197. data/lib/yard/server/commands/search_command.rb +17 -16
  198. data/lib/yard/server/commands/static_file_command.rb +2 -1
  199. data/lib/yard/server/commands/static_file_helpers.rb +23 -14
  200. data/lib/yard/server/doc_server_helper.rb +15 -1
  201. data/lib/yard/server/doc_server_serializer.rb +3 -5
  202. data/lib/yard/server/library_version.rb +44 -22
  203. data/lib/yard/server/rack_adapter.rb +2 -1
  204. data/lib/yard/server/router.rb +15 -14
  205. data/lib/yard/server/static_caching.rb +1 -0
  206. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +0 -0
  207. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  208. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +0 -0
  209. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +0 -0
  210. data/lib/yard/server/templates/default/layout/html/script_setup.erb +0 -0
  211. data/lib/yard/server/templates/default/layout/html/setup.rb +2 -1
  212. data/lib/yard/server/templates/default/method_details/html/permalink.erb +0 -0
  213. data/lib/yard/server/templates/default/method_details/html/setup.rb +1 -0
  214. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +2 -2
  215. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +0 -0
  216. data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +1 -1
  217. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +2 -1
  218. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +0 -0
  219. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +4 -4
  220. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +2 -1
  221. data/lib/yard/server/templates/doc_server/search/html/search.erb +0 -0
  222. data/lib/yard/server/templates/doc_server/search/html/setup.rb +2 -1
  223. data/lib/yard/server/webrick_adapter.rb +4 -2
  224. data/lib/yard/tags/default_factory.rb +19 -13
  225. data/lib/yard/tags/default_tag.rb +2 -1
  226. data/lib/yard/tags/directives.rb +17 -19
  227. data/lib/yard/tags/library.rb +9 -6
  228. data/lib/yard/tags/option_tag.rb +1 -0
  229. data/lib/yard/tags/overload_tag.rb +6 -4
  230. data/lib/yard/tags/ref_tag.rb +1 -0
  231. data/lib/yard/tags/ref_tag_list.rb +2 -1
  232. data/lib/yard/tags/tag.rb +16 -2
  233. data/lib/yard/tags/tag_format_error.rb +3 -2
  234. data/lib/yard/tags/types_explainer.rb +160 -0
  235. data/lib/yard/templates/engine.rb +3 -2
  236. data/lib/yard/templates/erb_cache.rb +3 -2
  237. data/lib/yard/templates/helpers/base_helper.rb +9 -6
  238. data/lib/yard/templates/helpers/filter_helper.rb +1 -0
  239. data/lib/yard/templates/helpers/html_helper.rb +65 -37
  240. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +25 -7
  241. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +2 -1
  242. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +10 -7
  243. data/lib/yard/templates/helpers/markup_helper.rb +12 -13
  244. data/lib/yard/templates/helpers/method_helper.rb +8 -7
  245. data/lib/yard/templates/helpers/module_helper.rb +1 -0
  246. data/lib/yard/templates/helpers/text_helper.rb +16 -11
  247. data/lib/yard/templates/helpers/uml_helper.rb +2 -1
  248. data/lib/yard/templates/section.rb +3 -4
  249. data/lib/yard/templates/template.rb +18 -11
  250. data/lib/yard/templates/template_options.rb +1 -0
  251. data/lib/yard/verifier.rb +2 -0
  252. data/lib/yard/version.rb +2 -1
  253. data/spec/cli/command_parser_spec.rb +7 -7
  254. data/spec/cli/command_spec.rb +2 -2
  255. data/spec/cli/config_spec.rb +3 -4
  256. data/spec/cli/diff_spec.rb +7 -9
  257. data/spec/cli/display_spec.rb +2 -2
  258. data/spec/cli/gems_spec.rb +11 -11
  259. data/spec/cli/graph_spec.rb +4 -3
  260. data/spec/cli/help_spec.rb +3 -3
  261. data/spec/cli/i18n_spec.rb +3 -3
  262. data/spec/cli/list_spec.rb +2 -2
  263. data/spec/cli/markup_types_spec.rb +2 -2
  264. data/spec/cli/server_spec.rb +21 -18
  265. data/spec/cli/stats_spec.rb +23 -22
  266. data/spec/cli/yardoc_spec.rb +49 -47
  267. data/spec/cli/yri_spec.rb +6 -6
  268. data/spec/code_objects/base_spec.rb +6 -4
  269. data/spec/code_objects/class_object_spec.rb +10 -9
  270. data/spec/code_objects/code_object_list_spec.rb +3 -2
  271. data/spec/code_objects/constants_spec.rb +17 -6
  272. data/spec/code_objects/extra_file_object_spec.rb +6 -5
  273. data/spec/code_objects/macro_object_spec.rb +5 -3
  274. data/spec/code_objects/method_object_spec.rb +6 -5
  275. data/spec/code_objects/module_object_spec.rb +3 -2
  276. data/spec/code_objects/namespace_object_spec.rb +10 -9
  277. data/spec/code_objects/proxy_spec.rb +9 -8
  278. data/spec/code_objects/spec_helper.rb +2 -2
  279. data/spec/config_spec.rb +9 -14
  280. data/spec/core_ext/array_spec.rb +2 -3
  281. data/spec/core_ext/file_spec.rb +3 -3
  282. data/spec/core_ext/hash_spec.rb +5 -5
  283. data/spec/core_ext/insertion_spec.rb +2 -2
  284. data/spec/core_ext/module_spec.rb +3 -3
  285. data/spec/core_ext/string_spec.rb +5 -5
  286. data/spec/core_ext/symbol_hash_spec.rb +8 -8
  287. data/spec/docstring_parser_spec.rb +6 -7
  288. data/spec/docstring_spec.rb +30 -3
  289. data/spec/examples.txt +1848 -0
  290. data/spec/handlers/alias_handler_spec.rb +2 -1
  291. data/spec/handlers/attribute_handler_spec.rb +7 -5
  292. data/spec/handlers/base_spec.rb +9 -8
  293. data/spec/handlers/c/alias_handler_spec.rb +2 -1
  294. data/spec/handlers/c/attribute_handler_spec.rb +2 -1
  295. data/spec/handlers/c/class_handler_spec.rb +2 -1
  296. data/spec/handlers/c/constant_handler_spec.rb +5 -4
  297. data/spec/handlers/c/init_handler_spec.rb +2 -1
  298. data/spec/handlers/c/method_handler_spec.rb +2 -1
  299. data/spec/handlers/c/mixin_handler_spec.rb +2 -1
  300. data/spec/handlers/c/module_handler_spec.rb +2 -1
  301. data/spec/handlers/c/override_comment_handler_spec.rb +2 -1
  302. data/spec/handlers/c/path_handler_spec.rb +2 -1
  303. data/spec/handlers/c/spec_helper.rb +1 -1
  304. data/spec/handlers/c/struct_handler_spec.rb +3 -2
  305. data/spec/handlers/class_condition_handler_spec.rb +3 -2
  306. data/spec/handlers/class_handler_spec.rb +3 -2
  307. data/spec/handlers/class_method_handler_shared_examples.rb +9 -8
  308. data/spec/handlers/class_variable_handler_spec.rb +3 -2
  309. data/spec/handlers/constant_handler_spec.rb +28 -3
  310. data/spec/handlers/decorator_handler_methods_spec.rb +47 -59
  311. data/spec/handlers/dsl_handler_spec.rb +3 -2
  312. data/spec/handlers/examples/alias_handler_001.rb.txt +0 -0
  313. data/spec/handlers/examples/attribute_handler_001.rb.txt +0 -0
  314. data/spec/handlers/examples/class_condition_handler_001.rb.txt +0 -0
  315. data/spec/handlers/examples/class_handler_001.rb.txt +0 -0
  316. data/spec/handlers/examples/class_variable_handler_001.rb.txt +0 -0
  317. data/spec/handlers/examples/constant_handler_001.rb.txt +0 -0
  318. data/spec/handlers/examples/dsl_handler_001.rb.txt +0 -0
  319. data/spec/handlers/examples/exception_handler_001.rb.txt +0 -0
  320. data/spec/handlers/examples/extend_handler_001.rb.txt +0 -0
  321. data/spec/handlers/examples/method_condition_handler_001.rb.txt +0 -0
  322. data/spec/handlers/examples/method_handler_001.rb.txt +2 -0
  323. data/spec/handlers/examples/mixin_handler_001.rb.txt +0 -0
  324. data/spec/handlers/examples/module_handler_001.rb.txt +0 -0
  325. data/spec/handlers/examples/private_constant_handler_001.rb.txt +0 -0
  326. data/spec/handlers/examples/process_handler_001.rb.txt +0 -0
  327. data/spec/handlers/examples/visibility_handler_001.rb.txt +0 -0
  328. data/spec/handlers/examples/yield_handler_001.rb.txt +0 -0
  329. data/spec/handlers/exception_handler_spec.rb +3 -2
  330. data/spec/handlers/extend_handler_spec.rb +2 -1
  331. data/spec/handlers/legacy_base_spec.rb +5 -5
  332. data/spec/handlers/method_condition_handler_spec.rb +3 -2
  333. data/spec/handlers/method_handler_spec.rb +7 -1
  334. data/spec/handlers/mixin_handler_spec.rb +3 -2
  335. data/spec/handlers/module_function_handler_spec.rb +2 -1
  336. data/spec/handlers/module_handler_spec.rb +3 -2
  337. data/spec/handlers/private_class_method_handler_spec.rb +2 -1
  338. data/spec/handlers/private_constant_handler_spec.rb +2 -1
  339. data/spec/handlers/processor_spec.rb +2 -1
  340. data/spec/handlers/public_class_method_handler_spec.rb +2 -1
  341. data/spec/handlers/ruby/base_spec.rb +6 -5
  342. data/spec/handlers/ruby/legacy/base_spec.rb +4 -4
  343. data/spec/handlers/spec_helper.rb +3 -3
  344. data/spec/handlers/visibility_handler_spec.rb +3 -2
  345. data/spec/handlers/yield_handler_spec.rb +3 -2
  346. data/spec/i18n/locale_spec.rb +3 -3
  347. data/spec/i18n/message_spec.rb +2 -2
  348. data/spec/i18n/messages_spec.rb +3 -3
  349. data/spec/i18n/pot_generator_spec.rb +34 -34
  350. data/spec/i18n/text_spec.rb +16 -12
  351. data/spec/logging_spec.rb +2 -2
  352. data/spec/options_spec.rb +9 -9
  353. data/spec/parser/base_spec.rb +2 -2
  354. data/spec/parser/c_parser_spec.rb +5 -4
  355. data/spec/parser/examples/array.c.txt +0 -0
  356. data/spec/parser/examples/example1.rb.txt +0 -0
  357. data/spec/parser/examples/extrafile.c.txt +0 -0
  358. data/spec/parser/examples/multifile.c.txt +0 -0
  359. data/spec/parser/examples/override.c.txt +0 -0
  360. data/spec/parser/examples/parse_in_order_001.rb.txt +0 -0
  361. data/spec/parser/examples/parse_in_order_002.rb.txt +0 -0
  362. data/spec/parser/examples/tag_handler_001.rb.txt +0 -0
  363. data/spec/parser/ruby/ast_node_spec.rb +7 -7
  364. data/spec/parser/ruby/legacy/statement_list_spec.rb +7 -7
  365. data/spec/parser/ruby/legacy/token_list_spec.rb +4 -4
  366. data/spec/parser/ruby/ruby_parser_spec.rb +42 -20
  367. data/spec/parser/ruby/token_resolver_spec.rb +165 -0
  368. data/spec/parser/source_parser_spec.rb +18 -18
  369. data/spec/parser/tag_parsing_spec.rb +2 -2
  370. data/spec/rake/yardoc_task_spec.rb +4 -4
  371. data/spec/registry_spec.rb +62 -56
  372. data/spec/registry_store_spec.rb +7 -7
  373. data/spec/rubygems/doc_manager_spec.rb +2 -2
  374. data/spec/serializers/data/serialized_yardoc/checksums +0 -0
  375. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  376. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  377. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  378. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  379. data/spec/serializers/data/serialized_yardoc/proxy_types +0 -0
  380. data/spec/serializers/file_system_serializer_spec.rb +8 -7
  381. data/spec/serializers/spec_helper.rb +2 -2
  382. data/spec/serializers/yardoc_serializer_spec.rb +5 -4
  383. data/spec/server/adapter_spec.rb +3 -2
  384. data/spec/server/commands/base_spec.rb +15 -11
  385. data/spec/server/commands/library_command_spec.rb +2 -2
  386. data/spec/server/doc_server_helper_spec.rb +4 -3
  387. data/spec/server/doc_server_serializer_spec.rb +3 -2
  388. data/spec/server/rack_adapter_spec.rb +3 -2
  389. data/spec/server/router_spec.rb +3 -2
  390. data/spec/server/spec_helper.rb +2 -2
  391. data/spec/server/static_caching_spec.rb +4 -3
  392. data/spec/server/webrick_servlet_spec.rb +5 -4
  393. data/spec/server_spec.rb +3 -3
  394. data/spec/spec_helper.rb +94 -21
  395. data/spec/tags/default_factory_spec.rb +10 -4
  396. data/spec/tags/default_tag_spec.rb +3 -3
  397. data/spec/tags/directives_spec.rb +12 -12
  398. data/spec/tags/library_spec.rb +16 -2
  399. data/spec/tags/overload_tag_spec.rb +4 -4
  400. data/spec/tags/ref_tag_list_spec.rb +3 -3
  401. data/spec/tags/types_explainer_spec.rb +200 -0
  402. data/spec/templates/class_spec.rb +2 -1
  403. data/spec/templates/constant_spec.rb +3 -2
  404. data/spec/templates/engine_spec.rb +4 -3
  405. data/spec/templates/examples/class001.html +0 -0
  406. data/spec/templates/examples/class001.txt +0 -0
  407. data/spec/templates/examples/class002.html +0 -0
  408. data/spec/templates/examples/constant001.txt +0 -0
  409. data/spec/templates/examples/constant002.txt +0 -0
  410. data/spec/templates/examples/constant003.txt +0 -0
  411. data/spec/templates/examples/method001.html +0 -0
  412. data/spec/templates/examples/method001.txt +0 -0
  413. data/spec/templates/examples/method002.html +0 -0
  414. data/spec/templates/examples/method002.txt +0 -0
  415. data/spec/templates/examples/method003.html +0 -0
  416. data/spec/templates/examples/method003.txt +0 -0
  417. data/spec/templates/examples/method004.html +0 -0
  418. data/spec/templates/examples/method004.txt +0 -0
  419. data/spec/templates/examples/method005.html +0 -0
  420. data/spec/templates/examples/method005.txt +0 -0
  421. data/spec/templates/examples/method006.html +108 -0
  422. data/spec/templates/examples/method006.txt +20 -0
  423. data/spec/templates/examples/module001.dot +0 -0
  424. data/spec/templates/examples/module001.html +0 -0
  425. data/spec/templates/examples/module001.txt +0 -0
  426. data/spec/templates/examples/module002.html +0 -0
  427. data/spec/templates/examples/module003.html +0 -0
  428. data/spec/templates/examples/module004.html +0 -0
  429. data/spec/templates/examples/tag001.txt +0 -0
  430. data/spec/templates/helpers/base_helper_spec.rb +5 -5
  431. data/spec/templates/helpers/html_helper_spec.rb +64 -60
  432. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +17 -6
  433. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +11 -13
  434. data/spec/templates/helpers/markup_helper_spec.rb +2 -2
  435. data/spec/templates/helpers/method_helper_spec.rb +3 -3
  436. data/spec/templates/helpers/module_helper_spec.rb +2 -2
  437. data/spec/templates/helpers/shared_signature_examples.rb +2 -1
  438. data/spec/templates/helpers/text_helper_spec.rb +7 -6
  439. data/spec/templates/method_spec.rb +18 -2
  440. data/spec/templates/module_spec.rb +4 -3
  441. data/spec/templates/onefile_spec.rb +8 -6
  442. data/spec/templates/section_spec.rb +3 -2
  443. data/spec/templates/spec_helper.rb +5 -2
  444. data/spec/templates/tag_spec.rb +3 -2
  445. data/spec/templates/template_spec.rb +15 -14
  446. data/spec/verifier_spec.rb +3 -3
  447. data/templates/default/class/dot/setup.rb +2 -1
  448. data/templates/default/class/dot/superklass.erb +0 -0
  449. data/templates/default/class/html/constructor_details.erb +0 -0
  450. data/templates/default/class/html/setup.rb +2 -1
  451. data/templates/default/class/html/subclasses.erb +0 -0
  452. data/templates/default/class/setup.rb +6 -6
  453. data/templates/default/class/text/setup.rb +2 -1
  454. data/templates/default/class/text/subclasses.erb +0 -0
  455. data/templates/default/constant/text/header.erb +0 -0
  456. data/templates/default/constant/text/setup.rb +1 -0
  457. data/templates/default/docstring/html/abstract.erb +0 -0
  458. data/templates/default/docstring/html/deprecated.erb +0 -0
  459. data/templates/default/docstring/html/index.erb +0 -0
  460. data/templates/default/docstring/html/note.erb +0 -0
  461. data/templates/default/docstring/html/private.erb +0 -0
  462. data/templates/default/docstring/html/returns_void.erb +0 -0
  463. data/templates/default/docstring/html/text.erb +0 -0
  464. data/templates/default/docstring/html/todo.erb +0 -0
  465. data/templates/default/docstring/setup.rb +4 -3
  466. data/templates/default/docstring/text/abstract.erb +0 -0
  467. data/templates/default/docstring/text/deprecated.erb +0 -0
  468. data/templates/default/docstring/text/index.erb +0 -0
  469. data/templates/default/docstring/text/note.erb +0 -0
  470. data/templates/default/docstring/text/private.erb +0 -0
  471. data/templates/default/docstring/text/returns_void.erb +0 -0
  472. data/templates/default/docstring/text/text.erb +0 -0
  473. data/templates/default/docstring/text/todo.erb +0 -0
  474. data/templates/default/fulldoc/html/css/common.css +0 -0
  475. data/templates/default/fulldoc/html/css/full_list.css +0 -0
  476. data/templates/default/fulldoc/html/css/style.css +31 -20
  477. data/templates/default/fulldoc/html/frames.erb +0 -0
  478. data/templates/default/fulldoc/html/full_list.erb +2 -2
  479. data/templates/default/fulldoc/html/full_list_class.erb +0 -0
  480. data/templates/default/fulldoc/html/full_list_file.erb +0 -0
  481. data/templates/default/fulldoc/html/full_list_method.erb +0 -0
  482. data/templates/default/fulldoc/html/js/app.js +3 -3
  483. data/templates/default/fulldoc/html/js/full_list.js +0 -0
  484. data/templates/default/fulldoc/html/js/jquery.js +0 -0
  485. data/templates/default/fulldoc/html/setup.rb +22 -23
  486. data/templates/default/layout/dot/header.erb +0 -0
  487. data/templates/default/layout/dot/setup.rb +1 -0
  488. data/templates/default/layout/html/breadcrumb.erb +0 -0
  489. data/templates/default/layout/html/files.erb +0 -0
  490. data/templates/default/layout/html/footer.erb +0 -0
  491. data/templates/default/layout/html/headers.erb +2 -2
  492. data/templates/default/layout/html/index.erb +0 -0
  493. data/templates/default/layout/html/layout.erb +1 -3
  494. data/templates/default/layout/html/listing.erb +0 -0
  495. data/templates/default/layout/html/objects.erb +0 -0
  496. data/templates/default/layout/html/script_setup.erb +0 -0
  497. data/templates/default/layout/html/search.erb +0 -0
  498. data/templates/default/layout/html/setup.rb +21 -19
  499. data/templates/default/method/html/header.erb +0 -0
  500. data/templates/default/method/setup.rb +2 -1
  501. data/templates/default/method/text/header.erb +0 -0
  502. data/templates/default/method_details/html/header.erb +0 -0
  503. data/templates/default/method_details/html/method_signature.erb +0 -0
  504. data/templates/default/method_details/html/source.erb +0 -0
  505. data/templates/default/method_details/setup.rb +1 -0
  506. data/templates/default/method_details/text/header.erb +0 -0
  507. data/templates/default/method_details/text/method_signature.erb +0 -0
  508. data/templates/default/method_details/text/setup.rb +3 -2
  509. data/templates/default/module/dot/child.erb +0 -0
  510. data/templates/default/module/dot/dependencies.erb +0 -0
  511. data/templates/default/module/dot/header.erb +0 -0
  512. data/templates/default/module/dot/info.erb +0 -0
  513. data/templates/default/module/dot/setup.rb +2 -1
  514. data/templates/default/module/html/attribute_details.erb +0 -0
  515. data/templates/default/module/html/attribute_summary.erb +0 -0
  516. data/templates/default/module/html/box_info.erb +0 -0
  517. data/templates/default/module/html/children.erb +0 -0
  518. data/templates/default/module/html/constant_summary.erb +0 -0
  519. data/templates/default/module/html/defines.erb +0 -0
  520. data/templates/default/module/html/header.erb +0 -0
  521. data/templates/default/module/html/inherited_attributes.erb +0 -0
  522. data/templates/default/module/html/inherited_constants.erb +0 -0
  523. data/templates/default/module/html/inherited_methods.erb +0 -0
  524. data/templates/default/module/html/item_summary.erb +0 -0
  525. data/templates/default/module/html/method_details_list.erb +0 -0
  526. data/templates/default/module/html/method_summary.erb +0 -0
  527. data/templates/default/module/html/methodmissing.erb +0 -0
  528. data/templates/default/module/html/pre_docstring.erb +0 -0
  529. data/templates/default/module/setup.rb +24 -26
  530. data/templates/default/module/text/children.erb +0 -0
  531. data/templates/default/module/text/class_meths_list.erb +0 -0
  532. data/templates/default/module/text/extends.erb +0 -0
  533. data/templates/default/module/text/header.erb +0 -0
  534. data/templates/default/module/text/includes.erb +0 -0
  535. data/templates/default/module/text/instance_meths_list.erb +0 -0
  536. data/templates/default/module/text/setup.rb +2 -1
  537. data/templates/default/onefile/html/files.erb +0 -0
  538. data/templates/default/onefile/html/headers.erb +0 -0
  539. data/templates/default/onefile/html/layout.erb +3 -3
  540. data/templates/default/onefile/html/readme.erb +0 -0
  541. data/templates/default/onefile/html/setup.rb +9 -8
  542. data/templates/default/root/dot/child.erb +0 -0
  543. data/templates/default/root/dot/setup.rb +3 -2
  544. data/templates/default/root/html/setup.rb +2 -1
  545. data/templates/default/tags/html/example.erb +0 -0
  546. data/templates/default/tags/html/index.erb +0 -0
  547. data/templates/default/tags/html/option.erb +1 -1
  548. data/templates/default/tags/html/overload.erb +0 -0
  549. data/templates/default/tags/html/see.erb +0 -0
  550. data/templates/default/tags/html/tag.erb +1 -1
  551. data/templates/default/tags/setup.rb +7 -5
  552. data/templates/default/tags/text/example.erb +0 -0
  553. data/templates/default/tags/text/index.erb +0 -0
  554. data/templates/default/tags/text/option.erb +1 -1
  555. data/templates/default/tags/text/overload.erb +0 -0
  556. data/templates/default/tags/text/see.erb +0 -0
  557. data/templates/default/tags/text/tag.erb +2 -2
  558. data/templates/guide/class/html/setup.rb +1 -0
  559. data/templates/guide/docstring/html/setup.rb +1 -0
  560. data/templates/guide/fulldoc/html/css/style.css +0 -0
  561. data/templates/guide/fulldoc/html/js/app.js +0 -0
  562. data/templates/guide/fulldoc/html/setup.rb +7 -6
  563. data/templates/guide/layout/html/layout.erb +0 -0
  564. data/templates/guide/layout/html/setup.rb +2 -5
  565. data/templates/guide/method/html/header.erb +0 -0
  566. data/templates/guide/method/html/setup.rb +5 -4
  567. data/templates/guide/module/html/header.erb +0 -0
  568. data/templates/guide/module/html/method_list.erb +0 -0
  569. data/templates/guide/module/html/setup.rb +2 -1
  570. data/templates/guide/onefile/html/files.erb +0 -0
  571. data/templates/guide/onefile/html/setup.rb +1 -0
  572. data/templates/guide/onefile/html/toc.erb +0 -0
  573. data/templates/guide/tags/html/setup.rb +1 -0
  574. data/yard.gemspec +2 -1
  575. metadata +10 -2
@@ -0,0 +1,165 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe YARD::Parser::Ruby::TokenResolver do
4
+ before(:all) do
5
+ YARD.parse_string <<-eof
6
+ module A
7
+ def nomatch; end
8
+
9
+ module B
10
+ class C
11
+ def initialize; end
12
+
13
+ # @return [A::B::C]
14
+ def self.foo; end
15
+
16
+ # @return [self]
17
+ def self.foo2; end
18
+
19
+ def bar; end
20
+
21
+ # @return [nil, D<String>]
22
+ def baz; end
23
+
24
+ # @return [nil]
25
+ # @return [D<String>]
26
+ def baz2; end
27
+
28
+ # @overload qux(a)
29
+ # @return [nil]
30
+ # @overload qux(b)
31
+ # @return [D<String>]
32
+ def qux; end
33
+ end
34
+
35
+ class SubC < C
36
+ end
37
+ end
38
+ end
39
+
40
+ module D
41
+ def baz; end
42
+ end
43
+
44
+ class Q
45
+ def method; end
46
+
47
+ # @return [Q]
48
+ def self.q; end
49
+ end
50
+ eof
51
+ end
52
+
53
+ def tokens_match
54
+ expect(@resolved.map {|t| t.first.last }.join).to eq @src
55
+ end
56
+
57
+ def objs_match(*objects)
58
+ other_objs = @resolved.reject {|_, o| !o }.map {|_, o| o.path }
59
+ expect(other_objs).to eq objects.flatten
60
+ tokens_match
61
+ end
62
+
63
+ def tokenize(src, object = nil)
64
+ @src = src
65
+ @resolver = YARD::Parser::Ruby::TokenResolver.new(src, object)
66
+ @resolved = @resolver.map {|t, o| [t[0, 2], o] }
67
+ end
68
+
69
+ it "returns regular tokens" do
70
+ str = "def foo; Z::X::Y end"
71
+ tokenize(str)
72
+ tokens_match
73
+ end
74
+
75
+ it "resolves objects in compound constant paths" do
76
+ tokenize "A::B::C"
77
+ objs_match "A", "A::B", "A::B::C"
78
+ end
79
+
80
+ it "ignores full constant path if it breaks at beginning" do
81
+ tokenize "E::A::B::C"
82
+ objs_match []
83
+ end
84
+
85
+ it "ignores rest of constant path if sub-objects don't match" do
86
+ tokenize "D::A::B::C"
87
+ objs_match "D"
88
+ end
89
+
90
+ it "resets parsing at non-op tokens" do
91
+ tokenize "A::B::C < Q"
92
+ objs_match "A", "A::B", "A::B::C", "Q"
93
+ end
94
+
95
+ it "does not restart constant path" do
96
+ tokenize "A::B::D::A"
97
+ objs_match "A", "A::B"
98
+ end
99
+
100
+ it "resolves objects from base namespace" do
101
+ tokenize "A::B::C C", Registry.at("A::B")
102
+ objs_match "A", "A::B", "A::B::C", "A::B::C"
103
+ end
104
+
105
+ it "resolves methods" do
106
+ tokenize "A::B::C.foo"
107
+ objs_match "A", "A::B", "A::B::C", "A::B::C.foo"
108
+ end
109
+
110
+ it "supports 'new' constructor method" do
111
+ tokenize "A::B::C.new"
112
+ objs_match "A", "A::B", "A::B::C", "A::B::C#initialize"
113
+ end
114
+
115
+ it "skips constructor method if not found but continues resolving" do
116
+ tokenize "Q.new.method"
117
+ objs_match "Q", "Q#method"
118
+ end
119
+
120
+ it "resolves methods in inheritance tree" do
121
+ tokenize "A::B::SubC.new"
122
+ objs_match "A", "A::B", "A::B::SubC", "A::B::C#initialize"
123
+ end
124
+
125
+ it "parses compound method call chains based on return type" do
126
+ tokenize "A::B::C.foo.baz"
127
+ objs_match "A", "A::B", "A::B::C", "A::B::C.foo", "A::B::C#baz"
128
+ end
129
+
130
+ it "stops resolving if return types not found" do
131
+ tokenize "A::B::C.foo.bar.baz.baz"
132
+ objs_match "A", "A::B", "A::B::C", "A::B::C.foo", "A::B::C#bar"
133
+ end
134
+
135
+ it "handles multiple return types (returns first valid type match)" do
136
+ tokenize "A::B::C.foo.baz.baz"
137
+ objs_match "A", "A::B", "A::B::C", "A::B::C.foo", "A::B::C#baz", "D#baz"
138
+ end
139
+
140
+ it "doesn't perform lexical matching on methods" do
141
+ tokenize "A::B::C.nomatch"
142
+ objs_match "A", "A::B", "A::B::C"
143
+ end
144
+
145
+ it "handles multiple return tags (returns first valid type match)" do
146
+ tokenize "A::B::C.foo.baz2.baz"
147
+ objs_match "A", "A::B", "A::B::C", "A::B::C.foo", "A::B::C#baz2", "D#baz"
148
+ end
149
+
150
+ it "handles self as return type" do
151
+ tokenize "A::B::C.foo2.baz"
152
+ objs_match "A", "A::B", "A::B::C", "A::B::C.foo2", "A::B::C#baz"
153
+ end
154
+
155
+ it "handles multiple return tags inside overload tags" do
156
+ tokenize "A::B::C.foo.qux.baz"
157
+ objs_match "A", "A::B", "A::B::C", "A::B::C.foo", "A::B::C#qux", "D#baz"
158
+ end
159
+
160
+ it "resolves method calls with arguments" do
161
+ tokenize "Q.q(A::B, A::B::C.foo().bar).q.q"
162
+ objs_match "Q", "Q.q", "A", "A::B", "A", "A::B", "A::B::C",
163
+ "A::B::C.foo", "A::B::C#bar", "Q.q", "Q.q"
164
+ end
165
+ end if HAVE_RIPPER
@@ -1,15 +1,15 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ # frozen_string_literal: true
2
2
 
3
3
  class MyParser < Parser::Base; end
4
4
 
5
- shared_examples_for "parser type registration" do
5
+ RSpec.shared_examples_for "parser type registration" do
6
6
  after do
7
7
  Parser::SourceParser.parser_types.delete(:my_parser)
8
8
  Parser::SourceParser.parser_type_extensions.delete(:my_parser)
9
9
  end
10
10
  end
11
11
 
12
- describe YARD::Parser::SourceParser do
12
+ RSpec.describe YARD::Parser::SourceParser do
13
13
  before do
14
14
  Registry.clear
15
15
  end
@@ -84,10 +84,10 @@ describe YARD::Parser::SourceParser do
84
84
  end
85
85
 
86
86
  it "passes in globals" do
87
- before_list {|f,g| g.x = 1 }
88
- before_list {|f,g| g.x += 1 }
89
- before_list {|f,g| g.x += 1 }
90
- after_list {|f,g| expect(g.x).to eq 3 }
87
+ before_list {|_f, g| g.x = 1 }
88
+ before_list {|_f, g| g.x += 1 }
89
+ before_list {|_f, g| g.x += 1 }
90
+ after_list {|_f, g| expect(g.x).to eq 3 }
91
91
  parse_list ['file.rb', ''], ['file2.rb', ''], ['file3.rb', 'class Foo; end']
92
92
  expect(Registry.at('Foo')).not_to be nil
93
93
  end
@@ -100,7 +100,7 @@ describe YARD::Parser::SourceParser do
100
100
  end
101
101
 
102
102
  it "handles basic callback support and maintain files/globals" do
103
- before_list do |f,g| g.foo = :bar end
103
+ before_list {|_f, g| g.foo = :bar }
104
104
  after_list do |files, globals|
105
105
  expect(files).to eq ['foo.rb', 'bar.rb']
106
106
  expect(globals.foo).to eq :bar
@@ -138,7 +138,7 @@ describe YARD::Parser::SourceParser do
138
138
  it "handles basic callback support" do
139
139
  before_file do |parser|
140
140
  expect(parser.contents).to eq 'class Foo; end'
141
- expect(parser.file).to match /(foo|bar)\.rb/
141
+ expect(parser.file).to match(/(foo|bar)\.rb/)
142
142
  end
143
143
  parse_list ['foo.rb', 'class Foo; end'], ['bar.rb', 'class Foo; end']
144
144
  expect(Registry.at('Foo')).not_to be nil
@@ -183,7 +183,7 @@ describe YARD::Parser::SourceParser do
183
183
  it "handles basic callback support" do
184
184
  after_file do |parser|
185
185
  expect(parser.contents).to eq 'class Foo; end'
186
- expect(parser.file).to match /(foo|bar)\.rb/
186
+ expect(parser.file).to match(/(foo|bar)\.rb/)
187
187
  end
188
188
  parse_list ['foo.rb', 'class Foo; end'], ['bar.rb', 'class Foo; end']
189
189
  expect(Registry.at('Foo')).not_to be nil
@@ -270,7 +270,7 @@ describe YARD::Parser::SourceParser do
270
270
  expect(Registry.at(:Hello)).not_to eq nil
271
271
  expect(Registry.at("Hello::Hi#me")).not_to eq nil
272
272
  expect(Registry.at("Hello::Hi#me").docstring).to eq "Docstring\nDocstring2"
273
- expect(Registry.at("Hello::Hi#me").docstring.line_range).to eq (3..4)
273
+ expect(Registry.at("Hello::Hi#me").docstring.line_range).to eq(3..4)
274
274
  end
275
275
 
276
276
  it "parses Ruby code with metaclasses" do
@@ -551,8 +551,8 @@ describe YARD::Parser::SourceParser do
551
551
  default_encoding = 'UTF-8'
552
552
  expect(result.enumerator[0].source.encoding.to_s).to eq(default_encoding)
553
553
  else
554
- expect(['Shift_JIS', 'Windows-31J', 'UTF-8']).send(msg, include(
555
- result.enumerator[0].source.encoding.to_s))
554
+ expect(['Shift_JIS', 'Windows-31J', 'UTF-8']).send(msg,
555
+ include(result.enumerator[0].source.encoding.to_s))
556
556
  end
557
557
  end
558
558
  expect(result.encoding_line).send(msg, eq(src.split("\n").last))
@@ -582,7 +582,7 @@ describe YARD::Parser::SourceParser do
582
582
  Parser::SourceParser::ENCODING_BYTE_ORDER_MARKS.each do |encoding, bom|
583
583
  it "understands #{encoding.upcase} BOM" do
584
584
  parser = Parser::SourceParser.new
585
- src = bom + "class FooBar; end".force_encoding('binary')
585
+ src = bom + String.new("class FooBar; end").force_encoding('binary')
586
586
  src.force_encoding('binary')
587
587
  expect(File).to receive(:read_binary).with('tmpfile').and_return(src)
588
588
  result = parser.parse('tmpfile')
@@ -604,10 +604,10 @@ describe YARD::Parser::SourceParser do
604
604
  expect(log).to receive(:debug) {|m| msgs << m }.at_least(:once)
605
605
  allow(log).to receive(:<<)
606
606
  in_order_parse 'parse_in_order_001', 'parse_in_order_002'
607
- expect(msgs[1]).to match /Parsing .+parse_in_order_001.+/
608
- expect(msgs[2]).to match /Missing object MyModule/
609
- expect(msgs[3]).to match /Parsing .+parse_in_order_002.+/
610
- expect(msgs[4]).to match /Re-processing .+parse_in_order_001.+/
607
+ expect(msgs[1]).to match(/Parsing .+parse_in_order_001.+/)
608
+ expect(msgs[2]).to match(/Missing object MyModule/)
609
+ expect(msgs[3]).to match(/Parsing .+parse_in_order_002.+/)
610
+ expect(msgs[4]).to match(/Re-processing .+parse_in_order_001.+/)
611
611
  end
612
612
  end
613
613
 
@@ -1,6 +1,6 @@
1
- require File.join(File.dirname(__FILE__), '..', 'spec_helper')
1
+ # frozen_string_literal: true
2
2
 
3
- describe YARD::Parser, "tag handling" do
3
+ RSpec.describe YARD::Parser, "tag handling" do
4
4
  before { parse_file :tag_handler_001, __FILE__ }
5
5
 
6
6
  it "knows the list of all available tags" do
@@ -1,6 +1,6 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ # frozen_string_literal: true
2
2
 
3
- describe YARD::Rake::YardocTask do
3
+ RSpec.describe YARD::Rake::YardocTask do
4
4
  before do
5
5
  @yardoc = YARD::CLI::Yardoc.new
6
6
  @yardoc.statistics = false
@@ -75,7 +75,7 @@ describe YARD::Rake::YardocTask do
75
75
 
76
76
  describe "#before" do
77
77
  it "allows before callback" do
78
- proc = lambda { }
78
+ proc = lambda {}
79
79
  expect(proc).to receive(:call)
80
80
  expect(@yardoc).to receive(:run)
81
81
  YARD::Rake::YardocTask.new {|t| t.before = proc }
@@ -85,7 +85,7 @@ describe YARD::Rake::YardocTask do
85
85
 
86
86
  describe "#after" do
87
87
  it "allows after callback" do
88
- proc = lambda { }
88
+ proc = lambda {}
89
89
  expect(proc).to receive(:call)
90
90
  expect(@yardoc).to receive(:run)
91
91
  YARD::Rake::YardocTask.new {|t| t.after = proc }
@@ -1,9 +1,9 @@
1
- require File.join(File.dirname(__FILE__), "spec_helper")
1
+ # frozen_string_literal: true
2
2
  include CodeObjects
3
3
 
4
4
  require "thread"
5
5
 
6
- describe YARD::Registry do
6
+ RSpec.describe YARD::Registry do
7
7
  before { Registry.clear }
8
8
 
9
9
  describe ".yardoc_file_for_gem" do
@@ -17,67 +17,69 @@ describe YARD::Registry do
17
17
  end
18
18
 
19
19
  it "returns nil if gem isn't found" do
20
- expect(Gem.source_index).to receive(:find_name).with('foo', '>= 0').and_return([])
20
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([])
21
21
  expect(Registry.yardoc_file_for_gem('foo')).to eq nil
22
22
  end
23
23
 
24
24
  it "allows version to be specified" do
25
- expect(Gem.source_index).to receive(:find_name).with('foo', '= 2').and_return([])
25
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '= 2').and_return([])
26
26
  expect(Registry.yardoc_file_for_gem('foo', '= 2')).to eq nil
27
27
  end
28
28
 
29
29
  it "returns existing .yardoc path for gem when for_writing=false" do
30
- expect(File).to receive(:exist?).twice.and_return(false)
31
- expect(File).to receive(:exist?).with('/path/to/foo/.yardoc').and_return(true)
32
- expect(Gem.source_index).to receive(:find_name).with('foo', '>= 0').and_return([@gem])
30
+ allow(File).to receive(:exist?).twice.and_return(false)
31
+ allow(File).to receive(:exist?).with('/path/to/foo/.yardoc').and_return(true)
32
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([@gem])
33
33
  expect(Registry.yardoc_file_for_gem('foo')).to eq '/path/to/foo/.yardoc'
34
34
  end
35
35
 
36
36
  it "returns new existing .yardoc path for gem when for_writing=false" do
37
- expect(File).to receive(:exist?).once.and_return(false)
38
- expect(File).to receive(:exist?).with('/path/to/foo/doc/.yardoc').and_return(true)
39
- expect(Gem.source_index).to receive(:find_name).with('foo', '>= 0').and_return([@gem])
37
+ allow(File).to receive(:exist?).and_return(false)
38
+ allow(File).to receive(:exist?).with('/path/to/foo/doc/.yardoc').and_return(true)
39
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([@gem])
40
40
  expect(Registry.yardoc_file_for_gem('foo')).to eq '/path/to/foo/doc/.yardoc'
41
41
  end
42
42
 
43
43
  it "returns nil if no .yardoc path exists in gem when for_writing=false" do
44
- expect(File).to receive(:exist?).twice.and_return(false)
45
- expect(File).to receive(:exist?).with('/path/to/foo/.yardoc').and_return(false)
46
- expect(Gem.source_index).to receive(:find_name).with('foo', '>= 0').and_return([@gem])
44
+ allow(File).to receive(:exist?).twice.and_return(false)
45
+ allow(File).to receive(:exist?).with('/path/to/foo/.yardoc').and_return(false)
46
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([@gem])
47
47
  expect(Registry.yardoc_file_for_gem('foo')).to eq nil
48
48
  end
49
49
 
50
50
  it "searches local gem path first if for_writing=false" do
51
- expect(File).to receive(:exist?).and_return(true)
52
- expect(Gem.source_index).to receive(:find_name).with('foo', '>= 0').and_return([@gem])
51
+ allow(File).to receive(:exist?).and_return(true)
52
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([@gem])
53
53
  expect(Registry.yardoc_file_for_gem('foo')).to match %r{/.yard/gem_index/foo-1.0.yardoc$}
54
54
  end
55
55
 
56
56
  it "returns global .yardoc path for gem if for_writing=true and dir is writable" do
57
- expect(File).to receive(:writable?).with(@gem.doc_dir).and_return(false)
58
- expect(File).to receive(:writable?).with(@gem.full_gem_path).and_return(true)
59
- expect(Gem.source_index).to receive(:find_name).with('foo', '>= 0').and_return([@gem])
57
+ allow(File).to receive(:exist?).and_return(false)
58
+ allow(File).to receive(:directory?).with(@gem.doc_dir).and_return(true)
59
+ allow(File).to receive(:writable?).with(@gem.doc_dir).and_return(false)
60
+ allow(File).to receive(:writable?).with(@gem.full_gem_path).and_return(true)
61
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([@gem])
60
62
  expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to eq '/path/to/foo/.yardoc'
61
63
  end
62
64
 
63
65
  it "returns new global .yardoc path for gem if for_writing=true and dir is writable" do
64
- expect(File).to receive(:writable?).with(@gem.doc_dir).and_return(true)
65
- expect(Gem.source_index).to receive(:find_name).with('foo', '>= 0').and_return([@gem])
66
+ allow(File).to receive(:writable?).with(@gem.doc_dir).and_return(true)
67
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([@gem])
66
68
  expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to eq '/path/to/foo/doc/.yardoc'
67
69
  end
68
70
 
69
71
  it "returns new global .yardoc path for gem if for_writing=true and parent dir is writable (but dir does not exist)" do
70
- expect(File).to receive(:writable?).with(@gem.doc_dir).and_return(false)
71
- expect(File).to receive(:directory?).with(@gem.doc_dir).and_return(false)
72
- expect(File).to receive(:writable?).with(File.dirname(@gem.doc_dir)).and_return(true)
73
- expect(Gem.source_index).to receive(:find_name).with('foo', '>= 0').and_return([@gem])
72
+ allow(File).to receive(:writable?).with(@gem.doc_dir).and_return(false)
73
+ allow(File).to receive(:directory?).with(@gem.doc_dir).and_return(false)
74
+ allow(File).to receive(:writable?).with(File.dirname(@gem.doc_dir)).and_return(true)
75
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([@gem])
74
76
  expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to eq '/path/to/foo/doc/.yardoc'
75
77
  end
76
78
 
77
79
  it "returns local .yardoc path for gem if for_writing=true and dir is not writable" do
78
- expect(File).to receive(:writable?).with(@gem.doc_dir).and_return(false)
79
- expect(File).to receive(:writable?).with(@gem.full_gem_path).and_return(false)
80
- expect(Gem.source_index).to receive(:find_name).with('foo', '>= 0').and_return([@gem])
80
+ allow(File).to receive(:writable?).with(@gem.doc_dir).and_return(false)
81
+ allow(File).to receive(:writable?).with(@gem.full_gem_path).and_return(false)
82
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([@gem])
81
83
  expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to match %r{/.yard/gem_index/foo-1.0.yardoc$}
82
84
  end
83
85
 
@@ -85,8 +87,8 @@ describe YARD::Registry do
85
87
  allow(@gem).to receive(:name).and_return('yard-doc-core')
86
88
  allow(@gem).to receive(:full_name).and_return('yard-doc-core-1.0')
87
89
  allow(@gem).to receive(:full_gem_path).and_return('/path/to/yard-doc-core')
88
- expect(Gem.source_index).to receive(:find_name).with('yard-doc-core', '>= 0').and_return([@gem])
89
- expect(File).to receive(:exist?).with('/path/to/yard-doc-core/.yardoc').and_return(true)
90
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('yard-doc-core', '>= 0').and_return([@gem])
91
+ allow(File).to receive(:exist?).with('/path/to/yard-doc-core/.yardoc').and_return(true)
90
92
  expect(Registry.yardoc_file_for_gem('yard-doc-core')).to eq '/path/to/yard-doc-core/.yardoc'
91
93
  end
92
94
 
@@ -94,8 +96,8 @@ describe YARD::Registry do
94
96
  allow(@gem).to receive(:name).and_return('yard-doc-core')
95
97
  allow(@gem).to receive(:full_name).and_return('yard-doc-core-1.0')
96
98
  allow(@gem).to receive(:full_gem_path).and_return('/path/to/yard-doc-core')
97
- expect(Gem.source_index).to receive(:find_name).with('yard-doc-core', '>= 0').and_return([@gem])
98
- expect(File).to receive(:exist?).with('/path/to/yard-doc-core/.yardoc').and_return(true)
99
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('yard-doc-core', '>= 0').and_return([@gem])
100
+ allow(File).to receive(:exist?).with('/path/to/yard-doc-core/.yardoc').and_return(true)
99
101
  expect(Registry.yardoc_file_for_gem('yard-doc-core', '>= 0', true)).to eq nil
100
102
  end
101
103
  end
@@ -211,6 +213,21 @@ describe YARD::Registry do
211
213
  expect(Registry.resolve(P('MyObject'), '#foo', true)).to eq P('BasicObject#foo')
212
214
  end
213
215
 
216
+ it "does not perform lexical lookup to resolve a method object by more than one namespace" do
217
+ YARD.parse_string <<-eof
218
+ module A
219
+ def foo; end
220
+ def self.bar; end
221
+ module B; module C; end end
222
+ end
223
+ eof
224
+
225
+ expect(Registry.resolve(P('A::B::C'), '#foo', true)).to be nil
226
+ expect(Registry.resolve(P('A::B::C'), '.bar', true)).to be nil
227
+ expect(Registry.resolve(P('A::B'), '#foo', true)).not_to be nil
228
+ expect(Registry.resolve(P('A::B'), '.bar', true)).not_to be nil
229
+ end
230
+
214
231
  it "does not resolve methods in Object if inheriting BasicObject when inheritance = true" do
215
232
  YARD.parse_string <<-eof
216
233
  class Object; def foo; end end
@@ -249,7 +266,8 @@ describe YARD::Registry do
249
266
  eof
250
267
  expect(Registry.resolve(P('Foo'), 'Bar', false, false, :class)).to eq Registry.at('Foo::Bar')
251
268
  expect(Registry.resolve(P('Foo'), 'Bar', false, false, :method)).to eq(
252
- Registry.at('Foo.Bar'))
269
+ Registry.at('Foo.Bar')
270
+ )
253
271
  end
254
272
 
255
273
  it "returns proxy fallback with given type if supplied" do
@@ -299,8 +317,8 @@ describe YARD::Registry do
299
317
 
300
318
  describe ".paths" do
301
319
  it "returns all object paths" do
302
- o1 = ModuleObject.new(:root, :A)
303
- o2 = ClassObject.new(:root, :B)
320
+ ModuleObject.new(:root, :A)
321
+ ClassObject.new(:root, :B)
304
322
  expect(Registry.paths).to include('A', 'B')
305
323
  end
306
324
  end
@@ -323,7 +341,7 @@ describe YARD::Registry do
323
341
  Registry.load!(File.dirname(__FILE__) + '/serializers/data/serialized_yardoc')
324
342
  baz = Registry.at('Foo#baz')
325
343
  expect(Registry.at('Foo').aliases.keys).to include(baz)
326
- expect(Registry.at('Foo').aliases.has_key?(baz)).to be true
344
+ expect(Registry.at('Foo').aliases.key?(baz)).to be true
327
345
  end
328
346
  end
329
347
 
@@ -375,21 +393,17 @@ describe YARD::Registry do
375
393
  Registry.clear
376
394
  YARD.parse_string "# docstring 1\nclass Foo; end"
377
395
  mutex.synchronize { barrier += 1 }
378
- while barrier < 2 do
379
- s = "barrier < 2, spinning"
380
- end
396
+ "barrier < 2, spinning" while barrier < 2
381
397
  expect(Registry.at('Foo').docstring).to eq "docstring 1"
382
398
  end
383
399
  threads << Thread.new do
384
400
  Registry.clear
385
401
  YARD.parse_string "# docstring 2\nclass Foo; end"
386
402
  mutex.synchronize { barrier += 1 }
387
- while barrier < 2 do
388
- s = "barrier < 2, spinning"
389
- end
403
+ "barrier < 2, spinning" while barrier < 2
390
404
  expect(Registry.at('Foo').docstring).to eq "docstring 2"
391
405
  end
392
- threads.each {|t| t.join }
406
+ threads.each(&:join)
393
407
  end
394
408
 
395
409
  it "allows setting of yardoc_file in separate threads" do
@@ -400,20 +414,16 @@ describe YARD::Registry do
400
414
  expect(Registry.yardoc_file).to eq '.yardoc'
401
415
  Registry.yardoc_file = 'foo'
402
416
  mutex.synchronize { barrier += 1 }
403
- while barrier == 1 do
404
- s = "barrier = 1, spinning"
405
- end
417
+ "barrier = 1, spinning" while barrier == 1
406
418
  expect(Registry.yardoc_file).to eq 'foo'
407
419
  end
408
420
  threads << Thread.new do
409
- while barrier == 0 do
410
- s = "barrier = 0, spinning"
411
- end
421
+ "barrier = 0, spinning" while barrier == 0
412
422
  expect(Registry.yardoc_file).to eq '.yardoc'
413
423
  mutex.synchronize { barrier += 1 }
414
424
  Registry.yardoc_file = 'foo2'
415
425
  end
416
- threads.each {|t| t.join }
426
+ threads.each(&:join)
417
427
  Registry.yardoc_file = Registry::DEFAULT_YARDOC_FILE
418
428
  end
419
429
 
@@ -429,20 +439,16 @@ describe YARD::Registry do
429
439
  expect(Registry.po_dir).to eq 'po'
430
440
  Registry.po_dir = 'locale'
431
441
  mutex.synchronize { barrier += 1 }
432
- while barrier == 1 do
433
- s = "barrier = 1, spinning"
434
- end
442
+ "barrier = 1, spinning" while barrier == 1
435
443
  expect(Registry.po_dir).to eq 'locale'
436
444
  end
437
445
  threads << Thread.new do
438
- while barrier == 0 do
439
- s = "barrier = 0, spinning"
440
- end
446
+ "barrier = 0, spinning" while barrier == 0
441
447
  expect(Registry.po_dir).to eq 'po'
442
448
  mutex.synchronize { barrier += 1 }
443
449
  Registry.po_dir = '.'
444
450
  end
445
- threads.each {|t| t.join }
451
+ threads.each(&:join)
446
452
  Registry.po_dir = Registry::DEFAULT_PO_DIR
447
453
  end
448
454
  end