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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Array
2
3
  # Places values before or after another object (by value) in
3
4
  # an array. This is used in tandem with the before and after
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'fileutils'
2
3
 
3
4
  class File
@@ -36,7 +37,7 @@ class File
36
37
  path = path.split(SEPARATOR)
37
38
  path = path.inject([]) do |acc, comp|
38
39
  next acc if comp == RELATIVE_SAMEDIR
39
- if comp == RELATIVE_PARENTDIR && acc.size > 0 && acc.last != RELATIVE_PARENTDIR
40
+ if comp == RELATIVE_PARENTDIR && !acc.empty? && acc.last != RELATIVE_PARENTDIR
40
41
  acc.pop
41
42
  next acc
42
43
  end
@@ -60,6 +61,6 @@ class File
60
61
  # @return [String] the ascii-8bit encoded data
61
62
  # @since 0.5.3
62
63
  def self.read_binary(file)
63
- File.open(file, 'rb') {|f| f.read }
64
+ File.open(file, 'rb', &:read)
64
65
  end
65
- end
66
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Hash
2
3
  class << self
3
4
  def create(*args)
@@ -9,7 +10,7 @@ class Hash
9
10
  create_186(*args)
10
11
  end
11
12
  end
12
- alias :create_186 :[]
13
- alias :[] :create
13
+ alias create_186 []
14
+ alias [] create
14
15
  end
15
16
  end if RUBY_VERSION < "1.8.7"
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # The Insertion class inserts a value before or after another
2
3
  # value in a list.
3
4
  #
@@ -10,7 +11,10 @@ class Insertion
10
11
  #
11
12
  # @param [Array] list the list to perform the insertion on
12
13
  # @param [Object] value the value to insert
13
- def initialize(list, value) @list, @values = list, (Array === value ? value : [value]) end
14
+ def initialize(list, value)
15
+ @list = list
16
+ @values = (Array === value ? value : [value])
17
+ end
14
18
 
15
19
  # Inserts the value before +val+
16
20
  # @param [Object] val the object the value will be inserted before
@@ -52,9 +56,8 @@ class Insertion
52
56
  end
53
57
  end
54
58
 
55
- if index = list.index(val)
56
- list[index+rel,0] = @values
57
- end
59
+ index = list.index(val)
60
+ list[index + rel, 0] = @values if index
58
61
  list
59
62
  end
60
63
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class Module
2
3
  # Returns the class name of a full module namespace path
3
4
  #
@@ -16,4 +17,4 @@ class Module
16
17
  def namespace_name
17
18
  name.split("::")[0..-2].join("::")
18
19
  end
19
- end
20
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  class String
2
3
  # Splits text into tokens the way a shell would, handling quoted
3
4
  # text as a single token. Use '\"' and "\'" to escape quotes and
@@ -5,16 +6,16 @@ class String
5
6
  #
6
7
  # @return [Array] an array representing the tokens
7
8
  def shell_split
8
- out = [""]
9
+ out = [String.new("")]
9
10
  state = :none
10
11
  escape_next = false
11
- quote = ""
12
+ quote = String.new("")
12
13
  strip.split(//).each do |char|
13
14
  case state
14
15
  when :none, :space
15
16
  case char
16
17
  when /\s/
17
- out << "" unless state == :space
18
+ out << String.new("") unless state == :space
18
19
  state = :space
19
20
  escape_next = false
20
21
  when "\\"
@@ -30,7 +31,7 @@ class String
30
31
  escape_next = false
31
32
  else
32
33
  state = char
33
- quote = ""
34
+ quote = String.new("")
34
35
  end
35
36
  else
36
37
  state = :none
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # A subclass of Hash where all keys are converted into Symbols, and
2
3
  # optionally, all String values are converted into Symbols.
3
4
  class SymbolHash < Hash
@@ -25,11 +26,11 @@ class SymbolHash < Hash
25
26
  # @param [Array] list an even list of key followed by value
26
27
  # @return [SymbolHash] a new SymbolHash object
27
28
  def self.[](*hsh)
28
- obj = new;
29
+ obj = new
29
30
  if hsh.size == 1 && hsh.first.is_a?(Hash)
30
- hsh.first.each {|k,v| obj[k] = v }
31
+ hsh.first.each {|k, v| obj[k] = v }
31
32
  else
32
- 0.step(hsh.size, 2) {|n| obj[hsh[n]] = hsh[n+1] }
33
+ 0.step(hsh.size, 2) {|n| obj[hsh[n]] = hsh[n + 1] }
33
34
  end
34
35
  obj
35
36
  end
@@ -55,15 +56,16 @@ class SymbolHash < Hash
55
56
  # Tests if a symbolized key exists
56
57
  # @param [#to_sym] key the key to test
57
58
  # @return [Boolean] whether the key exists
58
- def has_key?(key) super(key.to_sym) end
59
+ def key?(key) super(key.to_sym) end
60
+ alias has_key? key?
59
61
 
60
62
  # Updates the object with the contents of another Hash object.
61
63
  # This method modifies the original SymbolHash object
62
64
  #
63
65
  # @param [Hash] hash the hash object to copy the values from
64
66
  # @return [SymbolHash] self
65
- def update(hash) hash.each {|k,v| self[k] = v }; self end
66
- alias_method :merge!, :update
67
+ def update(hash) hash.each {|k, v| self[k] = v }; self end
68
+ alias merge! update
67
69
 
68
70
  # Merges the contents of another hash into a new SymbolHash object
69
71
  #
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  # A documentation string, or "docstring" for short, encapsulates the
3
4
  # comments and metadata, or "tags", of an object. Meta-data is expressed
@@ -53,7 +54,7 @@ module YARD
53
54
 
54
55
  # @return [Boolean] whether the docstring was started with "##"
55
56
  attr_reader :hash_flag
56
- def hash_flag=(v) @hash_flag = v == nil ? false : v end
57
+ def hash_flag=(v) @hash_flag = v.nil? ? false : v end
57
58
 
58
59
  # Matches a tag at the start of a comment line
59
60
  # @deprecated Use {DocstringParser::META_MATCH}
@@ -130,7 +131,8 @@ module YARD
130
131
  # @param [String] content the raw comments to be parsed
131
132
  def replace(content, parse = true)
132
133
  content = content.join("\n") if content.is_a?(Array)
133
- @tags, @ref_tags = [], []
134
+ @tags = []
135
+ @ref_tags = []
134
136
  if parse
135
137
  super(parse_comments(content))
136
138
  else
@@ -152,7 +154,7 @@ module YARD
152
154
  resolve_reference
153
155
  obj = super
154
156
  %w(all summary tags ref_tags).each do |name|
155
- val = instance_variable_get("@#{name}")
157
+ val = instance_variable_defined?("@#{name}") && instance_variable_get("@#{name}")
156
158
  obj.instance_variable_set("@#{name}", val ? val.dup : nil)
157
159
  end
158
160
  obj
@@ -170,8 +172,8 @@ module YARD
170
172
  # @return [String] The first line or paragraph of the docstring; always ends with a period.
171
173
  def summary
172
174
  resolve_reference
173
- return @summary if @summary
174
- stripped = self.gsub(/[\r\n](?![\r\n])/, ' ').strip
175
+ return @summary if defined?(@summary) && @summary
176
+ stripped = gsub(/[\r\n](?![\r\n])/, ' ').strip
175
177
  num_parens = 0
176
178
  idx = length.times do |index|
177
179
  case stripped[index, 1]
@@ -181,11 +183,7 @@ module YARD
181
183
  when "\r", "\n"
182
184
  next_char = stripped[index + 1, 1].to_s
183
185
  if next_char =~ /^\s*$/
184
- if stripped[index - 1, 1] == '.'
185
- break index - 2
186
- else
187
- break index - 1
188
- end
186
+ break stripped[index - 1, 1] == '.' ? index - 2 : index - 1
189
187
  end
190
188
  when "{", "(", "["
191
189
  num_parens += 1
@@ -207,7 +205,7 @@ module YARD
207
205
  # @since 0.7.0
208
206
  # @todo Add Tags::Tag#to_raw and refactor
209
207
  def to_raw
210
- tag_data = tags.sort_by {|t| t.tag_name }.map do |tag|
208
+ tag_data = tags.sort_by(&:tag_name).map do |tag|
211
209
  case tag
212
210
  when Tags::OverloadTag
213
211
  tag_text = "@#{tag.tag_name} #{tag.signature}\n"
@@ -230,7 +228,7 @@ module YARD
230
228
  end
231
229
  tag_text
232
230
  end
233
- [strip, tag_data.join("\n")].reject {|l| l.empty? }.compact.join("\n")
231
+ [strip, tag_data.join("\n")].reject(&:empty?).compact.join("\n")
234
232
  end
235
233
 
236
234
  # @group Creating and Accessing Meta-data
@@ -329,10 +327,11 @@ module YARD
329
327
  # @return [void]
330
328
  def resolve_reference
331
329
  loop do
332
- return if @unresolved_reference.nil?
330
+ return if defined?(@unresolved_reference).nil? || @unresolved_reference.nil?
333
331
  return if CodeObjects::Proxy === @unresolved_reference
334
332
 
335
- reference, @unresolved_reference = @unresolved_reference, nil
333
+ reference = @unresolved_reference
334
+ @unresolved_reference = nil
336
335
  self.all = [reference.docstring.all, @all].join("\n")
337
336
  end
338
337
  end
@@ -344,7 +343,19 @@ module YARD
344
343
  # @return [Array<Tags::RefTag>] the list of valid reference tags
345
344
  def convert_ref_tags
346
345
  list = @ref_tags.reject {|t| CodeObjects::Proxy === t.owner }
347
- list.map {|t| t.tags }.flatten
346
+
347
+ @ref_tag_recurse_count ||= 0
348
+ @ref_tag_recurse_count += 1
349
+ if @ref_tag_recurse_count > 2
350
+ log.error "#{@object.file}:#{@object.line}: Detected circular reference tag in " \
351
+ "`#{@object}', ignoring all reference tags for this object " \
352
+ "(#{@ref_tags.map {|t| "@#{t.tag_name}" }.join(", ")})."
353
+ @ref_tags = []
354
+ return @ref_tags
355
+ end
356
+ list = list.map(&:tags).flatten
357
+ @ref_tag_recurse_count -= 1
358
+ list
348
359
  end
349
360
 
350
361
  # Parses out comments split by newlines into a new code object
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'ostruct'
2
3
 
3
4
  module YARD
@@ -129,15 +130,17 @@ module YARD
129
130
  def parse_content(content)
130
131
  content = content.split(/\r?\n/) if content.is_a?(String)
131
132
  return '' if !content || content.empty?
132
- docstring = ""
133
+ docstring = String.new("")
133
134
 
134
- indent, last_indent = content.first[/^\s*/].length, 0
135
+ indent = content.first[/^\s*/].length
136
+ last_indent = 0
135
137
  orig_indent = 0
136
138
  directive = false
137
139
  last_line = ""
138
- tag_name, tag_klass, tag_buf = nil, nil, []
140
+ tag_name = nil
141
+ tag_buf = []
139
142
 
140
- (content+['']).each_with_index do |line, index|
143
+ (content + ['']).each_with_index do |line, index|
141
144
  indent = line[/^\s*/].length
142
145
  empty = (line =~ /^\s*$/ ? true : false)
143
146
  done = content.size == index
@@ -153,13 +156,17 @@ module YARD
153
156
  else
154
157
  create_tag(tag_name, buf)
155
158
  end
156
- tag_name, tag_buf, directive = nil, [], false
159
+ tag_name = nil
160
+ tag_buf = []
161
+ directive = false
157
162
  orig_indent = 0
158
163
  end
159
164
 
160
165
  # Found a meta tag
161
166
  if line =~ META_MATCH
162
- directive, tag_name, tag_buf = $1, $2, [($3 || '')]
167
+ directive = $1
168
+ tag_name = $2
169
+ tag_buf = [($3 || '')]
163
170
  elsif tag_name && indent >= orig_indent && !empty
164
171
  orig_indent = indent if orig_indent == 0
165
172
  # Extra data added to the tag on the next line
@@ -169,7 +176,8 @@ module YARD
169
176
  tag_buf << line.gsub(/^[ \t]{#{orig_indent}}/, '')
170
177
  elsif !tag_name
171
178
  # Regular docstring text
172
- docstring << line << "\n"
179
+ docstring << line
180
+ docstring << "\n"
173
181
  end
174
182
 
175
183
  last_indent = indent
@@ -208,11 +216,11 @@ module YARD
208
216
  @tags += [library.tag_create(tag_name, tag_buf)].flatten
209
217
  else
210
218
  log.warn "Unknown tag @#{tag_name}" +
211
- (object ? " in file `#{object.file}` near line #{object.line}" : "")
219
+ (object ? " in file `#{object.file}` near line #{object.line}" : "")
212
220
  end
213
221
  rescue Tags::TagFormatError
214
222
  log.warn "Invalid tag format for @#{tag_name}" +
215
- (object ? " in file `#{object.file}` near line #{object.line}" : "")
223
+ (object ? " in file `#{object.file}` near line #{object.line}" : "")
216
224
  end
217
225
 
218
226
  # Creates a {Tags::RefTag}
@@ -231,12 +239,12 @@ module YARD
231
239
  end
232
240
  else
233
241
  log.warn "Unknown directive @!#{tag_name}" +
234
- (object ? " in file `#{object.file}` near line #{object.line}" : "")
242
+ (object ? " in file `#{object.file}` near line #{object.line}" : "")
235
243
  nil
236
244
  end
237
245
  rescue Tags::TagFormatError
238
246
  log.warn "Invalid directive format for @!#{tag_name}" +
239
- (object ? " in file `#{object.file}` near line #{object.line}" : "")
247
+ (object ? " in file `#{object.file}` near line #{object.line}" : "")
240
248
  nil
241
249
  end
242
250
 
@@ -247,44 +255,6 @@ module YARD
247
255
  list.include?(tag_name)
248
256
  end
249
257
 
250
- private
251
-
252
- def namespace
253
- if object
254
- object.namespace
255
- else
256
- nil
257
- end
258
- end
259
-
260
- def detect_reference(content)
261
- if content =~ /\A\s*\(see (\S+)\s*\)(?:\s|$)/
262
- path, extra = $1, $'
263
- [CodeObjects::Proxy.new(namespace, path), extra]
264
- else
265
- [nil, content]
266
- end
267
- end
268
-
269
- # @!group Parser Callback Methods
270
-
271
- # Calls the {Tags::Directive#after_parse} callback on all the
272
- # created directives.
273
- def call_directives_after_parse
274
- directives.each do |dir|
275
- dir.after_parse
276
- end
277
- end
278
-
279
- # Calls all {after_parse} callbacks
280
- def call_after_parse_callbacks
281
- self.class.after_parse_callbacks.each do |cb|
282
- cb.call(self)
283
- end
284
- end
285
-
286
- public
287
-
288
258
  # Creates a callback that is called after a docstring is successfully
289
259
  # parsed. Use this method to perform sanity checks on a docstring's
290
260
  # tag data, or add any extra tags automatically to a docstring.
@@ -295,7 +265,7 @@ module YARD
295
265
  # @yieldreturn [void]
296
266
  # @return [void]
297
267
  def self.after_parse(&block)
298
- self.after_parse_callbacks << block
268
+ after_parse_callbacks << block
299
269
  end
300
270
 
301
271
  # @return [Array<Proc>] the {after_parse} callback proc objects
@@ -310,35 +280,65 @@ module YARD
310
280
  next if parser.object.is_alias?
311
281
  names = parser.object.parameters.map {|l| l.first.gsub(/\W/, '') }
312
282
  seen_names = []
313
- infile_info = "\n in file `#{parser.object.file}' " +
283
+ infile_info = "\n in file `#{parser.object.file}' " \
314
284
  "near line #{parser.object.line}"
315
285
  parser.tags.each do |tag|
316
286
  next if tag.is_a?(Tags::RefTagList) # we don't handle this yet
317
287
  next unless tag.tag_name == "param"
318
288
  if seen_names.include?(tag.name)
319
- log.warn "@param tag has duplicate parameter name: " +
320
- "#{tag.name} #{infile_info}"
289
+ log.warn "@param tag has duplicate parameter name: " \
290
+ "#{tag.name} #{infile_info}"
321
291
  elsif names.include?(tag.name)
322
292
  seen_names << tag.name
323
293
  else
324
- log.warn "@param tag has unknown parameter name: " +
325
- "#{tag.name} #{infile_info}"
294
+ log.warn "@param tag has unknown parameter name: " \
295
+ "#{tag.name} #{infile_info}"
326
296
  end
327
297
  end
328
298
  end
329
299
 
300
+ private
301
+
302
+ def namespace
303
+ object && object.namespace
304
+ end
305
+
306
+ def detect_reference(content)
307
+ if content =~ /\A\s*\(see (\S+)\s*\)(?:\s|$)/
308
+ path = $1
309
+ extra = $'
310
+ [CodeObjects::Proxy.new(namespace, path), extra]
311
+ else
312
+ [nil, content]
313
+ end
314
+ end
315
+
316
+ # @!group Parser Callback Methods
317
+
318
+ # Calls the {Tags::Directive#after_parse} callback on all the
319
+ # created directives.
320
+ def call_directives_after_parse
321
+ directives.each(&:after_parse)
322
+ end
323
+
324
+ # Calls all {after_parse} callbacks
325
+ def call_after_parse_callbacks
326
+ self.class.after_parse_callbacks.each do |cb|
327
+ cb.call(self)
328
+ end
329
+ end
330
+
330
331
  # Define a callback to check that @see tags do not use {}.
331
332
  after_parse do |parser|
332
333
  next unless parser.object
333
334
 
334
335
  parser.tags.each_with_index do |tag, i|
335
336
  next unless tag.tag_name == "see"
336
- if "#{tag.name}#{tag.text}" =~ /\A\{.*\}\Z/
337
- infile_info = "\n in file `#{parser.object.file}' " +
338
- "near line #{parser.object.line}"
339
- log.warn "@see tag (##{i+1}) should not be wrapped in {} " +
340
- "(causes rendering issues): #{infile_info}"
341
- end
337
+ next unless "#{tag.name}#{tag.text}" =~ /\A\{.*\}\Z/
338
+ infile_info = "\n in file `#{parser.object.file}' " \
339
+ "near line #{parser.object.line}"
340
+ log.warn "@see tag (##{i + 1}) should not be wrapped in {} " \
341
+ "(causes rendering issues): #{infile_info}"
342
342
  end
343
343
  end
344
344
  end