yard 0.9.18 → 0.9.23

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 +781 -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 -1875
@@ -1,91 +1,91 @@
1
- # frozen_string_literal: true
2
- module YARD
3
- module Server
4
- # A module that is mixed into {Templates::Template} in order to customize
5
- # certain template methods.
6
- module DocServerHelper
7
- # Modifies {Templates::Helpers::HtmlHelper#url_for} to return a URL instead
8
- # of a disk location.
9
- # @param (see Templates::Helpers::HtmlHelper#url_for)
10
- # @return (see Templates::Helpers::HtmlHelper#url_for)
11
- def url_for(obj, anchor = nil, relative = false) # rubocop:disable Lint/UnusedMethodArgument
12
- return '' if obj.nil?
13
- return url_for_index if obj == '_index.html'
14
- return abs_url(base_path(router.static_prefix), obj) if String === obj
15
- url = super(obj, anchor, false)
16
- return unless url
17
- abs_url(base_path(router.docs_prefix), url)
18
- end
19
-
20
- # Modifies {Templates::Helpers::HtmlHelper#url_for_file} to return a URL instead
21
- # of a disk location.
22
- # @param (see Templates::Helpers::HtmlHelper#url_for_file)
23
- # @return (see Templates::Helpers::HtmlHelper#url_for_file)
24
- def url_for_file(filename, anchor = nil)
25
- if filename.is_a?(CodeObjects::ExtraFileObject)
26
- filename = filename.filename
27
- end
28
- fname = filename.sub(%r{^#{@library.source_path.to_s}/}, '')
29
- fname += "##{anchor}" if anchor && !anchor.empty?
30
- abs_url(base_path(router.docs_prefix), 'file', fname)
31
- end
32
-
33
- # Modifies {Templates::Helpers::HtmlHelper#url_for_list} to return a URL
34
- # based on the list prefix instead of a HTML filename.
35
- # @param (see Templates::Helpers::HtmlHelper#url_for_list)
36
- # @return (see Templates::Helpers::HtmlHelper#url_for_list)
37
- def url_for_list(type)
38
- abs_url(base_path(router.list_prefix), type.to_s)
39
- end
40
-
41
- # Returns the frames URL for the page
42
- # @return (see Templates::Helpers::HtmlHelper#url_for_frameset)
43
- def url_for_frameset
44
- options.file ? url_for_file(options.file) : url_for(object)
45
- end
46
-
47
- # Returns the main URL, first checking a readme and then linking to the index
48
- # @return (see Templates::Helpers::HtmlHelper#url_for_main)
49
- def url_for_main
50
- options.readme ? url_for_file(options.readme) : url_for_index
51
- end
52
-
53
- # Returns the URL for the alphabetic index page
54
- # @return (see Templates::Helpers::HtmlHelper#url_for_index)
55
- def url_for_index
56
- abs_url(base_path(router.docs_prefix), 'index')
57
- end
58
-
59
- # @param path_components [Array<String>] components of a URL
60
- # @return [String] the absolute path from any mounted base URI.
61
- def abs_url(*path_components)
62
- File.join(router.request.script_name, *path_components)
63
- end
64
-
65
- # @example The base path for a library 'foo'
66
- # base_path('docs') # => 'docs/foo'
67
- # @param [String] path the path prefix for a base path URI
68
- # @return [String] the base URI for a library with an extra +path+ prefix
69
- def base_path(path)
70
- libname = router.request.version_supplied ? @library.to_s : @library.name
71
- path + (@single_library ? '' : "/#{libname}")
72
- end
73
-
74
- # @return [Router] convenience method for accessing the router
75
- def router; @adapter.router end
76
-
77
- # @return [String] a timestamp for a given file
78
- def mtime(file)
79
- file = YARD::Server::Commands::StaticFileHelpers.find_file(@adapter, file)
80
- file ? File.mtime(file).to_i : nil
81
- end
82
-
83
- # @return [String] a URL for a file with a timestamp
84
- def mtime_url(file)
85
- url = url_for(file)
86
- time = mtime(file)
87
- url + (time ? "?#{time}" : "")
88
- end
89
- end
90
- end
91
- end
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module Server
4
+ # A module that is mixed into {Templates::Template} in order to customize
5
+ # certain template methods.
6
+ module DocServerHelper
7
+ # Modifies {Templates::Helpers::HtmlHelper#url_for} to return a URL instead
8
+ # of a disk location.
9
+ # @param (see Templates::Helpers::HtmlHelper#url_for)
10
+ # @return (see Templates::Helpers::HtmlHelper#url_for)
11
+ def url_for(obj, anchor = nil, relative = false) # rubocop:disable Lint/UnusedMethodArgument
12
+ return '' if obj.nil?
13
+ return url_for_index if obj == '_index.html'
14
+ return abs_url(base_path(router.static_prefix), obj) if String === obj
15
+ url = super(obj, anchor, false)
16
+ return unless url
17
+ abs_url(base_path(router.docs_prefix), url)
18
+ end
19
+
20
+ # Modifies {Templates::Helpers::HtmlHelper#url_for_file} to return a URL instead
21
+ # of a disk location.
22
+ # @param (see Templates::Helpers::HtmlHelper#url_for_file)
23
+ # @return (see Templates::Helpers::HtmlHelper#url_for_file)
24
+ def url_for_file(filename, anchor = nil)
25
+ if filename.is_a?(CodeObjects::ExtraFileObject)
26
+ filename = filename.filename
27
+ end
28
+ fname = filename.sub(%r{^#{@library.source_path.to_s}/}, '')
29
+ fname += "##{anchor}" if anchor && !anchor.empty?
30
+ abs_url(base_path(router.docs_prefix), 'file', fname)
31
+ end
32
+
33
+ # Modifies {Templates::Helpers::HtmlHelper#url_for_list} to return a URL
34
+ # based on the list prefix instead of a HTML filename.
35
+ # @param (see Templates::Helpers::HtmlHelper#url_for_list)
36
+ # @return (see Templates::Helpers::HtmlHelper#url_for_list)
37
+ def url_for_list(type)
38
+ abs_url(base_path(router.list_prefix), type.to_s)
39
+ end
40
+
41
+ # Returns the frames URL for the page
42
+ # @return (see Templates::Helpers::HtmlHelper#url_for_frameset)
43
+ def url_for_frameset
44
+ options.file ? url_for_file(options.file) : url_for(object)
45
+ end
46
+
47
+ # Returns the main URL, first checking a readme and then linking to the index
48
+ # @return (see Templates::Helpers::HtmlHelper#url_for_main)
49
+ def url_for_main
50
+ options.readme ? url_for_file(options.readme) : url_for_index
51
+ end
52
+
53
+ # Returns the URL for the alphabetic index page
54
+ # @return (see Templates::Helpers::HtmlHelper#url_for_index)
55
+ def url_for_index
56
+ abs_url(base_path(router.docs_prefix), 'index')
57
+ end
58
+
59
+ # @param path_components [Array<String>] components of a URL
60
+ # @return [String] the absolute path from any mounted base URI.
61
+ def abs_url(*path_components)
62
+ File.join(router.request.script_name, *path_components)
63
+ end
64
+
65
+ # @example The base path for a library 'foo'
66
+ # base_path('docs') # => 'docs/foo'
67
+ # @param [String] path the path prefix for a base path URI
68
+ # @return [String] the base URI for a library with an extra +path+ prefix
69
+ def base_path(path)
70
+ libname = router.request.version_supplied ? @library.to_s : @library.name
71
+ path + (@single_library ? '' : "/#{libname}")
72
+ end
73
+
74
+ # @return [Router] convenience method for accessing the router
75
+ def router; @adapter.router end
76
+
77
+ # @return [String] a timestamp for a given file
78
+ def mtime(file)
79
+ file = YARD::Server::Commands::StaticFileHelpers.find_file(@adapter, file)
80
+ file ? File.mtime(file).to_i : nil
81
+ end
82
+
83
+ # @return [String] a URL for a file with a timestamp
84
+ def mtime_url(file)
85
+ url = url_for(file)
86
+ time = mtime(file)
87
+ url + (time ? "?#{time}" : "")
88
+ end
89
+ end
90
+ end
91
+ end
@@ -1,39 +1,39 @@
1
- # frozen_string_literal: true
2
- module YARD
3
- module Server
4
- # A custom {Serializers::Base serializer} which returns resource URLs instead of
5
- # static relative paths to files on disk.
6
- class DocServerSerializer < Serializers::FileSystemSerializer
7
- def initialize(_command = nil)
8
- super(:basepath => '', :extension => '')
9
- end
10
-
11
- def serialized_path(object)
12
- case object
13
- when CodeObjects::RootObject
14
- "toplevel"
15
- when CodeObjects::ExtendedMethodObject
16
- serialized_path(object.namespace) + ':' + urlencode(object.name.to_s)
17
- when CodeObjects::MethodObject
18
- serialized_path(object.namespace) +
19
- (object.scope == :instance ? ":" : ".") + urlencode(object.name.to_s)
20
- when CodeObjects::ConstantObject, CodeObjects::ClassVariableObject
21
- serialized_path(object.namespace) + "##{object.name}-#{object.type}"
22
- when CodeObjects::ExtraFileObject
23
- super(object).gsub(/^file\./, 'file/')
24
- else
25
- super(object)
26
- end
27
- end
28
-
29
- private
30
-
31
- def urlencode(name)
32
- if name.respond_to?(:force_encoding)
33
- name = name.dup.force_encoding('binary')
34
- end
35
- Templates::Helpers::HtmlHelper.urlencode(name)
36
- end
37
- end
38
- end
39
- end
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module Server
4
+ # A custom {Serializers::Base serializer} which returns resource URLs instead of
5
+ # static relative paths to files on disk.
6
+ class DocServerSerializer < Serializers::FileSystemSerializer
7
+ def initialize(_command = nil)
8
+ super(:basepath => '', :extension => '')
9
+ end
10
+
11
+ def serialized_path(object)
12
+ case object
13
+ when CodeObjects::RootObject
14
+ "toplevel"
15
+ when CodeObjects::ExtendedMethodObject
16
+ serialized_path(object.namespace) + ':' + urlencode(object.name.to_s)
17
+ when CodeObjects::MethodObject
18
+ serialized_path(object.namespace) +
19
+ (object.scope == :instance ? ":" : ".") + urlencode(object.name.to_s)
20
+ when CodeObjects::ConstantObject, CodeObjects::ClassVariableObject
21
+ serialized_path(object.namespace) + "##{object.name}-#{object.type}"
22
+ when CodeObjects::ExtraFileObject
23
+ super(object).gsub(/^file\./, 'file/')
24
+ else
25
+ super(object)
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def urlencode(name)
32
+ if name.respond_to?(:force_encoding)
33
+ name = name.dup.force_encoding('binary')
34
+ end
35
+ Templates::Helpers::HtmlHelper.urlencode(name)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,277 +1,277 @@
1
- # frozen_string_literal: true
2
- require 'fileutils'
3
- require 'thread'
4
-
5
- module YARD
6
- module Server
7
- # This exception is raised when {LibraryVersion#prepare!} fails, or discovers
8
- # that the library is not "prepared" to be served by
9
- class LibraryNotPreparedError < RuntimeError; end
10
-
11
- # A library version encapsulates a library's documentation at a specific version.
12
- # Although the version is optional, this allows for creating multiple documentation
13
- # points for a specific library, each representing a unique version. The term
14
- # "library" used in other parts of the YARD::Server documentation refers to
15
- # objects of this class unless otherwise noted.
16
- #
17
- # A library points to a location where a {#yardoc_file} is located so that
18
- # its documentation may be loaded and served. Optionally, a {#source_path} is
19
- # given to point to a location where any extra files (and {YARD::CLI::Yardoc .yardopts})
20
- # should be loaded from. Both of these methods may not be known immediately,
21
- # since the yardoc file may not be built until later. Resolving the yardoc
22
- # file and source path are dependent on the specific library "source type" used.
23
- # Source types (known as "library source") are discussed in detail below.
24
- #
25
- # == Using with Adapters
26
- # A list of libraries need to be passed into adapters upon creation. In
27
- # most cases, you will never do this manually, but if you use a {RackMiddleware},
28
- # you will need to pass in this list yourself. To build this list of libraries,
29
- # you should create a hash of library names mapped to an *Array* of LibraryVersion
30
- # objects. For example:
31
- #
32
- # {'mylib' => [LibraryVersion.new('mylib', '1.0', ...),
33
- # LibraryVersion.new('mylib', '2.0', ...)]}
34
- #
35
- # Note that you can also use {Adapter#add_library} for convenience.
36
- #
37
- # The "array" part is required, even for just one library version.
38
- #
39
- # == Library Sources
40
- # The {#source} method represents the library source type, ie. where the
41
- # library "comes from". It might come from "disk", or it might come from a
42
- # "gem" (technically the disk, but a separate type nonetheless). In these
43
- # two cases, the yardoc file sits somewhere on your filesystem, though
44
- # it may also be built dynamically if it does not yet exist. This behaviour
45
- # is controlled through the {#prepare!} method, which prepares the yardoc file
46
- # given a specific library source. We will see how this works in detail in
47
- # the following section.
48
- #
49
- # == Implementing a Custom Library Source
50
- # YARD can be extended to support custom library sources in order to
51
- # build or retrieve a yardoc file at runtime from many different locations.
52
- #
53
- # To implement this behaviour, 3 methods can be added to the +LibraryVersion+
54
- # class, +#load_yardoc_from_SOURCE+, +#yardoc_file_for_SOURCE+, and
55
- # +#source_path_for_SOURCE+. In all cases, "SOURCE" represents the source
56
- # type used in {#source} when creating the library object. The
57
- # +#yardoc_file_for_SOURCE+ and +#source_path_for_SOURCE+ methods are called upon
58
- # creation and should return the location where the source code for the library
59
- # lives. The load method is called from {#prepare!} if there is no yardoc file
60
- # and should set {#yardoc_file}. Below is a full example for
61
- # implementing a custom library source, +:http+, which reads packaged .yardoc
62
- # databases from zipped archives off of an HTTP server.
63
- #
64
- # Note that only +#load_yardoc_from_SOURCE+ is required. The other two
65
- # methods are optional and can be set manually (via {#source_path=} and
66
- # {#yardoc_file=}) on the object at any time.
67
- #
68
- # @example Implementing a Custom Library Source
69
- # # Adds the source type "http" for .yardoc files zipped on HTTP servers
70
- # class LibraryVersion
71
- # def load_yardoc_from_http
72
- # Thread.new do
73
- # # zip/unzip method implementations are not shown
74
- # download_zip_file("http://mysite.com/yardocs/#{self}.zip")
75
- # unzip_file_to("/path/to/yardocs/#{self}")
76
- # end
77
- #
78
- # # tell the server it's not ready yet (but it might be next time)
79
- # raise LibraryNotPreparedError
80
- # end
81
- #
82
- # def yardoc_file_for_http
83
- # "/path/to/yardocs/#{self}/.yardoc"
84
- # end
85
- #
86
- # def source_path_for_http
87
- # File.dirname(yardoc_file)
88
- # end
89
- # end
90
- #
91
- # # Creating a library of this source type:
92
- # LibraryVersion.new('name', '1.0', nil, :http)
93
- #
94
- class LibraryVersion
95
- # @return [String] the name of the library
96
- attr_accessor :name
97
-
98
- # @return [String] the version of the specific library
99
- attr_accessor :version
100
-
101
- # @return [String] the location of the yardoc file used to load the object
102
- # information from.
103
- # @return [nil] if no yardoc file exists yet. In this case, {#prepare!} will
104
- # be called on this library to build the yardoc file.
105
- # @note To implement a custom yardoc file getter, implement
106
- def yardoc_file
107
- @yardoc_file ||= load_yardoc_file
108
- end
109
- attr_writer :yardoc_file
110
-
111
- # @return [Symbol] the source type representing where the yardoc should be
112
- # loaded from. Defaults are +:disk+ and +:gem+, though custom sources
113
- # may be implemented. This value is used to inform {#prepare!} about how
114
- # to load the necessary data in order to display documentation for an object.
115
- # @see LibraryVersion LibraryVersion documentation for "Implementing a Custom Library Source"
116
- attr_accessor :source
117
-
118
- # @return [String] the location of the source code for a library. This
119
- # value is filled by calling +#source_path_for_SOURCE+ on this class.
120
- # @return [nil] if there is no source code
121
- # @see LibraryVersion LibraryVersion documentation for "Implementing a Custom Library Source"
122
- def source_path
123
- @source_path ||= load_source_path
124
- end
125
- attr_writer :source_path
126
-
127
- # @param [String] name the name of the library
128
- # @param [String] version the specific (usually, but not always, numeric) library
129
- # version
130
- # @param [String] yardoc the location of the yardoc file, or nil if it is
131
- # generated later
132
- # @param [Symbol] source the location of the files used to build the yardoc.
133
- # Builtin source types are +:disk+ or +:gem+.
134
- def initialize(name, version = nil, yardoc = nil, source = :disk)
135
- self.name = name
136
- self.yardoc_file = yardoc
137
- self.version = version
138
- self.source = source
139
- end
140
-
141
- # @param [Boolean] url_format if true, returns the string in a URI-compatible
142
- # format (for appending to a URL). Otherwise, it is given in a more human
143
- # readable format.
144
- # @return [String] the string representation of the library.
145
- def to_s(url_format = true)
146
- version ? "#{name}#{url_format ? '/' : '-'}#{version}" : name.to_s
147
- end
148
-
149
- # @return [Fixnum] used for Hash mapping.
150
- def hash; to_s.hash end
151
-
152
- # @return [Boolean] whether another LibraryVersion is equal to this one
153
- def eql?(other)
154
- other.is_a?(LibraryVersion) && other.name == name &&
155
- other.version == version && other.yardoc_file == yardoc_file
156
- end
157
- alias == eql?
158
- alias equal? eql?
159
-
160
- # @return [Boolean] whether the library has been completely processed
161
- # and is ready to be served
162
- def ready?
163
- return false if yardoc_file.nil?
164
- serializer.complete?
165
- end
166
-
167
- # @note You should not directly override this method. Instead, implement
168
- # +load_yardoc_from_SOURCENAME+ when implementing loading for a specific
169
- # source type. See the {LibraryVersion} documentation for "Implementing
170
- # a Custom Library Source"
171
- #
172
- # Prepares a library to be displayed by the server. This callback is
173
- # performed before each request on a library to ensure that it is loaded
174
- # and ready to be viewed. If any steps need to be performed prior to loading,
175
- # they are performed through this method (though they should be implemented
176
- # through the +load_yardoc_from_SOURCE+ method).
177
- #
178
- # @raise [LibraryNotPreparedError] if the library is not ready to be
179
- # displayed. Usually when raising this error, you would simultaneously
180
- # begin preparing the library for subsequent requests, although this
181
- # is not necessary.
182
- def prepare!
183
- return if ready?
184
- meth = "load_yardoc_from_#{source}"
185
- send(meth) if respond_to?(meth, true)
186
- end
187
-
188
- # @return [Gem::Specification] a gemspec object for a given library. Used
189
- # for :gem source types.
190
- # @return [nil] if there is no installed gem for the library
191
- def gemspec
192
- ver = version ? "= #{version}" : ">= 0"
193
- YARD::GemIndex.find_all_by_name(name, ver).last
194
- end
195
-
196
- protected
197
-
198
- @@chdir_mutex = Mutex.new
199
-
200
- # Called when a library of source type "disk" is to be prepared. In this
201
- # case, the {#yardoc_file} should already be set, but the library may not
202
- # be prepared. Run preparation if not done.
203
- #
204
- # @raise [LibraryNotPreparedError] if the yardoc file has not been
205
- # prepared.
206
- def load_yardoc_from_disk
207
- return if ready?
208
-
209
- @@chdir_mutex.synchronize do
210
- Dir.chdir(source_path_for_disk) do
211
- Thread.new do
212
- CLI::Yardoc.run('--no-stats', '-n', '-b', yardoc_file)
213
- end
214
- end
215
- end
216
-
217
- raise LibraryNotPreparedError
218
- end
219
-
220
- # Called when a library of source type "gem" is to be prepared. In this
221
- # case, the {#yardoc_file} needs to point to the correct location for
222
- # the installed gem. The yardoc file is built if it has not been done.
223
- #
224
- # @raise [LibraryNotPreparedError] if the gem does not have an existing
225
- # yardoc file.
226
- def load_yardoc_from_gem
227
- return if ready?
228
- ver = version ? "= #{version}" : ">= 0"
229
-
230
- @@chdir_mutex.synchronize do
231
- Thread.new do
232
- # Build gem docs on demand
233
- log.debug "Building gem docs for #{to_s(false)}"
234
- CLI::Gems.run(name, ver)
235
- log.debug "Done building gem docs for #{to_s(false)}"
236
- end
237
- end
238
-
239
- raise LibraryNotPreparedError
240
- end
241
-
242
- # @return [String] the source path for a disk source
243
- def source_path_for_disk
244
- File.dirname(yardoc_file) if yardoc_file
245
- end
246
-
247
- # @return [String] the source path for a gem source
248
- def source_path_for_gem
249
- gemspec.full_gem_path if gemspec
250
- end
251
-
252
- # @return [String] the yardoc file for a gem source
253
- def yardoc_file_for_gem
254
- require 'rubygems'
255
- ver = version ? "= #{version}" : ">= 0"
256
- Registry.yardoc_file_for_gem(name, ver)
257
- end
258
-
259
- private
260
-
261
- def load_source_path
262
- meth = "source_path_for_#{source}"
263
- send(meth) if respond_to?(meth, true)
264
- end
265
-
266
- def load_yardoc_file
267
- meth = "yardoc_file_for_#{source}"
268
- send(meth) if respond_to?(meth, true)
269
- end
270
-
271
- def serializer
272
- return if yardoc_file.nil?
273
- Serializers::YardocSerializer.new(yardoc_file)
274
- end
275
- end
276
- end
277
- end
1
+ # frozen_string_literal: true
2
+ require 'fileutils'
3
+ require 'thread'
4
+
5
+ module YARD
6
+ module Server
7
+ # This exception is raised when {LibraryVersion#prepare!} fails, or discovers
8
+ # that the library is not "prepared" to be served by
9
+ class LibraryNotPreparedError < RuntimeError; end
10
+
11
+ # A library version encapsulates a library's documentation at a specific version.
12
+ # Although the version is optional, this allows for creating multiple documentation
13
+ # points for a specific library, each representing a unique version. The term
14
+ # "library" used in other parts of the YARD::Server documentation refers to
15
+ # objects of this class unless otherwise noted.
16
+ #
17
+ # A library points to a location where a {#yardoc_file} is located so that
18
+ # its documentation may be loaded and served. Optionally, a {#source_path} is
19
+ # given to point to a location where any extra files (and {YARD::CLI::Yardoc .yardopts})
20
+ # should be loaded from. Both of these methods may not be known immediately,
21
+ # since the yardoc file may not be built until later. Resolving the yardoc
22
+ # file and source path are dependent on the specific library "source type" used.
23
+ # Source types (known as "library source") are discussed in detail below.
24
+ #
25
+ # == Using with Adapters
26
+ # A list of libraries need to be passed into adapters upon creation. In
27
+ # most cases, you will never do this manually, but if you use a {RackMiddleware},
28
+ # you will need to pass in this list yourself. To build this list of libraries,
29
+ # you should create a hash of library names mapped to an *Array* of LibraryVersion
30
+ # objects. For example:
31
+ #
32
+ # {'mylib' => [LibraryVersion.new('mylib', '1.0', ...),
33
+ # LibraryVersion.new('mylib', '2.0', ...)]}
34
+ #
35
+ # Note that you can also use {Adapter#add_library} for convenience.
36
+ #
37
+ # The "array" part is required, even for just one library version.
38
+ #
39
+ # == Library Sources
40
+ # The {#source} method represents the library source type, ie. where the
41
+ # library "comes from". It might come from "disk", or it might come from a
42
+ # "gem" (technically the disk, but a separate type nonetheless). In these
43
+ # two cases, the yardoc file sits somewhere on your filesystem, though
44
+ # it may also be built dynamically if it does not yet exist. This behaviour
45
+ # is controlled through the {#prepare!} method, which prepares the yardoc file
46
+ # given a specific library source. We will see how this works in detail in
47
+ # the following section.
48
+ #
49
+ # == Implementing a Custom Library Source
50
+ # YARD can be extended to support custom library sources in order to
51
+ # build or retrieve a yardoc file at runtime from many different locations.
52
+ #
53
+ # To implement this behaviour, 3 methods can be added to the +LibraryVersion+
54
+ # class, +#load_yardoc_from_SOURCE+, +#yardoc_file_for_SOURCE+, and
55
+ # +#source_path_for_SOURCE+. In all cases, "SOURCE" represents the source
56
+ # type used in {#source} when creating the library object. The
57
+ # +#yardoc_file_for_SOURCE+ and +#source_path_for_SOURCE+ methods are called upon
58
+ # creation and should return the location where the source code for the library
59
+ # lives. The load method is called from {#prepare!} if there is no yardoc file
60
+ # and should set {#yardoc_file}. Below is a full example for
61
+ # implementing a custom library source, +:http+, which reads packaged .yardoc
62
+ # databases from zipped archives off of an HTTP server.
63
+ #
64
+ # Note that only +#load_yardoc_from_SOURCE+ is required. The other two
65
+ # methods are optional and can be set manually (via {#source_path=} and
66
+ # {#yardoc_file=}) on the object at any time.
67
+ #
68
+ # @example Implementing a Custom Library Source
69
+ # # Adds the source type "http" for .yardoc files zipped on HTTP servers
70
+ # class LibraryVersion
71
+ # def load_yardoc_from_http
72
+ # Thread.new do
73
+ # # zip/unzip method implementations are not shown
74
+ # download_zip_file("http://mysite.com/yardocs/#{self}.zip")
75
+ # unzip_file_to("/path/to/yardocs/#{self}")
76
+ # end
77
+ #
78
+ # # tell the server it's not ready yet (but it might be next time)
79
+ # raise LibraryNotPreparedError
80
+ # end
81
+ #
82
+ # def yardoc_file_for_http
83
+ # "/path/to/yardocs/#{self}/.yardoc"
84
+ # end
85
+ #
86
+ # def source_path_for_http
87
+ # File.dirname(yardoc_file)
88
+ # end
89
+ # end
90
+ #
91
+ # # Creating a library of this source type:
92
+ # LibraryVersion.new('name', '1.0', nil, :http)
93
+ #
94
+ class LibraryVersion
95
+ # @return [String] the name of the library
96
+ attr_accessor :name
97
+
98
+ # @return [String] the version of the specific library
99
+ attr_accessor :version
100
+
101
+ # @return [String] the location of the yardoc file used to load the object
102
+ # information from.
103
+ # @return [nil] if no yardoc file exists yet. In this case, {#prepare!} will
104
+ # be called on this library to build the yardoc file.
105
+ # @note To implement a custom yardoc file getter, implement
106
+ def yardoc_file
107
+ @yardoc_file ||= load_yardoc_file
108
+ end
109
+ attr_writer :yardoc_file
110
+
111
+ # @return [Symbol] the source type representing where the yardoc should be
112
+ # loaded from. Defaults are +:disk+ and +:gem+, though custom sources
113
+ # may be implemented. This value is used to inform {#prepare!} about how
114
+ # to load the necessary data in order to display documentation for an object.
115
+ # @see LibraryVersion LibraryVersion documentation for "Implementing a Custom Library Source"
116
+ attr_accessor :source
117
+
118
+ # @return [String] the location of the source code for a library. This
119
+ # value is filled by calling +#source_path_for_SOURCE+ on this class.
120
+ # @return [nil] if there is no source code
121
+ # @see LibraryVersion LibraryVersion documentation for "Implementing a Custom Library Source"
122
+ def source_path
123
+ @source_path ||= load_source_path
124
+ end
125
+ attr_writer :source_path
126
+
127
+ # @param [String] name the name of the library
128
+ # @param [String] version the specific (usually, but not always, numeric) library
129
+ # version
130
+ # @param [String] yardoc the location of the yardoc file, or nil if it is
131
+ # generated later
132
+ # @param [Symbol] source the location of the files used to build the yardoc.
133
+ # Builtin source types are +:disk+ or +:gem+.
134
+ def initialize(name, version = nil, yardoc = nil, source = :disk)
135
+ self.name = name
136
+ self.yardoc_file = yardoc
137
+ self.version = version
138
+ self.source = source
139
+ end
140
+
141
+ # @param [Boolean] url_format if true, returns the string in a URI-compatible
142
+ # format (for appending to a URL). Otherwise, it is given in a more human
143
+ # readable format.
144
+ # @return [String] the string representation of the library.
145
+ def to_s(url_format = true)
146
+ version ? "#{name}#{url_format ? '/' : '-'}#{version}" : name.to_s
147
+ end
148
+
149
+ # @return [Fixnum] used for Hash mapping.
150
+ def hash; to_s.hash end
151
+
152
+ # @return [Boolean] whether another LibraryVersion is equal to this one
153
+ def eql?(other)
154
+ other.is_a?(LibraryVersion) && other.name == name &&
155
+ other.version == version && other.yardoc_file == yardoc_file
156
+ end
157
+ alias == eql?
158
+ alias equal? eql?
159
+
160
+ # @return [Boolean] whether the library has been completely processed
161
+ # and is ready to be served
162
+ def ready?
163
+ return false if yardoc_file.nil?
164
+ serializer.complete?
165
+ end
166
+
167
+ # @note You should not directly override this method. Instead, implement
168
+ # +load_yardoc_from_SOURCENAME+ when implementing loading for a specific
169
+ # source type. See the {LibraryVersion} documentation for "Implementing
170
+ # a Custom Library Source"
171
+ #
172
+ # Prepares a library to be displayed by the server. This callback is
173
+ # performed before each request on a library to ensure that it is loaded
174
+ # and ready to be viewed. If any steps need to be performed prior to loading,
175
+ # they are performed through this method (though they should be implemented
176
+ # through the +load_yardoc_from_SOURCE+ method).
177
+ #
178
+ # @raise [LibraryNotPreparedError] if the library is not ready to be
179
+ # displayed. Usually when raising this error, you would simultaneously
180
+ # begin preparing the library for subsequent requests, although this
181
+ # is not necessary.
182
+ def prepare!
183
+ return if ready?
184
+ meth = "load_yardoc_from_#{source}"
185
+ send(meth) if respond_to?(meth, true)
186
+ end
187
+
188
+ # @return [Gem::Specification] a gemspec object for a given library. Used
189
+ # for :gem source types.
190
+ # @return [nil] if there is no installed gem for the library
191
+ def gemspec
192
+ ver = version ? "= #{version}" : ">= 0"
193
+ YARD::GemIndex.find_all_by_name(name, ver).last
194
+ end
195
+
196
+ protected
197
+
198
+ @@chdir_mutex = Mutex.new
199
+
200
+ # Called when a library of source type "disk" is to be prepared. In this
201
+ # case, the {#yardoc_file} should already be set, but the library may not
202
+ # be prepared. Run preparation if not done.
203
+ #
204
+ # @raise [LibraryNotPreparedError] if the yardoc file has not been
205
+ # prepared.
206
+ def load_yardoc_from_disk
207
+ return if ready?
208
+
209
+ @@chdir_mutex.synchronize do
210
+ Dir.chdir(source_path_for_disk) do
211
+ Thread.new do
212
+ CLI::Yardoc.run('--no-stats', '-n', '-b', yardoc_file)
213
+ end
214
+ end
215
+ end
216
+
217
+ raise LibraryNotPreparedError
218
+ end
219
+
220
+ # Called when a library of source type "gem" is to be prepared. In this
221
+ # case, the {#yardoc_file} needs to point to the correct location for
222
+ # the installed gem. The yardoc file is built if it has not been done.
223
+ #
224
+ # @raise [LibraryNotPreparedError] if the gem does not have an existing
225
+ # yardoc file.
226
+ def load_yardoc_from_gem
227
+ return if ready?
228
+ ver = version ? "= #{version}" : ">= 0"
229
+
230
+ @@chdir_mutex.synchronize do
231
+ Thread.new do
232
+ # Build gem docs on demand
233
+ log.debug "Building gem docs for #{to_s(false)}"
234
+ CLI::Gems.run(name, ver)
235
+ log.debug "Done building gem docs for #{to_s(false)}"
236
+ end
237
+ end
238
+
239
+ raise LibraryNotPreparedError
240
+ end
241
+
242
+ # @return [String] the source path for a disk source
243
+ def source_path_for_disk
244
+ File.dirname(yardoc_file) if yardoc_file
245
+ end
246
+
247
+ # @return [String] the source path for a gem source
248
+ def source_path_for_gem
249
+ gemspec.full_gem_path if gemspec
250
+ end
251
+
252
+ # @return [String] the yardoc file for a gem source
253
+ def yardoc_file_for_gem
254
+ require 'rubygems'
255
+ ver = version ? "= #{version}" : ">= 0"
256
+ Registry.yardoc_file_for_gem(name, ver)
257
+ end
258
+
259
+ private
260
+
261
+ def load_source_path
262
+ meth = "source_path_for_#{source}"
263
+ send(meth) if respond_to?(meth, true)
264
+ end
265
+
266
+ def load_yardoc_file
267
+ meth = "yardoc_file_for_#{source}"
268
+ send(meth) if respond_to?(meth, true)
269
+ end
270
+
271
+ def serializer
272
+ return if yardoc_file.nil?
273
+ Serializers::YardocSerializer.new(yardoc_file)
274
+ end
275
+ end
276
+ end
277
+ end