yard 0.9.18 → 0.9.23

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 (590) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +2 -0
  3. data/.github/ISSUE_TEMPLATE.md +33 -0
  4. data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
  5. data/.gitignore +14 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +99 -0
  8. data/.travis.yml +52 -0
  9. data/.yardopts +26 -26
  10. data/.yardopts_guide +19 -0
  11. data/.yardopts_i18n +23 -0
  12. data/CHANGELOG.md +781 -728
  13. data/CODE_OF_CONDUCT.md +15 -0
  14. data/CONTRIBUTING.md +140 -0
  15. data/Dockerfile.samus +28 -0
  16. data/Gemfile +32 -0
  17. data/LEGAL +66 -66
  18. data/LICENSE +22 -22
  19. data/README.md +330 -328
  20. data/Rakefile +37 -53
  21. data/SECURITY.md +26 -0
  22. data/benchmarks/builtins_vs_eval.rb +24 -24
  23. data/benchmarks/concat_vs_join.rb +13 -13
  24. data/benchmarks/erb_vs_erubis.rb +54 -54
  25. data/benchmarks/format_args.rb +47 -47
  26. data/benchmarks/generation.rb +38 -38
  27. data/benchmarks/marshal_vs_dbm.rb +64 -64
  28. data/benchmarks/parsing.rb +46 -46
  29. data/benchmarks/pathname_vs_string.rb +50 -50
  30. data/benchmarks/rdoc_vs_yardoc.rb +11 -11
  31. data/benchmarks/registry_store_types.rb +49 -49
  32. data/benchmarks/ri_vs_yri.rb +19 -19
  33. data/benchmarks/ripper_parser.rb +13 -13
  34. data/benchmarks/splat_vs_flatten.rb +13 -13
  35. data/benchmarks/template_erb.rb +23 -23
  36. data/benchmarks/template_format.rb +7 -7
  37. data/benchmarks/template_profile.rb +18 -18
  38. data/benchmarks/yri_cache.rb +20 -20
  39. data/bin/yard +13 -13
  40. data/bin/yardoc +13 -13
  41. data/bin/yri +13 -13
  42. data/docs/CodeObjects.md +115 -115
  43. data/docs/GettingStarted.md +679 -679
  44. data/docs/Handlers.md +152 -152
  45. data/docs/Overview.md +61 -61
  46. data/docs/Parser.md +191 -191
  47. data/docs/Tags.md +283 -283
  48. data/docs/TagsArch.md +123 -123
  49. data/docs/Templates.md +496 -496
  50. data/docs/WhatsNew.md +1245 -1245
  51. data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
  52. data/docs/templates/default/fulldoc/html/setup.rb +6 -6
  53. data/docs/templates/default/layout/html/setup.rb +9 -9
  54. data/docs/templates/default/layout/html/tag_list.erb +11 -11
  55. data/docs/templates/default/yard_tags/html/list.erb +18 -18
  56. data/docs/templates/default/yard_tags/html/setup.rb +26 -26
  57. data/docs/templates/plugin.rb +70 -70
  58. data/lib/rubygems_plugin.rb +9 -9
  59. data/lib/yard.rb +69 -69
  60. data/lib/yard/autoload.rb +308 -303
  61. data/lib/yard/cli/command.rb +85 -85
  62. data/lib/yard/cli/command_parser.rb +93 -93
  63. data/lib/yard/cli/config.rb +198 -198
  64. data/lib/yard/cli/diff.rb +270 -270
  65. data/lib/yard/cli/display.rb +69 -69
  66. data/lib/yard/cli/gems.rb +84 -84
  67. data/lib/yard/cli/graph.rb +125 -125
  68. data/lib/yard/cli/help.rb +20 -20
  69. data/lib/yard/cli/i18n.rb +70 -70
  70. data/lib/yard/cli/list.rb +23 -23
  71. data/lib/yard/cli/markup_types.rb +32 -32
  72. data/lib/yard/cli/server.rb +257 -257
  73. data/lib/yard/cli/stats.rb +231 -231
  74. data/lib/yard/cli/yardoc.rb +789 -788
  75. data/lib/yard/cli/yardopts_command.rb +110 -110
  76. data/lib/yard/cli/yri.rb +215 -215
  77. data/lib/yard/code_objects/base.rb +622 -615
  78. data/lib/yard/code_objects/class_object.rb +146 -146
  79. data/lib/yard/code_objects/class_variable_object.rb +11 -11
  80. data/lib/yard/code_objects/constant_object.rb +16 -16
  81. data/lib/yard/code_objects/extended_method_object.rb +24 -24
  82. data/lib/yard/code_objects/extra_file_object.rb +134 -131
  83. data/lib/yard/code_objects/macro_object.rb +172 -172
  84. data/lib/yard/code_objects/method_object.rb +196 -196
  85. data/lib/yard/code_objects/module_object.rb +21 -21
  86. data/lib/yard/code_objects/namespace_mapper.rb +114 -114
  87. data/lib/yard/code_objects/namespace_object.rb +200 -200
  88. data/lib/yard/code_objects/proxy.rb +244 -240
  89. data/lib/yard/code_objects/root_object.rb +19 -19
  90. data/lib/yard/config.rb +270 -270
  91. data/lib/yard/core_ext/array.rb +16 -16
  92. data/lib/yard/core_ext/file.rb +69 -69
  93. data/lib/yard/core_ext/hash.rb +16 -16
  94. data/lib/yard/core_ext/insertion.rb +63 -63
  95. data/lib/yard/core_ext/module.rb +11 -20
  96. data/lib/yard/core_ext/string.rb +68 -68
  97. data/lib/yard/core_ext/symbol_hash.rb +75 -75
  98. data/lib/yard/docstring.rb +386 -386
  99. data/lib/yard/docstring_parser.rb +345 -345
  100. data/lib/yard/gem_index.rb +29 -29
  101. data/lib/yard/globals.rb +22 -22
  102. data/lib/yard/handlers/base.rb +595 -595
  103. data/lib/yard/handlers/c/alias_handler.rb +16 -16
  104. data/lib/yard/handlers/c/attribute_handler.rb +13 -13
  105. data/lib/yard/handlers/c/base.rb +129 -129
  106. data/lib/yard/handlers/c/class_handler.rb +27 -27
  107. data/lib/yard/handlers/c/constant_handler.rb +13 -13
  108. data/lib/yard/handlers/c/handler_methods.rb +212 -211
  109. data/lib/yard/handlers/c/init_handler.rb +20 -20
  110. data/lib/yard/handlers/c/method_handler.rb +45 -45
  111. data/lib/yard/handlers/c/mixin_handler.rb +21 -21
  112. data/lib/yard/handlers/c/module_handler.rb +17 -17
  113. data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
  114. data/lib/yard/handlers/c/path_handler.rb +11 -11
  115. data/lib/yard/handlers/c/struct_handler.rb +13 -13
  116. data/lib/yard/handlers/c/symbol_handler.rb +8 -8
  117. data/lib/yard/handlers/common/method_handler.rb +19 -0
  118. data/lib/yard/handlers/processor.rb +200 -200
  119. data/lib/yard/handlers/ruby/alias_handler.rb +45 -44
  120. data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
  121. data/lib/yard/handlers/ruby/base.rb +165 -165
  122. data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
  123. data/lib/yard/handlers/ruby/class_handler.rb +119 -119
  124. data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
  125. data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
  126. data/lib/yard/handlers/ruby/constant_handler.rb +55 -59
  127. data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
  128. data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
  129. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -96
  130. data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
  131. data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
  132. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
  133. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
  134. data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
  135. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
  136. data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
  137. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
  138. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
  139. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
  140. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
  141. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
  142. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
  143. data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
  144. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
  145. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
  146. data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
  147. data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
  148. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
  149. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
  150. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
  151. data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
  152. data/lib/yard/handlers/ruby/method_handler.rb +104 -118
  153. data/lib/yard/handlers/ruby/mixin_handler.rb +49 -37
  154. data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
  155. data/lib/yard/handlers/ruby/module_handler.rb +12 -12
  156. data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
  157. data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
  158. data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
  159. data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
  160. data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
  161. data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
  162. data/lib/yard/i18n/locale.rb +67 -67
  163. data/lib/yard/i18n/message.rb +57 -57
  164. data/lib/yard/i18n/messages.rb +56 -56
  165. data/lib/yard/i18n/po_parser.rb +61 -61
  166. data/lib/yard/i18n/pot_generator.rb +290 -290
  167. data/lib/yard/i18n/text.rb +173 -173
  168. data/lib/yard/logging.rb +205 -205
  169. data/lib/yard/options.rb +217 -217
  170. data/lib/yard/parser/base.rb +57 -57
  171. data/lib/yard/parser/c/c_parser.rb +235 -235
  172. data/lib/yard/parser/c/comment_parser.rb +134 -134
  173. data/lib/yard/parser/c/statement.rb +66 -64
  174. data/lib/yard/parser/ruby/ast_node.rb +551 -540
  175. data/lib/yard/parser/ruby/legacy/irb/slex.rb +276 -0
  176. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1345 -1354
  177. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
  178. data/lib/yard/parser/ruby/legacy/statement.rb +68 -66
  179. data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
  180. data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
  181. data/lib/yard/parser/ruby/ruby_parser.rb +699 -687
  182. data/lib/yard/parser/ruby/token_resolver.rb +156 -156
  183. data/lib/yard/parser/source_parser.rb +526 -526
  184. data/lib/yard/rake/yardoc_task.rb +81 -81
  185. data/lib/yard/registry.rb +439 -439
  186. data/lib/yard/registry_resolver.rb +231 -189
  187. data/lib/yard/registry_store.rb +342 -337
  188. data/lib/yard/rubygems/backports.rb +10 -10
  189. data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
  190. data/lib/yard/rubygems/backports/MIT.txt +20 -20
  191. data/lib/yard/rubygems/backports/gem.rb +10 -10
  192. data/lib/yard/rubygems/backports/source_index.rb +365 -365
  193. data/lib/yard/rubygems/doc_manager.rb +90 -90
  194. data/lib/yard/rubygems/hook.rb +197 -197
  195. data/lib/yard/rubygems/specification.rb +50 -50
  196. data/lib/yard/serializers/base.rb +83 -83
  197. data/lib/yard/serializers/file_system_serializer.rb +123 -123
  198. data/lib/yard/serializers/process_serializer.rb +24 -24
  199. data/lib/yard/serializers/stdout_serializer.rb +34 -34
  200. data/lib/yard/serializers/yardoc_serializer.rb +152 -152
  201. data/lib/yard/server.rb +13 -13
  202. data/lib/yard/server/adapter.rb +100 -100
  203. data/lib/yard/server/commands/base.rb +209 -209
  204. data/lib/yard/server/commands/display_file_command.rb +29 -29
  205. data/lib/yard/server/commands/display_object_command.rb +65 -65
  206. data/lib/yard/server/commands/frames_command.rb +16 -16
  207. data/lib/yard/server/commands/library_command.rb +187 -187
  208. data/lib/yard/server/commands/library_index_command.rb +28 -28
  209. data/lib/yard/server/commands/list_command.rb +25 -25
  210. data/lib/yard/server/commands/root_request_command.rb +15 -15
  211. data/lib/yard/server/commands/search_command.rb +79 -79
  212. data/lib/yard/server/commands/static_file_command.rb +23 -23
  213. data/lib/yard/server/commands/static_file_helpers.rb +61 -62
  214. data/lib/yard/server/doc_server_helper.rb +91 -91
  215. data/lib/yard/server/doc_server_serializer.rb +39 -39
  216. data/lib/yard/server/library_version.rb +277 -277
  217. data/lib/yard/server/rack_adapter.rb +89 -89
  218. data/lib/yard/server/router.rb +187 -187
  219. data/lib/yard/server/static_caching.rb +46 -46
  220. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
  221. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
  222. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
  223. data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
  224. data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
  225. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
  226. data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
  227. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
  228. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
  229. data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
  230. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
  231. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
  232. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
  233. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
  234. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
  235. data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
  236. data/lib/yard/server/webrick_adapter.rb +45 -45
  237. data/lib/yard/tags/default_factory.rb +191 -191
  238. data/lib/yard/tags/default_tag.rb +13 -13
  239. data/lib/yard/tags/directives.rb +616 -616
  240. data/lib/yard/tags/library.rb +633 -633
  241. data/lib/yard/tags/option_tag.rb +13 -13
  242. data/lib/yard/tags/overload_tag.rb +71 -71
  243. data/lib/yard/tags/ref_tag.rb +8 -8
  244. data/lib/yard/tags/ref_tag_list.rb +28 -28
  245. data/lib/yard/tags/tag.rb +71 -71
  246. data/lib/yard/tags/tag_format_error.rb +7 -7
  247. data/lib/yard/tags/types_explainer.rb +162 -162
  248. data/lib/yard/templates/engine.rb +186 -186
  249. data/lib/yard/templates/erb_cache.rb +23 -23
  250. data/lib/yard/templates/helpers/base_helper.rb +215 -215
  251. data/lib/yard/templates/helpers/filter_helper.rb +27 -27
  252. data/lib/yard/templates/helpers/html_helper.rb +663 -646
  253. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
  254. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
  255. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
  256. data/lib/yard/templates/helpers/markup_helper.rb +172 -172
  257. data/lib/yard/templates/helpers/method_helper.rb +75 -75
  258. data/lib/yard/templates/helpers/module_helper.rb +21 -21
  259. data/lib/yard/templates/helpers/text_helper.rb +112 -112
  260. data/lib/yard/templates/helpers/uml_helper.rb +47 -47
  261. data/lib/yard/templates/section.rb +105 -105
  262. data/lib/yard/templates/template.rb +418 -418
  263. data/lib/yard/templates/template_options.rb +92 -92
  264. data/lib/yard/verifier.rb +151 -151
  265. data/lib/yard/version.rb +6 -6
  266. data/po/ja.po +31108 -0
  267. data/samus.json +80 -0
  268. data/spec/cli/command_parser_spec.rb +43 -43
  269. data/spec/cli/command_spec.rb +36 -36
  270. data/spec/cli/config_spec.rb +148 -148
  271. data/spec/cli/diff_spec.rb +254 -254
  272. data/spec/cli/display_spec.rb +30 -30
  273. data/spec/cli/gems_spec.rb +81 -81
  274. data/spec/cli/graph_spec.rb +18 -18
  275. data/spec/cli/help_spec.rb +22 -22
  276. data/spec/cli/i18n_spec.rb +107 -107
  277. data/spec/cli/list_spec.rb +8 -8
  278. data/spec/cli/markup_types_spec.rb +22 -22
  279. data/spec/cli/server_spec.rb +324 -324
  280. data/spec/cli/stats_spec.rb +96 -96
  281. data/spec/cli/yard_on_yard_spec.rb +38 -38
  282. data/spec/cli/yardoc_spec.rb +896 -862
  283. data/spec/cli/yri_spec.rb +101 -101
  284. data/spec/code_objects/base_spec.rb +485 -470
  285. data/spec/code_objects/class_object_spec.rb +226 -226
  286. data/spec/code_objects/code_object_list_spec.rb +36 -36
  287. data/spec/code_objects/constants_spec.rb +116 -116
  288. data/spec/code_objects/extra_file_object_spec.rb +161 -160
  289. data/spec/code_objects/macro_object_spec.rb +150 -150
  290. data/spec/code_objects/method_object_spec.rb +184 -184
  291. data/spec/code_objects/module_object_spec.rb +142 -142
  292. data/spec/code_objects/namespace_object_spec.rb +171 -171
  293. data/spec/code_objects/proxy_spec.rb +147 -141
  294. data/spec/code_objects/spec_helper.rb +3 -3
  295. data/spec/config_spec.rb +171 -171
  296. data/spec/core_ext/array_spec.rb +13 -13
  297. data/spec/core_ext/file_spec.rb +72 -72
  298. data/spec/core_ext/hash_spec.rb +14 -14
  299. data/spec/core_ext/insertion_spec.rb +37 -37
  300. data/spec/core_ext/module_spec.rb +9 -15
  301. data/spec/core_ext/string_spec.rb +42 -42
  302. data/spec/core_ext/symbol_hash_spec.rb +89 -89
  303. data/spec/docstring_parser_spec.rb +280 -280
  304. data/spec/docstring_spec.rb +373 -373
  305. data/spec/handlers/alias_handler_spec.rb +82 -82
  306. data/spec/handlers/attribute_handler_spec.rb +96 -96
  307. data/spec/handlers/base_spec.rb +216 -216
  308. data/spec/handlers/c/alias_handler_spec.rb +34 -34
  309. data/spec/handlers/c/attribute_handler_spec.rb +41 -41
  310. data/spec/handlers/c/class_handler_spec.rb +78 -78
  311. data/spec/handlers/c/constant_handler_spec.rb +71 -71
  312. data/spec/handlers/c/init_handler_spec.rb +48 -48
  313. data/spec/handlers/c/method_handler_spec.rb +327 -325
  314. data/spec/handlers/c/mixin_handler_spec.rb +44 -44
  315. data/spec/handlers/c/module_handler_spec.rb +71 -71
  316. data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
  317. data/spec/handlers/c/path_handler_spec.rb +36 -36
  318. data/spec/handlers/c/spec_helper.rb +23 -23
  319. data/spec/handlers/c/struct_handler_spec.rb +16 -16
  320. data/spec/handlers/class_condition_handler_spec.rb +87 -87
  321. data/spec/handlers/class_handler_spec.rb +247 -247
  322. data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
  323. data/spec/handlers/class_variable_handler_spec.rb +12 -12
  324. data/spec/handlers/constant_handler_spec.rb +112 -112
  325. data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
  326. data/spec/handlers/dsl_handler_spec.rb +226 -219
  327. data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
  328. data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
  329. data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
  330. data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
  331. data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
  332. data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
  333. data/spec/handlers/examples/dsl_handler_001.rb.txt +156 -154
  334. data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
  335. data/spec/handlers/examples/extend_handler_001.rb.txt +19 -16
  336. data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
  337. data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
  338. data/spec/handlers/examples/mixin_handler_001.rb.txt +40 -37
  339. data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
  340. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
  341. data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
  342. data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
  343. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
  344. data/spec/handlers/exception_handler_spec.rb +49 -49
  345. data/spec/handlers/extend_handler_spec.rb +28 -24
  346. data/spec/handlers/legacy_base_spec.rb +128 -128
  347. data/spec/handlers/method_condition_handler_spec.rb +15 -15
  348. data/spec/handlers/method_handler_spec.rb +214 -190
  349. data/spec/handlers/mixin_handler_spec.rb +60 -56
  350. data/spec/handlers/module_function_handler_spec.rb +106 -106
  351. data/spec/handlers/module_handler_spec.rb +35 -35
  352. data/spec/handlers/private_class_method_handler_spec.rb +11 -11
  353. data/spec/handlers/private_constant_handler_spec.rb +25 -25
  354. data/spec/handlers/processor_spec.rb +35 -35
  355. data/spec/handlers/public_class_method_handler_spec.rb +11 -11
  356. data/spec/handlers/ruby/base_spec.rb +95 -95
  357. data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
  358. data/spec/handlers/spec_helper.rb +33 -33
  359. data/spec/handlers/visibility_handler_spec.rb +44 -44
  360. data/spec/handlers/yield_handler_spec.rb +52 -52
  361. data/spec/i18n/locale_spec.rb +81 -81
  362. data/spec/i18n/message_spec.rb +52 -52
  363. data/spec/i18n/messages_spec.rb +67 -67
  364. data/spec/i18n/pot_generator_spec.rb +295 -295
  365. data/spec/i18n/text_spec.rb +184 -184
  366. data/spec/logging_spec.rb +44 -44
  367. data/spec/options_spec.rb +171 -171
  368. data/spec/parser/base_spec.rb +24 -24
  369. data/spec/parser/c_parser_spec.rb +236 -236
  370. data/spec/parser/examples/array.c.txt +6267 -6267
  371. data/spec/parser/examples/example1.rb.txt +7 -7
  372. data/spec/parser/examples/extrafile.c.txt +8 -8
  373. data/spec/parser/examples/file.c.txt +28 -28
  374. data/spec/parser/examples/multifile.c.txt +22 -22
  375. data/spec/parser/examples/namespace.cpp.txt +68 -68
  376. data/spec/parser/examples/override.c.txt +424 -424
  377. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
  378. data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
  379. data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
  380. data/spec/parser/ruby/ast_node_spec.rb +33 -33
  381. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
  382. data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
  383. data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
  384. data/spec/parser/ruby/token_resolver_spec.rb +165 -165
  385. data/spec/parser/source_parser_spec.rb +727 -727
  386. data/spec/parser/tag_parsing_spec.rb +17 -17
  387. data/spec/rake/yardoc_task_spec.rb +118 -118
  388. data/spec/registry_spec.rb +463 -463
  389. data/spec/registry_store_spec.rb +327 -316
  390. data/spec/rubygems/doc_manager_spec.rb +112 -112
  391. data/spec/serializers/data/serialized_yardoc/checksums +1 -1
  392. data/spec/serializers/file_system_serializer_spec.rb +145 -145
  393. data/spec/serializers/spec_helper.rb +2 -2
  394. data/spec/serializers/yardoc_serializer_spec.rb +78 -78
  395. data/spec/server/adapter_spec.rb +39 -39
  396. data/spec/server/commands/base_spec.rb +91 -91
  397. data/spec/server/commands/library_command_spec.rb +39 -39
  398. data/spec/server/doc_server_helper_spec.rb +72 -72
  399. data/spec/server/doc_server_serializer_spec.rb +60 -60
  400. data/spec/server/rack_adapter_spec.rb +21 -21
  401. data/spec/server/router_spec.rb +123 -123
  402. data/spec/server/spec_helper.rb +22 -22
  403. data/spec/server/static_caching_spec.rb +47 -47
  404. data/spec/server/webrick_servlet_spec.rb +20 -20
  405. data/spec/server_spec.rb +19 -19
  406. data/spec/spec_helper.rb +212 -212
  407. data/spec/tags/default_factory_spec.rb +168 -168
  408. data/spec/tags/default_tag_spec.rb +11 -11
  409. data/spec/tags/directives_spec.rb +463 -463
  410. data/spec/tags/library_spec.rb +48 -48
  411. data/spec/tags/overload_tag_spec.rb +53 -53
  412. data/spec/tags/ref_tag_list_spec.rb +53 -53
  413. data/spec/tags/types_explainer_spec.rb +203 -203
  414. data/spec/templates/class_spec.rb +45 -45
  415. data/spec/templates/constant_spec.rb +41 -41
  416. data/spec/templates/engine_spec.rb +131 -131
  417. data/spec/templates/examples/class001.html +308 -308
  418. data/spec/templates/examples/class001.txt +36 -36
  419. data/spec/templates/examples/class002.html +39 -39
  420. data/spec/templates/examples/constant001.txt +24 -24
  421. data/spec/templates/examples/constant002.txt +6 -6
  422. data/spec/templates/examples/constant003.txt +10 -10
  423. data/spec/templates/examples/method001.html +137 -137
  424. data/spec/templates/examples/method001.txt +35 -35
  425. data/spec/templates/examples/method002.html +91 -91
  426. data/spec/templates/examples/method002.txt +20 -20
  427. data/spec/templates/examples/method003.html +165 -165
  428. data/spec/templates/examples/method003.txt +45 -45
  429. data/spec/templates/examples/method004.html +48 -48
  430. data/spec/templates/examples/method004.txt +10 -10
  431. data/spec/templates/examples/method005.html +105 -105
  432. data/spec/templates/examples/method005.txt +33 -33
  433. data/spec/templates/examples/method006.html +107 -107
  434. data/spec/templates/examples/method006.txt +20 -20
  435. data/spec/templates/examples/module001.dot +33 -33
  436. data/spec/templates/examples/module001.html +833 -833
  437. data/spec/templates/examples/module001.txt +33 -33
  438. data/spec/templates/examples/module002.html +341 -341
  439. data/spec/templates/examples/module003.html +202 -202
  440. data/spec/templates/examples/module004.html +394 -394
  441. data/spec/templates/examples/module005.html +81 -81
  442. data/spec/templates/examples/tag001.txt +82 -82
  443. data/spec/templates/helpers/base_helper_spec.rb +171 -171
  444. data/spec/templates/helpers/html_helper_spec.rb +687 -668
  445. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
  446. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
  447. data/spec/templates/helpers/markup_helper_spec.rb +136 -136
  448. data/spec/templates/helpers/method_helper_spec.rb +107 -107
  449. data/spec/templates/helpers/module_helper_spec.rb +35 -35
  450. data/spec/templates/helpers/shared_signature_examples.rb +126 -126
  451. data/spec/templates/helpers/text_helper_spec.rb +65 -65
  452. data/spec/templates/markup_processor_integrations/asciidoctor_spec.rb +60 -0
  453. data/spec/templates/markup_processor_integrations/integration_spec_helper.rb +46 -0
  454. data/spec/templates/markup_processor_integrations/rdoc_markdown_spec.rb +59 -0
  455. data/spec/templates/markup_processor_integrations/rdoc_spec.rb +39 -0
  456. data/spec/templates/markup_processor_integrations/redcarpet_spec.rb +59 -0
  457. data/spec/templates/markup_processor_integrations/redcloth_spec.rb +48 -0
  458. data/spec/templates/method_spec.rb +118 -118
  459. data/spec/templates/module_spec.rb +203 -203
  460. data/spec/templates/onefile_spec.rb +66 -66
  461. data/spec/templates/section_spec.rb +144 -144
  462. data/spec/templates/spec_helper.rb +76 -76
  463. data/spec/templates/tag_spec.rb +52 -52
  464. data/spec/templates/template_spec.rb +410 -410
  465. data/spec/verifier_spec.rb +106 -106
  466. data/templates/default/class/dot/setup.rb +7 -7
  467. data/templates/default/class/dot/superklass.erb +2 -2
  468. data/templates/default/class/html/constructor_details.erb +8 -8
  469. data/templates/default/class/html/setup.rb +2 -2
  470. data/templates/default/class/html/subclasses.erb +4 -4
  471. data/templates/default/class/setup.rb +36 -36
  472. data/templates/default/class/text/setup.rb +12 -12
  473. data/templates/default/class/text/subclasses.erb +5 -5
  474. data/templates/default/constant/text/header.erb +11 -11
  475. data/templates/default/constant/text/setup.rb +4 -4
  476. data/templates/default/docstring/html/abstract.erb +4 -4
  477. data/templates/default/docstring/html/deprecated.erb +1 -1
  478. data/templates/default/docstring/html/index.erb +5 -5
  479. data/templates/default/docstring/html/note.erb +6 -6
  480. data/templates/default/docstring/html/private.erb +4 -4
  481. data/templates/default/docstring/html/text.erb +1 -1
  482. data/templates/default/docstring/html/todo.erb +6 -6
  483. data/templates/default/docstring/setup.rb +52 -52
  484. data/templates/default/docstring/text/abstract.erb +2 -2
  485. data/templates/default/docstring/text/deprecated.erb +2 -2
  486. data/templates/default/docstring/text/index.erb +2 -2
  487. data/templates/default/docstring/text/note.erb +3 -3
  488. data/templates/default/docstring/text/private.erb +2 -2
  489. data/templates/default/docstring/text/text.erb +1 -1
  490. data/templates/default/docstring/text/todo.erb +3 -3
  491. data/templates/default/fulldoc/html/css/full_list.css +58 -58
  492. data/templates/default/fulldoc/html/css/style.css +496 -496
  493. data/templates/default/fulldoc/html/frames.erb +17 -17
  494. data/templates/default/fulldoc/html/full_list.erb +37 -37
  495. data/templates/default/fulldoc/html/full_list_class.erb +2 -2
  496. data/templates/default/fulldoc/html/full_list_file.erb +7 -7
  497. data/templates/default/fulldoc/html/full_list_method.erb +10 -10
  498. data/templates/default/fulldoc/html/js/app.js +314 -292
  499. data/templates/default/fulldoc/html/js/full_list.js +216 -216
  500. data/templates/default/fulldoc/html/js/jquery.js +3 -3
  501. data/templates/default/fulldoc/html/setup.rb +241 -241
  502. data/templates/default/layout/dot/header.erb +5 -5
  503. data/templates/default/layout/dot/setup.rb +15 -15
  504. data/templates/default/layout/html/breadcrumb.erb +11 -11
  505. data/templates/default/layout/html/files.erb +11 -11
  506. data/templates/default/layout/html/footer.erb +5 -5
  507. data/templates/default/layout/html/headers.erb +15 -15
  508. data/templates/default/layout/html/index.erb +2 -2
  509. data/templates/default/layout/html/layout.erb +23 -23
  510. data/templates/default/layout/html/listing.erb +4 -4
  511. data/templates/default/layout/html/objects.erb +32 -32
  512. data/templates/default/layout/html/script_setup.erb +4 -4
  513. data/templates/default/layout/html/search.erb +12 -12
  514. data/templates/default/layout/html/setup.rb +89 -89
  515. data/templates/default/method/html/header.erb +16 -16
  516. data/templates/default/method/setup.rb +4 -4
  517. data/templates/default/method_details/html/header.erb +2 -2
  518. data/templates/default/method_details/html/method_signature.erb +24 -24
  519. data/templates/default/method_details/html/source.erb +9 -9
  520. data/templates/default/method_details/setup.rb +11 -11
  521. data/templates/default/method_details/text/header.erb +10 -10
  522. data/templates/default/method_details/text/method_signature.erb +12 -12
  523. data/templates/default/method_details/text/setup.rb +11 -11
  524. data/templates/default/module/dot/child.erb +1 -1
  525. data/templates/default/module/dot/dependencies.erb +2 -2
  526. data/templates/default/module/dot/header.erb +6 -6
  527. data/templates/default/module/dot/info.erb +13 -13
  528. data/templates/default/module/dot/setup.rb +15 -15
  529. data/templates/default/module/html/attribute_details.erb +10 -10
  530. data/templates/default/module/html/attribute_summary.erb +8 -8
  531. data/templates/default/module/html/box_info.erb +43 -43
  532. data/templates/default/module/html/children.erb +8 -8
  533. data/templates/default/module/html/constant_summary.erb +17 -17
  534. data/templates/default/module/html/defines.erb +2 -2
  535. data/templates/default/module/html/header.erb +5 -5
  536. data/templates/default/module/html/inherited_attributes.erb +14 -14
  537. data/templates/default/module/html/inherited_constants.erb +8 -8
  538. data/templates/default/module/html/inherited_methods.erb +18 -18
  539. data/templates/default/module/html/item_summary.erb +40 -40
  540. data/templates/default/module/html/method_details_list.erb +9 -9
  541. data/templates/default/module/html/method_summary.erb +13 -13
  542. data/templates/default/module/html/methodmissing.erb +12 -12
  543. data/templates/default/module/setup.rb +167 -167
  544. data/templates/default/module/text/children.erb +9 -9
  545. data/templates/default/module/text/class_meths_list.erb +7 -7
  546. data/templates/default/module/text/extends.erb +7 -7
  547. data/templates/default/module/text/header.erb +7 -7
  548. data/templates/default/module/text/includes.erb +7 -7
  549. data/templates/default/module/text/instance_meths_list.erb +7 -7
  550. data/templates/default/module/text/setup.rb +13 -13
  551. data/templates/default/onefile/html/files.erb +4 -4
  552. data/templates/default/onefile/html/headers.erb +6 -6
  553. data/templates/default/onefile/html/layout.erb +17 -17
  554. data/templates/default/onefile/html/readme.erb +2 -2
  555. data/templates/default/onefile/html/setup.rb +62 -62
  556. data/templates/default/root/dot/child.erb +2 -2
  557. data/templates/default/root/dot/setup.rb +6 -6
  558. data/templates/default/root/html/setup.rb +2 -2
  559. data/templates/default/tags/html/example.erb +10 -10
  560. data/templates/default/tags/html/index.erb +2 -2
  561. data/templates/default/tags/html/option.erb +24 -24
  562. data/templates/default/tags/html/overload.erb +13 -13
  563. data/templates/default/tags/html/see.erb +7 -7
  564. data/templates/default/tags/html/tag.erb +20 -20
  565. data/templates/default/tags/setup.rb +57 -57
  566. data/templates/default/tags/text/example.erb +12 -12
  567. data/templates/default/tags/text/index.erb +1 -1
  568. data/templates/default/tags/text/option.erb +20 -20
  569. data/templates/default/tags/text/overload.erb +19 -19
  570. data/templates/default/tags/text/see.erb +11 -11
  571. data/templates/default/tags/text/tag.erb +13 -13
  572. data/templates/guide/class/html/setup.rb +2 -2
  573. data/templates/guide/docstring/html/setup.rb +2 -2
  574. data/templates/guide/fulldoc/html/css/style.css +108 -108
  575. data/templates/guide/fulldoc/html/js/app.js +33 -33
  576. data/templates/guide/fulldoc/html/setup.rb +74 -74
  577. data/templates/guide/layout/html/layout.erb +81 -81
  578. data/templates/guide/layout/html/setup.rb +25 -25
  579. data/templates/guide/method/html/header.erb +17 -17
  580. data/templates/guide/method/html/setup.rb +22 -22
  581. data/templates/guide/module/html/header.erb +6 -6
  582. data/templates/guide/module/html/method_list.erb +4 -4
  583. data/templates/guide/module/html/setup.rb +27 -27
  584. data/templates/guide/onefile/html/files.erb +4 -4
  585. data/templates/guide/onefile/html/setup.rb +6 -6
  586. data/templates/guide/onefile/html/toc.erb +3 -3
  587. data/templates/guide/tags/html/setup.rb +9 -9
  588. data/yard.gemspec +24 -43
  589. metadata +28 -21
  590. data/spec/examples.txt +0 -1875
@@ -1,17 +1,17 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe YARD::Parser, "tag handling" do
4
- before { parse_file :tag_handler_001, __FILE__ }
5
-
6
- it "knows the list of all available tags" do
7
- expect(P("Foo#foo").tags).to include(P("Foo#foo").tag(:api))
8
- end
9
-
10
- it "knows the text of tags on a method" do
11
- expect(P("Foo#foo").tag(:api).text).to eq "public"
12
- end
13
-
14
- it "returns true when asked whether a tag exists" do
15
- expect(P("Foo#foo").has_tag?(:api)).to be true
16
- end
17
- end
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe YARD::Parser, "tag handling" do
4
+ before { parse_file :tag_handler_001, __FILE__ }
5
+
6
+ it "knows the list of all available tags" do
7
+ expect(P("Foo#foo").tags).to include(P("Foo#foo").tag(:api))
8
+ end
9
+
10
+ it "knows the text of tags on a method" do
11
+ expect(P("Foo#foo").tag(:api).text).to eq "public"
12
+ end
13
+
14
+ it "returns true when asked whether a tag exists" do
15
+ expect(P("Foo#foo").has_tag?(:api)).to be true
16
+ end
17
+ end
@@ -1,118 +1,118 @@
1
- # frozen_string_literal: true
2
-
3
- RSpec.describe YARD::Rake::YardocTask do
4
- before do
5
- @yardoc = YARD::CLI::Yardoc.new
6
- @yardoc.statistics = false
7
- @yardoc.use_document_file = false
8
- @yardoc.use_yardopts_file = false
9
- @yardoc.generate = false
10
- allow(Templates::Engine).to receive(:render)
11
- allow(Templates::Engine).to receive(:generate)
12
- allow(YARD).to receive(:parse)
13
- allow(Registry).to receive(:load)
14
- allow(Registry).to receive(:save)
15
- allow(YARD::CLI::Yardoc).to receive(:new).and_return(@yardoc)
16
- ::Rake.application.clear
17
- end
18
-
19
- def run
20
- ::Rake.application.tasks[0].invoke
21
- end
22
-
23
- describe "#initialize" do
24
- it "allows separate rake task name to be set" do
25
- YARD::Rake::YardocTask.new(:notyardoc)
26
- expect(::Rake.application.tasks[0].name).to eq "notyardoc"
27
- end
28
- end
29
-
30
- describe "#files" do
31
- it "allows files to be set" do
32
- YARD::Rake::YardocTask.new do |t|
33
- t.files = ['a', 'b', 'c']
34
- end
35
- run
36
- expect(@yardoc.files).to eq %w(a b c)
37
- end
38
- end
39
-
40
- describe "#options" do
41
- it "allows extra options to be set" do
42
- YARD::Rake::YardocTask.new do |t|
43
- t.options = ['--private', '--protected']
44
- end
45
- run
46
- expect(@yardoc.visibilities).to eq [:public, :private, :protected]
47
- end
48
-
49
- it "allows --api and --no-api" do
50
- YARD::Rake::YardocTask.new do |t|
51
- t.options = %w(--api public --no-api)
52
- end
53
- run
54
- expect(@yardoc.options.verifier.expressions).to include('["public"].include?(@api.text) || !@api')
55
- end
56
- end
57
-
58
- describe "#stats_options" do
59
- before do
60
- @yard_stats = Object.new
61
- allow(@yard_stats).to receive(:run)
62
- allow(YARD::CLI::Stats).to receive(:new).and_return(@yard_stats)
63
- end
64
-
65
- it "invokes stats" do
66
- expect(@yard_stats).to receive(:run).with('--list-undoc', '--use-cache')
67
- @yardoc.statistics = true
68
- YARD::Rake::YardocTask.new do |t|
69
- t.stats_options = %w(--list-undoc)
70
- end
71
- run
72
- expect(@yardoc.statistics).to be false
73
- end
74
- end
75
-
76
- describe "#before" do
77
- it "allows before callback" do
78
- proc = lambda {}
79
- expect(proc).to receive(:call)
80
- expect(@yardoc).to receive(:run)
81
- YARD::Rake::YardocTask.new {|t| t.before = proc }
82
- run
83
- end
84
- end
85
-
86
- describe "#after" do
87
- it "allows after callback" do
88
- proc = lambda {}
89
- expect(proc).to receive(:call)
90
- expect(@yardoc).to receive(:run)
91
- YARD::Rake::YardocTask.new {|t| t.after = proc }
92
- run
93
- end
94
- end
95
-
96
- describe "#verifier" do
97
- it "allows a verifier proc to be set" do
98
- verifier = Verifier.new
99
- expect(@yardoc).to receive(:run) do
100
- expect(@yardoc.options[:verifier]).to eq verifier
101
- end
102
- YARD::Rake::YardocTask.new {|t| t.verifier = verifier }
103
- run
104
- end
105
-
106
- it "overrides --query options" do
107
- verifier = Verifier.new
108
- expect(@yardoc).to receive(:run) do
109
- expect(@yardoc.options[:verifier]).to eq verifier
110
- end
111
- YARD::Rake::YardocTask.new do |t|
112
- t.options += ['--query', '@return']
113
- t.verifier = verifier
114
- end
115
- run
116
- end
117
- end
118
- end
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe YARD::Rake::YardocTask do
4
+ before do
5
+ @yardoc = YARD::CLI::Yardoc.new
6
+ @yardoc.statistics = false
7
+ @yardoc.use_document_file = false
8
+ @yardoc.use_yardopts_file = false
9
+ @yardoc.generate = false
10
+ allow(Templates::Engine).to receive(:render)
11
+ allow(Templates::Engine).to receive(:generate)
12
+ allow(YARD).to receive(:parse)
13
+ allow(Registry).to receive(:load)
14
+ allow(Registry).to receive(:save)
15
+ allow(YARD::CLI::Yardoc).to receive(:new).and_return(@yardoc)
16
+ ::Rake.application.clear
17
+ end
18
+
19
+ def run
20
+ ::Rake.application.tasks[0].invoke
21
+ end
22
+
23
+ describe "#initialize" do
24
+ it "allows separate rake task name to be set" do
25
+ YARD::Rake::YardocTask.new(:notyardoc)
26
+ expect(::Rake.application.tasks[0].name).to eq "notyardoc"
27
+ end
28
+ end
29
+
30
+ describe "#files" do
31
+ it "allows files to be set" do
32
+ YARD::Rake::YardocTask.new do |t|
33
+ t.files = ['a', 'b', 'c']
34
+ end
35
+ run
36
+ expect(@yardoc.files).to eq %w(a b c)
37
+ end
38
+ end
39
+
40
+ describe "#options" do
41
+ it "allows extra options to be set" do
42
+ YARD::Rake::YardocTask.new do |t|
43
+ t.options = ['--private', '--protected']
44
+ end
45
+ run
46
+ expect(@yardoc.visibilities).to eq [:public, :private, :protected]
47
+ end
48
+
49
+ it "allows --api and --no-api" do
50
+ YARD::Rake::YardocTask.new do |t|
51
+ t.options = %w(--api public --no-api)
52
+ end
53
+ run
54
+ expect(@yardoc.options.verifier.expressions).to include('["public"].include?(@api.text) || !@api')
55
+ end
56
+ end
57
+
58
+ describe "#stats_options" do
59
+ before do
60
+ @yard_stats = Object.new
61
+ allow(@yard_stats).to receive(:run)
62
+ allow(YARD::CLI::Stats).to receive(:new).and_return(@yard_stats)
63
+ end
64
+
65
+ it "invokes stats" do
66
+ expect(@yard_stats).to receive(:run).with('--list-undoc', '--use-cache')
67
+ @yardoc.statistics = true
68
+ YARD::Rake::YardocTask.new do |t|
69
+ t.stats_options = %w(--list-undoc)
70
+ end
71
+ run
72
+ expect(@yardoc.statistics).to be false
73
+ end
74
+ end
75
+
76
+ describe "#before" do
77
+ it "allows before callback" do
78
+ proc = lambda {}
79
+ expect(proc).to receive(:call)
80
+ expect(@yardoc).to receive(:run)
81
+ YARD::Rake::YardocTask.new {|t| t.before = proc }
82
+ run
83
+ end
84
+ end
85
+
86
+ describe "#after" do
87
+ it "allows after callback" do
88
+ proc = lambda {}
89
+ expect(proc).to receive(:call)
90
+ expect(@yardoc).to receive(:run)
91
+ YARD::Rake::YardocTask.new {|t| t.after = proc }
92
+ run
93
+ end
94
+ end
95
+
96
+ describe "#verifier" do
97
+ it "allows a verifier proc to be set" do
98
+ verifier = Verifier.new
99
+ expect(@yardoc).to receive(:run) do
100
+ expect(@yardoc.options[:verifier]).to eq verifier
101
+ end
102
+ YARD::Rake::YardocTask.new {|t| t.verifier = verifier }
103
+ run
104
+ end
105
+
106
+ it "overrides --query options" do
107
+ verifier = Verifier.new
108
+ expect(@yardoc).to receive(:run) do
109
+ expect(@yardoc.options[:verifier]).to eq verifier
110
+ end
111
+ YARD::Rake::YardocTask.new do |t|
112
+ t.options += ['--query', '@return']
113
+ t.verifier = verifier
114
+ end
115
+ run
116
+ end
117
+ end
118
+ end
@@ -1,463 +1,463 @@
1
- # frozen_string_literal: true
2
- include CodeObjects
3
-
4
- require "thread"
5
-
6
- RSpec.describe YARD::Registry do
7
- before { Registry.clear }
8
-
9
- describe ".yardoc_file_for_gem" do
10
- before do
11
- @gem = double('gem')
12
- allow(@gem).to receive(:name).and_return('foo')
13
- allow(@gem).to receive(:full_name).and_return('foo-1.0')
14
- allow(@gem).to receive(:full_gem_path).and_return('/path/to/foo')
15
- allow(@gem).to receive(:doc_dir).and_return('/path/to/foo/doc')
16
- allow(@gem).to receive(:doc_dir).with('.yardoc').and_return('/path/to/foo/doc/.yardoc')
17
- end
18
-
19
- it "returns nil if gem isn't found" do
20
- allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([])
21
- expect(Registry.yardoc_file_for_gem('foo')).to eq nil
22
- end
23
-
24
- it "allows version to be specified" do
25
- allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '= 2').and_return([])
26
- expect(Registry.yardoc_file_for_gem('foo', '= 2')).to eq nil
27
- end
28
-
29
- it "returns existing .yardoc path for gem when for_writing=false" do
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
- expect(Registry.yardoc_file_for_gem('foo')).to eq '/path/to/foo/.yardoc'
34
- end
35
-
36
- it "returns new existing .yardoc path for gem when for_writing=false" do
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
- expect(Registry.yardoc_file_for_gem('foo')).to eq '/path/to/foo/doc/.yardoc'
41
- end
42
-
43
- it "returns nil if no .yardoc path exists in gem when for_writing=false" do
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
- expect(Registry.yardoc_file_for_gem('foo')).to eq nil
48
- end
49
-
50
- it "searches local gem path first if for_writing=false" do
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
- expect(Registry.yardoc_file_for_gem('foo')).to match %r{/.yard/gem_index/foo-1.0.yardoc$}
54
- end
55
-
56
- it "returns global .yardoc path for gem if for_writing=true and dir is writable" do
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])
62
- expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to eq '/path/to/foo/.yardoc'
63
- end
64
-
65
- it "returns new global .yardoc path for gem if for_writing=true and dir is writable" do
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])
68
- expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to eq '/path/to/foo/doc/.yardoc'
69
- end
70
-
71
- it "returns new global .yardoc path for gem if for_writing=true and parent dir is writable (but dir does not exist)" do
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])
76
- expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to eq '/path/to/foo/doc/.yardoc'
77
- end
78
-
79
- it "returns local .yardoc path for gem if for_writing=true and dir is not writable" do
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])
83
- expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to match %r{/.yard/gem_index/foo-1.0.yardoc$}
84
- end
85
-
86
- it "returns gem path if gem starts with yard-doc- and for_writing=false" do
87
- allow(@gem).to receive(:name).and_return('yard-doc-core')
88
- allow(@gem).to receive(:full_name).and_return('yard-doc-core-1.0')
89
- allow(@gem).to receive(:full_gem_path).and_return('/path/to/yard-doc-core')
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)
92
- expect(Registry.yardoc_file_for_gem('yard-doc-core')).to eq '/path/to/yard-doc-core/.yardoc'
93
- end
94
-
95
- it "returns nil if gem starts with yard-doc- and for_writing=true" do
96
- allow(@gem).to receive(:name).and_return('yard-doc-core')
97
- allow(@gem).to receive(:full_name).and_return('yard-doc-core-1.0')
98
- allow(@gem).to receive(:full_gem_path).and_return('/path/to/yard-doc-core')
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)
101
- expect(Registry.yardoc_file_for_gem('yard-doc-core', '>= 0', true)).to eq nil
102
- end
103
- end
104
-
105
- describe ".root" do
106
- it "has an empty path for root" do
107
- expect(Registry.root.path).to eq ""
108
- end
109
- end
110
-
111
- describe ".locale" do
112
- it "loads locale object" do
113
- fr_locale = I18n::Locale.new("fr")
114
- store = Registry.send(:thread_local_store)
115
- expect(store).to receive(:locale).with("fr").and_return(fr_locale)
116
- expect(Registry.locale("fr")).to eq fr_locale
117
- end
118
- end
119
-
120
- describe ".resolve" do
121
- it "resolves any existing namespace" do
122
- o1 = ModuleObject.new(:root, :A)
123
- o2 = ModuleObject.new(o1, :B)
124
- o3 = ModuleObject.new(o2, :C)
125
- expect(Registry.resolve(o1, "B::C")).to eq o3
126
- Registry.resolve(:root, "A::B::C")
127
- end
128
-
129
- it "resolves an object in the root namespace when prefixed with ::" do
130
- o1 = ModuleObject.new(:root, :A)
131
- o2 = ModuleObject.new(o1, :B)
132
- o3 = ModuleObject.new(o2, :C)
133
- expect(Registry.resolve(o3, "::A")).to eq o1
134
-
135
- expect(Registry.resolve(o3, "::String", false, true)).to eq P(:String)
136
- end
137
-
138
- it "resolves instance methods with # prefix" do
139
- o1 = ModuleObject.new(:root, :A)
140
- o2 = ModuleObject.new(o1, :B)
141
- o3 = ModuleObject.new(o2, :C)
142
- o4 = MethodObject.new(o3, :methname)
143
- expect(Registry.resolve(o1, "B::C#methname")).to eq o4
144
- expect(Registry.resolve(o2, "C#methname")).to eq o4
145
- expect(Registry.resolve(o3, "#methname")).to eq o4
146
- end
147
-
148
- it "resolves instance methods in the root without # prefix" do
149
- o = MethodObject.new(:root, :methname)
150
- expect(Registry.resolve(:root, 'methname')).to eq o
151
- end
152
-
153
- it "does lexical lookup on the initial namespace" do
154
- YARD.parse_string <<-eof
155
- module A
156
- module B; module C; end end
157
- module D; module E; end end
158
- end
159
- eof
160
-
161
- d = Registry.at('A::B::C')
162
- expect(Registry.resolve(d, 'D::E')).to eq Registry.at('A::D::E')
163
- end
164
-
165
- it "resolves superclass methods when inheritance = true" do
166
- superyard = ClassObject.new(:root, :SuperYard)
167
- yard = ClassObject.new(:root, :YARD)
168
- yard.superclass = superyard
169
- imeth = MethodObject.new(superyard, :hello)
170
- cmeth = MethodObject.new(superyard, :class_hello, :class)
171
-
172
- expect(Registry.resolve(yard, "#hello", false)).to be nil
173
- expect(Registry.resolve(yard, "#hello", true)).to eq imeth
174
- expect(Registry.resolve(yard, "class_hello", false)).to be nil
175
- expect(Registry.resolve(yard, "class_hello", true)).to eq cmeth
176
- end
177
-
178
- it "does not look at superclass proxies when inheritance = true" do
179
- YARD.parse_string "class A::B; end"
180
- expect(Registry.resolve(Registry.at('A::B'), "#bar", true)).to eq nil
181
- end
182
-
183
- it "resolves mixin methods when inheritance = true" do
184
- yard = ClassObject.new(:root, :YARD)
185
- mixin = ModuleObject.new(:root, :Mixin)
186
- yard.mixins(:instance) << mixin
187
- imeth = MethodObject.new(mixin, :hello)
188
- cmeth = MethodObject.new(mixin, :class_hello, :class)
189
-
190
- expect(Registry.resolve(yard, "#hello", false)).to be nil
191
- expect(Registry.resolve(yard, "#hello", true)).to eq imeth
192
- expect(Registry.resolve(yard, "class_hello", false)).to be nil
193
- expect(Registry.resolve(yard, "class_hello", true)).to eq cmeth
194
- end
195
-
196
- it "resolves methods in Object when inheritance = true" do
197
- YARD.parse_string <<-eof
198
- class Object; def foo; end end
199
- class A; end
200
- class MyObject < A; end
201
- eof
202
-
203
- expect(Registry.resolve(P('MyObject'), '#foo', true)).to eq P('Object#foo')
204
- end
205
-
206
- it "resolves methods in BasicObject when inheritance = true" do
207
- YARD.parse_string <<-eof
208
- class BasicObject; def foo; end end
209
- class A; end
210
- class MyObject < A; end
211
- eof
212
-
213
- expect(Registry.resolve(P('MyObject'), '#foo', true)).to eq P('BasicObject#foo')
214
- end
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
-
231
- it "does not resolve methods in Object if inheriting BasicObject when inheritance = true" do
232
- YARD.parse_string <<-eof
233
- class Object; def foo; end end
234
- class MyObject < BasicObject; end
235
- eof
236
-
237
- expect(Registry.resolve(P('MyObject'), '#foo', true)).to be nil
238
- end
239
-
240
- it "performs lookups on each individual namespace when inheritance = true" do
241
- YARD.parse_string <<-eof
242
- module A
243
- module B; include A::D end
244
- module C; extend A::D end
245
- module D; def bar; end end
246
- end
247
- eof
248
-
249
- r = Registry.root
250
- expect(Registry.resolve(r, 'A::B#bar', true)).to eq Registry.at('A::D#bar')
251
- expect(Registry.resolve(r, 'A::C.bar', true)).to eq Registry.at('A::D#bar')
252
- end
253
-
254
- it "allows type=:typename to ensure resolved object is of a certain type" do
255
- YARD.parse_string "class Foo; end"
256
- expect(Registry.resolve(Registry.root, 'Foo')).to eq Registry.at('Foo')
257
- expect(Registry.resolve(Registry.root, 'Foo', false, false, :method)).to be nil
258
- end
259
-
260
- it "allows keep trying to find obj where type equals object type" do
261
- YARD.parse_string <<-eof
262
- module Foo
263
- class Bar; end
264
- def self.Bar; end
265
- end
266
- eof
267
- expect(Registry.resolve(P('Foo'), 'Bar', false, false, :class)).to eq Registry.at('Foo::Bar')
268
- expect(Registry.resolve(P('Foo'), 'Bar', false, false, :method)).to eq(
269
- Registry.at('Foo.Bar')
270
- )
271
- end
272
-
273
- it "returns proxy fallback with given type if supplied" do
274
- YARD.parse_string "module Foo; end"
275
- proxy = Registry.resolve(P('Foo'), 'Bar', false, true, :method)
276
- expect(proxy.type).to eq :method
277
- proxy = Registry.resolve(P('Qux'), 'Bar', false, true, :method)
278
- expect(proxy.type).to eq :method
279
- end
280
-
281
- it "does not return proxy on original namespace if path is anchored to root" do
282
- YARD.parse_string "module Foo; class Bar; def baz; end end end"
283
- proxy = Registry.resolve(P('Foo::Bar#baz'), '::Bar', true, true)
284
- expect(proxy.path).to eq('Bar')
285
- expect(proxy.namespace).to equal(Registry.root)
286
- expect(proxy.type).to eq(:proxy)
287
- end
288
-
289
- it "only checks 'Path' in lookup on root namespace" do
290
- expect(Registry).to receive(:at).once.with('Test').and_return(true)
291
- Registry.resolve(Registry.root, "Test")
292
- end
293
-
294
- it "does not perform lookup by joining namespace and name without separator" do
295
- yard = ClassObject.new(:root, :YARD)
296
- expect(Registry).not_to receive(:at).with('YARDB')
297
- Registry.resolve(yard, 'B')
298
- end
299
- end
300
-
301
- describe ".all" do
302
- it "returns objects of types specified by arguments" do
303
- ModuleObject.new(:root, :A)
304
- o1 = ClassObject.new(:root, :B)
305
- o2 = MethodObject.new(:root, :testing)
306
- r = Registry.all(:method, :class)
307
- expect(r).to include(o1, o2)
308
- end
309
-
310
- it "returns code objects" do
311
- o1 = ModuleObject.new(:root, :A)
312
- o2 = ClassObject.new(:root, :B)
313
- MethodObject.new(:root, :testing)
314
- r = Registry.all.select {|t| NamespaceObject === t }
315
- expect(r).to include(o1, o2)
316
- end
317
-
318
- it "allows .all to omit list" do
319
- o1 = ModuleObject.new(:root, :A)
320
- o2 = ClassObject.new(:root, :B)
321
- r = Registry.all
322
- expect(r).to include(o1, o2)
323
- end
324
- end
325
-
326
- describe ".paths" do
327
- it "returns all object paths" do
328
- ModuleObject.new(:root, :A)
329
- ClassObject.new(:root, :B)
330
- expect(Registry.paths).to include('A', 'B')
331
- end
332
- end
333
-
334
- describe ".load_yardoc" do
335
- it "delegates load to RegistryStore" do
336
- store = RegistryStore.new
337
- expect(store).to receive(:load).with('foo')
338
- expect(RegistryStore).to receive(:new).and_return(store)
339
- Registry.yardoc_file = 'foo'
340
- Registry.load_yardoc
341
- end
342
-
343
- it "returns itself" do
344
- expect(Registry.load_yardoc).to eq Registry
345
- end
346
-
347
- it "maintains hash key equality on loaded objects" do
348
- Registry.clear
349
- Registry.load!(File.dirname(__FILE__) + '/serializers/data/serialized_yardoc')
350
- baz = Registry.at('Foo#baz')
351
- expect(Registry.at('Foo').aliases.keys).to include(baz)
352
- expect(Registry.at('Foo').aliases.key?(baz)).to be true
353
- end
354
- end
355
-
356
- ['load', 'load_all', 'load!'].each do |meth|
357
- describe('.' + meth) do
358
- it "returns itself" do
359
- expect(Registry.send(meth)).to eq Registry
360
- end
361
- end
362
- end
363
-
364
- describe ".each" do
365
- before do
366
- YARD.parse_string "def a; end; def b; end; def c; end"
367
- end
368
-
369
- after { Registry.clear }
370
-
371
- it "iterates over .all" do
372
- items = []
373
- Registry.each {|x| items << x.path }
374
- expect(items.sort).to eq ['#a', '#b', '#c']
375
- end
376
-
377
- it "includes Enumerable and allow for find, select" do
378
- expect(Registry.find {|x| x.path == "#a" }).to be_a(CodeObjects::MethodObject)
379
- end
380
- end
381
-
382
- describe ".instance" do
383
- it "returns itself" do
384
- expect(Registry.instance).to eq Registry
385
- end
386
- end
387
-
388
- describe ".single_object_db" do
389
- it "defaults to nil" do
390
- expect(Registry.single_object_db).to eq nil
391
- Thread.new { expect(Registry.single_object_db).to eq nil }.join
392
- end
393
- end
394
-
395
- describe "Thread local" do
396
- it "maintains two Registries in separate threads" do
397
- barrier = 0
398
- mutex = Mutex.new
399
- threads = []
400
- threads << Thread.new do
401
- Registry.clear
402
- YARD.parse_string "# docstring 1\nclass Foo; end"
403
- mutex.synchronize { barrier += 1 }
404
- "barrier < 2, spinning" while barrier < 2
405
- expect(Registry.at('Foo').docstring).to eq "docstring 1"
406
- end
407
- threads << Thread.new do
408
- Registry.clear
409
- YARD.parse_string "# docstring 2\nclass Foo; end"
410
- mutex.synchronize { barrier += 1 }
411
- "barrier < 2, spinning" while barrier < 2
412
- expect(Registry.at('Foo').docstring).to eq "docstring 2"
413
- end
414
- threads.each(&:join)
415
- end
416
-
417
- it "allows setting of yardoc_file in separate threads" do
418
- barrier = 0
419
- mutex = Mutex.new
420
- threads = []
421
- threads << Thread.new do
422
- expect(Registry.yardoc_file).to eq '.yardoc'
423
- Registry.yardoc_file = 'foo'
424
- mutex.synchronize { barrier += 1 }
425
- "barrier = 1, spinning" while barrier == 1
426
- expect(Registry.yardoc_file).to eq 'foo'
427
- end
428
- threads << Thread.new do
429
- "barrier = 0, spinning" while barrier == 0
430
- expect(Registry.yardoc_file).to eq '.yardoc'
431
- mutex.synchronize { barrier += 1 }
432
- Registry.yardoc_file = 'foo2'
433
- end
434
- threads.each(&:join)
435
- Registry.yardoc_file = Registry::DEFAULT_YARDOC_FILE
436
- end
437
-
438
- it "automatically clears in new threads" do
439
- Thread.new { expect(Registry.all).to be_empty }.join
440
- end
441
-
442
- it "allows setting of po_dir in separate threads" do
443
- barrier = 0
444
- mutex = Mutex.new
445
- threads = []
446
- threads << Thread.new do
447
- expect(Registry.po_dir).to eq 'po'
448
- Registry.po_dir = 'locale'
449
- mutex.synchronize { barrier += 1 }
450
- "barrier = 1, spinning" while barrier == 1
451
- expect(Registry.po_dir).to eq 'locale'
452
- end
453
- threads << Thread.new do
454
- "barrier = 0, spinning" while barrier == 0
455
- expect(Registry.po_dir).to eq 'po'
456
- mutex.synchronize { barrier += 1 }
457
- Registry.po_dir = '.'
458
- end
459
- threads.each(&:join)
460
- Registry.po_dir = Registry::DEFAULT_PO_DIR
461
- end
462
- end
463
- end
1
+ # frozen_string_literal: true
2
+ include CodeObjects
3
+
4
+ require "thread"
5
+
6
+ RSpec.describe YARD::Registry do
7
+ before { Registry.clear }
8
+
9
+ describe ".yardoc_file_for_gem" do
10
+ before do
11
+ @gem = double('gem')
12
+ allow(@gem).to receive(:name).and_return('foo')
13
+ allow(@gem).to receive(:full_name).and_return('foo-1.0')
14
+ allow(@gem).to receive(:full_gem_path).and_return('/path/to/foo')
15
+ allow(@gem).to receive(:doc_dir).and_return('/path/to/foo/doc')
16
+ allow(@gem).to receive(:doc_dir).with('.yardoc').and_return('/path/to/foo/doc/.yardoc')
17
+ end
18
+
19
+ it "returns nil if gem isn't found" do
20
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '>= 0').and_return([])
21
+ expect(Registry.yardoc_file_for_gem('foo')).to eq nil
22
+ end
23
+
24
+ it "allows version to be specified" do
25
+ allow(YARD::GemIndex).to receive(:find_all_by_name).with('foo', '= 2').and_return([])
26
+ expect(Registry.yardoc_file_for_gem('foo', '= 2')).to eq nil
27
+ end
28
+
29
+ it "returns existing .yardoc path for gem when for_writing=false" do
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
+ expect(Registry.yardoc_file_for_gem('foo')).to eq '/path/to/foo/.yardoc'
34
+ end
35
+
36
+ it "returns new existing .yardoc path for gem when for_writing=false" do
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
+ expect(Registry.yardoc_file_for_gem('foo')).to eq '/path/to/foo/doc/.yardoc'
41
+ end
42
+
43
+ it "returns nil if no .yardoc path exists in gem when for_writing=false" do
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
+ expect(Registry.yardoc_file_for_gem('foo')).to eq nil
48
+ end
49
+
50
+ it "searches local gem path first if for_writing=false" do
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
+ expect(Registry.yardoc_file_for_gem('foo')).to match %r{/.yard/gem_index/foo-1.0.yardoc$}
54
+ end
55
+
56
+ it "returns global .yardoc path for gem if for_writing=true and dir is writable" do
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])
62
+ expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to eq '/path/to/foo/.yardoc'
63
+ end
64
+
65
+ it "returns new global .yardoc path for gem if for_writing=true and dir is writable" do
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])
68
+ expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to eq '/path/to/foo/doc/.yardoc'
69
+ end
70
+
71
+ it "returns new global .yardoc path for gem if for_writing=true and parent dir is writable (but dir does not exist)" do
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])
76
+ expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to eq '/path/to/foo/doc/.yardoc'
77
+ end
78
+
79
+ it "returns local .yardoc path for gem if for_writing=true and dir is not writable" do
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])
83
+ expect(Registry.yardoc_file_for_gem('foo', '>= 0', true)).to match %r{/.yard/gem_index/foo-1.0.yardoc$}
84
+ end
85
+
86
+ it "returns gem path if gem starts with yard-doc- and for_writing=false" do
87
+ allow(@gem).to receive(:name).and_return('yard-doc-core')
88
+ allow(@gem).to receive(:full_name).and_return('yard-doc-core-1.0')
89
+ allow(@gem).to receive(:full_gem_path).and_return('/path/to/yard-doc-core')
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)
92
+ expect(Registry.yardoc_file_for_gem('yard-doc-core')).to eq '/path/to/yard-doc-core/.yardoc'
93
+ end
94
+
95
+ it "returns nil if gem starts with yard-doc- and for_writing=true" do
96
+ allow(@gem).to receive(:name).and_return('yard-doc-core')
97
+ allow(@gem).to receive(:full_name).and_return('yard-doc-core-1.0')
98
+ allow(@gem).to receive(:full_gem_path).and_return('/path/to/yard-doc-core')
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)
101
+ expect(Registry.yardoc_file_for_gem('yard-doc-core', '>= 0', true)).to eq nil
102
+ end
103
+ end
104
+
105
+ describe ".root" do
106
+ it "has an empty path for root" do
107
+ expect(Registry.root.path).to eq ""
108
+ end
109
+ end
110
+
111
+ describe ".locale" do
112
+ it "loads locale object" do
113
+ fr_locale = I18n::Locale.new("fr")
114
+ store = Registry.send(:thread_local_store)
115
+ expect(store).to receive(:locale).with("fr").and_return(fr_locale)
116
+ expect(Registry.locale("fr")).to eq fr_locale
117
+ end
118
+ end
119
+
120
+ describe ".resolve" do
121
+ it "resolves any existing namespace" do
122
+ o1 = ModuleObject.new(:root, :A)
123
+ o2 = ModuleObject.new(o1, :B)
124
+ o3 = ModuleObject.new(o2, :C)
125
+ expect(Registry.resolve(o1, "B::C")).to eq o3
126
+ Registry.resolve(:root, "A::B::C")
127
+ end
128
+
129
+ it "resolves an object in the root namespace when prefixed with ::" do
130
+ o1 = ModuleObject.new(:root, :A)
131
+ o2 = ModuleObject.new(o1, :B)
132
+ o3 = ModuleObject.new(o2, :C)
133
+ expect(Registry.resolve(o3, "::A")).to eq o1
134
+
135
+ expect(Registry.resolve(o3, "::String", false, true)).to eq P(:String)
136
+ end
137
+
138
+ it "resolves instance methods with # prefix" do
139
+ o1 = ModuleObject.new(:root, :A)
140
+ o2 = ModuleObject.new(o1, :B)
141
+ o3 = ModuleObject.new(o2, :C)
142
+ o4 = MethodObject.new(o3, :methname)
143
+ expect(Registry.resolve(o1, "B::C#methname")).to eq o4
144
+ expect(Registry.resolve(o2, "C#methname")).to eq o4
145
+ expect(Registry.resolve(o3, "#methname")).to eq o4
146
+ end
147
+
148
+ it "resolves instance methods in the root without # prefix" do
149
+ o = MethodObject.new(:root, :methname)
150
+ expect(Registry.resolve(:root, 'methname')).to eq o
151
+ end
152
+
153
+ it "does lexical lookup on the initial namespace" do
154
+ YARD.parse_string <<-eof
155
+ module A
156
+ module B; module C; end end
157
+ module D; module E; end end
158
+ end
159
+ eof
160
+
161
+ d = Registry.at('A::B::C')
162
+ expect(Registry.resolve(d, 'D::E')).to eq Registry.at('A::D::E')
163
+ end
164
+
165
+ it "resolves superclass methods when inheritance = true" do
166
+ superyard = ClassObject.new(:root, :SuperYard)
167
+ yard = ClassObject.new(:root, :YARD)
168
+ yard.superclass = superyard
169
+ imeth = MethodObject.new(superyard, :hello)
170
+ cmeth = MethodObject.new(superyard, :class_hello, :class)
171
+
172
+ expect(Registry.resolve(yard, "#hello", false)).to be nil
173
+ expect(Registry.resolve(yard, "#hello", true)).to eq imeth
174
+ expect(Registry.resolve(yard, "class_hello", false)).to be nil
175
+ expect(Registry.resolve(yard, "class_hello", true)).to eq cmeth
176
+ end
177
+
178
+ it "does not look at superclass proxies when inheritance = true" do
179
+ YARD.parse_string "class A::B; end"
180
+ expect(Registry.resolve(Registry.at('A::B'), "#bar", true)).to eq nil
181
+ end
182
+
183
+ it "resolves mixin methods when inheritance = true" do
184
+ yard = ClassObject.new(:root, :YARD)
185
+ mixin = ModuleObject.new(:root, :Mixin)
186
+ yard.mixins(:instance) << mixin
187
+ imeth = MethodObject.new(mixin, :hello)
188
+ cmeth = MethodObject.new(mixin, :class_hello, :class)
189
+
190
+ expect(Registry.resolve(yard, "#hello", false)).to be nil
191
+ expect(Registry.resolve(yard, "#hello", true)).to eq imeth
192
+ expect(Registry.resolve(yard, "class_hello", false)).to be nil
193
+ expect(Registry.resolve(yard, "class_hello", true)).to eq cmeth
194
+ end
195
+
196
+ it "resolves methods in Object when inheritance = true" do
197
+ YARD.parse_string <<-eof
198
+ class Object; def foo; end end
199
+ class A; end
200
+ class MyObject < A; end
201
+ eof
202
+
203
+ expect(Registry.resolve(P('MyObject'), '#foo', true)).to eq P('Object#foo')
204
+ end
205
+
206
+ it "resolves methods in BasicObject when inheritance = true" do
207
+ YARD.parse_string <<-eof
208
+ class BasicObject; def foo; end end
209
+ class A; end
210
+ class MyObject < A; end
211
+ eof
212
+
213
+ expect(Registry.resolve(P('MyObject'), '#foo', true)).to eq P('BasicObject#foo')
214
+ end
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
+
231
+ it "does not resolve methods in Object if inheriting BasicObject when inheritance = true" do
232
+ YARD.parse_string <<-eof
233
+ class Object; def foo; end end
234
+ class MyObject < BasicObject; end
235
+ eof
236
+
237
+ expect(Registry.resolve(P('MyObject'), '#foo', true)).to be nil
238
+ end
239
+
240
+ it "performs lookups on each individual namespace when inheritance = true" do
241
+ YARD.parse_string <<-eof
242
+ module A
243
+ module B; include A::D end
244
+ module C; extend A::D end
245
+ module D; def bar; end end
246
+ end
247
+ eof
248
+
249
+ r = Registry.root
250
+ expect(Registry.resolve(r, 'A::B#bar', true)).to eq Registry.at('A::D#bar')
251
+ expect(Registry.resolve(r, 'A::C.bar', true)).to eq Registry.at('A::D#bar')
252
+ end
253
+
254
+ it "allows type=:typename to ensure resolved object is of a certain type" do
255
+ YARD.parse_string "class Foo; end"
256
+ expect(Registry.resolve(Registry.root, 'Foo')).to eq Registry.at('Foo')
257
+ expect(Registry.resolve(Registry.root, 'Foo', false, false, :method)).to be nil
258
+ end
259
+
260
+ it "allows keep trying to find obj where type equals object type" do
261
+ YARD.parse_string <<-eof
262
+ module Foo
263
+ class Bar; end
264
+ def self.Bar; end
265
+ end
266
+ eof
267
+ expect(Registry.resolve(P('Foo'), 'Bar', false, false, :class)).to eq Registry.at('Foo::Bar')
268
+ expect(Registry.resolve(P('Foo'), 'Bar', false, false, :method)).to eq(
269
+ Registry.at('Foo.Bar')
270
+ )
271
+ end
272
+
273
+ it "returns proxy fallback with given type if supplied" do
274
+ YARD.parse_string "module Foo; end"
275
+ proxy = Registry.resolve(P('Foo'), 'Bar', false, true, :method)
276
+ expect(proxy.type).to eq :method
277
+ proxy = Registry.resolve(P('Qux'), 'Bar', false, true, :method)
278
+ expect(proxy.type).to eq :method
279
+ end
280
+
281
+ it "does not return proxy on original namespace if path is anchored to root" do
282
+ YARD.parse_string "module Foo; class Bar; def baz; end end end"
283
+ proxy = Registry.resolve(P('Foo::Bar#baz'), '::Bar', true, true)
284
+ expect(proxy.path).to eq('Bar')
285
+ expect(proxy.namespace).to equal(Registry.root)
286
+ expect(proxy.type).to eq(:proxy)
287
+ end
288
+
289
+ it "only checks 'Path' in lookup on root namespace" do
290
+ expect(Registry).to receive(:at).once.with('Test').and_return(true)
291
+ Registry.resolve(Registry.root, "Test")
292
+ end
293
+
294
+ it "does not perform lookup by joining namespace and name without separator" do
295
+ yard = ClassObject.new(:root, :YARD)
296
+ expect(Registry).not_to receive(:at).with('YARDB')
297
+ Registry.resolve(yard, 'B')
298
+ end
299
+ end
300
+
301
+ describe ".all" do
302
+ it "returns objects of types specified by arguments" do
303
+ ModuleObject.new(:root, :A)
304
+ o1 = ClassObject.new(:root, :B)
305
+ o2 = MethodObject.new(:root, :testing)
306
+ r = Registry.all(:method, :class)
307
+ expect(r).to include(o1, o2)
308
+ end
309
+
310
+ it "returns code objects" do
311
+ o1 = ModuleObject.new(:root, :A)
312
+ o2 = ClassObject.new(:root, :B)
313
+ MethodObject.new(:root, :testing)
314
+ r = Registry.all.select {|t| NamespaceObject === t }
315
+ expect(r).to include(o1, o2)
316
+ end
317
+
318
+ it "allows .all to omit list" do
319
+ o1 = ModuleObject.new(:root, :A)
320
+ o2 = ClassObject.new(:root, :B)
321
+ r = Registry.all
322
+ expect(r).to include(o1, o2)
323
+ end
324
+ end
325
+
326
+ describe ".paths" do
327
+ it "returns all object paths" do
328
+ ModuleObject.new(:root, :A)
329
+ ClassObject.new(:root, :B)
330
+ expect(Registry.paths).to include('A', 'B')
331
+ end
332
+ end
333
+
334
+ describe ".load_yardoc" do
335
+ it "delegates load to RegistryStore" do
336
+ store = RegistryStore.new
337
+ expect(store).to receive(:load).with('foo')
338
+ expect(RegistryStore).to receive(:new).and_return(store)
339
+ Registry.yardoc_file = 'foo'
340
+ Registry.load_yardoc
341
+ end
342
+
343
+ it "returns itself" do
344
+ expect(Registry.load_yardoc).to eq Registry
345
+ end
346
+
347
+ it "maintains hash key equality on loaded objects" do
348
+ Registry.clear
349
+ Registry.load!(File.dirname(__FILE__) + '/serializers/data/serialized_yardoc')
350
+ baz = Registry.at('Foo#baz')
351
+ expect(Registry.at('Foo').aliases.keys).to include(baz)
352
+ expect(Registry.at('Foo').aliases.key?(baz)).to be true
353
+ end
354
+ end
355
+
356
+ ['load', 'load_all', 'load!'].each do |meth|
357
+ describe('.' + meth) do
358
+ it "returns itself" do
359
+ expect(Registry.send(meth)).to eq Registry
360
+ end
361
+ end
362
+ end
363
+
364
+ describe ".each" do
365
+ before do
366
+ YARD.parse_string "def a; end; def b; end; def c; end"
367
+ end
368
+
369
+ after { Registry.clear }
370
+
371
+ it "iterates over .all" do
372
+ items = []
373
+ Registry.each {|x| items << x.path }
374
+ expect(items.sort).to eq ['#a', '#b', '#c']
375
+ end
376
+
377
+ it "includes Enumerable and allow for find, select" do
378
+ expect(Registry.find {|x| x.path == "#a" }).to be_a(CodeObjects::MethodObject)
379
+ end
380
+ end
381
+
382
+ describe ".instance" do
383
+ it "returns itself" do
384
+ expect(Registry.instance).to eq Registry
385
+ end
386
+ end
387
+
388
+ describe ".single_object_db" do
389
+ it "defaults to nil" do
390
+ expect(Registry.single_object_db).to eq nil
391
+ Thread.new { expect(Registry.single_object_db).to eq nil }.join
392
+ end
393
+ end
394
+
395
+ describe "Thread local" do
396
+ it "maintains two Registries in separate threads" do
397
+ barrier = 0
398
+ mutex = Mutex.new
399
+ threads = []
400
+ threads << Thread.new do
401
+ Registry.clear
402
+ YARD.parse_string "# docstring 1\nclass Foo; end"
403
+ mutex.synchronize { barrier += 1 }
404
+ "barrier < 2, spinning" while barrier < 2
405
+ expect(Registry.at('Foo').docstring).to eq "docstring 1"
406
+ end
407
+ threads << Thread.new do
408
+ Registry.clear
409
+ YARD.parse_string "# docstring 2\nclass Foo; end"
410
+ mutex.synchronize { barrier += 1 }
411
+ "barrier < 2, spinning" while barrier < 2
412
+ expect(Registry.at('Foo').docstring).to eq "docstring 2"
413
+ end
414
+ threads.each(&:join)
415
+ end
416
+
417
+ it "allows setting of yardoc_file in separate threads" do
418
+ barrier = 0
419
+ mutex = Mutex.new
420
+ threads = []
421
+ threads << Thread.new do
422
+ expect(Registry.yardoc_file).to eq '.yardoc'
423
+ Registry.yardoc_file = 'foo'
424
+ mutex.synchronize { barrier += 1 }
425
+ "barrier = 1, spinning" while barrier == 1
426
+ expect(Registry.yardoc_file).to eq 'foo'
427
+ end
428
+ threads << Thread.new do
429
+ "barrier = 0, spinning" while barrier == 0
430
+ expect(Registry.yardoc_file).to eq '.yardoc'
431
+ mutex.synchronize { barrier += 1 }
432
+ Registry.yardoc_file = 'foo2'
433
+ end
434
+ threads.each(&:join)
435
+ Registry.yardoc_file = Registry::DEFAULT_YARDOC_FILE
436
+ end
437
+
438
+ it "automatically clears in new threads" do
439
+ Thread.new { expect(Registry.all).to be_empty }.join
440
+ end
441
+
442
+ it "allows setting of po_dir in separate threads" do
443
+ barrier = 0
444
+ mutex = Mutex.new
445
+ threads = []
446
+ threads << Thread.new do
447
+ expect(Registry.po_dir).to eq 'po'
448
+ Registry.po_dir = 'locale'
449
+ mutex.synchronize { barrier += 1 }
450
+ "barrier = 1, spinning" while barrier == 1
451
+ expect(Registry.po_dir).to eq 'locale'
452
+ end
453
+ threads << Thread.new do
454
+ "barrier = 0, spinning" while barrier == 0
455
+ expect(Registry.po_dir).to eq 'po'
456
+ mutex.synchronize { barrier += 1 }
457
+ Registry.po_dir = '.'
458
+ end
459
+ threads.each(&:join)
460
+ Registry.po_dir = Registry::DEFAULT_PO_DIR
461
+ end
462
+ end
463
+ end