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
data/lib/yard/tags/tag.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  module Tags
3
4
  # Represents a metadata tag value (+@tag+). Tags can have any combination of
@@ -41,7 +42,10 @@ module YARD
41
42
  # for the tag
42
43
  # @param [String] name optional key name which the tag refers to
43
44
  def initialize(tag_name, text, types = nil, name = nil)
44
- @tag_name, @text, @name, @types = tag_name.to_s, text, name, (types ? [types].flatten.compact : nil)
45
+ @tag_name = tag_name.to_s
46
+ @text = text
47
+ @name = name
48
+ @types = (types ? [types].flatten.compact : nil)
45
49
  end
46
50
 
47
51
  # Convenience method to access the first type specified. This should mainly
@@ -52,6 +56,16 @@ module YARD
52
56
  def type
53
57
  types.first
54
58
  end
59
+
60
+ # Provides a plain English summary of the type specification, or nil
61
+ # if no types are provided or parseable.
62
+ #
63
+ # @return [String] a plain English description of the associated types
64
+ # @return [nil] if no types are provided or not parseable
65
+ def explain_types
66
+ return nil if !types || types.empty?
67
+ TypesExplainer.explain(*types)
68
+ end
55
69
  end
56
70
  end
57
- end
71
+ end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  module Tags
3
- class TagFormatError < Exception
4
+ class TagFormatError < RuntimeError
4
5
  end
5
6
  end
6
- end
7
+ end
@@ -0,0 +1,160 @@
1
+ # frozen_string_literal: true
2
+ require 'strscan'
3
+
4
+ module YARD
5
+ module Tags
6
+ class TypesExplainer
7
+ # (see Tag#explain_types)
8
+ # @param types [Array<String>] a list of types to parse and summarize
9
+ def self.explain(*types)
10
+ explain!(*types)
11
+ rescue SyntaxError
12
+ nil
13
+ end
14
+
15
+ # (see explain)
16
+ # @raise [SyntaxError] if the types are not parseable
17
+ def self.explain!(*types)
18
+ Parser.parse(types.join(", ")).join("; ")
19
+ end
20
+
21
+ class << self
22
+ private :new
23
+ end
24
+
25
+ # @private
26
+ class Type
27
+ attr_accessor :name
28
+
29
+ def initialize(name)
30
+ @name = name
31
+ end
32
+
33
+ def to_s(singular = true)
34
+ if name[0, 1] == "#"
35
+ singular ? "an object that responds to #{name}" : "objects that respond to #{name}"
36
+ elsif name[0, 1] =~ /[A-Z]/
37
+ singular ? "a#{name[0, 1] =~ /[aeiou]/i ? 'n' : ''} " + name : "#{name}#{name[-1, 1] =~ /[A-Z]/ ? "'" : ''}s"
38
+ else
39
+ name
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def list_join(list)
46
+ index = 0
47
+ list.inject(String.new) do |acc, el|
48
+ acc << el.to_s
49
+ acc << ", " if index < list.size - 2
50
+ acc << " or " if index == list.size - 2
51
+ index += 1
52
+ acc
53
+ end
54
+ end
55
+ end
56
+
57
+ # @private
58
+ class CollectionType < Type
59
+ attr_accessor :types
60
+
61
+ def initialize(name, types)
62
+ @name = name
63
+ @types = types
64
+ end
65
+
66
+ def to_s(_singular = true)
67
+ "a#{name[0, 1] =~ /[aeiou]/i ? 'n' : ''} #{name} of (" + list_join(types.map {|t| t.to_s(false) }) + ")"
68
+ end
69
+ end
70
+
71
+ # @private
72
+ class FixedCollectionType < CollectionType
73
+ def to_s(_singular = true)
74
+ "a#{name[0, 1] =~ /[aeiou]/i ? 'n' : ''} #{name} containing (" + types.map(&:to_s).join(" followed by ") + ")"
75
+ end
76
+ end
77
+
78
+ # @private
79
+ class HashCollectionType < Type
80
+ attr_accessor :key_types, :value_types
81
+
82
+ def initialize(name, key_types, value_types)
83
+ @name = name
84
+ @key_types = key_types
85
+ @value_types = value_types
86
+ end
87
+
88
+ def to_s(_singular = true)
89
+ "a#{name[0, 1] =~ /[aeiou]/i ? 'n' : ''} #{name} with keys made of (" +
90
+ list_join(key_types.map {|t| t.to_s(false) }) +
91
+ ") and values of (" + list_join(value_types.map {|t| t.to_s(false) }) + ")"
92
+ end
93
+ end
94
+
95
+ # @private
96
+ class Parser
97
+ TOKENS = {
98
+ :collection_start => /</,
99
+ :collection_end => />/,
100
+ :fixed_collection_start => /\(/,
101
+ :fixed_collection_end => /\)/,
102
+ :type_name => /#\w+|((::)?\w+)+/,
103
+ :type_next => /[,;]/,
104
+ :whitespace => /\s+/,
105
+ :hash_collection_start => /\{/,
106
+ :hash_collection_next => /=>/,
107
+ :hash_collection_end => /\}/,
108
+ :parse_end => nil
109
+ }
110
+
111
+ def self.parse(string)
112
+ new(string).parse
113
+ end
114
+
115
+ def initialize(string)
116
+ @scanner = StringScanner.new(string)
117
+ end
118
+
119
+ def parse
120
+ types = []
121
+ type = nil
122
+ name = nil
123
+ loop do
124
+ found = false
125
+ TOKENS.each do |token_type, match|
126
+ # TODO: cleanup this code.
127
+ # rubocop:disable Lint/AssignmentInCondition
128
+ next unless (match.nil? && @scanner.eos?) || (match && token = @scanner.scan(match))
129
+ found = true
130
+ case token_type
131
+ when :type_name
132
+ raise SyntaxError, "expecting END, got name '#{token}'" if name
133
+ name = token
134
+ when :type_next
135
+ raise SyntaxError, "expecting name, got '#{token}' at #{@scanner.pos}" if name.nil?
136
+ type = Type.new(name) unless type
137
+ types << type
138
+ type = nil
139
+ name = nil
140
+ when :fixed_collection_start, :collection_start
141
+ name ||= "Array"
142
+ klass = token_type == :collection_start ? CollectionType : FixedCollectionType
143
+ type = klass.new(name, parse)
144
+ when :hash_collection_start
145
+ name ||= "Hash"
146
+ type = HashCollectionType.new(name, parse, parse)
147
+ when :hash_collection_next, :hash_collection_end, :fixed_collection_end, :collection_end, :parse_end
148
+ raise SyntaxError, "expecting name, got '#{token}'" if name.nil?
149
+ type = Type.new(name) unless type
150
+ types << type
151
+ return types
152
+ end
153
+ end
154
+ raise SyntaxError, "invalid character at #{@scanner.peek(1)}" unless found
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end
160
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'ostruct'
2
3
 
3
4
  module YARD
@@ -53,7 +54,7 @@ module YARD
53
54
  full_paths ||= [path]
54
55
  full_paths = [full_paths] unless full_paths.is_a?(Array)
55
56
  name = template_module_name(full_paths.first)
56
- begin; return const_get(name); rescue NameError; end
57
+ begin; return const_get(name); rescue NameError; nil end
57
58
 
58
59
  mod = const_set(name, Module.new)
59
60
  mod.send(:include, Template)
@@ -111,7 +112,7 @@ module YARD
111
112
  # @yield a block whose result will be serialize
112
113
  # @yieldreturn [String] the contents to serialize
113
114
  # @see Serializers::Base
114
- def with_serializer(object, serializer, &block)
115
+ def with_serializer(object, serializer)
115
116
  output = nil
116
117
  filename = serializer.serialized_path(object)
117
118
  if serializer.respond_to?(:basepath)
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  module Templates
3
4
  # @since 0.5.4
4
5
  module ErbCache
5
- def self.method_for(filename, &block)
6
+ def self.method_for(filename)
6
7
  @methods ||= {}
7
8
  return @methods[filename] if @methods[filename]
8
9
  @methods[filename] = name = "_erb_cache_#{@methods.size}"
@@ -14,7 +15,7 @@ module YARD
14
15
  end
15
16
 
16
17
  def self.clear!
17
- return unless @methods
18
+ return unless defined?(@methods) && @methods
18
19
  @methods.clear
19
20
  end
20
21
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module YARD::Templates::Helpers
2
3
  # The base helper module included in all templates.
3
4
  module BaseHelper
@@ -7,7 +8,7 @@ module YARD::Templates::Helpers
7
8
  # page. Might not be the current {#object} when inside sub-templates.
8
9
  attr_reader :owner
9
10
  undef owner
10
- def owner; @owner || object.namespace end
11
+ def owner; (defined?(@owner) && @owner) || object.namespace end
11
12
 
12
13
  # @group Managing Global Template State
13
14
 
@@ -55,7 +56,7 @@ module YARD::Templates::Helpers
55
56
  if args.first.is_a?(String)
56
57
  case args.first
57
58
  when %r{://}, /^mailto:/
58
- link_url(args[0], args[1], {:target => '_parent'}.merge(args[2]||{}))
59
+ link_url(args[0], args[1], {:target => '_parent'}.merge(args[2] || {}))
59
60
  when /^include:file:(\S+)/
60
61
  file = $1
61
62
  relpath = File.relative_path(Dir.pwd, File.expand_path(file))
@@ -70,7 +71,8 @@ module YARD::Templates::Helpers
70
71
  end
71
72
  when /^include:(\S+)/
72
73
  path = $1
73
- if obj = YARD::Registry.resolve(object.namespace, path)
74
+ obj = YARD::Registry.resolve(object.namespace, path)
75
+ if obj
74
76
  link_include_object(obj)
75
77
  else
76
78
  log.warn "Cannot find object at `#{path}' for inclusion"
@@ -78,7 +80,8 @@ module YARD::Templates::Helpers
78
80
  end
79
81
  when /^render:(\S+)/
80
82
  path = $1
81
- if obj = YARD::Registry.resolve(object, path)
83
+ obj = YARD::Registry.resolve(object, path)
84
+ if obj
82
85
  opts = options.dup
83
86
  opts.delete(:serializer)
84
87
  obj.format(opts)
@@ -135,7 +138,7 @@ module YARD::Templates::Helpers
135
138
  # @param [String] title the optional title to display the link as
136
139
  # @param [Hash] params optional parameters for the link
137
140
  # @return [String] the linked URL
138
- def link_url(url, title = nil, params = nil)
141
+ def link_url(url, title = nil, params = nil) # rubocop:disable Lint/UnusedMethodArgument
139
142
  url
140
143
  end
141
144
 
@@ -146,7 +149,7 @@ module YARD::Templates::Helpers
146
149
  # @param [String] anchor optional anchor
147
150
  # @return [String] the link to the file
148
151
  # @since 0.5.5
149
- def link_file(filename, title = nil, anchor = nil)
152
+ def link_file(filename, title = nil, anchor = nil) # rubocop:disable Lint/UnusedMethodArgument
150
153
  return filename.filename if CodeObjects::ExtraFileObject === filename
151
154
  filename
152
155
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  module Templates::Helpers
3
4
  # Helpers for various object types
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'cgi'
2
3
 
3
4
  module YARD
@@ -7,6 +8,9 @@ module YARD
7
8
  include MarkupHelper
8
9
  include HtmlSyntaxHighlightHelper
9
10
 
11
+ # @private
12
+ URLMATCH = /[^\w\s~!\*'\(\):;@&=\$,\[\]<>-]/
13
+
10
14
  # @group Escaping Template Data
11
15
 
12
16
  # Escapes HTML entities
@@ -22,9 +26,23 @@ module YARD
22
26
  # @param [String] text the URL
23
27
  # @return [String] the escaped URL
24
28
  def urlencode(text)
25
- CGI.escape(text.to_s)
29
+ text = text.dup
30
+ enc = nil
31
+ if text.respond_to?(:force_encoding)
32
+ enc = text.encoding
33
+ text = text.force_encoding('binary')
34
+ end
35
+
36
+ text = text.gsub(/%[a-z0-9]{2}|#{URLMATCH}/i) do
37
+ $&.size > 1 ? $& : "%" + $&.ord.to_s(16).upcase
38
+ end.tr(' ', '+')
39
+
40
+ text = text.force_encoding(enc) if enc
41
+ text
26
42
  end
27
43
 
44
+ module_function :urlencode
45
+
28
46
  # @group Converting Markup to HTML
29
47
 
30
48
  # Turns text into HTML using +markup+ style formatting.
@@ -38,7 +56,7 @@ module YARD
38
56
  return text unless respond_to?(markup_meth)
39
57
  return "" unless text
40
58
  return text unless markup
41
- html = send(markup_meth, text)
59
+ html = send(markup_meth, text).dup
42
60
  if html.respond_to?(:encode)
43
61
  html = html.force_encoding(text.encoding) # for libs that mess with encoding
44
62
  html = html.encode(:invalid => :replace, :replace => '?')
@@ -188,8 +206,13 @@ module YARD
188
206
  # @return [String] HTML with linkified references
189
207
  def resolve_links(text)
190
208
  code_tags = 0
191
- text.gsub(/<(\/)?(pre|code|tt)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=[\W<]|.+<\/|$)/m) do |str|
192
- closed, tag, escape, name, title, match = $1, $2, $3, $4, $5, $&
209
+ text.gsub(%r{<(/)?(pre|code|tt)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=[\W<]|.+</|$)}m) do |str|
210
+ closed = $1
211
+ tag = $2
212
+ escape = $3
213
+ name = $4
214
+ title = $5
215
+ match = $&
193
216
  if tag
194
217
  code_tags += (closed ? -1 : 1)
195
218
  next str
@@ -198,10 +221,11 @@ module YARD
198
221
 
199
222
  next(match[1..-1]) if escape
200
223
 
201
- next(match) if name[0,1] == '|'
224
+ next(match) if name[0, 1] == '|'
202
225
 
203
- if name == '<a' && title =~ /href=["'](.+?)["'].*>.*<\/a>\s*(.*)\Z/
204
- name, title = $1, $2
226
+ if name == '<a' && title =~ %r{href=["'](.+?)["'].*>.*</a>\s*(.*)\Z}
227
+ name = $1
228
+ title = $2
205
229
  title = nil if title.empty?
206
230
  end
207
231
 
@@ -211,12 +235,12 @@ module YARD
211
235
  object
212
236
  else
213
237
  link = linkify(name, title)
214
- if (link == name || link == title) && (name+' '+link !~ /\A<a\s.*>/)
238
+ if (link == name || link == title) && (name + ' ' + link !~ /\A<a\s.*>/)
215
239
  match = /(.+)?(\{#{Regexp.quote name}(?:\s.*?)?\})(.+)?/.match(text)
216
- file = (@file ? @file.filename : object.file) || '(unknown)'
217
- line = (@file ? 1 : (object.docstring.line_range ? object.docstring.line_range.first : 1)) + (match ? $`.count("\n") : 0)
218
- log.warn "In file `#{file}':#{line}: Cannot resolve link to #{name} from text" + (match ? ":" : ".")
219
- log.warn((match[1] ? '...' : '') + match[2].gsub("\n","") + (match[3] ? '...' : '')) if match
240
+ file = (defined?(@file) && @file ? @file.filename : object.file) || '(unknown)'
241
+ line = (defined?(@file) && @file ? 1 : (object.docstring.line_range ? object.docstring.line_range.first : 1)) + (match ? $`.count("\n") : 0)
242
+ log.warn "In file `#{file}':#{line}: Cannot resolve link to #{name} from text" + (match ? ":" : ".") +
243
+ "\n\t" + (match[1] ? '...' : '') + match[2].delete("\n") + (match[3] ? '...' : '') if match
220
244
  end
221
245
 
222
246
  link
@@ -252,7 +276,7 @@ module YARD
252
276
 
253
277
  # Inserts an include link while respecting inlining
254
278
  def insert_include(text, markup = options.markup)
255
- htmlify(text, markup).gsub(/\A\s*<p>|<\/p>\s*\Z/, '')
279
+ htmlify(text, markup).gsub(%r{\A\s*<p>|</p>\s*\Z}, '')
256
280
  end
257
281
 
258
282
  # (see BaseHelper#link_object)
@@ -286,12 +310,12 @@ module YARD
286
310
  # (see BaseHelper#link_url)
287
311
  def link_url(url, title = nil, params = {})
288
312
  title ||= url
289
- title.gsub!(/[\r\n]/, ' ')
313
+ title = title.gsub(/[\r\n]/, ' ')
290
314
  params = SymbolHash.new(false).update(
291
315
  :href => url,
292
- :title => h(title)
316
+ :title => h(title)
293
317
  ).update(params)
294
- params[:target] ||= '_parent' if url =~ /^(\w+):\/\//
318
+ params[:target] ||= '_parent' if url =~ %r{^(\w+)://}
295
319
  "<a #{tag_attrs(params)}>#{title}</a>".gsub(/[\r\n]/, ' ')
296
320
  end
297
321
 
@@ -327,7 +351,8 @@ module YARD
327
351
 
328
352
  if obj.is_a?(CodeObjects::Base) && !obj.is_a?(CodeObjects::NamespaceObject)
329
353
  # If the obj is not a namespace obj make it the anchor.
330
- anchor, obj = obj, obj.namespace
354
+ anchor = obj
355
+ obj = obj.namespace
331
356
  end
332
357
 
333
358
  objpath = serializer.serialized_path(obj)
@@ -337,7 +362,7 @@ module YARD
337
362
  if relative
338
363
  fromobj = object
339
364
  if object.is_a?(CodeObjects::Base) &&
340
- !object.is_a?(CodeObjects::NamespaceObject)
365
+ !object.is_a?(CodeObjects::NamespaceObject)
341
366
  fromobj = owner
342
367
  end
343
368
 
@@ -350,6 +375,9 @@ module YARD
350
375
  link + (anchor ? '#' + urlencode(anchor_for(anchor)) : '')
351
376
  end
352
377
 
378
+ alias mtime_url url_for
379
+ def mtime(_file) nil end
380
+
353
381
  # Returns the URL for a specific file
354
382
  #
355
383
  # @param [String, CodeObjects::ExtraFileObject] filename the filename to link to
@@ -362,11 +390,8 @@ module YARD
362
390
  fromobj = fromobj.namespace
363
391
  end
364
392
  from = serializer.serialized_path(fromobj)
365
- if filename == options.readme
366
- path = 'index.html'
367
- else
368
- path = serializer.serialized_path(filename)
369
- end
393
+ path = filename == options.readme ?
394
+ 'index.html' : serializer.serialized_path(filename)
370
395
  link = File.relative_path(from, path)
371
396
  link += (anchor ? '#' + urlencode(anchor) : '')
372
397
  link
@@ -492,7 +517,8 @@ module YARD
492
517
  extras = []
493
518
  extras_text = ''
494
519
  if show_extras
495
- if rw = meth.attr_info
520
+ rw = meth.attr_info
521
+ if rw
496
522
  attname = [rw[:read] ? 'read' : nil, rw[:write] ? 'write' : nil].compact
497
523
  attname = attname.size == 1 ? attname.join('') + 'only' : nil
498
524
  extras << attname if attname
@@ -526,16 +552,18 @@ module YARD
526
552
  # @since 0.5.4
527
553
  def charset
528
554
  has_encoding = defined?(::Encoding)
529
- if @file && has_encoding
555
+ if defined?(@file) && @file && has_encoding
530
556
  lang = @file.contents.encoding.to_s
531
557
  else
532
- return 'utf-8' unless has_encoding || lang = ENV['LANG']
533
- if has_encoding
534
- lang = ::Encoding.default_external.name.downcase
535
- else
536
- lang = lang.downcase.split('.').last
537
- end
558
+ return 'utf-8' unless has_encoding || ENV['LANG']
559
+ lang =
560
+ if has_encoding
561
+ ::Encoding.default_external.name.downcase
562
+ else
563
+ ENV['LANG'].downcase.split('.').last
564
+ end
538
565
  end
566
+
539
567
  case lang
540
568
  when "ascii-8bit", "us-ascii", "ascii-7bit"; 'iso-8859-1'
541
569
  when "utf8"; 'utf-8'
@@ -552,7 +580,7 @@ module YARD
552
580
  # @param [Hash{String => String}] opts the tag options
553
581
  # @return [String] the tag attributes of an HTML tag
554
582
  def tag_attrs(opts = {})
555
- opts.sort_by {|k, v| k.to_s }.map {|k,v| "#{k}=#{v.to_s.inspect}" if v }.join(" ")
583
+ opts.sort_by {|k, _v| k.to_s }.map {|k, v| "#{k}=#{v.to_s.inspect}" if v }.join(" ")
556
584
  end
557
585
 
558
586
  # Converts a {CodeObjects::MethodObject} into an overload object
@@ -575,7 +603,8 @@ module YARD
575
603
  def parse_lang_for_codeblock(source)
576
604
  type = nil
577
605
  if source =~ /\A(?:[ \t]*\r?\n)?[ \t]*!!!([\w.+-]+)[ \t]*\r?\n/
578
- type, source = $1, $'
606
+ type = $1
607
+ source = $'
579
608
  end
580
609
 
581
610
  [type, source]
@@ -588,20 +617,19 @@ module YARD
588
617
  # @return [String] highlighted html
589
618
  # @see #html_syntax_highlight
590
619
  def parse_codeblocks(html)
591
- html.gsub(/<pre\s*(?:lang="(.+?)")?>(?:\s*<code\s*(?:class="(.+?)")?\s*>)?(.+?)(?:<\/code>\s*)?<\/pre>/m) do
620
+ html.gsub(%r{<pre\s*(?:lang="(.+?)")?>(?:\s*<code\s*(?:class="(.+?)")?\s*>)?(.+?)(?:</code>\s*)?</pre>}m) do
592
621
  string = $3
593
622
  # handle !!!LANG prefix to send to html_syntax_highlight_LANG
594
- language, _ = parse_lang_for_codeblock(string)
623
+ language, = parse_lang_for_codeblock(string)
595
624
  language ||= $1 || $2 || object.source_type
596
625
 
597
626
  if options.highlight
598
627
  string = html_syntax_highlight(CGI.unescapeHTML(string), language)
599
628
  end
600
629
  classes = ['code', language].compact.join(' ')
601
- %Q{<pre class="#{classes}"><code class="#{language}">#{string}</code></pre>}
630
+ %(<pre class="#{classes}"><code class="#{language}">#{string}</code></pre>)
602
631
  end
603
632
  end
604
633
  end
605
634
  end
606
635
  end
607
-