yard 0.9.17 → 0.9.22

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

Potentially problematic release.


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

Files changed (590) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +2 -0
  3. data/.github/ISSUE_TEMPLATE.md +33 -0
  4. data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
  5. data/.gitignore +14 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +99 -0
  8. data/.travis.yml +52 -0
  9. data/.yardopts +26 -26
  10. data/.yardopts_guide +19 -0
  11. data/.yardopts_i18n +23 -0
  12. data/CHANGELOG.md +774 -728
  13. data/CODE_OF_CONDUCT.md +15 -0
  14. data/CONTRIBUTING.md +140 -0
  15. data/Dockerfile.samus +28 -0
  16. data/Gemfile +32 -0
  17. data/LEGAL +66 -66
  18. data/LICENSE +22 -22
  19. data/README.md +330 -328
  20. data/Rakefile +37 -53
  21. data/SECURITY.md +26 -0
  22. data/benchmarks/builtins_vs_eval.rb +24 -24
  23. data/benchmarks/concat_vs_join.rb +13 -13
  24. data/benchmarks/erb_vs_erubis.rb +54 -54
  25. data/benchmarks/format_args.rb +47 -47
  26. data/benchmarks/generation.rb +38 -38
  27. data/benchmarks/marshal_vs_dbm.rb +64 -64
  28. data/benchmarks/parsing.rb +46 -46
  29. data/benchmarks/pathname_vs_string.rb +50 -50
  30. data/benchmarks/rdoc_vs_yardoc.rb +11 -11
  31. data/benchmarks/registry_store_types.rb +49 -49
  32. data/benchmarks/ri_vs_yri.rb +19 -19
  33. data/benchmarks/ripper_parser.rb +13 -13
  34. data/benchmarks/splat_vs_flatten.rb +13 -13
  35. data/benchmarks/template_erb.rb +23 -23
  36. data/benchmarks/template_format.rb +7 -7
  37. data/benchmarks/template_profile.rb +18 -18
  38. data/benchmarks/yri_cache.rb +20 -20
  39. data/bin/yard +13 -13
  40. data/bin/yardoc +13 -13
  41. data/bin/yri +13 -13
  42. data/docs/CodeObjects.md +115 -115
  43. data/docs/GettingStarted.md +679 -679
  44. data/docs/Handlers.md +152 -152
  45. data/docs/Overview.md +61 -61
  46. data/docs/Parser.md +191 -191
  47. data/docs/Tags.md +283 -283
  48. data/docs/TagsArch.md +123 -123
  49. data/docs/Templates.md +496 -496
  50. data/docs/WhatsNew.md +1245 -1245
  51. data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
  52. data/docs/templates/default/fulldoc/html/setup.rb +6 -6
  53. data/docs/templates/default/layout/html/setup.rb +9 -9
  54. data/docs/templates/default/layout/html/tag_list.erb +11 -11
  55. data/docs/templates/default/yard_tags/html/list.erb +18 -18
  56. data/docs/templates/default/yard_tags/html/setup.rb +26 -26
  57. data/docs/templates/plugin.rb +70 -70
  58. data/lib/rubygems_plugin.rb +9 -9
  59. data/lib/yard.rb +69 -69
  60. data/lib/yard/autoload.rb +308 -303
  61. data/lib/yard/cli/command.rb +85 -85
  62. data/lib/yard/cli/command_parser.rb +93 -93
  63. data/lib/yard/cli/config.rb +198 -198
  64. data/lib/yard/cli/diff.rb +270 -270
  65. data/lib/yard/cli/display.rb +69 -69
  66. data/lib/yard/cli/gems.rb +84 -84
  67. data/lib/yard/cli/graph.rb +125 -125
  68. data/lib/yard/cli/help.rb +20 -20
  69. data/lib/yard/cli/i18n.rb +70 -70
  70. data/lib/yard/cli/list.rb +23 -23
  71. data/lib/yard/cli/markup_types.rb +32 -32
  72. data/lib/yard/cli/server.rb +257 -257
  73. data/lib/yard/cli/stats.rb +231 -231
  74. data/lib/yard/cli/yardoc.rb +789 -788
  75. data/lib/yard/cli/yardopts_command.rb +110 -110
  76. data/lib/yard/cli/yri.rb +215 -215
  77. data/lib/yard/code_objects/base.rb +622 -615
  78. data/lib/yard/code_objects/class_object.rb +146 -146
  79. data/lib/yard/code_objects/class_variable_object.rb +11 -11
  80. data/lib/yard/code_objects/constant_object.rb +16 -16
  81. data/lib/yard/code_objects/extended_method_object.rb +24 -24
  82. data/lib/yard/code_objects/extra_file_object.rb +134 -131
  83. data/lib/yard/code_objects/macro_object.rb +172 -172
  84. data/lib/yard/code_objects/method_object.rb +196 -196
  85. data/lib/yard/code_objects/module_object.rb +21 -21
  86. data/lib/yard/code_objects/namespace_mapper.rb +114 -114
  87. data/lib/yard/code_objects/namespace_object.rb +200 -200
  88. data/lib/yard/code_objects/proxy.rb +244 -240
  89. data/lib/yard/code_objects/root_object.rb +19 -19
  90. data/lib/yard/config.rb +270 -270
  91. data/lib/yard/core_ext/array.rb +16 -16
  92. data/lib/yard/core_ext/file.rb +69 -69
  93. data/lib/yard/core_ext/hash.rb +16 -16
  94. data/lib/yard/core_ext/insertion.rb +63 -63
  95. data/lib/yard/core_ext/module.rb +11 -20
  96. data/lib/yard/core_ext/string.rb +68 -68
  97. data/lib/yard/core_ext/symbol_hash.rb +75 -75
  98. data/lib/yard/docstring.rb +386 -386
  99. data/lib/yard/docstring_parser.rb +345 -345
  100. data/lib/yard/gem_index.rb +29 -29
  101. data/lib/yard/globals.rb +22 -22
  102. data/lib/yard/handlers/base.rb +595 -595
  103. data/lib/yard/handlers/c/alias_handler.rb +16 -16
  104. data/lib/yard/handlers/c/attribute_handler.rb +13 -13
  105. data/lib/yard/handlers/c/base.rb +129 -129
  106. data/lib/yard/handlers/c/class_handler.rb +27 -27
  107. data/lib/yard/handlers/c/constant_handler.rb +13 -13
  108. data/lib/yard/handlers/c/handler_methods.rb +212 -211
  109. data/lib/yard/handlers/c/init_handler.rb +20 -20
  110. data/lib/yard/handlers/c/method_handler.rb +45 -45
  111. data/lib/yard/handlers/c/mixin_handler.rb +21 -21
  112. data/lib/yard/handlers/c/module_handler.rb +17 -17
  113. data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
  114. data/lib/yard/handlers/c/path_handler.rb +11 -11
  115. data/lib/yard/handlers/c/struct_handler.rb +13 -13
  116. data/lib/yard/handlers/c/symbol_handler.rb +8 -8
  117. data/lib/yard/handlers/common/method_handler.rb +19 -0
  118. data/lib/yard/handlers/processor.rb +200 -200
  119. data/lib/yard/handlers/ruby/alias_handler.rb +45 -44
  120. data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
  121. data/lib/yard/handlers/ruby/base.rb +165 -165
  122. data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
  123. data/lib/yard/handlers/ruby/class_handler.rb +119 -119
  124. data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
  125. data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
  126. data/lib/yard/handlers/ruby/constant_handler.rb +55 -59
  127. data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
  128. data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
  129. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -96
  130. data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
  131. data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
  132. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
  133. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
  134. data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
  135. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
  136. data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
  137. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
  138. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
  139. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
  140. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
  141. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
  142. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
  143. data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
  144. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
  145. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
  146. data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
  147. data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
  148. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
  149. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
  150. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
  151. data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
  152. data/lib/yard/handlers/ruby/method_handler.rb +104 -118
  153. data/lib/yard/handlers/ruby/mixin_handler.rb +49 -37
  154. data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
  155. data/lib/yard/handlers/ruby/module_handler.rb +12 -12
  156. data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
  157. data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
  158. data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
  159. data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
  160. data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
  161. data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
  162. data/lib/yard/i18n/locale.rb +67 -67
  163. data/lib/yard/i18n/message.rb +57 -57
  164. data/lib/yard/i18n/messages.rb +56 -56
  165. data/lib/yard/i18n/po_parser.rb +61 -61
  166. data/lib/yard/i18n/pot_generator.rb +290 -290
  167. data/lib/yard/i18n/text.rb +173 -173
  168. data/lib/yard/logging.rb +205 -205
  169. data/lib/yard/options.rb +217 -217
  170. data/lib/yard/parser/base.rb +57 -57
  171. data/lib/yard/parser/c/c_parser.rb +235 -235
  172. data/lib/yard/parser/c/comment_parser.rb +134 -134
  173. data/lib/yard/parser/c/statement.rb +66 -64
  174. data/lib/yard/parser/ruby/ast_node.rb +551 -540
  175. data/lib/yard/parser/ruby/legacy/irb/slex.rb +276 -0
  176. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1345 -1354
  177. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
  178. data/lib/yard/parser/ruby/legacy/statement.rb +68 -66
  179. data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
  180. data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
  181. data/lib/yard/parser/ruby/ruby_parser.rb +699 -687
  182. data/lib/yard/parser/ruby/token_resolver.rb +156 -156
  183. data/lib/yard/parser/source_parser.rb +526 -526
  184. data/lib/yard/rake/yardoc_task.rb +81 -81
  185. data/lib/yard/registry.rb +439 -439
  186. data/lib/yard/registry_resolver.rb +231 -189
  187. data/lib/yard/registry_store.rb +342 -337
  188. data/lib/yard/rubygems/backports.rb +10 -10
  189. data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
  190. data/lib/yard/rubygems/backports/MIT.txt +20 -20
  191. data/lib/yard/rubygems/backports/gem.rb +10 -10
  192. data/lib/yard/rubygems/backports/source_index.rb +365 -365
  193. data/lib/yard/rubygems/doc_manager.rb +90 -90
  194. data/lib/yard/rubygems/hook.rb +197 -197
  195. data/lib/yard/rubygems/specification.rb +50 -50
  196. data/lib/yard/serializers/base.rb +83 -83
  197. data/lib/yard/serializers/file_system_serializer.rb +123 -123
  198. data/lib/yard/serializers/process_serializer.rb +24 -24
  199. data/lib/yard/serializers/stdout_serializer.rb +34 -34
  200. data/lib/yard/serializers/yardoc_serializer.rb +152 -152
  201. data/lib/yard/server.rb +13 -13
  202. data/lib/yard/server/adapter.rb +100 -100
  203. data/lib/yard/server/commands/base.rb +209 -209
  204. data/lib/yard/server/commands/display_file_command.rb +29 -29
  205. data/lib/yard/server/commands/display_object_command.rb +65 -65
  206. data/lib/yard/server/commands/frames_command.rb +16 -16
  207. data/lib/yard/server/commands/library_command.rb +187 -187
  208. data/lib/yard/server/commands/library_index_command.rb +28 -28
  209. data/lib/yard/server/commands/list_command.rb +25 -25
  210. data/lib/yard/server/commands/root_request_command.rb +15 -15
  211. data/lib/yard/server/commands/search_command.rb +79 -79
  212. data/lib/yard/server/commands/static_file_command.rb +23 -23
  213. data/lib/yard/server/commands/static_file_helpers.rb +61 -62
  214. data/lib/yard/server/doc_server_helper.rb +91 -91
  215. data/lib/yard/server/doc_server_serializer.rb +39 -39
  216. data/lib/yard/server/library_version.rb +277 -277
  217. data/lib/yard/server/rack_adapter.rb +89 -89
  218. data/lib/yard/server/router.rb +187 -187
  219. data/lib/yard/server/static_caching.rb +46 -46
  220. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
  221. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
  222. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
  223. data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
  224. data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
  225. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
  226. data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
  227. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
  228. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
  229. data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
  230. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
  231. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
  232. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
  233. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
  234. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
  235. data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
  236. data/lib/yard/server/webrick_adapter.rb +45 -45
  237. data/lib/yard/tags/default_factory.rb +191 -191
  238. data/lib/yard/tags/default_tag.rb +13 -13
  239. data/lib/yard/tags/directives.rb +616 -616
  240. data/lib/yard/tags/library.rb +633 -633
  241. data/lib/yard/tags/option_tag.rb +13 -13
  242. data/lib/yard/tags/overload_tag.rb +71 -71
  243. data/lib/yard/tags/ref_tag.rb +8 -8
  244. data/lib/yard/tags/ref_tag_list.rb +28 -28
  245. data/lib/yard/tags/tag.rb +71 -71
  246. data/lib/yard/tags/tag_format_error.rb +7 -7
  247. data/lib/yard/tags/types_explainer.rb +162 -162
  248. data/lib/yard/templates/engine.rb +186 -186
  249. data/lib/yard/templates/erb_cache.rb +23 -23
  250. data/lib/yard/templates/helpers/base_helper.rb +215 -215
  251. data/lib/yard/templates/helpers/filter_helper.rb +27 -27
  252. data/lib/yard/templates/helpers/html_helper.rb +663 -646
  253. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
  254. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
  255. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
  256. data/lib/yard/templates/helpers/markup_helper.rb +172 -172
  257. data/lib/yard/templates/helpers/method_helper.rb +75 -75
  258. data/lib/yard/templates/helpers/module_helper.rb +21 -21
  259. data/lib/yard/templates/helpers/text_helper.rb +112 -112
  260. data/lib/yard/templates/helpers/uml_helper.rb +47 -47
  261. data/lib/yard/templates/section.rb +105 -105
  262. data/lib/yard/templates/template.rb +418 -418
  263. data/lib/yard/templates/template_options.rb +92 -92
  264. data/lib/yard/verifier.rb +151 -151
  265. data/lib/yard/version.rb +6 -6
  266. data/po/ja.po +31108 -0
  267. data/samus.json +80 -0
  268. data/spec/cli/command_parser_spec.rb +43 -43
  269. data/spec/cli/command_spec.rb +36 -36
  270. data/spec/cli/config_spec.rb +148 -148
  271. data/spec/cli/diff_spec.rb +254 -254
  272. data/spec/cli/display_spec.rb +30 -30
  273. data/spec/cli/gems_spec.rb +81 -81
  274. data/spec/cli/graph_spec.rb +18 -18
  275. data/spec/cli/help_spec.rb +22 -22
  276. data/spec/cli/i18n_spec.rb +107 -107
  277. data/spec/cli/list_spec.rb +8 -8
  278. data/spec/cli/markup_types_spec.rb +22 -22
  279. data/spec/cli/server_spec.rb +324 -324
  280. data/spec/cli/stats_spec.rb +96 -96
  281. data/spec/cli/yard_on_yard_spec.rb +38 -38
  282. data/spec/cli/yardoc_spec.rb +896 -862
  283. data/spec/cli/yri_spec.rb +101 -101
  284. data/spec/code_objects/base_spec.rb +485 -470
  285. data/spec/code_objects/class_object_spec.rb +226 -226
  286. data/spec/code_objects/code_object_list_spec.rb +36 -36
  287. data/spec/code_objects/constants_spec.rb +116 -116
  288. data/spec/code_objects/extra_file_object_spec.rb +161 -160
  289. data/spec/code_objects/macro_object_spec.rb +150 -150
  290. data/spec/code_objects/method_object_spec.rb +184 -184
  291. data/spec/code_objects/module_object_spec.rb +142 -142
  292. data/spec/code_objects/namespace_object_spec.rb +171 -171
  293. data/spec/code_objects/proxy_spec.rb +147 -141
  294. data/spec/code_objects/spec_helper.rb +3 -3
  295. data/spec/config_spec.rb +171 -171
  296. data/spec/core_ext/array_spec.rb +13 -13
  297. data/spec/core_ext/file_spec.rb +72 -72
  298. data/spec/core_ext/hash_spec.rb +14 -14
  299. data/spec/core_ext/insertion_spec.rb +37 -37
  300. data/spec/core_ext/module_spec.rb +9 -15
  301. data/spec/core_ext/string_spec.rb +42 -42
  302. data/spec/core_ext/symbol_hash_spec.rb +89 -89
  303. data/spec/docstring_parser_spec.rb +280 -280
  304. data/spec/docstring_spec.rb +373 -373
  305. data/spec/handlers/alias_handler_spec.rb +82 -82
  306. data/spec/handlers/attribute_handler_spec.rb +96 -96
  307. data/spec/handlers/base_spec.rb +216 -216
  308. data/spec/handlers/c/alias_handler_spec.rb +34 -34
  309. data/spec/handlers/c/attribute_handler_spec.rb +41 -41
  310. data/spec/handlers/c/class_handler_spec.rb +78 -78
  311. data/spec/handlers/c/constant_handler_spec.rb +71 -71
  312. data/spec/handlers/c/init_handler_spec.rb +48 -48
  313. data/spec/handlers/c/method_handler_spec.rb +327 -325
  314. data/spec/handlers/c/mixin_handler_spec.rb +44 -44
  315. data/spec/handlers/c/module_handler_spec.rb +71 -71
  316. data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
  317. data/spec/handlers/c/path_handler_spec.rb +36 -36
  318. data/spec/handlers/c/spec_helper.rb +23 -23
  319. data/spec/handlers/c/struct_handler_spec.rb +16 -16
  320. data/spec/handlers/class_condition_handler_spec.rb +87 -87
  321. data/spec/handlers/class_handler_spec.rb +247 -247
  322. data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
  323. data/spec/handlers/class_variable_handler_spec.rb +12 -12
  324. data/spec/handlers/constant_handler_spec.rb +112 -112
  325. data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
  326. data/spec/handlers/dsl_handler_spec.rb +226 -219
  327. data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
  328. data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
  329. data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
  330. data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
  331. data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
  332. data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
  333. data/spec/handlers/examples/dsl_handler_001.rb.txt +156 -154
  334. data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
  335. data/spec/handlers/examples/extend_handler_001.rb.txt +19 -16
  336. data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
  337. data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
  338. data/spec/handlers/examples/mixin_handler_001.rb.txt +40 -37
  339. data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
  340. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
  341. data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
  342. data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
  343. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
  344. data/spec/handlers/exception_handler_spec.rb +49 -49
  345. data/spec/handlers/extend_handler_spec.rb +28 -24
  346. data/spec/handlers/legacy_base_spec.rb +128 -128
  347. data/spec/handlers/method_condition_handler_spec.rb +15 -15
  348. data/spec/handlers/method_handler_spec.rb +214 -190
  349. data/spec/handlers/mixin_handler_spec.rb +60 -56
  350. data/spec/handlers/module_function_handler_spec.rb +106 -106
  351. data/spec/handlers/module_handler_spec.rb +35 -35
  352. data/spec/handlers/private_class_method_handler_spec.rb +11 -11
  353. data/spec/handlers/private_constant_handler_spec.rb +25 -25
  354. data/spec/handlers/processor_spec.rb +35 -35
  355. data/spec/handlers/public_class_method_handler_spec.rb +11 -11
  356. data/spec/handlers/ruby/base_spec.rb +95 -95
  357. data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
  358. data/spec/handlers/spec_helper.rb +33 -33
  359. data/spec/handlers/visibility_handler_spec.rb +44 -44
  360. data/spec/handlers/yield_handler_spec.rb +52 -52
  361. data/spec/i18n/locale_spec.rb +81 -81
  362. data/spec/i18n/message_spec.rb +52 -52
  363. data/spec/i18n/messages_spec.rb +67 -67
  364. data/spec/i18n/pot_generator_spec.rb +295 -295
  365. data/spec/i18n/text_spec.rb +184 -184
  366. data/spec/logging_spec.rb +44 -44
  367. data/spec/options_spec.rb +171 -171
  368. data/spec/parser/base_spec.rb +24 -24
  369. data/spec/parser/c_parser_spec.rb +236 -236
  370. data/spec/parser/examples/array.c.txt +6267 -6267
  371. data/spec/parser/examples/example1.rb.txt +7 -7
  372. data/spec/parser/examples/extrafile.c.txt +8 -8
  373. data/spec/parser/examples/file.c.txt +28 -28
  374. data/spec/parser/examples/multifile.c.txt +22 -22
  375. data/spec/parser/examples/namespace.cpp.txt +68 -68
  376. data/spec/parser/examples/override.c.txt +424 -424
  377. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
  378. data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
  379. data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
  380. data/spec/parser/ruby/ast_node_spec.rb +33 -33
  381. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
  382. data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
  383. data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
  384. data/spec/parser/ruby/token_resolver_spec.rb +165 -165
  385. data/spec/parser/source_parser_spec.rb +727 -727
  386. data/spec/parser/tag_parsing_spec.rb +17 -17
  387. data/spec/rake/yardoc_task_spec.rb +118 -118
  388. data/spec/registry_spec.rb +463 -463
  389. data/spec/registry_store_spec.rb +327 -316
  390. data/spec/rubygems/doc_manager_spec.rb +112 -112
  391. data/spec/serializers/data/serialized_yardoc/checksums +1 -1
  392. data/spec/serializers/file_system_serializer_spec.rb +145 -145
  393. data/spec/serializers/spec_helper.rb +2 -2
  394. data/spec/serializers/yardoc_serializer_spec.rb +78 -78
  395. data/spec/server/adapter_spec.rb +39 -39
  396. data/spec/server/commands/base_spec.rb +91 -91
  397. data/spec/server/commands/library_command_spec.rb +39 -39
  398. data/spec/server/doc_server_helper_spec.rb +72 -72
  399. data/spec/server/doc_server_serializer_spec.rb +60 -60
  400. data/spec/server/rack_adapter_spec.rb +21 -21
  401. data/spec/server/router_spec.rb +123 -123
  402. data/spec/server/spec_helper.rb +22 -22
  403. data/spec/server/static_caching_spec.rb +47 -47
  404. data/spec/server/webrick_servlet_spec.rb +20 -20
  405. data/spec/server_spec.rb +19 -19
  406. data/spec/spec_helper.rb +212 -212
  407. data/spec/tags/default_factory_spec.rb +168 -168
  408. data/spec/tags/default_tag_spec.rb +11 -11
  409. data/spec/tags/directives_spec.rb +463 -463
  410. data/spec/tags/library_spec.rb +48 -48
  411. data/spec/tags/overload_tag_spec.rb +53 -53
  412. data/spec/tags/ref_tag_list_spec.rb +53 -53
  413. data/spec/tags/types_explainer_spec.rb +203 -203
  414. data/spec/templates/class_spec.rb +45 -45
  415. data/spec/templates/constant_spec.rb +41 -41
  416. data/spec/templates/engine_spec.rb +131 -131
  417. data/spec/templates/examples/class001.html +308 -308
  418. data/spec/templates/examples/class001.txt +36 -36
  419. data/spec/templates/examples/class002.html +39 -39
  420. data/spec/templates/examples/constant001.txt +24 -24
  421. data/spec/templates/examples/constant002.txt +6 -6
  422. data/spec/templates/examples/constant003.txt +10 -10
  423. data/spec/templates/examples/method001.html +137 -137
  424. data/spec/templates/examples/method001.txt +35 -35
  425. data/spec/templates/examples/method002.html +91 -91
  426. data/spec/templates/examples/method002.txt +20 -20
  427. data/spec/templates/examples/method003.html +165 -165
  428. data/spec/templates/examples/method003.txt +45 -45
  429. data/spec/templates/examples/method004.html +48 -48
  430. data/spec/templates/examples/method004.txt +10 -10
  431. data/spec/templates/examples/method005.html +105 -105
  432. data/spec/templates/examples/method005.txt +33 -33
  433. data/spec/templates/examples/method006.html +107 -107
  434. data/spec/templates/examples/method006.txt +20 -20
  435. data/spec/templates/examples/module001.dot +33 -33
  436. data/spec/templates/examples/module001.html +833 -833
  437. data/spec/templates/examples/module001.txt +33 -33
  438. data/spec/templates/examples/module002.html +341 -341
  439. data/spec/templates/examples/module003.html +202 -202
  440. data/spec/templates/examples/module004.html +394 -394
  441. data/spec/templates/examples/module005.html +81 -81
  442. data/spec/templates/examples/tag001.txt +82 -82
  443. data/spec/templates/helpers/base_helper_spec.rb +171 -171
  444. data/spec/templates/helpers/html_helper_spec.rb +687 -668
  445. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
  446. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
  447. data/spec/templates/helpers/markup_helper_spec.rb +136 -136
  448. data/spec/templates/helpers/method_helper_spec.rb +107 -107
  449. data/spec/templates/helpers/module_helper_spec.rb +35 -35
  450. data/spec/templates/helpers/shared_signature_examples.rb +126 -126
  451. data/spec/templates/helpers/text_helper_spec.rb +65 -65
  452. data/spec/templates/markup_processor_integrations/asciidoctor_spec.rb +60 -0
  453. data/spec/templates/markup_processor_integrations/integration_spec_helper.rb +46 -0
  454. data/spec/templates/markup_processor_integrations/rdoc_markdown_spec.rb +59 -0
  455. data/spec/templates/markup_processor_integrations/rdoc_spec.rb +39 -0
  456. data/spec/templates/markup_processor_integrations/redcarpet_spec.rb +59 -0
  457. data/spec/templates/markup_processor_integrations/redcloth_spec.rb +48 -0
  458. data/spec/templates/method_spec.rb +118 -118
  459. data/spec/templates/module_spec.rb +203 -203
  460. data/spec/templates/onefile_spec.rb +66 -66
  461. data/spec/templates/section_spec.rb +144 -144
  462. data/spec/templates/spec_helper.rb +76 -76
  463. data/spec/templates/tag_spec.rb +52 -52
  464. data/spec/templates/template_spec.rb +410 -410
  465. data/spec/verifier_spec.rb +106 -106
  466. data/templates/default/class/dot/setup.rb +7 -7
  467. data/templates/default/class/dot/superklass.erb +2 -2
  468. data/templates/default/class/html/constructor_details.erb +8 -8
  469. data/templates/default/class/html/setup.rb +2 -2
  470. data/templates/default/class/html/subclasses.erb +4 -4
  471. data/templates/default/class/setup.rb +36 -36
  472. data/templates/default/class/text/setup.rb +12 -12
  473. data/templates/default/class/text/subclasses.erb +5 -5
  474. data/templates/default/constant/text/header.erb +11 -11
  475. data/templates/default/constant/text/setup.rb +4 -4
  476. data/templates/default/docstring/html/abstract.erb +4 -4
  477. data/templates/default/docstring/html/deprecated.erb +1 -1
  478. data/templates/default/docstring/html/index.erb +5 -5
  479. data/templates/default/docstring/html/note.erb +6 -6
  480. data/templates/default/docstring/html/private.erb +4 -4
  481. data/templates/default/docstring/html/text.erb +1 -1
  482. data/templates/default/docstring/html/todo.erb +6 -6
  483. data/templates/default/docstring/setup.rb +52 -52
  484. data/templates/default/docstring/text/abstract.erb +2 -2
  485. data/templates/default/docstring/text/deprecated.erb +2 -2
  486. data/templates/default/docstring/text/index.erb +2 -2
  487. data/templates/default/docstring/text/note.erb +3 -3
  488. data/templates/default/docstring/text/private.erb +2 -2
  489. data/templates/default/docstring/text/text.erb +1 -1
  490. data/templates/default/docstring/text/todo.erb +3 -3
  491. data/templates/default/fulldoc/html/css/full_list.css +58 -58
  492. data/templates/default/fulldoc/html/css/style.css +496 -496
  493. data/templates/default/fulldoc/html/frames.erb +17 -17
  494. data/templates/default/fulldoc/html/full_list.erb +37 -37
  495. data/templates/default/fulldoc/html/full_list_class.erb +2 -2
  496. data/templates/default/fulldoc/html/full_list_file.erb +7 -7
  497. data/templates/default/fulldoc/html/full_list_method.erb +10 -10
  498. data/templates/default/fulldoc/html/js/app.js +314 -292
  499. data/templates/default/fulldoc/html/js/full_list.js +216 -216
  500. data/templates/default/fulldoc/html/js/jquery.js +3 -3
  501. data/templates/default/fulldoc/html/setup.rb +241 -241
  502. data/templates/default/layout/dot/header.erb +5 -5
  503. data/templates/default/layout/dot/setup.rb +15 -15
  504. data/templates/default/layout/html/breadcrumb.erb +11 -11
  505. data/templates/default/layout/html/files.erb +11 -11
  506. data/templates/default/layout/html/footer.erb +5 -5
  507. data/templates/default/layout/html/headers.erb +15 -15
  508. data/templates/default/layout/html/index.erb +2 -2
  509. data/templates/default/layout/html/layout.erb +23 -23
  510. data/templates/default/layout/html/listing.erb +4 -4
  511. data/templates/default/layout/html/objects.erb +32 -32
  512. data/templates/default/layout/html/script_setup.erb +4 -4
  513. data/templates/default/layout/html/search.erb +12 -12
  514. data/templates/default/layout/html/setup.rb +89 -89
  515. data/templates/default/method/html/header.erb +16 -16
  516. data/templates/default/method/setup.rb +4 -4
  517. data/templates/default/method_details/html/header.erb +2 -2
  518. data/templates/default/method_details/html/method_signature.erb +24 -24
  519. data/templates/default/method_details/html/source.erb +9 -9
  520. data/templates/default/method_details/setup.rb +11 -11
  521. data/templates/default/method_details/text/header.erb +10 -10
  522. data/templates/default/method_details/text/method_signature.erb +12 -12
  523. data/templates/default/method_details/text/setup.rb +11 -11
  524. data/templates/default/module/dot/child.erb +1 -1
  525. data/templates/default/module/dot/dependencies.erb +2 -2
  526. data/templates/default/module/dot/header.erb +6 -6
  527. data/templates/default/module/dot/info.erb +13 -13
  528. data/templates/default/module/dot/setup.rb +15 -15
  529. data/templates/default/module/html/attribute_details.erb +10 -10
  530. data/templates/default/module/html/attribute_summary.erb +8 -8
  531. data/templates/default/module/html/box_info.erb +43 -43
  532. data/templates/default/module/html/children.erb +8 -8
  533. data/templates/default/module/html/constant_summary.erb +17 -17
  534. data/templates/default/module/html/defines.erb +2 -2
  535. data/templates/default/module/html/header.erb +5 -5
  536. data/templates/default/module/html/inherited_attributes.erb +14 -14
  537. data/templates/default/module/html/inherited_constants.erb +8 -8
  538. data/templates/default/module/html/inherited_methods.erb +18 -18
  539. data/templates/default/module/html/item_summary.erb +40 -40
  540. data/templates/default/module/html/method_details_list.erb +9 -9
  541. data/templates/default/module/html/method_summary.erb +13 -13
  542. data/templates/default/module/html/methodmissing.erb +12 -12
  543. data/templates/default/module/setup.rb +167 -167
  544. data/templates/default/module/text/children.erb +9 -9
  545. data/templates/default/module/text/class_meths_list.erb +7 -7
  546. data/templates/default/module/text/extends.erb +7 -7
  547. data/templates/default/module/text/header.erb +7 -7
  548. data/templates/default/module/text/includes.erb +7 -7
  549. data/templates/default/module/text/instance_meths_list.erb +7 -7
  550. data/templates/default/module/text/setup.rb +13 -13
  551. data/templates/default/onefile/html/files.erb +4 -4
  552. data/templates/default/onefile/html/headers.erb +6 -6
  553. data/templates/default/onefile/html/layout.erb +17 -17
  554. data/templates/default/onefile/html/readme.erb +2 -2
  555. data/templates/default/onefile/html/setup.rb +62 -62
  556. data/templates/default/root/dot/child.erb +2 -2
  557. data/templates/default/root/dot/setup.rb +6 -6
  558. data/templates/default/root/html/setup.rb +2 -2
  559. data/templates/default/tags/html/example.erb +10 -10
  560. data/templates/default/tags/html/index.erb +2 -2
  561. data/templates/default/tags/html/option.erb +24 -24
  562. data/templates/default/tags/html/overload.erb +13 -13
  563. data/templates/default/tags/html/see.erb +7 -7
  564. data/templates/default/tags/html/tag.erb +20 -20
  565. data/templates/default/tags/setup.rb +57 -57
  566. data/templates/default/tags/text/example.erb +12 -12
  567. data/templates/default/tags/text/index.erb +1 -1
  568. data/templates/default/tags/text/option.erb +20 -20
  569. data/templates/default/tags/text/overload.erb +19 -19
  570. data/templates/default/tags/text/see.erb +11 -11
  571. data/templates/default/tags/text/tag.erb +13 -13
  572. data/templates/guide/class/html/setup.rb +2 -2
  573. data/templates/guide/docstring/html/setup.rb +2 -2
  574. data/templates/guide/fulldoc/html/css/style.css +108 -108
  575. data/templates/guide/fulldoc/html/js/app.js +33 -33
  576. data/templates/guide/fulldoc/html/setup.rb +74 -74
  577. data/templates/guide/layout/html/layout.erb +81 -81
  578. data/templates/guide/layout/html/setup.rb +25 -25
  579. data/templates/guide/method/html/header.erb +17 -17
  580. data/templates/guide/method/html/setup.rb +22 -22
  581. data/templates/guide/module/html/header.erb +6 -6
  582. data/templates/guide/module/html/method_list.erb +4 -4
  583. data/templates/guide/module/html/setup.rb +27 -27
  584. data/templates/guide/onefile/html/files.erb +4 -4
  585. data/templates/guide/onefile/html/setup.rb +6 -6
  586. data/templates/guide/onefile/html/toc.erb +3 -3
  587. data/templates/guide/tags/html/setup.rb +9 -9
  588. data/yard.gemspec +24 -43
  589. metadata +28 -21
  590. data/spec/examples.txt +0 -1878
@@ -1,105 +1,105 @@
1
- # frozen_string_literal: true
2
- module YARD
3
- module Templates
4
- # Abstracts the structure for a section and its subsections into an ordered
5
- # list of sections and subsections.
6
- # @since 0.6.0
7
- class Section < Array
8
- attr_accessor :name
9
-
10
- def initialize(name, *args)
11
- self.name = name
12
- replace(parse_sections(args))
13
- end
14
-
15
- def dup
16
- obj = super
17
- obj.name = name
18
- obj
19
- end
20
-
21
- def [](*args)
22
- if args.first.is_a?(Range) || args.size > 1
23
- obj = super(*args)
24
- obj.name = name
25
- return obj
26
- elsif args.first.is_a?(Integer)
27
- return super(*args)
28
- end
29
- find {|o| o.name == args.first }
30
- end
31
-
32
- def eql?(other)
33
- super(other) && name == other.name
34
- end
35
-
36
- def ==(other)
37
- case other
38
- when Section
39
- eql?(other)
40
- when Array
41
- to_a == other
42
- else
43
- name == other
44
- end
45
- end
46
-
47
- def push(*args)
48
- super(*parse_sections(args))
49
- end
50
- alias << push
51
-
52
- def unshift(*args)
53
- super(*parse_sections(args))
54
- end
55
-
56
- def inspect
57
- n = name.respond_to?(:path) ? "T('#{name.path}')" : name.inspect
58
- subsects = empty? ? "" : ", subsections=#{super}"
59
- "Section(#{n}#{subsects})"
60
- end
61
-
62
- def place(*args)
63
- super(*parse_sections(args))
64
- end
65
-
66
- def to_a
67
- list = [name]
68
- unless empty?
69
- subsects = []
70
- each {|s| subsects += s.to_a }
71
- list << subsects
72
- end
73
- list
74
- end
75
-
76
- def any(item)
77
- find do |section|
78
- return section if section == item
79
- return section.any(item) unless section.empty?
80
- end
81
- nil
82
- end
83
-
84
- private
85
-
86
- def parse_sections(args)
87
- if args.size == 1 && args.first.is_a?(Array) && !args.first.is_a?(Section)
88
- args = args.first
89
- end
90
- sections = []
91
- args.each_with_index do |name, index|
92
- case name
93
- when Section; sections << name
94
- when Array; next
95
- else
96
- subsections = args[index + 1].is_a?(Array) ? args[index + 1] : []
97
- subsections = [] if subsections.is_a?(Section)
98
- sections << Section.new(name, subsections)
99
- end
100
- end
101
- sections
102
- end
103
- end
104
- end
105
- end
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module Templates
4
+ # Abstracts the structure for a section and its subsections into an ordered
5
+ # list of sections and subsections.
6
+ # @since 0.6.0
7
+ class Section < Array
8
+ attr_accessor :name
9
+
10
+ def initialize(name, *args)
11
+ self.name = name
12
+ replace(parse_sections(args))
13
+ end
14
+
15
+ def dup
16
+ obj = super
17
+ obj.name = name
18
+ obj
19
+ end
20
+
21
+ def [](*args)
22
+ if args.first.is_a?(Range) || args.size > 1
23
+ obj = super(*args)
24
+ obj.name = name
25
+ return obj
26
+ elsif args.first.is_a?(Integer)
27
+ return super(*args)
28
+ end
29
+ find {|o| o.name == args.first }
30
+ end
31
+
32
+ def eql?(other)
33
+ super(other) && name == other.name
34
+ end
35
+
36
+ def ==(other)
37
+ case other
38
+ when Section
39
+ eql?(other)
40
+ when Array
41
+ to_a == other
42
+ else
43
+ name == other
44
+ end
45
+ end
46
+
47
+ def push(*args)
48
+ super(*parse_sections(args))
49
+ end
50
+ alias << push
51
+
52
+ def unshift(*args)
53
+ super(*parse_sections(args))
54
+ end
55
+
56
+ def inspect
57
+ n = name.respond_to?(:path) ? "T('#{name.path}')" : name.inspect
58
+ subsects = empty? ? "" : ", subsections=#{super}"
59
+ "Section(#{n}#{subsects})"
60
+ end
61
+
62
+ def place(*args)
63
+ super(*parse_sections(args))
64
+ end
65
+
66
+ def to_a
67
+ list = [name]
68
+ unless empty?
69
+ subsects = []
70
+ each {|s| subsects += s.to_a }
71
+ list << subsects
72
+ end
73
+ list
74
+ end
75
+
76
+ def any(item)
77
+ find do |section|
78
+ return section if section == item
79
+ return section.any(item) unless section.empty?
80
+ end
81
+ nil
82
+ end
83
+
84
+ private
85
+
86
+ def parse_sections(args)
87
+ if args.size == 1 && args.first.is_a?(Array) && !args.first.is_a?(Section)
88
+ args = args.first
89
+ end
90
+ sections = []
91
+ args.each_with_index do |name, index|
92
+ case name
93
+ when Section; sections << name
94
+ when Array; next
95
+ else
96
+ subsections = args[index + 1].is_a?(Array) ? args[index + 1] : []
97
+ subsections = [] if subsections.is_a?(Section)
98
+ sections << Section.new(name, subsections)
99
+ end
100
+ end
101
+ sections
102
+ end
103
+ end
104
+ end
105
+ end
@@ -1,418 +1,418 @@
1
- # frozen_string_literal: true
2
- require 'erb'
3
-
4
- module YARD
5
- module Templates
6
- module Template
7
- attr_accessor :class, :section
8
- attr_reader :options
9
-
10
- class << self
11
- # Extra includes are mixins that are included after a template is created. These
12
- # mixins can be registered by plugins to operate on templates and override behaviour.
13
- #
14
- # Note that this array can be filled with modules or proc objects. If a proc object
15
- # is given, the proc will be called with the {Template#options} hash containing
16
- # relevant template information like the object, format, and more. The proc should
17
- # return a module or nil if there is none.
18
- #
19
- # @example Adding in extra mixins to include on a template
20
- # Template.extra_includes << MyHelper
21
- # @example Conditionally including a mixin if the format is html
22
- # Template.extra_includes << proc {|opts| MyHelper if opts.format == :html }
23
- # @return [Array<Module, Proc>] a list of modules to be automatically included
24
- # into any new template module
25
- attr_accessor :extra_includes
26
-
27
- # @!parse extend ClassMethods
28
- # @private
29
- def included(klass)
30
- klass.extend(ClassMethods)
31
- end
32
-
33
- # Includes the {extra_includes} modules into the template object.
34
- #
35
- # @param [Template] template the template object to mixin the extra includes.
36
- # @param [SymbolHash] options the options hash containing all template information
37
- # @return [void]
38
- def include_extra(template, options)
39
- extra_includes.each do |mod|
40
- mod = mod.call(options) if mod.is_a?(Proc)
41
- next unless mod.is_a?(Module)
42
- template.extend(mod)
43
- end
44
- end
45
- end
46
-
47
- self.extra_includes = [
48
- proc do |options|
49
- {:html => Helpers::HtmlHelper,
50
- :text => Helpers::TextHelper,
51
- :dot => Helpers::UMLHelper}[options.format]
52
- end
53
- ]
54
-
55
- include ErbCache
56
- include Helpers::BaseHelper
57
- include Helpers::MethodHelper
58
-
59
- module ClassMethods
60
- attr_accessor :path, :full_path
61
-
62
- # @return [Array<String>] a list of full paths
63
- # @note This method caches path results. Paths should not be modified
64
- # after this method is called; call {#reset_full_paths} to reset cache.
65
- def full_paths
66
- reset_full_paths unless defined? @cached_included_modules
67
- return @full_paths if included_modules == @cached_included_modules
68
-
69
- @cached_included_modules = included_modules
70
- @full_paths = included_modules.inject([full_path]) do |paths, mod|
71
- paths |= mod.full_paths if mod.respond_to?(:full_paths)
72
- paths
73
- end
74
- end
75
-
76
- # Resets cache for {#full_paths}
77
- def reset_full_paths
78
- @cached_included_modules = nil
79
- end
80
-
81
- def initialize(path, full_paths)
82
- full_path = full_paths.shift
83
- self.path = path
84
- self.full_path = full_path
85
- include_inherited(full_paths)
86
- include_parent
87
- load_setup_rb
88
- end
89
-
90
- # Searches for a file identified by +basename+ in the template's
91
- # path as well as any mixed in template paths. Equivalent to calling
92
- # {ClassMethods#find_nth_file} with index of 1.
93
- #
94
- # @param [String] basename the filename to search for
95
- # @return [String] the full path of a file on disk with filename
96
- # +basename+ in one of the template's paths.
97
- # @see find_nth_file
98
- def find_file(basename)
99
- find_nth_file(basename)
100
- end
101
-
102
- # Searches for the nth file (where n = +index+) identified
103
- # by basename in the template's path and any mixed in template paths.
104
- #
105
- # @param [String] basename the filename to search for
106
- # @param [Fixnum] index the nth existing file to return
107
- # @return [String] the full path of the nth file on disk with
108
- # filename +basename+ in one of the template paths
109
- def find_nth_file(basename, index = 1)
110
- n = 1
111
- full_paths.each do |path|
112
- file = File.join(path, basename)
113
- if File.file?(file)
114
- return file if index == n
115
- n += 1
116
- end
117
- end
118
-
119
- nil
120
- end
121
-
122
- def is_a?(klass)
123
- return true if klass == Template
124
- super(klass)
125
- end
126
-
127
- # Creates a new template object to be rendered with {Template#run}
128
- def new(*args)
129
- obj = Object.new.extend(self)
130
- obj.class = self
131
- obj.send(:initialize, *args)
132
- obj
133
- end
134
-
135
- def run(*args)
136
- new(*args).run
137
- end
138
-
139
- # rubocop:disable Style/MethodName
140
-
141
- # Alias for creating {Engine.template}.
142
- def T(*path)
143
- Engine.template(*path)
144
- end
145
-
146
- # Alias for creating a {Section} with arguments
147
- # @see Section#initialize
148
- # @since 0.6.0
149
- def S(*args)
150
- Section.new(*args)
151
- end
152
-
153
- # rubocop:enable Style/MethodName
154
-
155
- private
156
-
157
- def include_parent
158
- pc = path.to_s.split('/')
159
- if pc.size > 1
160
- pc.pop
161
- pc = pc.join('/')
162
- begin
163
- include Engine.template(pc)
164
- rescue ArgumentError
165
- include Engine.template!(pc, full_path.gsub(%r{/[^/]+$}, ''))
166
- end
167
- end
168
- end
169
-
170
- def include_inherited(full_paths)
171
- full_paths.reverse.each do |full_path|
172
- include Engine.template!(path, full_path)
173
- end
174
- end
175
-
176
- def load_setup_rb
177
- setup_file = File.join(full_path, 'setup.rb')
178
- if File.file? setup_file
179
- module_eval(File.read(setup_file).taint, setup_file, 1)
180
- end
181
- end
182
- end
183
-
184
- def initialize(opts = TemplateOptions.new)
185
- opts_class = opts.class
186
- opts_class = TemplateOptions if opts_class == Hash
187
- @cache = {}
188
- @cache_filename = {}
189
- @sections = []
190
- @options = opts_class.new
191
- add_options(opts)
192
- Template.include_extra(self, options)
193
- init
194
- end
195
-
196
- # Loads a template specified by path. If +:template+ or +:format+ is
197
- # specified in the {#options} hash, they are prepended and appended
198
- # to the path respectively.
199
- #
200
- # @param [Array<String, Symbol>] path the path of the template
201
- # @return [Template] the loaded template module
202
- def T(*path) # rubocop:disable Style/MethodName
203
- path.unshift(options.template) if options.template
204
- path.push(options.format) if options.format
205
- self.class.T(*path)
206
- end
207
-
208
- # Sets the sections (and subsections) to be rendered for the template
209
- #
210
- # @example Sets a set of erb sections
211
- # sections :a, :b, :c # searches for a.erb, b.erb, c.erb
212
- # @example Sets a set of method and erb sections
213
- # sections :a, :b, :c # a is a method, the rest are erb files
214
- # @example Sections with subsections
215
- # sections :header, [:name, :children]
216
- # # the above will call header.erb and only renders the subsections
217
- # # if they are yielded by the template (see #yieldall)
218
- # @param [Array<Symbol, String, Template, Array>] args the sections
219
- # to use to render the template. For symbols and strings, the
220
- # section will be executed as a method (if one exists), or rendered
221
- # from the file "name.erb" where name is the section name. For
222
- # templates, they will have {Template::ClassMethods#run} called on them.
223
- # Any subsections can be yielded to using yield or {#yieldall}
224
- def sections(*args)
225
- @sections = Section.new(nil, *args) unless args.empty?
226
- @sections
227
- end
228
-
229
- # Initialization called on the template. Override this in a 'setup.rb'
230
- # file in the template's path to implement a template
231
- #
232
- # @example A default set of sections
233
- # def init
234
- # sections :section1, :section2, [:subsection1, :etc]
235
- # end
236
- # @see #sections
237
- def init
238
- end
239
-
240
- # Runs a template on +sects+ using extra options. This method should
241
- # not be called directly. Instead, call the class method {ClassMethods#run}
242
- #
243
- # @param [Hash, nil] opts any extra options to apply to sections
244
- # @param [Section, Array] sects a section list of sections to render
245
- # @param [Fixnum] start_at the index in the section list to start from
246
- # @param [Boolean] break_first if true, renders only the first section
247
- # @yield [opts] calls for the subsections to be rendered
248
- # @yieldparam [Hash] opts any extra options to yield
249
- # @return [String] the rendered sections joined together
250
- def run(opts = nil, sects = sections, start_at = 0, break_first = false, &block)
251
- out = String.new("")
252
- return out if sects.nil?
253
- sects = sects[start_at..-1] if start_at > 0
254
- sects = Section.new(nil, sects) unless sects.is_a?(Section)
255
- add_options(opts) do
256
- sects.each do |s|
257
- self.section = s
258
- subsection_index = 0
259
- value = render_section(section) do |*args|
260
- value = with_section do
261
- run(args.first, section, subsection_index, true, &block)
262
- end
263
- subsection_index += 1
264
- value
265
- end
266
- out << (value || "")
267
- break if break_first
268
- end
269
- end
270
- out
271
- end
272
-
273
- # Yields all subsections with any extra options
274
- #
275
- # @param [Hash] opts extra options to be applied to subsections
276
- def yieldall(opts = nil, &block)
277
- with_section { run(opts, section, &block) }
278
- end
279
-
280
- # @param [String, Symbol] section the section name
281
- # @yield calls subsections to be rendered
282
- # @return [String] the contents of the ERB rendered section
283
- def erb(section, &block)
284
- method_name = ErbCache.method_for(cache_filename(section)) do
285
- erb_with(cache(section), cache_filename(section))
286
- end
287
- send(method_name, &block)
288
- end
289
-
290
- # Returns the contents of a file. If +allow_inherited+ is set to +true+,
291
- # use +{{{__super__}}}+ inside the file contents to insert the contents
292
- # of the file from an inherited template. For instance, if +templates/b+
293
- # inherits from +templates/a+ and file "test.css" exists in both directories,
294
- # both file contents can be retrieved by having +templates/b/test.css+ look
295
- # like:
296
- #
297
- # {{{__super__}}}
298
- # ...
299
- # body { css styles here }
300
- # p.class { other styles }
301
- #
302
- # @param [String] basename the name of the file
303
- # @param [Boolean] allow_inherited whether inherited templates can
304
- # be inserted with +{{{__super__}}}+
305
- # @return [String] the contents of a file identified by +basename+. All
306
- # template paths (including any mixed in templates) are searched for
307
- # the file
308
- # @see ClassMethods#find_file
309
- # @see ClassMethods#find_nth_file
310
- def file(basename, allow_inherited = false)
311
- file = self.class.find_file(basename)
312
- raise ArgumentError, "no file for '#{basename}' in #{self.class.path}" unless file
313
-
314
- data = IO.read(file)
315
- if allow_inherited
316
- superfile = self.class.find_nth_file(basename, 2)
317
- data.gsub!('{{{__super__}}}', superfile ? IO.read(superfile) : "")
318
- end
319
-
320
- data
321
- end
322
-
323
- # Calls the ERB file from the last inherited template with {#section}.erb
324
- #
325
- # @param [Symbol, String] sect if provided, uses a specific section name
326
- # @return [String] the rendered ERB file in any of the inherited template
327
- # paths.
328
- def superb(sect = section, &block)
329
- filename = self.class.find_nth_file(erb_file_for(sect), 2)
330
- return "" unless filename
331
- method_name = ErbCache.method_for(filename) { erb_with(IO.read(filename), filename) }
332
- send(method_name, &block)
333
- end
334
-
335
- def options=(value)
336
- @options = value
337
- set_ivars
338
- end
339
-
340
- def inspect
341
- "Template(#{self.class.path}) [section=#{section.name}]"
342
- end
343
-
344
- protected
345
-
346
- def erb_file_for(section)
347
- "#{section}.erb"
348
- end
349
-
350
- def erb_with(content, filename = nil)
351
- erb = if ERB.instance_method(:initialize).parameters.assoc(:key) # Ruby 2.6+
352
- ERB.new(content, :trim_mode => options.format == :text ? '<>' : nil)
353
- else
354
- ERB.new(content, nil, options.format == :text ? '<>' : nil)
355
- end
356
- erb.filename = filename if filename
357
- erb
358
- end
359
-
360
- private
361
-
362
- def render_section(section, &block)
363
- section = section.name if section.is_a?(Section)
364
- case section
365
- when Section, String, Symbol
366
- if respond_to?(section)
367
- send(section, &block)
368
- else
369
- erb(section, &block)
370
- end
371
- when Module, Template
372
- section.run(options, &block) if section.is_a?(Template)
373
- end || ""
374
- end
375
-
376
- def cache(section)
377
- content = @cache[section.to_sym]
378
- return content if content
379
-
380
- file = cache_filename(section)
381
- @cache_filename[section.to_sym] = file
382
- raise ArgumentError, "no template for section '#{section}' in #{self.class.path}" unless file
383
- @cache[section.to_sym] = IO.read(file)
384
- end
385
-
386
- def cache_filename(section)
387
- @cache_filename[section.to_sym] ||=
388
- self.class.find_file(erb_file_for(section))
389
- end
390
-
391
- def set_ivars
392
- options.each do |k, v|
393
- instance_variable_set("@#{k}", v)
394
- end
395
- end
396
-
397
- def add_options(opts = nil)
398
- return(yield) if opts.nil? && block_given?
399
- cur_opts = options if block_given?
400
-
401
- self.options = options.merge(opts)
402
-
403
- if block_given?
404
- value = yield
405
- self.options = cur_opts
406
- value
407
- end
408
- end
409
-
410
- def with_section
411
- sect = section
412
- value = yield
413
- self.section = sect
414
- value
415
- end
416
- end
417
- end
418
- end
1
+ # frozen_string_literal: true
2
+ require 'erb'
3
+
4
+ module YARD
5
+ module Templates
6
+ module Template
7
+ attr_accessor :class, :section
8
+ attr_reader :options
9
+
10
+ class << self
11
+ # Extra includes are mixins that are included after a template is created. These
12
+ # mixins can be registered by plugins to operate on templates and override behaviour.
13
+ #
14
+ # Note that this array can be filled with modules or proc objects. If a proc object
15
+ # is given, the proc will be called with the {Template#options} hash containing
16
+ # relevant template information like the object, format, and more. The proc should
17
+ # return a module or nil if there is none.
18
+ #
19
+ # @example Adding in extra mixins to include on a template
20
+ # Template.extra_includes << MyHelper
21
+ # @example Conditionally including a mixin if the format is html
22
+ # Template.extra_includes << proc {|opts| MyHelper if opts.format == :html }
23
+ # @return [Array<Module, Proc>] a list of modules to be automatically included
24
+ # into any new template module
25
+ attr_accessor :extra_includes
26
+
27
+ # @!parse extend ClassMethods
28
+ # @private
29
+ def included(klass)
30
+ klass.extend(ClassMethods)
31
+ end
32
+
33
+ # Includes the {extra_includes} modules into the template object.
34
+ #
35
+ # @param [Template] template the template object to mixin the extra includes.
36
+ # @param [SymbolHash] options the options hash containing all template information
37
+ # @return [void]
38
+ def include_extra(template, options)
39
+ extra_includes.each do |mod|
40
+ mod = mod.call(options) if mod.is_a?(Proc)
41
+ next unless mod.is_a?(Module)
42
+ template.extend(mod)
43
+ end
44
+ end
45
+ end
46
+
47
+ self.extra_includes = [
48
+ proc do |options|
49
+ {:html => Helpers::HtmlHelper,
50
+ :text => Helpers::TextHelper,
51
+ :dot => Helpers::UMLHelper}[options.format]
52
+ end
53
+ ]
54
+
55
+ include ErbCache
56
+ include Helpers::BaseHelper
57
+ include Helpers::MethodHelper
58
+
59
+ module ClassMethods
60
+ attr_accessor :path, :full_path
61
+
62
+ # @return [Array<String>] a list of full paths
63
+ # @note This method caches path results. Paths should not be modified
64
+ # after this method is called; call {#reset_full_paths} to reset cache.
65
+ def full_paths
66
+ reset_full_paths unless defined? @cached_included_modules
67
+ return @full_paths if included_modules == @cached_included_modules
68
+
69
+ @cached_included_modules = included_modules
70
+ @full_paths = included_modules.inject([full_path]) do |paths, mod|
71
+ paths |= mod.full_paths if mod.respond_to?(:full_paths)
72
+ paths
73
+ end
74
+ end
75
+
76
+ # Resets cache for {#full_paths}
77
+ def reset_full_paths
78
+ @cached_included_modules = nil
79
+ end
80
+
81
+ def initialize(path, full_paths)
82
+ full_path = full_paths.shift
83
+ self.path = path
84
+ self.full_path = full_path
85
+ include_inherited(full_paths)
86
+ include_parent
87
+ load_setup_rb
88
+ end
89
+
90
+ # Searches for a file identified by +basename+ in the template's
91
+ # path as well as any mixed in template paths. Equivalent to calling
92
+ # {ClassMethods#find_nth_file} with index of 1.
93
+ #
94
+ # @param [String] basename the filename to search for
95
+ # @return [String] the full path of a file on disk with filename
96
+ # +basename+ in one of the template's paths.
97
+ # @see find_nth_file
98
+ def find_file(basename)
99
+ find_nth_file(basename)
100
+ end
101
+
102
+ # Searches for the nth file (where n = +index+) identified
103
+ # by basename in the template's path and any mixed in template paths.
104
+ #
105
+ # @param [String] basename the filename to search for
106
+ # @param [Fixnum] index the nth existing file to return
107
+ # @return [String] the full path of the nth file on disk with
108
+ # filename +basename+ in one of the template paths
109
+ def find_nth_file(basename, index = 1)
110
+ n = 1
111
+ full_paths.each do |path|
112
+ file = File.join(path, basename)
113
+ if File.file?(file)
114
+ return file if index == n
115
+ n += 1
116
+ end
117
+ end
118
+
119
+ nil
120
+ end
121
+
122
+ def is_a?(klass)
123
+ return true if klass == Template
124
+ super(klass)
125
+ end
126
+
127
+ # Creates a new template object to be rendered with {Template#run}
128
+ def new(*args)
129
+ obj = Object.new.extend(self)
130
+ obj.class = self
131
+ obj.send(:initialize, *args)
132
+ obj
133
+ end
134
+
135
+ def run(*args)
136
+ new(*args).run
137
+ end
138
+
139
+ # rubocop:disable Style/MethodName
140
+
141
+ # Alias for creating {Engine.template}.
142
+ def T(*path)
143
+ Engine.template(*path)
144
+ end
145
+
146
+ # Alias for creating a {Section} with arguments
147
+ # @see Section#initialize
148
+ # @since 0.6.0
149
+ def S(*args)
150
+ Section.new(*args)
151
+ end
152
+
153
+ # rubocop:enable Style/MethodName
154
+
155
+ private
156
+
157
+ def include_parent
158
+ pc = path.to_s.split('/')
159
+ if pc.size > 1
160
+ pc.pop
161
+ pc = pc.join('/')
162
+ begin
163
+ include Engine.template(pc)
164
+ rescue ArgumentError
165
+ include Engine.template!(pc, full_path.gsub(%r{/[^/]+$}, ''))
166
+ end
167
+ end
168
+ end
169
+
170
+ def include_inherited(full_paths)
171
+ full_paths.reverse.each do |full_path|
172
+ include Engine.template!(path, full_path)
173
+ end
174
+ end
175
+
176
+ def load_setup_rb
177
+ setup_file = File.join(full_path, 'setup.rb')
178
+ if File.file? setup_file
179
+ module_eval(File.read(setup_file).taint, setup_file, 1)
180
+ end
181
+ end
182
+ end
183
+
184
+ def initialize(opts = TemplateOptions.new)
185
+ opts_class = opts.class
186
+ opts_class = TemplateOptions if opts_class == Hash
187
+ @cache = {}
188
+ @cache_filename = {}
189
+ @sections = []
190
+ @options = opts_class.new
191
+ add_options(opts)
192
+ Template.include_extra(self, options)
193
+ init
194
+ end
195
+
196
+ # Loads a template specified by path. If +:template+ or +:format+ is
197
+ # specified in the {#options} hash, they are prepended and appended
198
+ # to the path respectively.
199
+ #
200
+ # @param [Array<String, Symbol>] path the path of the template
201
+ # @return [Template] the loaded template module
202
+ def T(*path) # rubocop:disable Style/MethodName
203
+ path.unshift(options.template) if options.template
204
+ path.push(options.format) if options.format
205
+ self.class.T(*path)
206
+ end
207
+
208
+ # Sets the sections (and subsections) to be rendered for the template
209
+ #
210
+ # @example Sets a set of erb sections
211
+ # sections :a, :b, :c # searches for a.erb, b.erb, c.erb
212
+ # @example Sets a set of method and erb sections
213
+ # sections :a, :b, :c # a is a method, the rest are erb files
214
+ # @example Sections with subsections
215
+ # sections :header, [:name, :children]
216
+ # # the above will call header.erb and only renders the subsections
217
+ # # if they are yielded by the template (see #yieldall)
218
+ # @param [Array<Symbol, String, Template, Array>] args the sections
219
+ # to use to render the template. For symbols and strings, the
220
+ # section will be executed as a method (if one exists), or rendered
221
+ # from the file "name.erb" where name is the section name. For
222
+ # templates, they will have {Template::ClassMethods#run} called on them.
223
+ # Any subsections can be yielded to using yield or {#yieldall}
224
+ def sections(*args)
225
+ @sections = Section.new(nil, *args) unless args.empty?
226
+ @sections
227
+ end
228
+
229
+ # Initialization called on the template. Override this in a 'setup.rb'
230
+ # file in the template's path to implement a template
231
+ #
232
+ # @example A default set of sections
233
+ # def init
234
+ # sections :section1, :section2, [:subsection1, :etc]
235
+ # end
236
+ # @see #sections
237
+ def init
238
+ end
239
+
240
+ # Runs a template on +sects+ using extra options. This method should
241
+ # not be called directly. Instead, call the class method {ClassMethods#run}
242
+ #
243
+ # @param [Hash, nil] opts any extra options to apply to sections
244
+ # @param [Section, Array] sects a section list of sections to render
245
+ # @param [Fixnum] start_at the index in the section list to start from
246
+ # @param [Boolean] break_first if true, renders only the first section
247
+ # @yield [opts] calls for the subsections to be rendered
248
+ # @yieldparam [Hash] opts any extra options to yield
249
+ # @return [String] the rendered sections joined together
250
+ def run(opts = nil, sects = sections, start_at = 0, break_first = false, &block)
251
+ out = String.new("")
252
+ return out if sects.nil?
253
+ sects = sects[start_at..-1] if start_at > 0
254
+ sects = Section.new(nil, sects) unless sects.is_a?(Section)
255
+ add_options(opts) do
256
+ sects.each do |s|
257
+ self.section = s
258
+ subsection_index = 0
259
+ value = render_section(section) do |*args|
260
+ value = with_section do
261
+ run(args.first, section, subsection_index, true, &block)
262
+ end
263
+ subsection_index += 1
264
+ value
265
+ end
266
+ out << (value || "")
267
+ break if break_first
268
+ end
269
+ end
270
+ out
271
+ end
272
+
273
+ # Yields all subsections with any extra options
274
+ #
275
+ # @param [Hash] opts extra options to be applied to subsections
276
+ def yieldall(opts = nil, &block)
277
+ with_section { run(opts, section, &block) }
278
+ end
279
+
280
+ # @param [String, Symbol] section the section name
281
+ # @yield calls subsections to be rendered
282
+ # @return [String] the contents of the ERB rendered section
283
+ def erb(section, &block)
284
+ method_name = ErbCache.method_for(cache_filename(section)) do
285
+ erb_with(cache(section), cache_filename(section))
286
+ end
287
+ send(method_name, &block)
288
+ end
289
+
290
+ # Returns the contents of a file. If +allow_inherited+ is set to +true+,
291
+ # use +{{{__super__}}}+ inside the file contents to insert the contents
292
+ # of the file from an inherited template. For instance, if +templates/b+
293
+ # inherits from +templates/a+ and file "test.css" exists in both directories,
294
+ # both file contents can be retrieved by having +templates/b/test.css+ look
295
+ # like:
296
+ #
297
+ # {{{__super__}}}
298
+ # ...
299
+ # body { css styles here }
300
+ # p.class { other styles }
301
+ #
302
+ # @param [String] basename the name of the file
303
+ # @param [Boolean] allow_inherited whether inherited templates can
304
+ # be inserted with +{{{__super__}}}+
305
+ # @return [String] the contents of a file identified by +basename+. All
306
+ # template paths (including any mixed in templates) are searched for
307
+ # the file
308
+ # @see ClassMethods#find_file
309
+ # @see ClassMethods#find_nth_file
310
+ def file(basename, allow_inherited = false)
311
+ file = self.class.find_file(basename)
312
+ raise ArgumentError, "no file for '#{basename}' in #{self.class.path}" unless file
313
+
314
+ data = IO.read(file)
315
+ if allow_inherited
316
+ superfile = self.class.find_nth_file(basename, 2)
317
+ data.gsub!('{{{__super__}}}', superfile ? IO.read(superfile) : "")
318
+ end
319
+
320
+ data
321
+ end
322
+
323
+ # Calls the ERB file from the last inherited template with {#section}.erb
324
+ #
325
+ # @param [Symbol, String] sect if provided, uses a specific section name
326
+ # @return [String] the rendered ERB file in any of the inherited template
327
+ # paths.
328
+ def superb(sect = section, &block)
329
+ filename = self.class.find_nth_file(erb_file_for(sect), 2)
330
+ return "" unless filename
331
+ method_name = ErbCache.method_for(filename) { erb_with(IO.read(filename), filename) }
332
+ send(method_name, &block)
333
+ end
334
+
335
+ def options=(value)
336
+ @options = value
337
+ set_ivars
338
+ end
339
+
340
+ def inspect
341
+ "Template(#{self.class.path}) [section=#{section.name}]"
342
+ end
343
+
344
+ protected
345
+
346
+ def erb_file_for(section)
347
+ "#{section}.erb"
348
+ end
349
+
350
+ def erb_with(content, filename = nil)
351
+ erb = if ERB.instance_method(:initialize).parameters.assoc(:key) # Ruby 2.6+
352
+ ERB.new(content, :trim_mode => options.format == :text ? '<>' : nil)
353
+ else
354
+ ERB.new(content, nil, options.format == :text ? '<>' : nil)
355
+ end
356
+ erb.filename = filename if filename
357
+ erb
358
+ end
359
+
360
+ private
361
+
362
+ def render_section(section, &block)
363
+ section = section.name if section.is_a?(Section)
364
+ case section
365
+ when Section, String, Symbol
366
+ if respond_to?(section)
367
+ send(section, &block)
368
+ else
369
+ erb(section, &block)
370
+ end
371
+ when Module, Template
372
+ section.run(options, &block) if section.is_a?(Template)
373
+ end || ""
374
+ end
375
+
376
+ def cache(section)
377
+ content = @cache[section.to_sym]
378
+ return content if content
379
+
380
+ file = cache_filename(section)
381
+ @cache_filename[section.to_sym] = file
382
+ raise ArgumentError, "no template for section '#{section}' in #{self.class.path}" unless file
383
+ @cache[section.to_sym] = IO.read(file)
384
+ end
385
+
386
+ def cache_filename(section)
387
+ @cache_filename[section.to_sym] ||=
388
+ self.class.find_file(erb_file_for(section))
389
+ end
390
+
391
+ def set_ivars
392
+ options.each do |k, v|
393
+ instance_variable_set("@#{k}", v)
394
+ end
395
+ end
396
+
397
+ def add_options(opts = nil)
398
+ return(yield) if opts.nil? && block_given?
399
+ cur_opts = options if block_given?
400
+
401
+ self.options = options.merge(opts)
402
+
403
+ if block_given?
404
+ value = yield
405
+ self.options = cur_opts
406
+ value
407
+ end
408
+ end
409
+
410
+ def with_section
411
+ sect = section
412
+ value = yield
413
+ self.section = sect
414
+ value
415
+ end
416
+ end
417
+ end
418
+ end