deg-yard 0.8.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. data/.travis.yml +39 -0
  2. data/.yardopts +25 -0
  3. data/.yardopts_guide +19 -0
  4. data/.yardopts_i18n +22 -0
  5. data/Gemfile +35 -0
  6. data/LEGAL +66 -0
  7. data/LICENSE +22 -0
  8. data/README.md +609 -0
  9. data/Rakefile +66 -0
  10. data/benchmarks/builtins_vs_eval.rb +23 -0
  11. data/benchmarks/concat_vs_join.rb +12 -0
  12. data/benchmarks/erb_vs_erubis.rb +53 -0
  13. data/benchmarks/format_args.rb +46 -0
  14. data/benchmarks/generation.rb +37 -0
  15. data/benchmarks/marshal_vs_dbm.rb +63 -0
  16. data/benchmarks/parsing.rb +46 -0
  17. data/benchmarks/pathname_vs_string.rb +50 -0
  18. data/benchmarks/rdoc_vs_yardoc.rb +10 -0
  19. data/benchmarks/registry_store_types.rb +48 -0
  20. data/benchmarks/ri_vs_yri.rb +18 -0
  21. data/benchmarks/ripper_parser.rb +12 -0
  22. data/benchmarks/splat_vs_flatten.rb +12 -0
  23. data/benchmarks/template_erb.rb +22 -0
  24. data/benchmarks/template_format.rb +6 -0
  25. data/benchmarks/template_profile.rb +17 -0
  26. data/benchmarks/yri_cache.rb +19 -0
  27. data/bin/yard +12 -0
  28. data/bin/yardoc +12 -0
  29. data/bin/yri +12 -0
  30. data/docs/CodeObjects.md +115 -0
  31. data/docs/GettingStarted.md +592 -0
  32. data/docs/Handlers.md +152 -0
  33. data/docs/Overview.md +61 -0
  34. data/docs/Parser.md +191 -0
  35. data/docs/Tags.md +282 -0
  36. data/docs/TagsArch.md +123 -0
  37. data/docs/Templates.md +496 -0
  38. data/docs/WhatsNew.md +1244 -0
  39. data/docs/images/code-objects-class-diagram.png +0 -0
  40. data/docs/images/handlers-class-diagram.png +0 -0
  41. data/docs/images/overview-class-diagram.png +0 -0
  42. data/docs/images/parser-class-diagram.png +0 -0
  43. data/docs/images/tags-class-diagram.png +0 -0
  44. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  45. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  46. data/docs/templates/default/layout/html/setup.rb +8 -0
  47. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  48. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  49. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  50. data/docs/templates/plugin.rb +65 -0
  51. data/lib/rubygems_plugin.rb +4 -0
  52. data/lib/yard/autoload.rb +290 -0
  53. data/lib/yard/cli/command.rb +84 -0
  54. data/lib/yard/cli/command_parser.rb +92 -0
  55. data/lib/yard/cli/config.rb +136 -0
  56. data/lib/yard/cli/diff.rb +270 -0
  57. data/lib/yard/cli/display.rb +68 -0
  58. data/lib/yard/cli/gems.rb +83 -0
  59. data/lib/yard/cli/graph.rb +126 -0
  60. data/lib/yard/cli/help.rb +18 -0
  61. data/lib/yard/cli/i18n.rb +69 -0
  62. data/lib/yard/cli/list.rb +22 -0
  63. data/lib/yard/cli/markup_types.rb +33 -0
  64. data/lib/yard/cli/server.rb +253 -0
  65. data/lib/yard/cli/stats.rb +213 -0
  66. data/lib/yard/cli/yardoc.rb +752 -0
  67. data/lib/yard/cli/yardopts_command.rb +109 -0
  68. data/lib/yard/cli/yri.rb +214 -0
  69. data/lib/yard/code_objects/base.rb +585 -0
  70. data/lib/yard/code_objects/class_object.rb +143 -0
  71. data/lib/yard/code_objects/class_variable_object.rb +8 -0
  72. data/lib/yard/code_objects/constant_object.rb +13 -0
  73. data/lib/yard/code_objects/extended_method_object.rb +23 -0
  74. data/lib/yard/code_objects/extra_file_object.rb +128 -0
  75. data/lib/yard/code_objects/macro_object.rb +172 -0
  76. data/lib/yard/code_objects/method_object.rb +191 -0
  77. data/lib/yard/code_objects/module_object.rb +18 -0
  78. data/lib/yard/code_objects/namespace_object.rb +200 -0
  79. data/lib/yard/code_objects/proxy.rb +258 -0
  80. data/lib/yard/code_objects/root_object.rb +17 -0
  81. data/lib/yard/config.rb +269 -0
  82. data/lib/yard/core_ext/array.rb +15 -0
  83. data/lib/yard/core_ext/file.rb +65 -0
  84. data/lib/yard/core_ext/hash.rb +15 -0
  85. data/lib/yard/core_ext/insertion.rb +60 -0
  86. data/lib/yard/core_ext/module.rb +19 -0
  87. data/lib/yard/core_ext/string.rb +67 -0
  88. data/lib/yard/core_ext/symbol_hash.rb +73 -0
  89. data/lib/yard/docstring.rb +362 -0
  90. data/lib/yard/docstring_parser.rb +321 -0
  91. data/lib/yard/globals.rb +18 -0
  92. data/lib/yard/handlers/base.rb +597 -0
  93. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  94. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  95. data/lib/yard/handlers/c/base.rb +110 -0
  96. data/lib/yard/handlers/c/class_handler.rb +26 -0
  97. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  98. data/lib/yard/handlers/c/handler_methods.rb +166 -0
  99. data/lib/yard/handlers/c/init_handler.rb +18 -0
  100. data/lib/yard/handlers/c/method_handler.rb +35 -0
  101. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  102. data/lib/yard/handlers/c/module_handler.rb +16 -0
  103. data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
  104. data/lib/yard/handlers/c/path_handler.rb +10 -0
  105. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  106. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  107. data/lib/yard/handlers/processor.rb +201 -0
  108. data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
  109. data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
  110. data/lib/yard/handlers/ruby/base.rb +164 -0
  111. data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
  112. data/lib/yard/handlers/ruby/class_handler.rb +121 -0
  113. data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  114. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  115. data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  116. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  117. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
  118. data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  119. data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  120. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
  121. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
  122. data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
  123. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  124. data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
  125. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  126. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  127. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  128. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  129. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  130. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  131. data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
  132. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  133. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  134. data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  139. data/lib/yard/handlers/ruby/method_handler.rb +92 -0
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  142. data/lib/yard/handlers/ruby/module_handler.rb +11 -0
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  146. data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  147. data/lib/yard/i18n/locale.rb +74 -0
  148. data/lib/yard/i18n/message.rb +56 -0
  149. data/lib/yard/i18n/messages.rb +55 -0
  150. data/lib/yard/i18n/pot_generator.rb +280 -0
  151. data/lib/yard/i18n/text.rb +173 -0
  152. data/lib/yard/logging.rb +190 -0
  153. data/lib/yard/options.rb +216 -0
  154. data/lib/yard/parser/base.rb +56 -0
  155. data/lib/yard/parser/c/c_parser.rb +231 -0
  156. data/lib/yard/parser/c/comment_parser.rb +131 -0
  157. data/lib/yard/parser/c/statement.rb +63 -0
  158. data/lib/yard/parser/ruby/ast_node.rb +496 -0
  159. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
  160. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
  161. data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
  162. data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
  163. data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
  164. data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
  165. data/lib/yard/parser/source_parser.rb +517 -0
  166. data/lib/yard/rake/yardoc_task.rb +74 -0
  167. data/lib/yard/registry.rb +438 -0
  168. data/lib/yard/registry_store.rb +319 -0
  169. data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/lib/yard/rubygems/backports/gem.rb +9 -0
  172. data/lib/yard/rubygems/backports/source_index.rb +370 -0
  173. data/lib/yard/rubygems/backports.rb +8 -0
  174. data/lib/yard/rubygems/doc_manager.rb +88 -0
  175. data/lib/yard/rubygems/specification.rb +41 -0
  176. data/lib/yard/serializers/base.rb +80 -0
  177. data/lib/yard/serializers/file_system_serializer.rb +90 -0
  178. data/lib/yard/serializers/process_serializer.rb +24 -0
  179. data/lib/yard/serializers/stdout_serializer.rb +32 -0
  180. data/lib/yard/serializers/yardoc_serializer.rb +124 -0
  181. data/lib/yard/server/adapter.rb +100 -0
  182. data/lib/yard/server/commands/base.rb +192 -0
  183. data/lib/yard/server/commands/display_file_command.rb +24 -0
  184. data/lib/yard/server/commands/display_object_command.rb +58 -0
  185. data/lib/yard/server/commands/frames_command.rb +15 -0
  186. data/lib/yard/server/commands/library_command.rb +148 -0
  187. data/lib/yard/server/commands/library_index_command.rb +24 -0
  188. data/lib/yard/server/commands/list_command.rb +24 -0
  189. data/lib/yard/server/commands/search_command.rb +78 -0
  190. data/lib/yard/server/commands/static_file_command.rb +57 -0
  191. data/lib/yard/server/doc_server_helper.rb +76 -0
  192. data/lib/yard/server/doc_server_serializer.rb +33 -0
  193. data/lib/yard/server/library_version.rb +227 -0
  194. data/lib/yard/server/rack_adapter.rb +88 -0
  195. data/lib/yard/server/router.rb +176 -0
  196. data/lib/yard/server/static_caching.rb +45 -0
  197. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  198. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  199. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  200. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  201. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  202. data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  203. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
  204. data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
  205. data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  206. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  207. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  208. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  209. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  210. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  211. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  212. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  213. data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  214. data/lib/yard/server/webrick_adapter.rb +43 -0
  215. data/lib/yard/server.rb +11 -0
  216. data/lib/yard/tags/default_factory.rb +176 -0
  217. data/lib/yard/tags/default_tag.rb +12 -0
  218. data/lib/yard/tags/directives.rb +599 -0
  219. data/lib/yard/tags/library.rb +630 -0
  220. data/lib/yard/tags/option_tag.rb +12 -0
  221. data/lib/yard/tags/overload_tag.rb +66 -0
  222. data/lib/yard/tags/ref_tag.rb +7 -0
  223. data/lib/yard/tags/ref_tag_list.rb +27 -0
  224. data/lib/yard/tags/tag.rb +57 -0
  225. data/lib/yard/tags/tag_format_error.rb +6 -0
  226. data/lib/yard/templates/engine.rb +185 -0
  227. data/lib/yard/templates/erb_cache.rb +22 -0
  228. data/lib/yard/templates/helpers/base_helper.rb +212 -0
  229. data/lib/yard/templates/helpers/filter_helper.rb +26 -0
  230. data/lib/yard/templates/helpers/html_helper.rb +599 -0
  231. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  232. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
  233. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
  234. data/lib/yard/templates/helpers/markup_helper.rb +169 -0
  235. data/lib/yard/templates/helpers/method_helper.rb +74 -0
  236. data/lib/yard/templates/helpers/module_helper.rb +19 -0
  237. data/lib/yard/templates/helpers/text_helper.rb +95 -0
  238. data/lib/yard/templates/helpers/uml_helper.rb +46 -0
  239. data/lib/yard/templates/section.rb +106 -0
  240. data/lib/yard/templates/template.rb +407 -0
  241. data/lib/yard/templates/template_options.rb +88 -0
  242. data/lib/yard/verifier.rb +148 -0
  243. data/lib/yard/version.rb +3 -0
  244. data/lib/yard.rb +71 -0
  245. data/po/ja.po +31118 -0
  246. data/spec/cli/command_parser_spec.rb +43 -0
  247. data/spec/cli/command_spec.rb +36 -0
  248. data/spec/cli/config_spec.rb +92 -0
  249. data/spec/cli/diff_spec.rb +260 -0
  250. data/spec/cli/display_spec.rb +30 -0
  251. data/spec/cli/gems_spec.rb +81 -0
  252. data/spec/cli/graph_spec.rb +17 -0
  253. data/spec/cli/help_spec.rb +22 -0
  254. data/spec/cli/i18n_spec.rb +111 -0
  255. data/spec/cli/list_spec.rb +8 -0
  256. data/spec/cli/markup_types_spec.rb +22 -0
  257. data/spec/cli/server_spec.rb +327 -0
  258. data/spec/cli/stats_spec.rb +90 -0
  259. data/spec/cli/yardoc_spec.rb +804 -0
  260. data/spec/cli/yri_spec.rb +99 -0
  261. data/spec/code_objects/base_spec.rb +438 -0
  262. data/spec/code_objects/class_object_spec.rb +225 -0
  263. data/spec/code_objects/code_object_list_spec.rb +33 -0
  264. data/spec/code_objects/constants_spec.rb +82 -0
  265. data/spec/code_objects/extra_file_object_spec.rb +147 -0
  266. data/spec/code_objects/macro_object_spec.rb +148 -0
  267. data/spec/code_objects/method_object_spec.rb +175 -0
  268. data/spec/code_objects/module_object_spec.rb +141 -0
  269. data/spec/code_objects/namespace_object_spec.rb +170 -0
  270. data/spec/code_objects/proxy_spec.rb +140 -0
  271. data/spec/code_objects/spec_helper.rb +3 -0
  272. data/spec/config_spec.rb +176 -0
  273. data/spec/core_ext/array_spec.rb +14 -0
  274. data/spec/core_ext/file_spec.rb +68 -0
  275. data/spec/core_ext/hash_spec.rb +14 -0
  276. data/spec/core_ext/insertion_spec.rb +37 -0
  277. data/spec/core_ext/module_spec.rb +15 -0
  278. data/spec/core_ext/string_spec.rb +42 -0
  279. data/spec/core_ext/symbol_hash_spec.rb +86 -0
  280. data/spec/docstring_parser_spec.rb +228 -0
  281. data/spec/docstring_spec.rb +335 -0
  282. data/spec/handlers/alias_handler_spec.rb +80 -0
  283. data/spec/handlers/attribute_handler_spec.rb +94 -0
  284. data/spec/handlers/base_spec.rb +206 -0
  285. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  286. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  287. data/spec/handlers/c/class_handler_spec.rb +63 -0
  288. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  289. data/spec/handlers/c/init_handler_spec.rb +47 -0
  290. data/spec/handlers/c/method_handler_spec.rb +229 -0
  291. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  292. data/spec/handlers/c/module_handler_spec.rb +38 -0
  293. data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
  294. data/spec/handlers/c/path_handler_spec.rb +35 -0
  295. data/spec/handlers/c/spec_helper.rb +13 -0
  296. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  297. data/spec/handlers/class_condition_handler_spec.rb +67 -0
  298. data/spec/handlers/class_handler_spec.rb +246 -0
  299. data/spec/handlers/class_variable_handler_spec.rb +11 -0
  300. data/spec/handlers/constant_handler_spec.rb +64 -0
  301. data/spec/handlers/dsl_handler_spec.rb +197 -0
  302. data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  303. data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  304. data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
  305. data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  306. data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  307. data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  308. data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
  309. data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  310. data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  311. data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  312. data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
  313. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
  314. data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  315. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  316. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  317. data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
  318. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
  319. data/spec/handlers/exception_handler_spec.rb +48 -0
  320. data/spec/handlers/extend_handler_spec.rb +23 -0
  321. data/spec/handlers/legacy_base_spec.rb +128 -0
  322. data/spec/handlers/method_condition_handler_spec.rb +14 -0
  323. data/spec/handlers/method_handler_spec.rb +184 -0
  324. data/spec/handlers/mixin_handler_spec.rb +55 -0
  325. data/spec/handlers/module_function_handler_spec.rb +105 -0
  326. data/spec/handlers/module_handler_spec.rb +34 -0
  327. data/spec/handlers/private_constant_handler_spec.rb +24 -0
  328. data/spec/handlers/processor_spec.rb +34 -0
  329. data/spec/handlers/ruby/base_spec.rb +94 -0
  330. data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
  331. data/spec/handlers/spec_helper.rb +33 -0
  332. data/spec/handlers/visibility_handler_spec.rb +39 -0
  333. data/spec/handlers/yield_handler_spec.rb +51 -0
  334. data/spec/i18n/locale_spec.rb +68 -0
  335. data/spec/i18n/message_spec.rb +52 -0
  336. data/spec/i18n/messages_spec.rb +67 -0
  337. data/spec/i18n/pot_generator_spec.rb +262 -0
  338. data/spec/i18n/text_spec.rb +180 -0
  339. data/spec/logging_spec.rb +35 -0
  340. data/spec/options_spec.rb +171 -0
  341. data/spec/parser/base_spec.rb +24 -0
  342. data/spec/parser/c_parser_spec.rb +171 -0
  343. data/spec/parser/examples/array.c.txt +3887 -0
  344. data/spec/parser/examples/example1.rb.txt +8 -0
  345. data/spec/parser/examples/extrafile.c.txt +8 -0
  346. data/spec/parser/examples/multifile.c.txt +22 -0
  347. data/spec/parser/examples/override.c.txt +424 -0
  348. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  349. data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  350. data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  351. data/spec/parser/ruby/ast_node_spec.rb +33 -0
  352. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  353. data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
  354. data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
  355. data/spec/parser/source_parser_spec.rb +717 -0
  356. data/spec/parser/tag_parsing_spec.rb +18 -0
  357. data/spec/rake/yardoc_task_spec.rb +101 -0
  358. data/spec/registry_spec.rb +393 -0
  359. data/spec/registry_store_spec.rb +315 -0
  360. data/spec/rubygems/doc_manager_spec.rb +112 -0
  361. data/spec/serializers/data/serialized_yardoc/checksums +1 -0
  362. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  363. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  364. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  365. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  366. data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  367. data/spec/serializers/file_system_serializer_spec.rb +124 -0
  368. data/spec/serializers/spec_helper.rb +2 -0
  369. data/spec/serializers/yardoc_serializer_spec.rb +46 -0
  370. data/spec/server/adapter_spec.rb +38 -0
  371. data/spec/server/commands/base_spec.rb +87 -0
  372. data/spec/server/commands/library_command_spec.rb +39 -0
  373. data/spec/server/commands/static_file_command_spec.rb +84 -0
  374. data/spec/server/doc_server_helper_spec.rb +53 -0
  375. data/spec/server/doc_server_serializer_spec.rb +45 -0
  376. data/spec/server/rack_adapter_spec.rb +20 -0
  377. data/spec/server/router_spec.rb +122 -0
  378. data/spec/server/spec_helper.rb +17 -0
  379. data/spec/server/static_caching_spec.rb +39 -0
  380. data/spec/server/webrick_servlet_spec.rb +20 -0
  381. data/spec/server_spec.rb +10 -0
  382. data/spec/spec_helper.rb +128 -0
  383. data/spec/tags/default_factory_spec.rb +152 -0
  384. data/spec/tags/default_tag_spec.rb +11 -0
  385. data/spec/tags/directives_spec.rb +453 -0
  386. data/spec/tags/library_spec.rb +34 -0
  387. data/spec/tags/overload_tag_spec.rb +53 -0
  388. data/spec/tags/ref_tag_list_spec.rb +53 -0
  389. data/spec/templates/class_spec.rb +44 -0
  390. data/spec/templates/constant_spec.rb +40 -0
  391. data/spec/templates/engine_spec.rb +121 -0
  392. data/spec/templates/examples/class001.html +280 -0
  393. data/spec/templates/examples/class001.txt +36 -0
  394. data/spec/templates/examples/class002.html +35 -0
  395. data/spec/templates/examples/constant001.txt +25 -0
  396. data/spec/templates/examples/constant002.txt +7 -0
  397. data/spec/templates/examples/constant003.txt +11 -0
  398. data/spec/templates/examples/method001.html +130 -0
  399. data/spec/templates/examples/method001.txt +35 -0
  400. data/spec/templates/examples/method002.html +86 -0
  401. data/spec/templates/examples/method002.txt +20 -0
  402. data/spec/templates/examples/method003.html +159 -0
  403. data/spec/templates/examples/method003.txt +45 -0
  404. data/spec/templates/examples/method004.html +44 -0
  405. data/spec/templates/examples/method004.txt +10 -0
  406. data/spec/templates/examples/method005.html +99 -0
  407. data/spec/templates/examples/method005.txt +33 -0
  408. data/spec/templates/examples/module001.dot +33 -0
  409. data/spec/templates/examples/module001.html +825 -0
  410. data/spec/templates/examples/module001.txt +33 -0
  411. data/spec/templates/examples/module002.html +318 -0
  412. data/spec/templates/examples/module003.html +185 -0
  413. data/spec/templates/examples/module004.html +387 -0
  414. data/spec/templates/examples/tag001.txt +82 -0
  415. data/spec/templates/helpers/base_helper_spec.rb +175 -0
  416. data/spec/templates/helpers/html_helper_spec.rb +612 -0
  417. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  418. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
  419. data/spec/templates/helpers/markup_helper_spec.rb +135 -0
  420. data/spec/templates/helpers/method_helper_spec.rb +82 -0
  421. data/spec/templates/helpers/shared_signature_examples.rb +123 -0
  422. data/spec/templates/helpers/text_helper_spec.rb +44 -0
  423. data/spec/templates/method_spec.rb +102 -0
  424. data/spec/templates/module_spec.rb +181 -0
  425. data/spec/templates/onefile_spec.rb +64 -0
  426. data/spec/templates/section_spec.rb +146 -0
  427. data/spec/templates/spec_helper.rb +73 -0
  428. data/spec/templates/tag_spec.rb +51 -0
  429. data/spec/templates/template_spec.rb +409 -0
  430. data/spec/verifier_spec.rb +106 -0
  431. data/templates/default/class/dot/setup.rb +6 -0
  432. data/templates/default/class/dot/superklass.erb +3 -0
  433. data/templates/default/class/html/constructor_details.erb +8 -0
  434. data/templates/default/class/html/setup.rb +1 -0
  435. data/templates/default/class/html/subclasses.erb +4 -0
  436. data/templates/default/class/setup.rb +36 -0
  437. data/templates/default/class/text/setup.rb +11 -0
  438. data/templates/default/class/text/subclasses.erb +5 -0
  439. data/templates/default/constant/text/header.erb +11 -0
  440. data/templates/default/constant/text/setup.rb +3 -0
  441. data/templates/default/docstring/html/abstract.erb +4 -0
  442. data/templates/default/docstring/html/deprecated.erb +1 -0
  443. data/templates/default/docstring/html/index.erb +5 -0
  444. data/templates/default/docstring/html/note.erb +6 -0
  445. data/templates/default/docstring/html/private.erb +4 -0
  446. data/templates/default/docstring/html/returns_void.erb +1 -0
  447. data/templates/default/docstring/html/text.erb +1 -0
  448. data/templates/default/docstring/html/todo.erb +6 -0
  449. data/templates/default/docstring/setup.rb +51 -0
  450. data/templates/default/docstring/text/abstract.erb +2 -0
  451. data/templates/default/docstring/text/deprecated.erb +2 -0
  452. data/templates/default/docstring/text/index.erb +2 -0
  453. data/templates/default/docstring/text/note.erb +4 -0
  454. data/templates/default/docstring/text/private.erb +2 -0
  455. data/templates/default/docstring/text/returns_void.erb +1 -0
  456. data/templates/default/docstring/text/text.erb +1 -0
  457. data/templates/default/docstring/text/todo.erb +4 -0
  458. data/templates/default/fulldoc/html/css/common.css +1 -0
  459. data/templates/default/fulldoc/html/css/full_list.css +57 -0
  460. data/templates/default/fulldoc/html/css/style.css +338 -0
  461. data/templates/default/fulldoc/html/frames.erb +28 -0
  462. data/templates/default/fulldoc/html/full_list.erb +40 -0
  463. data/templates/default/fulldoc/html/full_list_class.erb +2 -0
  464. data/templates/default/fulldoc/html/full_list_file.erb +5 -0
  465. data/templates/default/fulldoc/html/full_list_method.erb +8 -0
  466. data/templates/default/fulldoc/html/js/app.js +214 -0
  467. data/templates/default/fulldoc/html/js/full_list.js +178 -0
  468. data/templates/default/fulldoc/html/js/jquery.js +4 -0
  469. data/templates/default/fulldoc/html/setup.rb +199 -0
  470. data/templates/default/layout/dot/header.erb +6 -0
  471. data/templates/default/layout/dot/setup.rb +14 -0
  472. data/templates/default/layout/html/breadcrumb.erb +13 -0
  473. data/templates/default/layout/html/files.erb +11 -0
  474. data/templates/default/layout/html/footer.erb +5 -0
  475. data/templates/default/layout/html/headers.erb +14 -0
  476. data/templates/default/layout/html/index.erb +2 -0
  477. data/templates/default/layout/html/layout.erb +20 -0
  478. data/templates/default/layout/html/listing.erb +4 -0
  479. data/templates/default/layout/html/objects.erb +32 -0
  480. data/templates/default/layout/html/script_setup.erb +5 -0
  481. data/templates/default/layout/html/search.erb +8 -0
  482. data/templates/default/layout/html/setup.rb +71 -0
  483. data/templates/default/method/html/header.erb +16 -0
  484. data/templates/default/method/setup.rb +3 -0
  485. data/templates/default/method/text/header.erb +1 -0
  486. data/templates/default/method_details/html/header.erb +3 -0
  487. data/templates/default/method_details/html/method_signature.erb +25 -0
  488. data/templates/default/method_details/html/source.erb +10 -0
  489. data/templates/default/method_details/setup.rb +10 -0
  490. data/templates/default/method_details/text/header.erb +10 -0
  491. data/templates/default/method_details/text/method_signature.erb +12 -0
  492. data/templates/default/method_details/text/setup.rb +10 -0
  493. data/templates/default/module/dot/child.erb +1 -0
  494. data/templates/default/module/dot/dependencies.erb +3 -0
  495. data/templates/default/module/dot/header.erb +6 -0
  496. data/templates/default/module/dot/info.erb +14 -0
  497. data/templates/default/module/dot/setup.rb +14 -0
  498. data/templates/default/module/html/attribute_details.erb +10 -0
  499. data/templates/default/module/html/attribute_summary.erb +8 -0
  500. data/templates/default/module/html/box_info.erb +37 -0
  501. data/templates/default/module/html/children.erb +8 -0
  502. data/templates/default/module/html/constant_summary.erb +13 -0
  503. data/templates/default/module/html/defines.erb +3 -0
  504. data/templates/default/module/html/header.erb +5 -0
  505. data/templates/default/module/html/inherited_attributes.erb +14 -0
  506. data/templates/default/module/html/inherited_constants.erb +8 -0
  507. data/templates/default/module/html/inherited_methods.erb +19 -0
  508. data/templates/default/module/html/item_summary.erb +40 -0
  509. data/templates/default/module/html/method_details_list.erb +9 -0
  510. data/templates/default/module/html/method_summary.erb +14 -0
  511. data/templates/default/module/html/methodmissing.erb +12 -0
  512. data/templates/default/module/html/pre_docstring.erb +1 -0
  513. data/templates/default/module/setup.rb +164 -0
  514. data/templates/default/module/text/children.erb +10 -0
  515. data/templates/default/module/text/class_meths_list.erb +8 -0
  516. data/templates/default/module/text/extends.erb +8 -0
  517. data/templates/default/module/text/header.erb +7 -0
  518. data/templates/default/module/text/includes.erb +8 -0
  519. data/templates/default/module/text/instance_meths_list.erb +8 -0
  520. data/templates/default/module/text/setup.rb +12 -0
  521. data/templates/default/onefile/html/files.erb +5 -0
  522. data/templates/default/onefile/html/headers.erb +6 -0
  523. data/templates/default/onefile/html/layout.erb +17 -0
  524. data/templates/default/onefile/html/readme.erb +3 -0
  525. data/templates/default/onefile/html/setup.rb +61 -0
  526. data/templates/default/root/dot/child.erb +3 -0
  527. data/templates/default/root/dot/setup.rb +5 -0
  528. data/templates/default/root/html/setup.rb +1 -0
  529. data/templates/default/tags/html/example.erb +11 -0
  530. data/templates/default/tags/html/index.erb +3 -0
  531. data/templates/default/tags/html/option.erb +24 -0
  532. data/templates/default/tags/html/overload.erb +14 -0
  533. data/templates/default/tags/html/see.erb +8 -0
  534. data/templates/default/tags/html/tag.erb +20 -0
  535. data/templates/default/tags/setup.rb +55 -0
  536. data/templates/default/tags/text/example.erb +12 -0
  537. data/templates/default/tags/text/index.erb +1 -0
  538. data/templates/default/tags/text/option.erb +20 -0
  539. data/templates/default/tags/text/overload.erb +19 -0
  540. data/templates/default/tags/text/see.erb +11 -0
  541. data/templates/default/tags/text/tag.erb +13 -0
  542. data/templates/guide/class/html/setup.rb +1 -0
  543. data/templates/guide/docstring/html/setup.rb +1 -0
  544. data/templates/guide/fulldoc/html/css/style.css +108 -0
  545. data/templates/guide/fulldoc/html/js/app.js +33 -0
  546. data/templates/guide/fulldoc/html/setup.rb +73 -0
  547. data/templates/guide/layout/html/layout.erb +81 -0
  548. data/templates/guide/layout/html/setup.rb +28 -0
  549. data/templates/guide/method/html/header.erb +18 -0
  550. data/templates/guide/method/html/setup.rb +21 -0
  551. data/templates/guide/module/html/header.erb +7 -0
  552. data/templates/guide/module/html/method_list.erb +5 -0
  553. data/templates/guide/module/html/setup.rb +26 -0
  554. data/templates/guide/onefile/html/files.erb +4 -0
  555. data/templates/guide/onefile/html/setup.rb +5 -0
  556. data/templates/guide/onefile/html/toc.erb +3 -0
  557. data/templates/guide/tags/html/setup.rb +8 -0
  558. metadata +689 -0
@@ -0,0 +1,438 @@
1
+ require 'fileutils'
2
+ require 'digest/sha1'
3
+
4
+ module YARD
5
+ # The +Registry+ is the centralized data store for all {CodeObjects} created
6
+ # during parsing. The storage is a key value store with the object's path
7
+ # (see {CodeObjects::Base#path}) as the key and the object itself as the value.
8
+ # Object paths must be unique to be stored in the Registry. All lookups for
9
+ # objects are done on the singleton Registry instance using the {Registry.at}
10
+ # or {Registry.resolve} methods.
11
+ #
12
+ # == Saving / Loading a Registry
13
+ # The registry is saved to a "yardoc file" (actually a directory), which can
14
+ # be loaded back to perform any lookups. See {Registry.load!} and
15
+ # {Registry.save} for information on saving and loading of a yardoc file.
16
+ #
17
+ # == Threading Notes
18
+ # The registry class is a singleton class that is accessed directly in many
19
+ # places across YARD. To mitigate threading issues, YARD (0.6.5+) makes
20
+ # the Registry thread local. This means all access to a registry for a specific
21
+ # object set must occur in the originating thread.
22
+ #
23
+ # @example Loading the Registry
24
+ # Registry.load!('/path/to/yardocfile') # loads all objects into memory
25
+ # Registry.at('YARD::CodeObjects::Base').docstring
26
+ # # => "+Base+ is the superclass of all code objects ..."
27
+ # @example Getting an object by a specific path
28
+ # Registry.at('YARD::CodeObjects::Base#docstring')
29
+ # @example Performing a lookup on a method anywhere in the inheritance tree
30
+ # Registry.resolve(P('YARD::CodeObjects::Base'), '#docstring', true)
31
+ module Registry
32
+ DEFAULT_YARDOC_FILE = ".yardoc"
33
+ LOCAL_YARDOC_INDEX = File.expand_path('~/.yard/gem_index')
34
+ DEFAULT_PO_DIR = "po"
35
+
36
+ extend Enumerable
37
+
38
+ class << self
39
+ # @group Getting .yardoc File Locations
40
+
41
+ # Returns the .yardoc file associated with a gem.
42
+ #
43
+ # @param [String] gem the name of the gem to search for
44
+ # @param [String] ver_require an optional Gem version requirement
45
+ # @param [Boolean] for_writing whether or not the method should search
46
+ # for writable locations
47
+ # @return [String] if +for_writing+ is set to +true+, returns the best
48
+ # location suitable to write the .yardoc file. Otherwise, the first
49
+ # existing location associated with the gem's .yardoc file.
50
+ # @return [nil] if +for_writing+ is set to false and no yardoc file
51
+ # is found, returns nil.
52
+ def yardoc_file_for_gem(gem, ver_require = ">= 0", for_writing = false)
53
+ spec = Gem.source_index.find_name(gem, ver_require)
54
+ return if spec.empty?
55
+ spec = spec.first
56
+
57
+ if gem =~ /^yard-doc-/
58
+ path = File.join(spec.full_gem_path, DEFAULT_YARDOC_FILE)
59
+ return File.exist?(path) && !for_writing ? path : nil
60
+ end
61
+
62
+ if for_writing
63
+ global_yardoc_file(spec, for_writing) ||
64
+ local_yardoc_file(spec, for_writing)
65
+ else
66
+ local_yardoc_file(spec, for_writing) ||
67
+ global_yardoc_file(spec, for_writing)
68
+ end
69
+ end
70
+
71
+ # Gets/sets the yardoc filename
72
+ # @return [String] the yardoc filename
73
+ # @see DEFAULT_YARDOC_FILE
74
+ attr_accessor :yardoc_file
75
+ undef yardoc_file, yardoc_file=
76
+ def yardoc_file=(v) Thread.current[:__yard_yardoc_file__] = v end
77
+ def yardoc_file
78
+ Thread.current[:__yard_yardoc_file__] ||= DEFAULT_YARDOC_FILE
79
+ end
80
+
81
+ # @group Loading Data from Disk
82
+
83
+ # Loads the registry and/or parses a list of files
84
+ #
85
+ # @example Loads the yardoc file or parses files 'a', 'b' and 'c' (but not both)
86
+ # Registry.load(['a', 'b', 'c'])
87
+ # @example Reparses files 'a' and 'b' regardless of whether yardoc file exists
88
+ # Registry.load(['a', 'b'], true)
89
+ # @param [String, Array] files if +files+ is an Array, it should represent
90
+ # a list of files that YARD should parse into the registry. If reload is
91
+ # set to false and the yardoc file already exists, these files are skipped.
92
+ # If files is a String, it should represent the yardoc file to load
93
+ # into the registry.
94
+ # @param [Boolean] reparse if reparse is false and a yardoc file already
95
+ # exists, any files passed in will be ignored.
96
+ # @return [Registry] the registry object (for chaining)
97
+ # @raise [ArgumentError] if files is not a String or Array
98
+ def load(files = [], reparse = false)
99
+ if files.is_a?(Array)
100
+ if File.exist?(yardoc_file) && !reparse
101
+ load_yardoc
102
+ else
103
+ size = thread_local_store.keys.size
104
+ YARD.parse(files)
105
+ save if thread_local_store.keys.size > size
106
+ end
107
+ elsif files.is_a?(String)
108
+ load_yardoc(files)
109
+ else
110
+ raise ArgumentError, "Must take a list of files to parse or the .yardoc file to load."
111
+ end
112
+ self
113
+ end
114
+
115
+ # Loads a yardoc file directly
116
+ #
117
+ # @param [String] file the yardoc file to load.
118
+ # @return [Registry] the registry object (for chaining)
119
+ def load_yardoc(file = yardoc_file)
120
+ clear
121
+ thread_local_store.load(file)
122
+ self
123
+ end
124
+
125
+ # Loads a yardoc file and forces all objects cached on disk into
126
+ # memory. Equivalent to calling {load_yardoc} followed by {load_all}
127
+ #
128
+ # @param [String] file the yardoc file to load
129
+ # @return [Registry] the registry object (for chaining)
130
+ # @see #load_yardoc
131
+ # @see #load_all
132
+ # @since 0.5.1
133
+ def load!(file = yardoc_file)
134
+ clear
135
+ thread_local_store.load!(file)
136
+ self
137
+ end
138
+
139
+ # Forces all objects cached on disk into memory
140
+ #
141
+ # @example Loads all objects from disk
142
+ # Registry.load
143
+ # Registry.all.count #=> 0
144
+ # Registry.load_all
145
+ # Registry.all.count #=> 17
146
+ # @return [Registry] the registry object (for chaining)
147
+ # @since 0.5.1
148
+ def load_all
149
+ thread_local_store.load_all
150
+ self
151
+ end
152
+
153
+ # @group Saving and Deleting Data from Disk
154
+
155
+ # Saves the registry to +file+
156
+ #
157
+ # @param [String] file the yardoc file to save to
158
+ # @return [Boolean] true if the file was saved
159
+ def save(merge = false, file = yardoc_file)
160
+ thread_local_store.save(merge, file)
161
+ end
162
+
163
+ # Deletes the yardoc file from disk
164
+ # @return [void]
165
+ def delete_from_disk
166
+ thread_local_store.destroy
167
+ end
168
+
169
+ # @group Adding and Deleting Objects from the Registry
170
+
171
+ # Registers a new object with the registry
172
+ #
173
+ # @param [CodeObjects::Base] object the object to register
174
+ # @return [CodeObjects::Base] the registered object
175
+ def register(object)
176
+ return if object.is_a?(CodeObjects::Proxy)
177
+ thread_local_store[object.path] = object
178
+ end
179
+
180
+ # Deletes an object from the registry
181
+ # @param [CodeObjects::Base] object the object to remove
182
+ # @return [void]
183
+ def delete(object)
184
+ thread_local_store.delete(object.path)
185
+ end
186
+
187
+ # Clears the registry
188
+ # @return [void]
189
+ def clear
190
+ self.thread_local_store = RegistryStore.new
191
+ end
192
+
193
+ # @group Accessing Objects in the Registry
194
+
195
+ # Iterates over {all} with no arguments
196
+ def each(&block)
197
+ all.each(&block)
198
+ end
199
+
200
+ # Returns all objects in the registry that match one of the types provided
201
+ # in the +types+ list (if +types+ is provided).
202
+ #
203
+ # @example Returns all objects
204
+ # Registry.all
205
+ # @example Returns all classes and modules
206
+ # Registry.all(:class, :module)
207
+ # @param [Array<Symbol>] types an optional list of types to narrow the
208
+ # objects down by. Equivalent to performing a select:
209
+ # +Registry.all.select {|o| types.include(o.type) }+
210
+ # @return [Array<CodeObjects::Base>] the list of objects found
211
+ # @see CodeObjects::Base#type
212
+ def all(*types)
213
+ if types.empty?
214
+ thread_local_store.values.select {|obj| obj != root }
215
+ else
216
+ list = []
217
+ types.each do |type|
218
+ list += thread_local_store.values_for_type(type)
219
+ end
220
+ list
221
+ end
222
+ end
223
+
224
+ # Returns the paths of all of the objects in the registry.
225
+ # @param [Boolean] reload whether to load entire database
226
+ # @return [Array<String>] all of the paths in the registry.
227
+ def paths(reload = false)
228
+ thread_local_store.keys(reload).map {|k| k.to_s }
229
+ end
230
+
231
+ # Returns the object at a specific path.
232
+ # @param [String, :root] path the pathname to look for. If +path+ is +root+,
233
+ # returns the {root} object.
234
+ # @return [CodeObjects::Base] the object at path
235
+ # @return [nil] if no object is found
236
+ def at(path) path ? thread_local_store[path] : nil end
237
+ alias_method :[], :at
238
+
239
+ # The root namespace object.
240
+ # @return [CodeObjects::RootObject] the root object in the namespace
241
+ def root; thread_local_store[:root] end
242
+
243
+ # @param [String] name the locale name.
244
+ # @return [I18n::Locale] the locale object for +name+.
245
+ # @since 0.8.3
246
+ def locale(name)
247
+ thread_local_store.locale(name)
248
+ end
249
+
250
+ # Attempts to find an object by name starting at +namespace+, performing
251
+ # a lookup similar to Ruby's method of resolving a constant in a namespace.
252
+ #
253
+ # @example Looks for instance method #reverse starting from A::B::C
254
+ # Registry.resolve(P("A::B::C"), "#reverse")
255
+ # @example Looks for a constant in the root namespace
256
+ # Registry.resolve(nil, 'CONSTANT')
257
+ # @example Looks for a class method respecting the inheritance tree
258
+ # Registry.resolve(myclass, 'mymethod', true)
259
+ # @example Looks for a constant but returns a proxy if not found
260
+ # Registry.resolve(P('A::B::C'), 'D', false, true) # => #<yardoc proxy A::B::C::D>
261
+ # @example Looks for a complex path from a namespace
262
+ # Registry.resolve(P('A::B'), 'B::D') # => #<yardoc class A::B::D>
263
+ # @param [CodeObjects::NamespaceObject, nil] namespace the starting namespace
264
+ # (module or class). If +nil+ or +:root+, starts from the {root} object.
265
+ # @param [String, Symbol] name the name (or complex path) to look for from
266
+ # +namespace+.
267
+ # @param [Boolean] inheritance Follows inheritance chain (mixins, superclass)
268
+ # when performing name resolution if set to +true+.
269
+ # @param [Boolean] proxy_fallback If +true+, returns a proxy representing
270
+ # the unresolved path (namespace + name) if no object is found.
271
+ # @param [Symbol, nil] type the {CodeObjects::Base#type} that the resolved
272
+ # object must be equal to. No type checking if nil.
273
+ # @return [CodeObjects::Base] the object if it is found
274
+ # @return [CodeObjects::Proxy] a Proxy representing the object if
275
+ # +proxy_fallback+ is +true+.
276
+ # @return [nil] if +proxy_fallback+ is +false+ and no object was found.
277
+ # @see P
278
+ def resolve(namespace, name, inheritance = false, proxy_fallback = false, type = nil)
279
+ if namespace.is_a?(CodeObjects::Proxy)
280
+ return proxy_fallback ? CodeObjects::Proxy.new(namespace, name, type) : nil
281
+ end
282
+
283
+ if namespace == :root || !namespace
284
+ namespace = root
285
+ else
286
+ namespace = namespace.parent until namespace.is_a?(CodeObjects::NamespaceObject)
287
+ end
288
+ orignamespace = namespace
289
+
290
+ name = name.to_s
291
+ if name =~ /^#{CodeObjects::NSEPQ}/
292
+ [name, name[2..-1]].each do |n|
293
+ found = at(n)
294
+ return found if found && (type.nil? || found.type == type)
295
+ end
296
+ else
297
+ while namespace
298
+ if namespace.is_a?(CodeObjects::NamespaceObject)
299
+ if inheritance
300
+ nss = namespace.inheritance_tree(true)
301
+ if namespace.respond_to?(:superclass)
302
+ if namespace.superclass != P('BasicObject')
303
+ nss |= [P('Object')]
304
+ end
305
+ nss |= [P('BasicObject')]
306
+ end
307
+ else
308
+ nss = [namespace]
309
+ end
310
+ nss.each do |ns|
311
+ next if ns.is_a?(CodeObjects::Proxy)
312
+ found = partial_resolve(ns, name, type)
313
+ return found if found
314
+ end
315
+ end
316
+ namespace = namespace.parent
317
+ end
318
+ end
319
+ proxy_fallback ? CodeObjects::Proxy.new(orignamespace, name, type) : nil
320
+ end
321
+
322
+ # @group Managing Source File Checksums
323
+
324
+ # @return [Hash{String => String}] a set of checksums for files
325
+ def checksums
326
+ thread_local_store.checksums
327
+ end
328
+
329
+ # @param [String] data data to checksum
330
+ # @return [String] the SHA1 checksum for data
331
+ def checksum_for(data)
332
+ Digest::SHA1.hexdigest(data)
333
+ end
334
+
335
+ # @group Managing Internal State (Advanced / Testing Only)
336
+
337
+ # Whether or not the Registry storage should load everything into a
338
+ # single object database (for disk efficiency), or spread them out
339
+ # (for load time efficiency).
340
+ #
341
+ # @note Setting this attribute to nil will offload the decision to
342
+ # the {RegistryStore storage adapter}.
343
+ # @return [Boolean, nil] if this value is set to nil, the storage
344
+ # adapter will decide how to store the data.
345
+ attr_accessor :single_object_db
346
+ undef single_object_db, single_object_db=
347
+ def single_object_db=(v) Thread.current[:__yard_single_db__] = v end
348
+ def single_object_db; Thread.current[:__yard_single_db__] end
349
+
350
+ # The assumed types of a list of paths. This method is used by CodeObjects::Base
351
+ # @return [{String => Symbol}] a set of unresolved paths and their assumed type
352
+ # @private
353
+ # @deprecated The registry no longer globally tracks proxy types.
354
+ def proxy_types
355
+ thread_local_store.proxy_types
356
+ end
357
+
358
+ # @group I18n features
359
+
360
+ # Gets/sets the directory that has LANG.po files
361
+ # @return [String] the directory that has .po files
362
+ attr_accessor :po_dir
363
+ undef po_dir, po_dir=
364
+ def po_dir=(dir) Thread.current[:__yard_po_dir__] = dir end
365
+ def po_dir
366
+ Thread.current[:__yard_po_dir__] ||= DEFAULT_PO_DIR
367
+ end
368
+
369
+ # @group Legacy Methods
370
+
371
+ # The registry singleton instance.
372
+ #
373
+ # @deprecated use Registry.methodname directly.
374
+ # @return [Registry] returns the registry instance
375
+ def instance; self end
376
+
377
+ private
378
+
379
+ # @group Accessing Objects in the Registry
380
+
381
+ # Attempts to resolve a name in a namespace
382
+ #
383
+ # @param [CodeObjects::NamespaceObject] namespace the starting namespace
384
+ # @param [String] name the name to look for
385
+ # @param [Symbol, nil] type the {CodeObjects::Base#type} that the resolved
386
+ # object must be equal to
387
+ def partial_resolve(namespace, name, type = nil)
388
+ obj = at(name) || at('#' + name) if namespace.root?
389
+ return obj if obj && (type.nil? || obj.type == type)
390
+ [CodeObjects::NSEP, CodeObjects::CSEP, ''].each do |s|
391
+ next if s.empty? && name =~ /^\w/
392
+ path = name
393
+ if namespace != root
394
+ path = [namespace.path, name].join(s)
395
+ end
396
+ found = at(path)
397
+ return found if found && (type.nil? || found.type == type)
398
+ end
399
+ nil
400
+ end
401
+
402
+ # @group Retrieving yardoc File Locations
403
+
404
+ def global_yardoc_file(spec, for_writing = false)
405
+ path = spec.full_gem_path
406
+ yfile = File.join(path, DEFAULT_YARDOC_FILE)
407
+ if for_writing && File.writable?(path)
408
+ return yfile
409
+ elsif !for_writing && File.exist?(yfile)
410
+ return yfile
411
+ end
412
+ end
413
+
414
+ def local_yardoc_file(spec, for_writing = false)
415
+ path = Registry::LOCAL_YARDOC_INDEX
416
+ FileUtils.mkdir_p(path) if for_writing
417
+ path = File.join(path, "#{spec.full_name}.yardoc")
418
+ if for_writing
419
+ path
420
+ else
421
+ File.exist?(path) ? path : nil
422
+ end
423
+ end
424
+
425
+ # @group Threading support
426
+
427
+ # @since 0.6.5
428
+ def thread_local_store
429
+ Thread.current[:__yard_registry__] ||= clear
430
+ end
431
+
432
+ # @since 0.6.5
433
+ def thread_local_store=(value)
434
+ Thread.current[:__yard_registry__] = value
435
+ end
436
+ end
437
+ end
438
+ end