yard 0.9.5 → 0.9.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of yard might be problematic. Click here for more details.

Files changed (575) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +0 -0
  3. data/CHANGELOG.md +20 -0
  4. data/LEGAL +0 -0
  5. data/LICENSE +0 -0
  6. data/README.md +70 -35
  7. data/Rakefile +10 -39
  8. data/benchmarks/builtins_vs_eval.rb +9 -8
  9. data/benchmarks/concat_vs_join.rb +1 -0
  10. data/benchmarks/erb_vs_erubis.rb +3 -2
  11. data/benchmarks/format_args.rb +1 -0
  12. data/benchmarks/generation.rb +2 -1
  13. data/benchmarks/marshal_vs_dbm.rb +2 -1
  14. data/benchmarks/parsing.rb +1 -1
  15. data/benchmarks/pathname_vs_string.rb +1 -0
  16. data/benchmarks/rdoc_vs_yardoc.rb +2 -1
  17. data/benchmarks/registry_store_types.rb +1 -0
  18. data/benchmarks/ri_vs_yri.rb +1 -0
  19. data/benchmarks/ripper_parser.rb +2 -1
  20. data/benchmarks/splat_vs_flatten.rb +4 -3
  21. data/benchmarks/template_erb.rb +2 -1
  22. data/benchmarks/template_format.rb +1 -0
  23. data/benchmarks/template_profile.rb +4 -3
  24. data/benchmarks/yri_cache.rb +2 -1
  25. data/bin/yard +2 -1
  26. data/bin/yardoc +2 -1
  27. data/bin/yri +2 -1
  28. data/docs/CodeObjects.md +0 -0
  29. data/docs/GettingStarted.md +0 -0
  30. data/docs/Handlers.md +0 -0
  31. data/docs/Overview.md +0 -0
  32. data/docs/Parser.md +0 -0
  33. data/docs/Tags.md +0 -0
  34. data/docs/TagsArch.md +0 -0
  35. data/docs/Templates.md +0 -0
  36. data/docs/WhatsNew.md +0 -0
  37. data/docs/images/code-objects-class-diagram.png +0 -0
  38. data/docs/images/tags-class-diagram.png +0 -0
  39. data/docs/templates/default/fulldoc/html/full_list_tag.erb +0 -0
  40. data/docs/templates/default/fulldoc/html/setup.rb +1 -1
  41. data/docs/templates/default/layout/html/setup.rb +1 -0
  42. data/docs/templates/default/layout/html/tag_list.erb +0 -0
  43. data/docs/templates/default/yard_tags/html/list.erb +0 -0
  44. data/docs/templates/default/yard_tags/html/setup.rb +18 -19
  45. data/docs/templates/plugin.rb +18 -13
  46. data/lib/rubygems_plugin.rb +1 -0
  47. data/lib/yard.rb +5 -6
  48. data/lib/yard/autoload.rb +4 -0
  49. data/lib/yard/cli/command.rb +3 -2
  50. data/lib/yard/cli/command_parser.rb +4 -3
  51. data/lib/yard/cli/config.rb +5 -4
  52. data/lib/yard/cli/diff.rb +39 -39
  53. data/lib/yard/cli/display.rb +2 -1
  54. data/lib/yard/cli/gems.rb +6 -5
  55. data/lib/yard/cli/graph.rb +4 -5
  56. data/lib/yard/cli/help.rb +4 -2
  57. data/lib/yard/cli/i18n.rb +2 -1
  58. data/lib/yard/cli/list.rb +2 -1
  59. data/lib/yard/cli/markup_types.rb +4 -5
  60. data/lib/yard/cli/server.rb +27 -24
  61. data/lib/yard/cli/stats.rb +20 -16
  62. data/lib/yard/cli/yardoc.rb +22 -19
  63. data/lib/yard/cli/yardopts_command.rb +3 -2
  64. data/lib/yard/cli/yri.rb +26 -25
  65. data/lib/yard/code_objects/base.rb +41 -37
  66. data/lib/yard/code_objects/class_object.rb +3 -2
  67. data/lib/yard/code_objects/class_variable_object.rb +2 -1
  68. data/lib/yard/code_objects/constant_object.rb +2 -1
  69. data/lib/yard/code_objects/extended_method_object.rb +2 -1
  70. data/lib/yard/code_objects/extra_file_object.rb +1 -0
  71. data/lib/yard/code_objects/macro_object.rb +10 -10
  72. data/lib/yard/code_objects/method_object.rb +15 -13
  73. data/lib/yard/code_objects/module_object.rb +1 -0
  74. data/lib/yard/code_objects/namespace_mapper.rb +1 -0
  75. data/lib/yard/code_objects/namespace_object.rb +2 -5
  76. data/lib/yard/code_objects/proxy.rb +35 -53
  77. data/lib/yard/code_objects/root_object.rb +3 -1
  78. data/lib/yard/config.rb +8 -9
  79. data/lib/yard/core_ext/array.rb +1 -0
  80. data/lib/yard/core_ext/file.rb +4 -3
  81. data/lib/yard/core_ext/hash.rb +3 -2
  82. data/lib/yard/core_ext/insertion.rb +7 -4
  83. data/lib/yard/core_ext/module.rb +2 -1
  84. data/lib/yard/core_ext/string.rb +5 -4
  85. data/lib/yard/core_ext/symbol_hash.rb +8 -6
  86. data/lib/yard/docstring.rb +26 -15
  87. data/lib/yard/docstring_parser.rb +61 -61
  88. data/lib/yard/gem_index.rb +17 -0
  89. data/lib/yard/globals.rb +6 -2
  90. data/lib/yard/handlers/base.rb +22 -23
  91. data/lib/yard/handlers/c/alias_handler.rb +3 -2
  92. data/lib/yard/handlers/c/attribute_handler.rb +2 -2
  93. data/lib/yard/handlers/c/base.rb +13 -13
  94. data/lib/yard/handlers/c/class_handler.rb +1 -0
  95. data/lib/yard/handlers/c/constant_handler.rb +3 -2
  96. data/lib/yard/handlers/c/handler_methods.rb +24 -25
  97. data/lib/yard/handlers/c/init_handler.rb +4 -2
  98. data/lib/yard/handlers/c/method_handler.rb +7 -6
  99. data/lib/yard/handlers/c/mixin_handler.rb +3 -1
  100. data/lib/yard/handlers/c/module_handler.rb +1 -0
  101. data/lib/yard/handlers/c/override_comment_handler.rb +2 -1
  102. data/lib/yard/handlers/c/path_handler.rb +1 -0
  103. data/lib/yard/handlers/c/struct_handler.rb +1 -0
  104. data/lib/yard/handlers/c/symbol_handler.rb +2 -1
  105. data/lib/yard/handlers/processor.rb +14 -15
  106. data/lib/yard/handlers/ruby/alias_handler.rb +4 -2
  107. data/lib/yard/handlers/ruby/attribute_handler.rb +11 -6
  108. data/lib/yard/handlers/ruby/base.rb +5 -4
  109. data/lib/yard/handlers/ruby/class_condition_handler.rb +4 -3
  110. data/lib/yard/handlers/ruby/class_handler.rb +7 -9
  111. data/lib/yard/handlers/ruby/class_variable_handler.rb +2 -1
  112. data/lib/yard/handlers/ruby/comment_handler.rb +1 -0
  113. data/lib/yard/handlers/ruby/constant_handler.rb +9 -5
  114. data/lib/yard/handlers/ruby/decorator_handler_methods.rb +15 -28
  115. data/lib/yard/handlers/ruby/dsl_handler.rb +1 -0
  116. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +7 -6
  117. data/lib/yard/handlers/ruby/exception_handler.rb +1 -0
  118. data/lib/yard/handlers/ruby/extend_handler.rb +1 -0
  119. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +6 -4
  120. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +12 -7
  121. data/lib/yard/handlers/ruby/legacy/base.rb +21 -26
  122. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +7 -7
  123. data/lib/yard/handlers/ruby/legacy/class_handler.rb +7 -5
  124. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +2 -1
  125. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +1 -0
  126. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +2 -1
  127. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +1 -0
  128. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +2 -1
  129. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +2 -1
  130. data/lib/yard/handlers/ruby/legacy/method_handler.rb +11 -6
  131. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +5 -5
  132. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +2 -1
  133. data/lib/yard/handlers/ruby/legacy/module_handler.rb +2 -1
  134. data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +2 -1
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +2 -1
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +3 -2
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +1 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +2 -1
  139. data/lib/yard/handlers/ruby/method_handler.rb +9 -11
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +2 -1
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +2 -1
  142. data/lib/yard/handlers/ruby/module_handler.rb +2 -1
  143. data/lib/yard/handlers/ruby/private_class_method_handler.rb +1 -0
  144. data/lib/yard/handlers/ruby/private_constant_handler.rb +2 -2
  145. data/lib/yard/handlers/ruby/public_class_method_handler.rb +1 -0
  146. data/lib/yard/handlers/ruby/struct_handler_methods.rb +5 -4
  147. data/lib/yard/handlers/ruby/visibility_handler.rb +1 -0
  148. data/lib/yard/handlers/ruby/yield_handler.rb +1 -0
  149. data/lib/yard/i18n/locale.rb +1 -0
  150. data/lib/yard/i18n/message.rb +5 -4
  151. data/lib/yard/i18n/messages.rb +2 -1
  152. data/lib/yard/i18n/po_parser.rb +5 -4
  153. data/lib/yard/i18n/pot_generator.rb +8 -8
  154. data/lib/yard/i18n/text.rb +9 -9
  155. data/lib/yard/logging.rb +9 -6
  156. data/lib/yard/options.rb +8 -7
  157. data/lib/yard/parser/base.rb +3 -2
  158. data/lib/yard/parser/c/c_parser.rb +22 -21
  159. data/lib/yard/parser/c/comment_parser.rb +9 -6
  160. data/lib/yard/parser/c/statement.rb +1 -0
  161. data/lib/yard/parser/ruby/ast_node.rb +20 -18
  162. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +99 -122
  163. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +3 -2
  164. data/lib/yard/parser/ruby/legacy/statement.rb +4 -3
  165. data/lib/yard/parser/ruby/legacy/statement_list.rb +52 -42
  166. data/lib/yard/parser/ruby/legacy/token_list.rb +16 -13
  167. data/lib/yard/parser/ruby/ruby_parser.rb +87 -63
  168. data/lib/yard/parser/ruby/token_resolver.rb +156 -0
  169. data/lib/yard/parser/source_parser.rb +28 -20
  170. data/lib/yard/rake/yardoc_task.rb +3 -3
  171. data/lib/yard/registry.rb +14 -16
  172. data/lib/yard/registry_resolver.rb +36 -20
  173. data/lib/yard/registry_store.rb +19 -15
  174. data/lib/yard/rubygems/backports.rb +2 -0
  175. data/lib/yard/rubygems/backports/LICENSE.txt +0 -0
  176. data/lib/yard/rubygems/backports/MIT.txt +0 -0
  177. data/lib/yard/rubygems/backports/gem.rb +1 -0
  178. data/lib/yard/rubygems/backports/source_index.rb +25 -30
  179. data/lib/yard/rubygems/doc_manager.rb +10 -8
  180. data/lib/yard/rubygems/hook.rb +11 -18
  181. data/lib/yard/rubygems/specification.rb +1 -0
  182. data/lib/yard/serializers/base.rb +5 -2
  183. data/lib/yard/serializers/file_system_serializer.rb +7 -6
  184. data/lib/yard/serializers/process_serializer.rb +2 -2
  185. data/lib/yard/serializers/stdout_serializer.rb +8 -6
  186. data/lib/yard/serializers/yardoc_serializer.rb +31 -26
  187. data/lib/yard/server.rb +2 -1
  188. data/lib/yard/server/adapter.rb +1 -1
  189. data/lib/yard/server/commands/base.rb +15 -2
  190. data/lib/yard/server/commands/display_file_command.rb +2 -2
  191. data/lib/yard/server/commands/display_object_command.rb +6 -3
  192. data/lib/yard/server/commands/frames_command.rb +1 -0
  193. data/lib/yard/server/commands/library_command.rb +50 -14
  194. data/lib/yard/server/commands/library_index_command.rb +5 -4
  195. data/lib/yard/server/commands/list_command.rb +1 -0
  196. data/lib/yard/server/commands/root_request_command.rb +1 -0
  197. data/lib/yard/server/commands/search_command.rb +17 -16
  198. data/lib/yard/server/commands/static_file_command.rb +2 -1
  199. data/lib/yard/server/commands/static_file_helpers.rb +23 -14
  200. data/lib/yard/server/doc_server_helper.rb +15 -1
  201. data/lib/yard/server/doc_server_serializer.rb +3 -5
  202. data/lib/yard/server/library_version.rb +44 -22
  203. data/lib/yard/server/rack_adapter.rb +2 -1
  204. data/lib/yard/server/router.rb +15 -14
  205. data/lib/yard/server/static_caching.rb +1 -0
  206. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +0 -0
  207. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  208. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +0 -0
  209. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +0 -0
  210. data/lib/yard/server/templates/default/layout/html/script_setup.erb +0 -0
  211. data/lib/yard/server/templates/default/layout/html/setup.rb +2 -1
  212. data/lib/yard/server/templates/default/method_details/html/permalink.erb +0 -0
  213. data/lib/yard/server/templates/default/method_details/html/setup.rb +1 -0
  214. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +2 -2
  215. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +0 -0
  216. data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +1 -1
  217. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +2 -1
  218. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +0 -0
  219. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +4 -4
  220. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +2 -1
  221. data/lib/yard/server/templates/doc_server/search/html/search.erb +0 -0
  222. data/lib/yard/server/templates/doc_server/search/html/setup.rb +2 -1
  223. data/lib/yard/server/webrick_adapter.rb +4 -2
  224. data/lib/yard/tags/default_factory.rb +19 -13
  225. data/lib/yard/tags/default_tag.rb +2 -1
  226. data/lib/yard/tags/directives.rb +17 -19
  227. data/lib/yard/tags/library.rb +9 -6
  228. data/lib/yard/tags/option_tag.rb +1 -0
  229. data/lib/yard/tags/overload_tag.rb +6 -4
  230. data/lib/yard/tags/ref_tag.rb +1 -0
  231. data/lib/yard/tags/ref_tag_list.rb +2 -1
  232. data/lib/yard/tags/tag.rb +16 -2
  233. data/lib/yard/tags/tag_format_error.rb +3 -2
  234. data/lib/yard/tags/types_explainer.rb +160 -0
  235. data/lib/yard/templates/engine.rb +3 -2
  236. data/lib/yard/templates/erb_cache.rb +3 -2
  237. data/lib/yard/templates/helpers/base_helper.rb +9 -6
  238. data/lib/yard/templates/helpers/filter_helper.rb +1 -0
  239. data/lib/yard/templates/helpers/html_helper.rb +65 -37
  240. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +25 -7
  241. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +2 -1
  242. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +10 -7
  243. data/lib/yard/templates/helpers/markup_helper.rb +12 -13
  244. data/lib/yard/templates/helpers/method_helper.rb +8 -7
  245. data/lib/yard/templates/helpers/module_helper.rb +1 -0
  246. data/lib/yard/templates/helpers/text_helper.rb +16 -11
  247. data/lib/yard/templates/helpers/uml_helper.rb +2 -1
  248. data/lib/yard/templates/section.rb +3 -4
  249. data/lib/yard/templates/template.rb +18 -11
  250. data/lib/yard/templates/template_options.rb +1 -0
  251. data/lib/yard/verifier.rb +2 -0
  252. data/lib/yard/version.rb +2 -1
  253. data/spec/cli/command_parser_spec.rb +7 -7
  254. data/spec/cli/command_spec.rb +2 -2
  255. data/spec/cli/config_spec.rb +3 -4
  256. data/spec/cli/diff_spec.rb +7 -9
  257. data/spec/cli/display_spec.rb +2 -2
  258. data/spec/cli/gems_spec.rb +11 -11
  259. data/spec/cli/graph_spec.rb +4 -3
  260. data/spec/cli/help_spec.rb +3 -3
  261. data/spec/cli/i18n_spec.rb +3 -3
  262. data/spec/cli/list_spec.rb +2 -2
  263. data/spec/cli/markup_types_spec.rb +2 -2
  264. data/spec/cli/server_spec.rb +21 -18
  265. data/spec/cli/stats_spec.rb +23 -22
  266. data/spec/cli/yardoc_spec.rb +49 -47
  267. data/spec/cli/yri_spec.rb +6 -6
  268. data/spec/code_objects/base_spec.rb +6 -4
  269. data/spec/code_objects/class_object_spec.rb +10 -9
  270. data/spec/code_objects/code_object_list_spec.rb +3 -2
  271. data/spec/code_objects/constants_spec.rb +17 -6
  272. data/spec/code_objects/extra_file_object_spec.rb +6 -5
  273. data/spec/code_objects/macro_object_spec.rb +5 -3
  274. data/spec/code_objects/method_object_spec.rb +6 -5
  275. data/spec/code_objects/module_object_spec.rb +3 -2
  276. data/spec/code_objects/namespace_object_spec.rb +10 -9
  277. data/spec/code_objects/proxy_spec.rb +9 -8
  278. data/spec/code_objects/spec_helper.rb +2 -2
  279. data/spec/config_spec.rb +9 -14
  280. data/spec/core_ext/array_spec.rb +2 -3
  281. data/spec/core_ext/file_spec.rb +3 -3
  282. data/spec/core_ext/hash_spec.rb +5 -5
  283. data/spec/core_ext/insertion_spec.rb +2 -2
  284. data/spec/core_ext/module_spec.rb +3 -3
  285. data/spec/core_ext/string_spec.rb +5 -5
  286. data/spec/core_ext/symbol_hash_spec.rb +8 -8
  287. data/spec/docstring_parser_spec.rb +6 -7
  288. data/spec/docstring_spec.rb +30 -3
  289. data/spec/examples.txt +1848 -0
  290. data/spec/handlers/alias_handler_spec.rb +2 -1
  291. data/spec/handlers/attribute_handler_spec.rb +7 -5
  292. data/spec/handlers/base_spec.rb +9 -8
  293. data/spec/handlers/c/alias_handler_spec.rb +2 -1
  294. data/spec/handlers/c/attribute_handler_spec.rb +2 -1
  295. data/spec/handlers/c/class_handler_spec.rb +2 -1
  296. data/spec/handlers/c/constant_handler_spec.rb +5 -4
  297. data/spec/handlers/c/init_handler_spec.rb +2 -1
  298. data/spec/handlers/c/method_handler_spec.rb +2 -1
  299. data/spec/handlers/c/mixin_handler_spec.rb +2 -1
  300. data/spec/handlers/c/module_handler_spec.rb +2 -1
  301. data/spec/handlers/c/override_comment_handler_spec.rb +2 -1
  302. data/spec/handlers/c/path_handler_spec.rb +2 -1
  303. data/spec/handlers/c/spec_helper.rb +1 -1
  304. data/spec/handlers/c/struct_handler_spec.rb +3 -2
  305. data/spec/handlers/class_condition_handler_spec.rb +3 -2
  306. data/spec/handlers/class_handler_spec.rb +3 -2
  307. data/spec/handlers/class_method_handler_shared_examples.rb +9 -8
  308. data/spec/handlers/class_variable_handler_spec.rb +3 -2
  309. data/spec/handlers/constant_handler_spec.rb +28 -3
  310. data/spec/handlers/decorator_handler_methods_spec.rb +47 -59
  311. data/spec/handlers/dsl_handler_spec.rb +3 -2
  312. data/spec/handlers/examples/alias_handler_001.rb.txt +0 -0
  313. data/spec/handlers/examples/attribute_handler_001.rb.txt +0 -0
  314. data/spec/handlers/examples/class_condition_handler_001.rb.txt +0 -0
  315. data/spec/handlers/examples/class_handler_001.rb.txt +0 -0
  316. data/spec/handlers/examples/class_variable_handler_001.rb.txt +0 -0
  317. data/spec/handlers/examples/constant_handler_001.rb.txt +0 -0
  318. data/spec/handlers/examples/dsl_handler_001.rb.txt +0 -0
  319. data/spec/handlers/examples/exception_handler_001.rb.txt +0 -0
  320. data/spec/handlers/examples/extend_handler_001.rb.txt +0 -0
  321. data/spec/handlers/examples/method_condition_handler_001.rb.txt +0 -0
  322. data/spec/handlers/examples/method_handler_001.rb.txt +2 -0
  323. data/spec/handlers/examples/mixin_handler_001.rb.txt +0 -0
  324. data/spec/handlers/examples/module_handler_001.rb.txt +0 -0
  325. data/spec/handlers/examples/private_constant_handler_001.rb.txt +0 -0
  326. data/spec/handlers/examples/process_handler_001.rb.txt +0 -0
  327. data/spec/handlers/examples/visibility_handler_001.rb.txt +0 -0
  328. data/spec/handlers/examples/yield_handler_001.rb.txt +0 -0
  329. data/spec/handlers/exception_handler_spec.rb +3 -2
  330. data/spec/handlers/extend_handler_spec.rb +2 -1
  331. data/spec/handlers/legacy_base_spec.rb +5 -5
  332. data/spec/handlers/method_condition_handler_spec.rb +3 -2
  333. data/spec/handlers/method_handler_spec.rb +7 -1
  334. data/spec/handlers/mixin_handler_spec.rb +3 -2
  335. data/spec/handlers/module_function_handler_spec.rb +2 -1
  336. data/spec/handlers/module_handler_spec.rb +3 -2
  337. data/spec/handlers/private_class_method_handler_spec.rb +2 -1
  338. data/spec/handlers/private_constant_handler_spec.rb +2 -1
  339. data/spec/handlers/processor_spec.rb +2 -1
  340. data/spec/handlers/public_class_method_handler_spec.rb +2 -1
  341. data/spec/handlers/ruby/base_spec.rb +6 -5
  342. data/spec/handlers/ruby/legacy/base_spec.rb +4 -4
  343. data/spec/handlers/spec_helper.rb +3 -3
  344. data/spec/handlers/visibility_handler_spec.rb +3 -2
  345. data/spec/handlers/yield_handler_spec.rb +3 -2
  346. data/spec/i18n/locale_spec.rb +3 -3
  347. data/spec/i18n/message_spec.rb +2 -2
  348. data/spec/i18n/messages_spec.rb +3 -3
  349. data/spec/i18n/pot_generator_spec.rb +34 -34
  350. data/spec/i18n/text_spec.rb +16 -12
  351. data/spec/logging_spec.rb +2 -2
  352. data/spec/options_spec.rb +9 -9
  353. data/spec/parser/base_spec.rb +2 -2
  354. data/spec/parser/c_parser_spec.rb +5 -4
  355. data/spec/parser/examples/array.c.txt +0 -0
  356. data/spec/parser/examples/example1.rb.txt +0 -0
  357. data/spec/parser/examples/extrafile.c.txt +0 -0
  358. data/spec/parser/examples/multifile.c.txt +0 -0
  359. data/spec/parser/examples/override.c.txt +0 -0
  360. data/spec/parser/examples/parse_in_order_001.rb.txt +0 -0
  361. data/spec/parser/examples/parse_in_order_002.rb.txt +0 -0
  362. data/spec/parser/examples/tag_handler_001.rb.txt +0 -0
  363. data/spec/parser/ruby/ast_node_spec.rb +7 -7
  364. data/spec/parser/ruby/legacy/statement_list_spec.rb +7 -7
  365. data/spec/parser/ruby/legacy/token_list_spec.rb +4 -4
  366. data/spec/parser/ruby/ruby_parser_spec.rb +42 -20
  367. data/spec/parser/ruby/token_resolver_spec.rb +165 -0
  368. data/spec/parser/source_parser_spec.rb +18 -18
  369. data/spec/parser/tag_parsing_spec.rb +2 -2
  370. data/spec/rake/yardoc_task_spec.rb +4 -4
  371. data/spec/registry_spec.rb +62 -56
  372. data/spec/registry_store_spec.rb +7 -7
  373. data/spec/rubygems/doc_manager_spec.rb +2 -2
  374. data/spec/serializers/data/serialized_yardoc/checksums +0 -0
  375. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  376. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  377. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  378. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  379. data/spec/serializers/data/serialized_yardoc/proxy_types +0 -0
  380. data/spec/serializers/file_system_serializer_spec.rb +8 -7
  381. data/spec/serializers/spec_helper.rb +2 -2
  382. data/spec/serializers/yardoc_serializer_spec.rb +5 -4
  383. data/spec/server/adapter_spec.rb +3 -2
  384. data/spec/server/commands/base_spec.rb +15 -11
  385. data/spec/server/commands/library_command_spec.rb +2 -2
  386. data/spec/server/doc_server_helper_spec.rb +4 -3
  387. data/spec/server/doc_server_serializer_spec.rb +3 -2
  388. data/spec/server/rack_adapter_spec.rb +3 -2
  389. data/spec/server/router_spec.rb +3 -2
  390. data/spec/server/spec_helper.rb +2 -2
  391. data/spec/server/static_caching_spec.rb +4 -3
  392. data/spec/server/webrick_servlet_spec.rb +5 -4
  393. data/spec/server_spec.rb +3 -3
  394. data/spec/spec_helper.rb +94 -21
  395. data/spec/tags/default_factory_spec.rb +10 -4
  396. data/spec/tags/default_tag_spec.rb +3 -3
  397. data/spec/tags/directives_spec.rb +12 -12
  398. data/spec/tags/library_spec.rb +16 -2
  399. data/spec/tags/overload_tag_spec.rb +4 -4
  400. data/spec/tags/ref_tag_list_spec.rb +3 -3
  401. data/spec/tags/types_explainer_spec.rb +200 -0
  402. data/spec/templates/class_spec.rb +2 -1
  403. data/spec/templates/constant_spec.rb +3 -2
  404. data/spec/templates/engine_spec.rb +4 -3
  405. data/spec/templates/examples/class001.html +0 -0
  406. data/spec/templates/examples/class001.txt +0 -0
  407. data/spec/templates/examples/class002.html +0 -0
  408. data/spec/templates/examples/constant001.txt +0 -0
  409. data/spec/templates/examples/constant002.txt +0 -0
  410. data/spec/templates/examples/constant003.txt +0 -0
  411. data/spec/templates/examples/method001.html +0 -0
  412. data/spec/templates/examples/method001.txt +0 -0
  413. data/spec/templates/examples/method002.html +0 -0
  414. data/spec/templates/examples/method002.txt +0 -0
  415. data/spec/templates/examples/method003.html +0 -0
  416. data/spec/templates/examples/method003.txt +0 -0
  417. data/spec/templates/examples/method004.html +0 -0
  418. data/spec/templates/examples/method004.txt +0 -0
  419. data/spec/templates/examples/method005.html +0 -0
  420. data/spec/templates/examples/method005.txt +0 -0
  421. data/spec/templates/examples/method006.html +108 -0
  422. data/spec/templates/examples/method006.txt +20 -0
  423. data/spec/templates/examples/module001.dot +0 -0
  424. data/spec/templates/examples/module001.html +0 -0
  425. data/spec/templates/examples/module001.txt +0 -0
  426. data/spec/templates/examples/module002.html +0 -0
  427. data/spec/templates/examples/module003.html +0 -0
  428. data/spec/templates/examples/module004.html +0 -0
  429. data/spec/templates/examples/tag001.txt +0 -0
  430. data/spec/templates/helpers/base_helper_spec.rb +5 -5
  431. data/spec/templates/helpers/html_helper_spec.rb +64 -60
  432. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +17 -6
  433. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +11 -13
  434. data/spec/templates/helpers/markup_helper_spec.rb +2 -2
  435. data/spec/templates/helpers/method_helper_spec.rb +3 -3
  436. data/spec/templates/helpers/module_helper_spec.rb +2 -2
  437. data/spec/templates/helpers/shared_signature_examples.rb +2 -1
  438. data/spec/templates/helpers/text_helper_spec.rb +7 -6
  439. data/spec/templates/method_spec.rb +18 -2
  440. data/spec/templates/module_spec.rb +4 -3
  441. data/spec/templates/onefile_spec.rb +8 -6
  442. data/spec/templates/section_spec.rb +3 -2
  443. data/spec/templates/spec_helper.rb +5 -2
  444. data/spec/templates/tag_spec.rb +3 -2
  445. data/spec/templates/template_spec.rb +15 -14
  446. data/spec/verifier_spec.rb +3 -3
  447. data/templates/default/class/dot/setup.rb +2 -1
  448. data/templates/default/class/dot/superklass.erb +0 -0
  449. data/templates/default/class/html/constructor_details.erb +0 -0
  450. data/templates/default/class/html/setup.rb +2 -1
  451. data/templates/default/class/html/subclasses.erb +0 -0
  452. data/templates/default/class/setup.rb +6 -6
  453. data/templates/default/class/text/setup.rb +2 -1
  454. data/templates/default/class/text/subclasses.erb +0 -0
  455. data/templates/default/constant/text/header.erb +0 -0
  456. data/templates/default/constant/text/setup.rb +1 -0
  457. data/templates/default/docstring/html/abstract.erb +0 -0
  458. data/templates/default/docstring/html/deprecated.erb +0 -0
  459. data/templates/default/docstring/html/index.erb +0 -0
  460. data/templates/default/docstring/html/note.erb +0 -0
  461. data/templates/default/docstring/html/private.erb +0 -0
  462. data/templates/default/docstring/html/returns_void.erb +0 -0
  463. data/templates/default/docstring/html/text.erb +0 -0
  464. data/templates/default/docstring/html/todo.erb +0 -0
  465. data/templates/default/docstring/setup.rb +4 -3
  466. data/templates/default/docstring/text/abstract.erb +0 -0
  467. data/templates/default/docstring/text/deprecated.erb +0 -0
  468. data/templates/default/docstring/text/index.erb +0 -0
  469. data/templates/default/docstring/text/note.erb +0 -0
  470. data/templates/default/docstring/text/private.erb +0 -0
  471. data/templates/default/docstring/text/returns_void.erb +0 -0
  472. data/templates/default/docstring/text/text.erb +0 -0
  473. data/templates/default/docstring/text/todo.erb +0 -0
  474. data/templates/default/fulldoc/html/css/common.css +0 -0
  475. data/templates/default/fulldoc/html/css/full_list.css +0 -0
  476. data/templates/default/fulldoc/html/css/style.css +31 -20
  477. data/templates/default/fulldoc/html/frames.erb +0 -0
  478. data/templates/default/fulldoc/html/full_list.erb +2 -2
  479. data/templates/default/fulldoc/html/full_list_class.erb +0 -0
  480. data/templates/default/fulldoc/html/full_list_file.erb +0 -0
  481. data/templates/default/fulldoc/html/full_list_method.erb +0 -0
  482. data/templates/default/fulldoc/html/js/app.js +3 -3
  483. data/templates/default/fulldoc/html/js/full_list.js +0 -0
  484. data/templates/default/fulldoc/html/js/jquery.js +0 -0
  485. data/templates/default/fulldoc/html/setup.rb +22 -23
  486. data/templates/default/layout/dot/header.erb +0 -0
  487. data/templates/default/layout/dot/setup.rb +1 -0
  488. data/templates/default/layout/html/breadcrumb.erb +0 -0
  489. data/templates/default/layout/html/files.erb +0 -0
  490. data/templates/default/layout/html/footer.erb +0 -0
  491. data/templates/default/layout/html/headers.erb +2 -2
  492. data/templates/default/layout/html/index.erb +0 -0
  493. data/templates/default/layout/html/layout.erb +1 -3
  494. data/templates/default/layout/html/listing.erb +0 -0
  495. data/templates/default/layout/html/objects.erb +0 -0
  496. data/templates/default/layout/html/script_setup.erb +0 -0
  497. data/templates/default/layout/html/search.erb +0 -0
  498. data/templates/default/layout/html/setup.rb +21 -19
  499. data/templates/default/method/html/header.erb +0 -0
  500. data/templates/default/method/setup.rb +2 -1
  501. data/templates/default/method/text/header.erb +0 -0
  502. data/templates/default/method_details/html/header.erb +0 -0
  503. data/templates/default/method_details/html/method_signature.erb +0 -0
  504. data/templates/default/method_details/html/source.erb +0 -0
  505. data/templates/default/method_details/setup.rb +1 -0
  506. data/templates/default/method_details/text/header.erb +0 -0
  507. data/templates/default/method_details/text/method_signature.erb +0 -0
  508. data/templates/default/method_details/text/setup.rb +3 -2
  509. data/templates/default/module/dot/child.erb +0 -0
  510. data/templates/default/module/dot/dependencies.erb +0 -0
  511. data/templates/default/module/dot/header.erb +0 -0
  512. data/templates/default/module/dot/info.erb +0 -0
  513. data/templates/default/module/dot/setup.rb +2 -1
  514. data/templates/default/module/html/attribute_details.erb +0 -0
  515. data/templates/default/module/html/attribute_summary.erb +0 -0
  516. data/templates/default/module/html/box_info.erb +0 -0
  517. data/templates/default/module/html/children.erb +0 -0
  518. data/templates/default/module/html/constant_summary.erb +0 -0
  519. data/templates/default/module/html/defines.erb +0 -0
  520. data/templates/default/module/html/header.erb +0 -0
  521. data/templates/default/module/html/inherited_attributes.erb +0 -0
  522. data/templates/default/module/html/inherited_constants.erb +0 -0
  523. data/templates/default/module/html/inherited_methods.erb +0 -0
  524. data/templates/default/module/html/item_summary.erb +0 -0
  525. data/templates/default/module/html/method_details_list.erb +0 -0
  526. data/templates/default/module/html/method_summary.erb +0 -0
  527. data/templates/default/module/html/methodmissing.erb +0 -0
  528. data/templates/default/module/html/pre_docstring.erb +0 -0
  529. data/templates/default/module/setup.rb +24 -26
  530. data/templates/default/module/text/children.erb +0 -0
  531. data/templates/default/module/text/class_meths_list.erb +0 -0
  532. data/templates/default/module/text/extends.erb +0 -0
  533. data/templates/default/module/text/header.erb +0 -0
  534. data/templates/default/module/text/includes.erb +0 -0
  535. data/templates/default/module/text/instance_meths_list.erb +0 -0
  536. data/templates/default/module/text/setup.rb +2 -1
  537. data/templates/default/onefile/html/files.erb +0 -0
  538. data/templates/default/onefile/html/headers.erb +0 -0
  539. data/templates/default/onefile/html/layout.erb +3 -3
  540. data/templates/default/onefile/html/readme.erb +0 -0
  541. data/templates/default/onefile/html/setup.rb +9 -8
  542. data/templates/default/root/dot/child.erb +0 -0
  543. data/templates/default/root/dot/setup.rb +3 -2
  544. data/templates/default/root/html/setup.rb +2 -1
  545. data/templates/default/tags/html/example.erb +0 -0
  546. data/templates/default/tags/html/index.erb +0 -0
  547. data/templates/default/tags/html/option.erb +1 -1
  548. data/templates/default/tags/html/overload.erb +0 -0
  549. data/templates/default/tags/html/see.erb +0 -0
  550. data/templates/default/tags/html/tag.erb +1 -1
  551. data/templates/default/tags/setup.rb +7 -5
  552. data/templates/default/tags/text/example.erb +0 -0
  553. data/templates/default/tags/text/index.erb +0 -0
  554. data/templates/default/tags/text/option.erb +1 -1
  555. data/templates/default/tags/text/overload.erb +0 -0
  556. data/templates/default/tags/text/see.erb +0 -0
  557. data/templates/default/tags/text/tag.erb +2 -2
  558. data/templates/guide/class/html/setup.rb +1 -0
  559. data/templates/guide/docstring/html/setup.rb +1 -0
  560. data/templates/guide/fulldoc/html/css/style.css +0 -0
  561. data/templates/guide/fulldoc/html/js/app.js +0 -0
  562. data/templates/guide/fulldoc/html/setup.rb +7 -6
  563. data/templates/guide/layout/html/layout.erb +0 -0
  564. data/templates/guide/layout/html/setup.rb +2 -5
  565. data/templates/guide/method/html/header.erb +0 -0
  566. data/templates/guide/method/html/setup.rb +5 -4
  567. data/templates/guide/module/html/header.erb +0 -0
  568. data/templates/guide/module/html/method_list.erb +0 -0
  569. data/templates/guide/module/html/setup.rb +2 -1
  570. data/templates/guide/onefile/html/files.erb +0 -0
  571. data/templates/guide/onefile/html/setup.rb +1 -0
  572. data/templates/guide/onefile/html/toc.erb +0 -0
  573. data/templates/guide/tags/html/setup.rb +1 -0
  574. data/yard.gemspec +2 -1
  575. metadata +10 -2
@@ -0,0 +1,156 @@
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module Parser
4
+ module Ruby
5
+ # Supports {#each} enumeration over a source's tokens, yielding
6
+ # the token and a possible {CodeObjects::Base} associated with the
7
+ # constant or identifier token.
8
+ class TokenResolver
9
+ include Enumerable
10
+
11
+ # Creates a token resolver for given source.
12
+ #
13
+ # @param source [String] the source code to tokenize
14
+ # @param namespace [CodeObjects::Base] the object/namespace to resolve from
15
+ def initialize(source, namespace = Registry.root)
16
+ @tokens = RubyParser.parse(source, '(tokenize)').tokens
17
+ raise ParserSyntaxError if @tokens.empty? && !source.empty?
18
+ @default_namespace = namespace
19
+ end
20
+
21
+ # Iterates over each token, yielding the token and a possible code
22
+ # object that is associated with the token.
23
+ #
24
+ # @yieldparam token [Array(Symbol,String,Array(Integer,Integer))] the
25
+ # current token object being iterated
26
+ # @yieldparam object [CodeObjects::Base, nil] the fully qualified code
27
+ # object associated with the current token, or nil if there is no object
28
+ # for the yielded token.
29
+ # @example Yielding code objects
30
+ # r = TokenResolver.new("A::B::C")
31
+ # r.each do |tok, obj|
32
+ # if obj
33
+ # puts "#{tok[0]} -> #{obj.path.inspect}"
34
+ # else
35
+ # puts "No object: #{tok.inspect}"
36
+ # end
37
+ # end
38
+ #
39
+ # # Prints:
40
+ # # :const -> "A"
41
+ # # No object: [:op, "::"]
42
+ # # :const -> "A::B"
43
+ # # No object: [:op, "::"]
44
+ # # :const -> "A::B::C"
45
+ def each
46
+ @states = []
47
+ push_state
48
+ @tokens.each do |token|
49
+ yield_obj = false
50
+
51
+ if skip_group && [:const, :ident, :op, :period].include?(token[0])
52
+ yield token, nil
53
+ next
54
+ else
55
+ self.skip_group = false
56
+ end
57
+
58
+ case token[0]
59
+ when :const
60
+ lookup(token[0], token[1])
61
+ yield_obj = true
62
+ self.last_sep = nil
63
+ when :ident
64
+ lookup(token[0], token[1])
65
+ yield_obj = true
66
+ self.last_sep = nil
67
+ when :op, :period
68
+ self.last_sep = token[1]
69
+ unless CodeObjects.types_for_separator(token[1])
70
+ self.object = nil
71
+ self.last_sep = nil
72
+ end
73
+ when :lparen
74
+ push_state
75
+ when :rparen
76
+ pop_state
77
+ else
78
+ self.object = nil
79
+ end
80
+
81
+ yield token, (yield_obj ? object : nil)
82
+
83
+ if next_object
84
+ self.object = next_object
85
+ self.next_object = nil
86
+ end
87
+ self.skip_group = true if yield_obj && object.nil?
88
+ end
89
+ end
90
+
91
+ def self.state_attr(*attrs)
92
+ attrs.each do |attr|
93
+ define_method(attr) { @states.last[attr.to_sym] }
94
+ define_method("#{attr}=") {|v| @states.last[attr.to_sym] = v }
95
+ protected attr, :"#{attr}="
96
+ end
97
+ end
98
+
99
+ private
100
+
101
+ def push_state
102
+ @states.push :object => nil, :skip_group => false, :last_sep => nil
103
+ end
104
+
105
+ def pop_state
106
+ @states.pop
107
+ end
108
+
109
+ state_attr :object, :next_object, :skip_group, :last_sep
110
+
111
+ def lookup(toktype, name)
112
+ types = object_resolved_types
113
+ return self.object = nil if types.empty?
114
+
115
+ if toktype == :const
116
+ types.any? do |type|
117
+ prefix = (type ? type.path : "") + last_sep.to_s
118
+ self.object = Registry.resolve(@default_namespace, "#{prefix}#{name}", true)
119
+ end
120
+ else # ident
121
+ types.any? do |type|
122
+ obj = Registry.resolve(type, name, true)
123
+ if obj.nil? && name == "new"
124
+ obj = Registry.resolve(object, "#initialize", true)
125
+ self.next_object = object if obj.nil?
126
+ end
127
+ self.object = obj
128
+ end
129
+ end
130
+ end
131
+
132
+ def object_resolved_types(obj = object)
133
+ return [obj] unless obj.is_a?(CodeObjects::MethodObject)
134
+
135
+ resolved_types = []
136
+ tags = obj.tags(:return)
137
+ tags += obj.tags(:overload).map {|o| o.tags(:return) }.flatten
138
+ tags.each do |tag|
139
+ next if tag.types.nil?
140
+ tag.types.each do |type|
141
+ type = type.sub(/<.+>/, '')
142
+ if type == "self"
143
+ resolved_types << obj.parent
144
+ else
145
+ type_obj = Registry.resolve(obj, type, true)
146
+ resolved_types << type_obj if type_obj
147
+ end
148
+ end
149
+ end
150
+
151
+ resolved_types
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'stringio'
2
3
  require 'ostruct'
3
4
 
@@ -6,7 +7,7 @@ module YARD
6
7
  # Raised when an object is recognized but cannot be documented. This
7
8
  # generally occurs when the Ruby syntax used to declare an object is
8
9
  # too dynamic in nature.
9
- class UndocumentableError < Exception; end
10
+ class UndocumentableError < RuntimeError; end
10
11
 
11
12
  # Raised when the parser sees a Ruby syntax error
12
13
  class ParserSyntaxError < UndocumentableError; end
@@ -39,7 +40,8 @@ module YARD
39
40
  #
40
41
  # @see Processor#parse_remaining_files
41
42
  def parse
42
- while file = files.shift
43
+ until files.empty?
44
+ file = files.shift
43
45
  log.capture("Parsing #{file}") do
44
46
  SourceParser.new(SourceParser.parser_type, @global_state).parse(file)
45
47
  end
@@ -61,7 +63,7 @@ module YARD
61
63
  # @see CodeObjects::Base
62
64
  class SourceParser
63
65
  SHEBANG_LINE = /\A\s*#!\S+/
64
- ENCODING_LINE = /\A(?:\s*#*!.*\r?\n)?\s*(?:#+|\/\*+|\/\/+).*coding\s*[:=]{1,2}\s*([a-z\d_\-]+)/i
66
+ ENCODING_LINE = %r{\A(?:\s*#*!.*\r?\n)?\s*(?:#+|/\*+|//+).*coding\s*[:=]{1,2}\s*([a-z\d_\-]+)}i
65
67
  FROZEN_STRING_LINE = /frozen(-|_)string(-|_)literal: true/i
66
68
 
67
69
  # The default glob of files to be parsed.
@@ -71,12 +73,12 @@ module YARD
71
73
  # Byte order marks for various encodings
72
74
  # @since 0.7.0
73
75
  ENCODING_BYTE_ORDER_MARKS = {
74
- 'utf-8' => "\xEF\xBB\xBF",
76
+ 'utf-8' => String.new("\xEF\xBB\xBF"),
75
77
  # Not yet supported
76
- #'utf-16be' => "\xFE\xFF",
77
- #'utf-16le' => "\xFF\xFE",
78
- #'utf-32be' => "\x00\x00\xFF\xFE",
79
- #'utf-32le' => "\xFF\xFE",
78
+ # 'utf-16be' => "\xFE\xFF",
79
+ # 'utf-16le' => "\xFF\xFE",
80
+ # 'utf-32be' => "\x00\x00\xFF\xFE",
81
+ # 'utf-32le' => "\xFF\xFE",
80
82
  }
81
83
 
82
84
  class << self
@@ -105,7 +107,7 @@ module YARD
105
107
  end
106
108
  files = [paths].flatten.
107
109
  map {|p| File.directory?(p) ? "#{p}/**/*.{rb,c,cc,cxx,cpp}" : p }.
108
- map {|p| p.include?("*") ? Dir[p].sort_by {|f| f.length } : p }.flatten.
110
+ map {|p| p.include?("*") ? Dir[p].sort_by {|d| [d.length, d] } : p }.flatten.
109
111
  reject {|p| !File.file?(p) || excluded.any? {|re| p =~ re } }
110
112
 
111
113
  log.enter_level(level) do
@@ -167,7 +169,7 @@ module YARD
167
169
  # @return [Symbol] the parser type to be used for the extension
168
170
  # @since 0.5.6
169
171
  def parser_type_for_extension(extension)
170
- type = parser_type_extensions.find do |t, exts|
172
+ type = parser_type_extensions.find do |_t, exts|
171
173
  [exts].flatten.any? {|ext| ext === extension }
172
174
  end
173
175
  validated_parser_type(type ? type.first : :ruby)
@@ -362,8 +364,8 @@ module YARD
362
364
  def parse_in_order(*files)
363
365
  global_state = OpenStruct.new
364
366
 
365
- before_parse_list_callbacks.each do |cb|
366
- return if cb.call(files, global_state) == false
367
+ return if before_parse_list_callbacks.any? do |cb|
368
+ cb.call(files, global_state) == false
367
369
  end
368
370
 
369
371
  OrderedParser.new(global_state, files).parse
@@ -417,11 +419,11 @@ module YARD
417
419
  case content
418
420
  when String
419
421
  @file = File.cleanpath(content)
420
- content = convert_encoding(File.read_binary(file))
422
+ content = convert_encoding(String.new(File.read_binary(file)))
421
423
  checksum = Registry.checksum_for(content)
422
424
  return if Registry.checksums[file] == checksum
423
425
 
424
- if Registry.checksums.has_key?(file)
426
+ if Registry.checksums.key?(file)
425
427
  log.info "File '#{file}' was modified, re-processing..."
426
428
  end
427
429
  Registry.checksums[@file] = checksum
@@ -474,7 +476,7 @@ module YARD
474
476
  content.force_encoding('binary')
475
477
  ENCODING_BYTE_ORDER_MARKS.each do |encoding, bom|
476
478
  bom.force_encoding('binary')
477
- if content[0,bom.size] == bom
479
+ if content[0, bom.size] == bom
478
480
  content.force_encoding(encoding)
479
481
  return content
480
482
  end
@@ -487,10 +489,13 @@ module YARD
487
489
  # Runs a {Handlers::Processor} object to post process the parsed statements.
488
490
  # @return [void]
489
491
  def post_process
490
- return unless @parser.respond_to? :enumerator
491
- return unless enumerator = @parser.enumerator
492
- post = Handlers::Processor.new(self)
493
- post.process(enumerator)
492
+ return unless @parser.respond_to?(:enumerator)
493
+
494
+ enumerator = @parser.enumerator
495
+ if enumerator
496
+ post = Handlers::Processor.new(self)
497
+ post.process(enumerator)
498
+ end
494
499
  end
495
500
 
496
501
  def parser_type=(value)
@@ -510,7 +515,10 @@ module YARD
510
515
  # @since 0.5.6
511
516
  def parser_class
512
517
  klass = self.class.parser_types[parser_type]
513
- raise ArgumentError, "invalid parser type '#{parser_type}' or unrecognized file", caller[1..-1] if !klass
518
+ unless klass
519
+ raise ArgumentError, "invalid parser type '#{parser_type}' or unrecognized file", caller[1..-1]
520
+ end
521
+
514
522
  klass
515
523
  end
516
524
  end
@@ -1,9 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  require 'rake'
2
3
  require 'rake/tasklib'
3
4
 
4
5
  module YARD
5
6
  module Rake
6
-
7
7
  # The rake task to run {CLI::Yardoc} and generate documentation.
8
8
  class YardocTask < ::Rake::TaskLib
9
9
  # The name of the task
@@ -54,9 +54,9 @@ module YARD
54
54
  @files = []
55
55
 
56
56
  yield self if block_given?
57
- self.options += ENV['OPTS'].split(/[ ,]/) if ENV['OPTS']
57
+ self.options += ENV['OPTS'].split(/[ ,]/) if ENV['OPTS']
58
58
  self.files += ENV['FILES'].split(/[ ,]/) if ENV['FILES']
59
- self.options << '--no-stats' unless self.stats_options.empty?
59
+ self.options << '--no-stats' unless stats_options.empty?
60
60
 
61
61
  define
62
62
  end
data/lib/yard/registry.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'fileutils'
2
3
  require 'digest/sha1'
3
4
 
@@ -50,7 +51,7 @@ module YARD
50
51
  # @return [nil] if +for_writing+ is set to false and no yardoc file
51
52
  # is found, returns nil.
52
53
  def yardoc_file_for_gem(gem, ver_require = ">= 0", for_writing = false)
53
- specs = Gem.source_index.find_name(gem, ver_require)
54
+ specs = YARD::GemIndex.find_all_by_name(gem, ver_require)
54
55
  return if specs.empty?
55
56
 
56
57
  result = nil
@@ -63,12 +64,12 @@ module YARD
63
64
 
64
65
  if for_writing
65
66
  result = global_yardoc_file(spec, for_writing) ||
66
- old_global_yardoc_file(spec, for_writing) ||
67
- local_yardoc_file(spec, for_writing)
67
+ old_global_yardoc_file(spec, for_writing) ||
68
+ local_yardoc_file(spec, for_writing)
68
69
  else
69
70
  result = local_yardoc_file(spec, for_writing) ||
70
- global_yardoc_file(spec, for_writing) ||
71
- old_global_yardoc_file(spec, for_writing)
71
+ global_yardoc_file(spec, for_writing) ||
72
+ old_global_yardoc_file(spec, for_writing)
72
73
  end
73
74
 
74
75
  break if result
@@ -83,6 +84,7 @@ module YARD
83
84
  attr_accessor :yardoc_file
84
85
  undef yardoc_file, yardoc_file=
85
86
  def yardoc_file=(v) Thread.current[:__yard_yardoc_file__] = v end
87
+
86
88
  def yardoc_file
87
89
  Thread.current[:__yard_yardoc_file__] ||= DEFAULT_YARDOC_FILE
88
90
  end
@@ -248,7 +250,7 @@ module YARD
248
250
  # @param [Boolean] reload whether to load entire database
249
251
  # @return [Array<String>] all of the paths in the registry.
250
252
  def paths(reload = false)
251
- thread_local_store.keys(reload).map {|k| k.to_s }
253
+ thread_local_store.keys(reload).map(&:to_s)
252
254
  end
253
255
 
254
256
  # Returns the object at a specific path.
@@ -257,7 +259,7 @@ module YARD
257
259
  # @return [CodeObjects::Base] the object at path
258
260
  # @return [nil] if no object is found
259
261
  def at(path) path ? thread_local_store[path] : nil end
260
- alias_method :[], :at
262
+ alias [] at
261
263
 
262
264
  # The root namespace object.
263
265
  # @return [CodeObjects::RootObject] the root object in the namespace
@@ -347,6 +349,7 @@ module YARD
347
349
  attr_accessor :po_dir
348
350
  undef po_dir, po_dir=
349
351
  def po_dir=(dir) Thread.current[:__yard_po_dir__] = dir end
352
+
350
353
  def po_dir
351
354
  Thread.current[:__yard_po_dir__] ||= DEFAULT_PO_DIR
352
355
  end
@@ -375,9 +378,7 @@ module YARD
375
378
  [CodeObjects::NSEP, CodeObjects::CSEP, ''].each do |s|
376
379
  next if s.empty? && name =~ /^\w/
377
380
  path = name
378
- if namespace != root
379
- path = [namespace.path, name].join(s)
380
- end
381
+ path = [namespace.path, name].join(s) if namespace != root
381
382
  found = at(path)
382
383
  return found if found && (type.nil? || found.type == type)
383
384
  end
@@ -391,7 +392,7 @@ module YARD
391
392
  yfile = spec.doc_dir(DEFAULT_YARDOC_FILE)
392
393
  if for_writing
393
394
  if File.writable?(path) ||
394
- (!File.directory?(path) && File.writable?(File.dirname(path)))
395
+ (!File.directory?(path) && File.writable?(File.dirname(path)))
395
396
  return yfile
396
397
  end
397
398
  elsif !for_writing && File.exist?(yfile)
@@ -402,11 +403,8 @@ module YARD
402
403
  def old_global_yardoc_file(spec, for_writing = false)
403
404
  path = spec.full_gem_path
404
405
  yfile = File.join(path, DEFAULT_YARDOC_FILE)
405
- if for_writing && File.writable?(path)
406
- return yfile
407
- elsif !for_writing && File.exist?(yfile)
408
- return yfile
409
- end
406
+ return yfile if for_writing && File.writable?(path)
407
+ return yfile if !for_writing && File.exist?(yfile)
410
408
  end
411
409
 
412
410
  def local_yardoc_file(spec, for_writing = false)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  # Handles all logic for complex lexical and inherited object resolution.
3
4
  # Used by {Registry.resolve}, so there is no need to use this class
@@ -13,7 +14,8 @@ module YARD
13
14
  # @param registry [Registry] only set this if customizing the registry
14
15
  # object
15
16
  def initialize(registry = Registry)
16
- @registry = Registry
17
+ @registry = registry
18
+ @default_sep = nil
17
19
  end
18
20
 
19
21
  # Performs a lookup on a given path in the registry. Resolution will occur
@@ -61,14 +63,23 @@ module YARD
61
63
  orignamespace = namespace
62
64
 
63
65
  if path =~ /\A#{default_separator}/
64
- path, namespace = $', @registry.root
66
+ path = $'
67
+ namespace = @registry.root
65
68
  end
66
69
 
67
70
  resolved = nil
71
+ lexical_lookup = 0
68
72
  while namespace && !resolved
69
73
  resolved = lookup_path_direct(namespace, path, type)
70
74
  resolved ||= lookup_path_inherited(namespace, path, type) if inheritance
75
+ break if resolved
71
76
  namespace = namespace.parent
77
+ lexical_lookup += 1
78
+ end
79
+
80
+ # method objects cannot be resolved through lexical lookup by more than 1 ns
81
+ if lexical_lookup > 1 && resolved.is_a?(CodeObjects::MethodObject)
82
+ resolved = nil
72
83
  end
73
84
 
74
85
  if proxy_fallback
@@ -82,14 +93,13 @@ module YARD
82
93
 
83
94
  # return [Boolean] if the obj's type matches the provided type.
84
95
  def validate(obj, type)
85
- return !type || (obj && obj.type == type) ? obj : nil
96
+ !type || (obj && obj.type == type) ? obj : nil
86
97
  end
87
98
 
88
99
  # Performs a lexical lookup from a namespace for a path and a type hint.
89
100
  def lookup_path_direct(namespace, path, type)
90
- if namespace.root? && result = validate(@registry.at(path), type)
91
- return result
92
- end
101
+ result = namespace.root? && validate(@registry.at(path), type)
102
+ return result if result
93
103
 
94
104
  if path =~ /\A(#{separators_match})/
95
105
  return validate(@registry.at(namespace.path + path), type)
@@ -105,10 +115,15 @@ module YARD
105
115
 
106
116
  # Performs a lookup through the inheritance chain on a path with a type hint.
107
117
  def lookup_path_inherited(namespace, path, type)
108
- resolved, last_obj, scopes, last_sep, pos = nil, namespace, [], nil, 0
118
+ resolved = nil
119
+ last_obj = namespace
120
+ scopes = []
121
+ last_sep = nil
122
+ pos = 0
109
123
 
110
124
  if path =~ /\A(#{separators_match})/
111
- last_sep, path = $1, $'
125
+ last_sep = $1
126
+ path = $'
112
127
  end
113
128
 
114
129
  path.scan(/(.+?)(#{separators_match}|$)/).each do |part, sep|
@@ -123,23 +138,26 @@ module YARD
123
138
  collect_namespaces(last_obj).each do |ns|
124
139
  next if ns.is_a?(CodeObjects::Proxy)
125
140
 
126
- found, search_seps = nil, []
141
+ found = nil
142
+ search_seps = []
127
143
  scopes.each do |scope|
128
144
  search_seps += separators_for_type(scope)
129
145
  end
130
146
 
131
147
  if search_seps.empty?
132
- if ns.type == :root
133
- search_seps = [""]
134
- elsif last_sep.nil?
135
- search_seps = separators
136
- else
137
- search_seps = [@default_sep]
138
- end
148
+ search_seps =
149
+ if ns.type == :root
150
+ [""]
151
+ elsif last_sep.nil?
152
+ separators
153
+ else
154
+ [@default_sep]
155
+ end
139
156
  end
140
157
 
141
158
  ([last_sep] | search_seps).compact.each do |search_sep|
142
- break if found = @registry.at(ns.path + search_sep.to_s + part)
159
+ found = @registry.at(ns.path + search_sep.to_s + part)
160
+ break if found
143
161
  end
144
162
 
145
163
  break cur_obj = found if found
@@ -160,9 +178,7 @@ module YARD
160
178
 
161
179
  nss = object.inheritance_tree(true)
162
180
  if object.respond_to?(:superclass)
163
- if object.superclass != P('BasicObject')
164
- nss |= [P('Object')]
165
- end
181
+ nss |= [P('Object')] if object.superclass != P('BasicObject')
166
182
  nss |= [P('BasicObject')]
167
183
  end
168
184